OrquestadorADM

El correlativo tenía que ser atómico con veinte procesos a la vez.

Trabajo
PMS y RMS hotelero con facturación electrónica
Rol
Diseño de la arquitectura y construcción
Periodo
2024 — 2025
  • PMS/RMS
  • Facturación electrónica
  • PostgreSQL
  • Concurrencia

El encargo

Un hotel necesitaba gestión de reservas y tarifas con facturación electrónica válida ante SUNAT. El requisito duro no era el volumen: era que el correlativo no se duplicara nunca, con varios procesos emitiendo a la vez, y que el IGV cuadrara al céntimo.

Cómo está construido

PMS y RMS hotelero con facturación electrónica. Los correlativos van con INSERT ... ON CONFLICT y reintento sobre P2002, probado con 20 procesos concurrentes.

El IGV se calcula hacia atrás desde el total: base = round2(total/1.18) y luego igv = total - base. Al revés, el redondeo deja diferencias de un céntimo que SUNAT rechaza.

Una advertencia

Códigos de SUNAT: 0 y mayor o igual a 4000 se aceptan, de 2000 a 3999 se rechazan, de 100 a 1999 es inconcluso. Ahí la regla es no reemitir.

Por verificar: salida de la suite543testsMás 53 end to end
Medida, fuente sin publicar: esquema de la API33rutas de APISobre 29 servicios de dominio
Medida, fuente sin publicar: prueba de concurrencia20procesosConcurrencia probada en correlativos

Dónde se rompe

Medida, fuente sin publicar: tabla de códigos y su manejo

SUNAT entre 100 y 1999 es inconcluso

Dónde y por qué

No se puede saber si el comprobante quedó registrado. La regla es no reemitir y esperar la consulta de estado, porque reemitir duplica el correlativo.