Emitir un e-CF
Una vez tu empresa está certificada y en producción, emitir un e-CF se reduce a tres acciones de tu lado:
- Crear la factura (líneas, cliente, totales).
- Confirmar el tipo (31, 32, 33, 34).
- Pulsar Emitir.
El resto lo hace FinMova en segundos. Esta página explica el ciclo completo para que sepas qué está pasando — y cómo leer el resultado.
El botón "Emitir" en detalle
Cuando pulsas Emitir en una factura en borrador, FinMova ejecuta en su servidor (en Edge Functions, no en tu navegador) la siguiente secuencia:
1 · Asignar el NCF/e-CF
FinMova toma el siguiente número disponible de tu secuencia NCF para el tipo (31, 32, 33, 34) y lo asigna a esta factura.
Importante. Las secuencias son por tenant y por tipo. Configurarlas se hace en Secuencias NCF.
2 · Generar el XML del e-CF
Construye el XML de acuerdo al esquema oficial DGII para el tipo correspondiente: emisor, comprador, líneas, ITBIS, retenciones, totales, referencias (si aplica).
3 · Validar el XML contra el XSD oficial
Ejecuta una validación de tres capas:
- Sintaxis XSD oficial de DGII.
- Reglas de negocio (totales coherentes, ITBIS calculado correcto).
- Reglas específicas del tipo (NC/ND debe tener referencia, etc.).
Si alguna validación falla, FinMova no envía y te muestra el error con la línea problemática.
4 · Autenticarse ante DGII (semilla → firma → token)
- Pide una semilla al endpoint
GET {host}/fe/autenticacion/api/semilla. - Firma esa semilla con tu
.p12usando XMLDSig. - Envía la firma a
POST {host}/fe/autenticacion/api/validacioncertificado. - DGII devuelve un token Bearer con ~1 hora de vigencia. FinMova lo cachea y lo renueva solo cuando vence.
5 · Firmar el e-CF
Firma el XML del comprobante con XMLDSig usando tu .p12.
6 · Enviar a DGII
POST al endpoint de recepción con Authorization: Bearer {token}.
DGII responde con un trackId — el identificador único de esta
emisión.
FinMova guarda:
invoices.dgii_track_idinvoices.dgii_status(inicialmente "en cola")invoices.ncf(asignado en el paso 1)
7 · Polling de estado
Inmediatamente después, FinMova comienza a consultar el estado en
consultaresultado/estado con el trackId. El polling dura hasta 55
segundos o hasta que llegue un veredicto terminal (Aceptado /
Rechazado / Aceptado Condicional).
8 · Resultado
FinMova actualiza invoices.dgii_status y invoices.dgii_response.
| Resultado | Qué significa |
|---|---|
| Aceptado | DGII reconoce el e-CF; la representación impresa pierde la marca de agua "sin validez fiscal". |
| Aceptado Condicional | DGII acepta con observaciones; revisa el detalle. Válido fiscalmente. |
| Rechazado | El e-CF no fue aceptado. Lee el motivo, corrige y reemite. La numeración asignada no se reutiliza (ver Estados y rechazos). |
9 · Representación impresa con QR
FinMova arma el PDF con:
- Datos del emisor y del comprador.
- Detalle de líneas, ITBIS y totales.
- Código QR que enlaza al validador público de DGII para que cualquiera (incluido tu cliente) verifique la autenticidad.
- Marca de agua "SIN VALIDEZ FISCAL" mientras
dgii_statusno sea Aceptado.
10 · Envío opcional al cliente
Si la factura tiene email del cliente y eliges "enviar", la Edge Function de email envía el PDF + cuerpo del mensaje con tus colores y logo.
Detalle: Envío por email.
Lo que ves tú en la pantalla
Cuando pulsas Emitir:
- La factura cambia a estado "Enviando a DGII…" con un spinner.
- Pocos segundos después: "Aceptado" (verde) o "Rechazado" (rojo) con el motivo.
- El botón "Descargar PDF" queda activo.
- Si configuraste envío automático, el botón "Reenviar al cliente" también queda activo.
Buena práctica. No salgas de la pantalla durante el polling. Si pierdes conexión, FinMova sigue procesando del lado del servidor y al recargar verás el estado final.
Tiempos reales
| Operación | Tiempo típico |
|---|---|
| Generar y validar XML | < 1 s |
| Autenticarse (primera del día) | 1 – 3 s |
| Autenticarse (token cacheado) | < 100 ms |
| Firmar XML | < 1 s |
| Enviar y recibir trackId | 1 – 2 s |
| Polling hasta veredicto | 2 – 30 s |
| Total visible al usuario | 5 – 40 s |
Volumen y concurrencia
FinMova procesa cada emisión en su propia Edge Function; emisiones simultáneas no se bloquean entre sí. Si tu negocio emite muchas facturas por minuto (por ejemplo, supermercado), no hay límite artificial en FinMova; el límite real es el throughput de DGII.
¿Y si DGII está caído?
Pasa raramente, pero pasa. Si DGII no responde:
- FinMova reintenta automáticamente con backoff.
- Si tras 55 segundos no hay veredicto, la factura queda en estado
"En cola" con su
trackIdguardado. - Una tarea en segundo plano (Edge Function
dgii-check-status) retoma el polling cada cierto tiempo hasta obtener veredicto. - Tu factura no se pierde; el
trackIdla mantiene rastreable.
Siguientes pasos
- Estados y rechazos — qué hacer con cada veredicto.
- PDF y código QR — detalles del documento impreso.
- Envío por email.
Manifiesto de capturas
assets/dgii/17-boton-emitir.png— factura en borrador con el botón "Emitir" resaltado.assets/dgii/18-spinner-enviando.png— estado "Enviando a DGII…".assets/dgii/19-aceptado-verde.png— factura aceptada (badge verde) con QR.assets/dgii/20-pdf-con-qr.png— preview del PDF con QR de verificación.
Última actualización: