Expedientes

Varios documentos, una sola invitación y un solo orden de firma.

Cuando un trámite abarca más de un documento —contrato, anexo y pagaré— mandarlos por separado significa tres invitaciones, tres recordatorios y tres oportunidades de que alguien firme uno y olvide los otros. Un expediente los junta en un solo paquete.

El ciclo

// 1. Crear
const { document_set } = await services.createDocumentSet('Expediente de contratación');

// 2. Agregar cada documento — es el mismo POST /developers/json de siempre,
//    más el campo document_set
await services.request({
  url_doc: { url: 'https://ejemplo.com/contrato.pdf', name: 'contrato.pdf' },
  document_set,
  stickers: [
    {
      authority: 'EMAIL_LINK',
      data: '[email protected]',
      email: '[email protected]',
      page: 0,
      rect: { lx: 330, ly: 300, tx: 530, ty: 400 },
    },
  ],
});

await services.request({
  url_doc: { url: 'https://ejemplo.com/anexo.pdf', name: 'anexo.pdf' },
  document_set,
  stickers: [ /* … */ ],
});

// 3. Cerrar y arrancar el flujo
await services.closeDocumentSet({
  documentSet: document_set,
  workflow: {
    remindEvery: '1d',
    ordered: ['[email protected]', '[email protected]'],
  },
});

No hay endpoint de «agregar al expediente»

Los documentos entran por el mismo POST /developers/json que usas siempre; lo único que cambia es que le pasas document_set. Si ya tienes código que crea documentos, agregar el campo es todo lo que hace falta. Ver Subir un documento a un expediente para el detalle.

El flujo abarca todo el paquete

Al cerrar, el workflow es el mismo objeto de un documento suelto, con una diferencia: ordered lista firmantes del expediente completo, no de un documento en particular. Ana firma todo lo que le toca, y hasta entonces le llega su turno a Luis.

El workflow es obligatorio al cerrar.

Consultar el avance

const set = await services.getDocumentSet(document_set);
{
  "uuid": "9v3d6a47-e4e8-48ef-b9b3-7af45c8207dn",
  "status": "CLOSED",
  "documents": ["4a3d6a47-…", "5d08eabe-…"],
  "signers": ["[email protected]", "[email protected]"],
  "workflow": {
    "currentSigner": "[email protected]",
    "lastNotification": 1665001495000,
    "expirationDate": 1666211094000
  }
}

status es OPEN mientras se le pueden agregar documentos y CLOSED una vez que arrancó el flujo.

El objeto workflow solo aparece mientras el expediente está en proceso: no viene si está abierto ni cuando ya terminó, así que pregunta por él en vez de darlo por hecho.

Precargar firmantes para todo el expediente

Precarga a las personas que deben firmar todos los documentos del expediente, sin ligarlas todavía a una página o posición. Con el expediente en curso, arrastras el recuadro de cada firmante precargado sobre cada documento desde la interfaz de Firmame; una vez colocados todos, cierras el expediente y arranca el flujo.

await services.addPremadeSticker(document_set, {
  authority: 'EMAIL_LINK',
  data: '[email protected]',
  email: '[email protected]',
  imageType: 'stroke',
  stickerType: 'rect',
  line: false,
  width: 200,
  height: 100,
});

Todavía no lleva page ni rect — solo width y height — porque la posición se define después, al arrastrarlo en la interfaz. Todos los campos de arriba son obligatorios.

Devuelve un uuid propio; guárdalo si vas a querer quitar a esa persona:

await services.deletePremadeSticker(document_set, { uuid: signerUuid });

Ver Quitar un firmante del expediente.

Cambiar o cancelar el flujo del expediente

Igual que con un documento suelto, pero apuntando al UUID del expediente:

await services.workflowSet(document_set, { expiration_date: '25/12/2026' });
await services.workflowSet(document_set, { cancel: true });

Referencia

En esta página