Appearance
Manual de Plantillas para Notificaciones de Solicitud de Firma
Este documento explica cómo utilizar los campos disponibles en las plantillas de notificaciones (correos electrónicos) utilizadas por el servicio de solicitud de firma.
Estructura de Datos Disponibles
Las plantillas de correo electrónico tienen acceso a las siguientes variables:
.Title - El título del documento en formato HTML
.Body - El cuerpo del documento en formato HTML
.Organization - La organización (acreedor)
.Entity - La entidad (deudor o destinatario)
.Profile - El perfil del destinatario
.URL - La URL del documentoObjetos y Campos Principales
Objeto Organization
El objeto Organization contiene la información relacionada con el acreedor:
.Organization.ID - ID de la organización
.Organization.Phone - Número de teléfono
.Organization.Email - Correo electrónico
.Organization.Nickname - Apodo o alias
.Organization.Verified - Si está verificado
.Organization.Type - Tipo de entidad (natural o legal)
.Organization.IDType - Tipo de identificación
.Organization.IDNumber - Número de identificación
.Organization.Profile - Perfil con datos personales
.Organization.ImportID - ID de importaciónObjeto Entity
El objeto Entity contiene la información relacionada con el deudor o destinatario:
.Entity.ID - ID de la entidad
.Entity.Phone - Número de teléfono
.Entity.Email - Correo electrónico
.Entity.Nickname - Apodo o alias
.Entity.Verified - Si está verificado
.Entity.Type - Tipo de entidad (natural o legal)
.Entity.IDType - Tipo de identificación
.Entity.IDNumber - Número de identificación
.Entity.Profile - Perfil con datos personales
.Entity.ImportID - ID de importaciónObjeto Profile
El objeto Profile contiene los datos del perfil del destinatario:
.Profile - El perfil completoEstructura Detallada del Perfil
El objeto Profile puede ser de dos tipos principales: Natural (persona física) o Legal (persona jurídica). Cada tipo tiene campos específicos y se acceden de manera diferente.
Perfil de Tipo Natural (Persona Física)
Para acceder a los campos específicos de un perfil Natural:
.Profile.Natural.FirstName - Nombre de la persona
.Profile.Natural.LastName - Apellido de la persona
.Profile.Natural.IDNumber - Número de identificación
.Profile.Natural.IDType - Tipo de identificación (CC, CE, etc.)
.Profile.Natural.SSNumber - Número de seguridad social
.Profile.Natural.DateOfBirth - Fecha de nacimiento
.Profile.Natural.Gender - Género
.Profile.Natural.JobTitle - Cargo/posición laboral
.Profile.Natural.BusinessLine - Línea de negocio
.Profile.Natural.EmployeeID - ID de empleado
.Profile.Natural.Phone - Teléfono personal
.Profile.Natural.Mobile - Teléfono móvil
.Profile.Natural.Address - Dirección
.Profile.Natural.AddressCity - Ciudad de la dirección
.Profile.Natural.AddressState - Estado/Departamento de la dirección
.Profile.Natural.AddressZipCode - Código postal
.Profile.Natural.AddressCountry - País de la dirección
.Profile.Natural.Email - Correo electrónico
.Profile.Natural.AlternativeEmail - Correo electrónico alternativo
.Profile.Natural.NotificationEmail - Correo para notificaciones
.Profile.Natural.Picture - Imagen/foto de perfil
.Profile.Natural.Verified - Si está verificado
.Profile.Natural.IDFront - Imagen frontal del documento de identidad
.Profile.Natural.IDBack - Imagen posterior del documento de identidad
.Profile.Natural.MaritalStatus - Estado civilPerfil de Tipo Legal (Persona Jurídica)
Para acceder a los campos específicos de un perfil Legal:
.Profile.Legal.Name - Nombre de la empresa/entidad
.Profile.Legal.LegalName - Razón social completa
.Profile.Legal.IDNumber - Número de identificación tributaria (NIT/RUC)
.Profile.Legal.IDType - Tipo de identificación
.Profile.Legal.BusinessLine - Giro comercial/línea de negocio
.Profile.Legal.DateOfCreation - Fecha de constitución
.Profile.Legal.Phone - Teléfono principal
.Profile.Legal.Address - Dirección
.Profile.Legal.AddressCity - Ciudad
.Profile.Legal.AddressState - Estado/Departamento
.Profile.Legal.AddressZipCode - Código postal
.Profile.Legal.AddressCountry - País
.Profile.Legal.Email - Correo electrónico principal
.Profile.Legal.AlternativeEmail - Correo electrónico alternativo
.Profile.Legal.NotificationEmail - Correo para notificaciones
.Profile.Legal.Logo - Logotipo de la empresa
.Profile.Legal.Verified - Si está verificado
.Profile.Legal.URL - Sitio web oficial
.Profile.Legal.ChamberIDFront - Documento de inscripción en cámara de comercioVerificación del Tipo de Perfil
Es importante verificar el tipo de perfil antes de acceder a sus campos específicos:
{ { if eq .Profile.Type "Natural" }}
<!-- Campos específicos de Natural -->
{ { .Profile.Natural.FirstName }} { { .Profile.Natural.LastName }}
{ { else }}
<!-- Campos específicos de Legal -->
{ { .Profile.Legal.Name }}
{ { end }}Ejemplos de Acceso a Datos Específicos del Perfil
Para acceder al nombre dependiendo del tipo de perfil:
{ { if eq .Profile.Type "Natural" }}
{ { .Profile.Natural.FirstName }} { { .Profile.Natural.LastName }}
{ { else }}
{ { .Profile.Legal.Name }}
{ { end }}Para acceder al ID de manera segura:
{ { if eq .Profile.Type "Natural" }}
{ { .Profile.Natural.IDType }}: { { .Profile.Natural.IDNumber }}
{ { else }}
{ { .Profile.Legal.IDType }}: { { .Profile.Legal.IDNumber }}
{ { end }}IMPORTANTE: Aunque es posible acceder directamente a los campos específicos como se muestra arriba, se recomienda usar la función
commonDatapara acceder a los campos comunes entre ambos tipos de perfil, como se explica en la siguiente sección.
Acceso a Datos del Perfil con commonData
La función commonData está diseñada específicamente para acceder a campos comunes entre perfiles de tipo Natural y Legal. Esta función sólo permite acceder a un conjunto limitado de campos, y es la forma recomendada de obtener estos datos ya que maneja automáticamente las diferencias entre tipos de perfil.
Campos disponibles a través de commonData
La función commonData solo permite acceder a los siguientes campos:
{ { commonData .Profile "Name" }} - Nombre (persona completo o empresa)
{ { commonData .Profile "Email" }} - Correo electrónico
{ { commonData .Profile "Address" }} - Dirección
{ { commonData .Profile "AddressCity" }} - Ciudad de la dirección
{ { commonData .Profile "IDNumber" }} - Número de identificación
{ { commonData .Profile "Initials" }} - InicialesFunciones Disponibles en Plantillas
Todas las funciones estándar de Go Templates están disponibles, junto con funciones personalizadas definidas en domain.Funcs().
Funciones útiles
{ { htmlEscape .Body }} - Escapa caracteres HTML para mostrar código seguro
{ { urlEscape .URL }} - Codifica una URL para uso seguro en enlacesEjemplos de Uso Común
Acceder al Nombre del Destinatario
{ { commonData .Profile "Name" }}Acceder al Correo Electrónico del Acreedor
{ { .Organization.Email }}Incluir la URL del Documento
<a href="{ { .URL }}">Ver documento</a>Mostrar el Título del Documento
<h1>{ { .Title }}</h1>Mostrar el Cuerpo del Documento
<div>{ { .Body }}</div>Ejemplos Prácticos de Plantillas para Notificaciones de Solicitud de Firma
Ejemplo de Notificación de Solicitud de Firma para Deudor
Esta plantilla se envía a los deudores cuando se requiere su firma en un documento. La URL generada será específica para el portal del deudor.
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Solicitud de Firma de Documento</title>
<style>
body {
font-family: Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid #eee;
padding-bottom: 15px;
}
.content {
background-color: #f9f9f9;
padding: 20px;
border-radius: 5px;
border-left: 4px solid #1890ff;
}
.document-details {
margin: 20px 0;
padding: 15px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.signature-options {
margin: 20px 0;
padding: 15px;
background-color: #e6f7ff;
border-radius: 5px;
}
.footer {
margin-top: 30px;
font-size: 12px;
color: #777;
text-align: center;
border-top: 1px solid #eee;
padding-top: 15px;
}
.button {
display: inline-block;
padding: 10px 20px;
background-color: #1890ff;
color: white;
text-decoration: none;
border-radius: 5px;
font-weight: bold;
}
</style>
</head>
<body>
<div class="header">
<h2>Solicitud de Firma de Documento</h2>
</div>
<div class="content">
<p>Estimado(a) { { commonData .Profile "Name" }},</p>
<p>
Ha recibido una solicitud para firmar el documento "<strong
>{ { .Title }}</strong
>" de parte de { { commonData .Organization.Profile "Name" }}.
</p>
<div class="document-details">
<h3>Detalles del Documento</h3>
<p><strong>Título:</strong> { { .Title }}</p>
<p>
<strong>Remitente:</strong> { { commonData .Organization.Profile
"Name" }}
</p>
</div>
<p>
Para revisar y firmar el documento, haga clic en el siguiente botón:
</p>
<div style="text-align: center; margin: 30px 0;">
<a href="{ { .URL }}" class="button">Revisar y Firmar Documento</a>
</div>
<div class="signature-options">
<h3>Opciones de Firma Disponibles</h3>
<p>
Una vez que ingrese al portal, podrá utilizar diferentes métodos para
firmar el documento, según las opciones habilitadas por el remitente.
</p>
</div>
<p>
Si el botón no funciona, puede copiar y pegar la siguiente dirección en
su navegador:
</p>
<p style="word-break: break-all;">{ { .URL }}</p>
</div>
<div class="footer">
<p>
Este es un mensaje automático generado por el sistema de firma
electrónica. Por favor no responda a este correo.
</p>
<p>
© { { now.Year }} { { commonData .Organization.Profile "Name" }}. Todos
los derechos reservados.
</p>
</div>
</body>
</html>Ejemplo de Notificación de Documento Firmado para Acreedor
Esta plantilla se envía al acreedor cuando un documento ha sido firmado por un destinatario. La URL generada apuntará al portal del acreedor.
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documento Firmado por Destinatario</title>
<style>
body {
font-family: Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 600px;
margin: 0 auto;
padding: 20px;
}
.notification {
background-color: #e6ffed;
border-left: 4px solid #52c41a;
padding: 15px;
margin-bottom: 20px;
}
.document-info {
background-color: #f8f8f8;
padding: 15px;
border-radius: 5px;
margin: 20px 0;
}
.signer-info {
background-color: #fff;
padding: 15px;
border-radius: 5px;
margin: 20px 0;
border: 1px solid #eee;
}
.actions {
text-align: center;
margin: 30px 0;
}
.button {
display: inline-block;
padding: 10px 20px;
background-color: #52c41a;
color: white;
text-decoration: none;
border-radius: 5px;
font-weight: bold;
}
.footer {
margin-top: 30px;
font-size: 12px;
color: #777;
border-top: 1px solid #eee;
padding-top: 20px;
}
</style>
</head>
<body>
<div class="notification">
<h2>Documento Firmado</h2>
<p>Un destinatario ha firmado uno de sus documentos.</p>
</div>
<p>Estimado(a) { { commonData .Organization.Profile "Name" }},</p>
<p>
Le informamos que el documento "<strong>{ { .Title }}</strong>" ha sido
firmado por { { commonData .Profile "Name" }}.
</p>
<div class="document-info">
<h3>Información del Documento</h3>
<p><strong>Título:</strong> { { .Title }}</p>
<p><strong>Estado:</strong> Firmado</p>
</div>
<div class="signer-info">
<h3>Información del Firmante</h3>
<p><strong>Nombre:</strong> { { commonData .Profile "Name" }}</p>
<p>
<strong>Identificación:</strong> { { commonData .Profile "IDNumber" }}
</p>
<p><strong>Correo:</strong> { { commonData .Profile "Email" }}</p>
</div>
<p>
Para ver el documento firmado completo y descargar el archivo, haga clic
en el siguiente enlace:
</p>
<div class="actions">
<a href="{ { .URL }}" class="button">Ver Documento Firmado</a>
</div>
<div class="footer">
<p>
Este mensaje fue enviado desde el sistema de gestión de firmas. Por
favor no responda a este correo.
</p>
<p>
© { { now.Year }} { { commonData .Organization.Profile "Name" }}. Todos
los derechos reservados.
</p>
<p>Si tiene preguntas, comuníquese con el administrador del sistema.</p>
</div>
</body>
</html>Ejemplo de Certificado de Documento Firmado
Esta plantilla muestra cómo se puede estructurar un certificado de firma generado por el sistema.
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Certificado de Firma Digital</title>
<style>
body {
font-family: Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.certificate-header {
text-align: center;
margin-bottom: 30px;
border-bottom: 3px solid #333;
padding-bottom: 20px;
}
.certificate-title {
font-size: 24px;
font-weight: bold;
margin-bottom: 10px;
}
.document-details {
margin: 20px 0;
padding: 15px;
background-color: #f8f8f8;
border: 1px solid #ddd;
}
.signers-section {
margin: 30px 0;
}
.signer-block {
border: 1px solid #ddd;
padding: 15px;
margin-bottom: 20px;
background-color: #fff;
}
.certificate-footer {
margin-top: 40px;
text-align: center;
font-size: 12px;
color: #666;
border-top: 1px solid #ddd;
padding-top: 20px;
}
.verification-block {
text-align: center;
margin: 30px 0;
padding: 15px;
background-color: #f0f8ff;
border: 1px solid #b3d9ff;
}
.qr-code {
text-align: center;
margin: 20px 0;
}
.timestamp {
font-style: italic;
margin-top: 10px;
text-align: right;
}
</style>
</head>
<body>
<div class="certificate-header">
<div class="certificate-title">CERTIFICADO DE FIRMA DIGITAL</div>
<p>Referencia: { { .Document.Reference }}</p>
</div>
<div class="document-details">
<h2>Información del Documento</h2>
<p><strong>Título:</strong> { { .Document.Title }}</p>
<p>
<strong>Fecha de certificación:</strong> { { .Document.CertificateDate
}}
</p>
<p><strong>Estado:</strong> FIRMADO</p>
</div>
<div class="signers-section">
<h2>Firmantes del Documento</h2>
{ { range .Document.SignatureRequests }}
<div class="signer-block">
<h3>Firmante</h3>
<p>
<strong>Nombre:</strong> { { commonData .Recipient.PartyProfile "Name"
}}
</p>
<p>
<strong>Identificación:</strong> { { commonData
.Recipient.PartyProfile "IDNumber" }}
</p>
<p>
<strong>Método de Firma:</strong>
{ { if .Signature.Type }} { { .Signature.Type }} { { else }} Firma
Digital { { end }}
</p>
<p><strong>Fecha y Hora:</strong> { { .Signature.CreatedAt }}</p>
<p><strong>Dirección IP:</strong> { { .Signature.IP }}</p>
</div>
{ { end }}
</div>
<div class="verification-block">
<h3>Verificación de Autenticidad</h3>
<p>
Este documento ha sido firmado digitalmente y puede ser verificado
escaneando el siguiente código QR o visitando el portal de verificación
en: { { .URL }}/verify
</p>
<div class="qr-code">[Código QR de Verificación]</div>
</div>
<div class="timestamp">
Generado el: { { now.Format "02/01/2006 15:04:05" }}
</div>
<div class="certificate-footer">
<p>
Este certificado confirma que el documento ha sido firmado digitalmente
por todas las partes involucradas de acuerdo a los requisitos legales y
técnicos establecidos.
</p>
<p>
© { { now.Year }} { { commonData .Organization.Profile "Name" }}. Todos
los derechos reservados.
</p>
</div>
</body>
</html>Casos Específicos
Plantillas para Notificaciones a Deudores
Para plantillas enviadas a deudores, la URL será:
{DomainURL}/debtor/documents/{DocumentID}Plantillas para Notificaciones a Acreedores
Para plantillas enviadas a acreedores, la URL será:
{DomainURL}/creditor/documents/{DocumentID}Estados de Documento
Los estados de documento disponibles son:
DocumentStatusPending - Pendiente
DocumentStatusAccepted - Aceptado
DocumentStatusRejected - Rechazado
DocumentStatusPartiallySigned - Parcialmente firmado
DocumentStatusNoNeedSignature - No requiere firmaSolución de Problemas Comunes
Acceso a Datos del Perfil
Para acceder correctamente al nombre del destinatario, use:
{ { commonData .Profile "Name" }}Verificación de Estados de Documento
Para verificar el estado de un documento y mostrar contenido condicional:
{ { if eq .Document.Status "DocumentStatusAccepted" }}
El documento ha sido aceptado
{ { else if eq .Document.Status "DocumentStatusPartiallySigned" }}
El documento está parcialmente firmado
{ { else }}
El documento está pendiente de firma
{ { end }}Manejo de Tipos de Firma
Para mostrar información sobre el tipo de firma utilizado:
{ { if .Signature.Type }}
{ { if eq .Signature.Type "AttachedSignature" }}
Firma adjunta
{ { else if eq .Signature.Type "CheckboxSignature" }}
Firma por casilla de verificación
{ { else if eq .Signature.Type "VoiceSignature" }}
Firma por voz
{ { else }}
Otro tipo de firma
{ { end }}
{ { else }}
Firma estándar
{ { end }}Tabla de Campos Disponibles con commonData
Campos comunes disponibles a través de commonData
| Campo | Descripción | Ejemplo de uso |
|---|---|---|
| Name | Nombre | { { commonData .Profile "Name" }} |
| Correo electrónico | { { commonData .Profile "Email" }} | |
| Address | Dirección | { { commonData .Profile "Address" }} |
| AddressCity | Ciudad | { { commonData .Profile "AddressCity" }} |
| IDNumber | Número de identificación | { { commonData .Profile "IDNumber" }} |
| Initials | Iniciales | { { commonData .Profile "Initials" }} |
Consejos Importantes
Utilice ÚNICAMENTE la función
commonDatapara acceder a los campos comunes entre perfiles, y recuerde que solo los 6 campos listados están disponibles a través de esta función.Los campos
.Titley.Bodyya están en formato HTML, por lo que no necesitan procesamiento adicional.Para plantillas de certificado, es importante incluir toda la información relevante de firmantes, fechas y métodos de verificación.
Cuando trabaje con listas de firmantes (SignatureRequests), utilice el rango apropiado para iterar a través de ellos:
{ { range .Document.SignatureRequests }} // Acceda a los datos del firmante aquí { { end }}Para acceder a información de firma, asegúrese de que el objeto Signature exista:
{ { if .Signature }} // Acceda a datos de firma aquí { { end }}