Facturación · NCF DGII
Emisión de comprobantes fiscales (NCF) conforme a normativa DGII República Dominicana.
Tipos de NCF soportados
- B01 · Crédito Fiscal — B2B con ITBIS deducible. Requiere RNC del cliente.
- B02 · Consumidor Final — B2C, factura simple sin RNC obligatorio.
- B04 · Nota de Crédito — refund/anulación.
- B14 · Régimen Especial — zonas francas.
- B15 · Gubernamental — compras del Estado.
Flujo de uso
- Superadmin configura secuencia NCF:
admin.vertix.lat/tenants/<slug>/ncfcon max_authorized + expiry_date + dgii_authorization (resolución). - Tenant accede
<slug>.vertix.lat/billingpara crear factura. - Borrador (status=draft) sin NCF asignado.
- Click Emitir factura → sistema aloca siguiente NCF disponible (transacción FOR UPDATE) → status=issued → NCF inmutable.
- Click Marcar pagada cuando se cobra → status=paid + paidAt.
- 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.
- PDF on-demand:
/billing/<id>/pdfgenera 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).