Skip to content

ImagSign — Eventos

Eventos Producidos

ImagSign publica eventos en el exchange imagy.events con routing key sign.*.

sign.signature.completed

Se publica cuando una firma se completa exitosamente, independientemente del modo (standalone o integrado).

CampoValor
Routing keysign.signature.completed
ConsumidoresImagFlow
TriggerProveedor confirma firma exitosa o firma electronica verificada
json
{
  "event_id": "uuid",
  "event_type": "sign.signature.completed",
  "version": "1.0",
  "timestamp": "2026-05-18T11:00:00Z",
  "correlation_id": "uuid",
  "tenant_id": "uuid",
  "organization_id": "uuid",
  "source": "imagy-sign",
  "actor_id": "signer-identifier",
  "actor_type": "signer",
  "data": {
    "signature_request_id": "sr-uuid-001",
    "signature_type": "digital_certificate",
    "provider_code": "firmalo-ec",
    "signer": {
      "name": "Maria Garcia Lopez",
      "identifier_type": "cedula",
      "identifier_value": "1712345678"
    },
    "documents": [
      {
        "document_id": "doc-uuid-001",
        "file_name": "contrato-prestamo.pdf",
        "s3_key_signed": "tenants/tenant-uuid/signatures/sr-uuid-001/signed/doc-uuid-001.pdf",
        "checksum_sha256": "a1b2c3d4e5f6..."
      }
    ],
    "certificate": {
      "serial": "ABC123456",
      "issuer": "Banco Central del Ecuador",
      "subject": "Maria Garcia Lopez",
      "algorithm": "RSA-SHA256",
      "valid_to": "2027-05-18T00:00:00Z"
    },
    "origin_service": "imagflow",
    "origin_request_id": "flow-request-uuid",
    "signed_at": "2026-05-18T11:00:00Z",
    "metadata": {
      "flow_id": "flow-uuid",
      "step_id": "step-uuid",
      "ip_address": "190.100.50.25",
      "user_agent": "Mozilla/5.0..."
    }
  }
}

sign.signature.rejected

Se publica cuando el firmante rechaza la firma o el proveedor la invalida.

CampoValor
Routing keysign.signature.rejected
ConsumidoresImagFlow
TriggerFirmante rechaza, certificado invalido, o proveedor rechaza
json
{
  "event_id": "uuid",
  "event_type": "sign.signature.rejected",
  "version": "1.0",
  "timestamp": "2026-05-18T11:05:00Z",
  "correlation_id": "uuid",
  "tenant_id": "uuid",
  "organization_id": "uuid",
  "source": "imagy-sign",
  "actor_id": "signer-identifier",
  "actor_type": "signer",
  "data": {
    "signature_request_id": "sr-uuid-003",
    "signature_type": "digital_certificate",
    "provider_code": "uanataca-ec",
    "signer": {
      "name": "Carlos Mendoza",
      "identifier_type": "cedula",
      "identifier_value": "0912345678"
    },
    "rejection_reason": "certificate_expired",
    "rejection_details": "El certificado del firmante expiro el 2026-01-15",
    "origin_service": "imagflow",
    "origin_request_id": "flow-request-uuid-2",
    "rejected_at": "2026-05-18T11:05:00Z",
    "metadata": {
      "flow_id": "flow-uuid",
      "step_id": "step-uuid",
      "attempts": 1
    }
  }
}

sign.signature.expired

Se publica cuando una solicitud de firma expira sin que el firmante haya completado la accion.

CampoValor
Routing keysign.signature.expired
ConsumidoresImagFlow, ImagLend
TriggerJob programado detecta que expires_at fue superado
json
{
  "event_id": "uuid",
  "event_type": "sign.signature.expired",
  "version": "1.0",
  "timestamp": "2026-05-21T10:30:00Z",
  "correlation_id": "uuid",
  "tenant_id": "uuid",
  "organization_id": "uuid",
  "source": "imagy-sign",
  "actor_id": "system",
  "actor_type": "system",
  "data": {
    "signature_request_id": "sr-uuid-004",
    "signature_type": "electronic_otp",
    "provider_code": "electronic-generic",
    "signer": {
      "name": "Ana Torres",
      "identifier_type": "cedula",
      "identifier_value": "1098765432"
    },
    "documents": [
      {
        "document_id": "doc-uuid-004",
        "file_name": "acuerdo-servicio.pdf"
      }
    ],
    "origin_service": "imaglend",
    "origin_request_id": "credit-app-uuid",
    "created_at": "2026-05-18T10:30:00Z",
    "expired_at": "2026-05-21T10:30:00Z",
    "metadata": {
      "ttl_hours": 72,
      "reminder_sent": true,
      "reminder_count": 2
    }
  }
}

Eventos Consumidos

ImagSign no consume eventos de otros dominios. Es invocado directamente via HTTP por ImagFlow e ImagLend cuando necesitan una firma.

La comunicacion de retorno (resultado de la firma) se realiza mediante:

  1. Eventos publicados — ImagFlow los consume para avanzar el paso de firma
  2. Callback HTTP — Si se configuro callback_url, ImagSign tambien notifica via POST al servicio origen

Esquema de Routing

Eventos Producidos

Routing KeyExchangeQueue (consumidor)
sign.signature.completedimagy.eventsimagy-flow-sign-events
sign.signature.rejectedimagy.eventsimagy-flow-sign-events
sign.signature.expiredimagy.eventsimagy-flow-sign-events, imagy-lending-sign-events

Configuracion de Queues

json
{
  "queues": [
    {
      "name": "imagy-flow-sign-events",
      "bindings": [
        { "exchange": "imagy.events", "routing_key": "sign.signature.completed" },
        { "exchange": "imagy.events", "routing_key": "sign.signature.rejected" },
        { "exchange": "imagy.events", "routing_key": "sign.signature.expired" }
      ],
      "consumer": "imagy-flow-engine",
      "prefetch": 10,
      "retry_policy": {
        "max_retries": 3,
        "initial_delay_ms": 1000,
        "multiplier": 2
      },
      "dead_letter_exchange": "imagy.events.dlx"
    },
    {
      "name": "imagy-lending-sign-events",
      "bindings": [
        { "exchange": "imagy.events", "routing_key": "sign.signature.expired" }
      ],
      "consumer": "imagy-lending",
      "prefetch": 10,
      "retry_policy": {
        "max_retries": 3,
        "initial_delay_ms": 1000,
        "multiplier": 2
      },
      "dead_letter_exchange": "imagy.events.dlx"
    }
  ]
}

Estructura del Envelope

Todos los eventos siguen el envelope estandar de la plataforma:

CampoTipoDescripcion
event_idUUIDIdentificador unico del evento (idempotencia)
event_typeSTRINGTipo completo del evento
versionSTRINGVersion del schema del evento
timestampISO 8601Momento en que ocurrio el evento
correlation_idUUIDID de correlacion para trazabilidad
tenant_idUUIDTenant al que pertenece
organization_idUUIDOrganizacion (nullable)
sourceSTRINGServicio que produjo el evento
actor_idSTRINGIdentificador del actor que causo el evento
actor_typeSTRINGoperator, signer, system, provider
dataOBJECTPayload especifico del evento

Garantias de Entrega

PropiedadValor
Delivery modePersistent (disk-backed)
Publisher confirmsHabilitado
Consumer ackManual (ack despues de procesar)
IdempotenciaConsumidores verifican event_id en processed_events
OrdenNo garantizado entre eventos distintos
Dead letterEventos que fallan 3 veces van a imagy.events.dlx
TTL en DLX7 dias (luego se descartan)

Reimagine Tech LLC — Documentacion Interna