Invariantes
Reglas que ningún ADR, especificación ni implementación puede violar. Una violación es
BLOCKER, no un trade-off a discutir. Vienen de CONSTITUTION.md en el repositorio del
sistema.
Dominio
| Id |
Regla |
| INV-D01 |
La respuesta de resolución contiene a lo sumo un beneficio por tipo de cliente. |
| INV-D02 |
Los beneficios nunca se acumulan ni se suman. |
| INV-D03 |
El tipo de factura, CUIT/CUIL y el id extra son filtros de entrada; nunca son dimensión de la respuesta. |
| INV-D04 |
Cada tipo de cliente tiene un paymentMethodId único y obligatorio. |
| INV-D05 |
La fecha y hora que decide es la enviada por el gateway, en America/Argentina/Cordoba. |
Operación
| Id |
Regla |
| INV-O01 |
La respuesta al gateway jamás espera a la base de datos (ADR-002). |
| INV-O02 |
Toda consulta se intenta auditar; una auditoría perdida se cuenta y se alerta, nunca se oculta. |
| INV-O03 |
Un cambio de configuración rige sin reinicio ni despliegue. |
| INV-O04 |
La configuración operativa vive fuera del jar; sin ella el proceso no arranca (fail-fast). |
Seguridad
| Id |
Regla |
CWE |
| INV-S01 |
La API de resolución exige API key válida; sin ella responde 401 sin evaluar nada. |
CWE-306 |
| INV-S02 |
Las contraseñas se guardan solo como hash con algoritmo adaptativo (BCrypt o Argon2). |
CWE-256, CWE-916 |
| INV-S03 |
Secretos (API keys, contraseñas, cadenas de conexión) nunca se escriben en logs ni en la auditoría. |
CWE-532 |
| INV-S04 |
El rol OPERADOR no puede ejecutar ninguna operación de escritura; se verifica en el servidor, no solo en la consola. |
CWE-285 |
| INV-S05 |
TLS y exposición pública son responsabilidad del reverse proxy; el jar nunca escucha directamente en Internet. |
— |
Dónde sigue