Facturación · NCF DGII

Emisión de comprobantes fiscales (NCF) conforme a normativa DGII República Dominicana.

Tipos de NCF soportados

Flujo de uso

  1. Superadmin configura secuencia NCF: admin.vertix.lat/tenants/<slug>/ncf con max_authorized + expiry_date + dgii_authorization (resolución).
  2. Tenant accede <slug>.vertix.lat/billing para crear factura.
  3. Borrador (status=draft) sin NCF asignado.
  4. Click Emitir factura → sistema aloca siguiente NCF disponible (transacción FOR UPDATE) → status=issued → NCF inmutable.
  5. Click Marcar pagada cuando se cobra → status=paid + paidAt.
  6. Si error captura: Anular con razón → status=void. NCF no se libera (DGII no permite reuso). Para reembolso emitir Nota de Crédito B04.
  7. PDF on-demand: /billing/<id>/pdf genera PDF con plantilla @vertix/pdf (B01/B02 layouts).

Cálculo ITBIS

ITBIS por línea: quantity × unitPrice × itbisRate. Tasa default 18%. Soporta 0% (exento), 16% (reducido), 18% (estándar). Subtotal ≠ ITBIS — totales separados en factura.

Atomicidad NCF

Allocator allocateNcf() usa SELECT FOR UPDATE dentro de transacción para prevenir race condition entre múltiples emisiones concurrentes. Si current_number == max_authorized: error EXHAUSTED — solicitar nueva autorización DGII.

API pública

Crear borrador via REST API: POST /api/v1/invoices con scope write:invoices. Listar: GET /api/v1/invoices con scope read:invoices. Para emitir y asignar NCF: usar UI tenant (issue button).

Ver también