El problema
Un POS o ERP — Automotriz, BR Logística, Happy Pet — no debería hablar con el SII. Folio numerado, reintento del POS y aislamiento entre negocios son problemas de emisión, no de la pantalla de venta. El SII queda fuera a propósito: no hay XML firmado ni homologación. El foco son los invariantes, no la boleta real.
Qué construí
Un microservicio de Boleta 39: un proceso, una base, un contrato HTTP. Código completo (no sample). Se levanta con docker compose up.
Decisiones técnicas
Arquitectura hexagonal para que un SII real pueda entrar después sin reescribir el dominio. Multi-tenant en tres capas: el tenant sale solo del JWT (Keycloak), Hibernate filtra por tenant_id y PostgreSQL aplica RLS. Outbox en la misma transacción; DteIssued a RabbitMQ tras el commit.
El problema difícil
Sin folio no hay DTE. La reserva va con bloqueo pesimista por tenant: N POST en paralelo, sin huecos ni duplicados. Idempotency-Key obligatorio: el reintento del POS devuelve el mismo documento; body distinto → 409.
El resultado
Login Keycloak, POST idempotente, Alpha emite y Beta obtiene 404. Artefacto de portafolio — no software de producción fiscal.