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).
| Campo | Valor |
|---|---|
| Routing key | sign.signature.completed |
| Consumidores | ImagFlow |
| Trigger | Proveedor 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.
| Campo | Valor |
|---|---|
| Routing key | sign.signature.rejected |
| Consumidores | ImagFlow |
| Trigger | Firmante 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.
| Campo | Valor |
|---|---|
| Routing key | sign.signature.expired |
| Consumidores | ImagFlow, ImagLend |
| Trigger | Job 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:
- Eventos publicados — ImagFlow los consume para avanzar el paso de firma
- Callback HTTP — Si se configuro
callback_url, ImagSign tambien notifica via POST al servicio origen
Esquema de Routing
Eventos Producidos
| Routing Key | Exchange | Queue (consumidor) |
|---|---|---|
sign.signature.completed | imagy.events | imagy-flow-sign-events |
sign.signature.rejected | imagy.events | imagy-flow-sign-events |
sign.signature.expired | imagy.events | imagy-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:
| Campo | Tipo | Descripcion |
|---|---|---|
event_id | UUID | Identificador unico del evento (idempotencia) |
event_type | STRING | Tipo completo del evento |
version | STRING | Version del schema del evento |
timestamp | ISO 8601 | Momento en que ocurrio el evento |
correlation_id | UUID | ID de correlacion para trazabilidad |
tenant_id | UUID | Tenant al que pertenece |
organization_id | UUID | Organizacion (nullable) |
source | STRING | Servicio que produjo el evento |
actor_id | STRING | Identificador del actor que causo el evento |
actor_type | STRING | operator, signer, system, provider |
data | OBJECT | Payload especifico del evento |
Garantias de Entrega
| Propiedad | Valor |
|---|---|
| Delivery mode | Persistent (disk-backed) |
| Publisher confirms | Habilitado |
| Consumer ack | Manual (ack despues de procesar) |
| Idempotencia | Consumidores verifican event_id en processed_events |
| Orden | No garantizado entre eventos distintos |
| Dead letter | Eventos que fallan 3 veces van a imagy.events.dlx |
| TTL en DLX | 7 dias (luego se descartan) |