Flujos de firma

Orden de firma, recordatorios, expiración y cancelación.

Un flujo le dice a Firmame cómo recolectar las firmas: en qué orden, cada cuánto insistir, cuándo darse por vencido y a quién copiar. Sin flujo tienes un documento firmable y tú repartes las ligas. Con flujo, Firmame se encarga.

Se puede adjuntar al crear el documento o agregarse después, con el mismo objeto en los dos casos.

// al crear
await services.request({ url_doc: {...}, stickers: [...], workflow: {...} });

// o después, sobre un documento que ya existe
await services.workflow(documentTicket, {...});

Orden de firma

ordered: true hace que cada persona reciba su invitación cuando la anterior firma. El orden lo marca signersConfig:

workflow: {
  ordered: true,
  signersConfig: [
    { data: '[email protected]' },
    { data: '[email protected]' },
    { data: 'VECJ880326XXX' },
  ],
}

Con ordered: false (el valor por defecto) todos reciben la invitación de inmediato y firman en cualquier orden.

Cada entrada se empareja con un sticker por su valor data, así que tiene que coincidir exactamente con lo que pusiste en el sticker.

Watcher

Destinatarios no firmantes. Este campo es opcional, si se encuentra presente, estos correos recibiran una notificación cuando inicie y otra cuando termine el flujo, sin tener que ser parte de los firmantes

workflow: {
  watchers: ['[email protected]', '[email protected]'],
}

Recordatorios y expiración

workflow: {
  subject: 'Contrato de arrendamiento',
  message: 'Te compartimos el contrato para tu firma.',
  remindEvery: '1d',
  expirationDate: '25/11/2026',
  language: 'es',
}
CampoValoresPor defecto
remindEverynone, 12h, o Nd con N de 1 a 7cada 24 h
expirationDatedd/MM/yyyy o dd/MM/yyyy HH:mma 14 días
languagees o enes
subjecthasta 150 caracteresel asunto estándar
messagehasta 3500 caracteresel texto estándar

La fecha va con el día primero

expirationDate es dd/MM/yyyy: 12/11/2026 es 12 de noviembre, no 11 de diciembre. Un formato distinto se rechaza con error parsing workflow expiration date.

También puedes ajustar qué correos recibe cada quien:

signersConfig: [
  { data: '[email protected]', notifications: 'ALL' },
  { data: '[email protected]', notifications: 'ONLY_START' },
]

Los valores son ALL, ONLY_START, ONLY_END, START_AND_END, START_AND_REMINDERS_NO_END y NONE.

Qué se adjunta al final

workflow: {
  attachFiles: true,        // el documento firmado (por defecto)
  attachTimestamp: true,    // el sello NOM-151
  includeHistory: true,     // el historial de eventos
  alertAll: true,           // avisar a todos al concluir (por defecto)
  blockExpired: true,       // impedir firmar después de la expiración
}

includeHistory adjunta el mismo PDF que devuelve GET /api/v1/document/{frmxId}/history/pdf.

Editar un flujo en curso

Manda solo lo que quieras cambiar; el resto se queda igual. El caso más común es revivir un flujo que expiró:

await services.workflow(documentTicket, { expiration_date: '25/12/2026' });

Quitar el orden para que todos puedan firmar ya:

await services.workflow(documentTicket, { ordered: false });

Cancelar

await services.workflow(documentTicket, { cancel: true });

cancel: true corta todo lo demás: cuando lo mandas, no se lee ninguna otra propiedad del objeto. Manda la cancelación sola, y si vas a reconfigurar, hazlo en una llamada aparte.

Un flujo para varios documentos

Si el trámite abarca más de un documento —contrato, anexo y pagaré— conviene un expediente: una sola invitación, un solo orden y una sola conclusión para todo el paquete.

La lista completa está en el esquema Workflow.

En esta página