SimplifyCRM · Docs Entrar a la app
Docs · Facturación electrónica (DGII)

Facturas

Emisión y gestión de facturas a clientes. Soporta NCF (B-series) para cumplir con DGII, y formato e-CF (E-series) si tienes el addon Emisor e-CF activo.

Dónde aparece en el menú

Cómo usarlo

Los totales de las tarjetas de arriba se calculan sobre todas tus facturas, no sobre la página que estás viendo: no cambian al paginar ni al filtrar.

Crear factura sin trato previo (Factura Directa)

Si solo necesitas facturar a un cliente sin pasar por el Pipeline de ventas, usa el botón Nueva Factura en el encabezado de la pantalla (o el atajo Ctrl+Shift+F).

  1. Se abre un selector de contacto con typeahead. Consumidor Final aparece arriba como opción rápida si no necesitas identificar al cliente (B02). También puedes buscar por nombre, empresa, RNC o email — el sistema limita la lista a 50 resultados; refiná la búsqueda si tu tenant tiene más contactos.
  2. ¿No existe el contacto? Despliega Crear contacto nuevo dentro del mismo modal: nombre, apellido y opcionalmente un identificador (el sistema detecta si es RNC de 9 dígitos o cédula de 11). El contacto se persiste y queda seleccionado en un solo paso.
  3. Al confirmar, se abre el formulario de factura tradicional con el cliente prefillado. La factura postea a Mayor como cualquier otra: el sistema crea un deal sintético atrás-bambalinas (marcado como is_synthetic=true y excluido del Pipeline / KPIs de conversión) para preservar el contrato relacional invoice.dealId. El snapshot DGII (RNC, NCF, tipo de identificación) se toma del contacto + factura — nunca del deal — así que 606/607 y el XML e-CF siguen siendo consistentes.

Ese negocio no se vuelve a facturar. El negocio que el sistema crea detrás de una Factura Directa existe solo para sostener esa factura, y guarda como valor el total con el ITBIS ya incluido. Por eso, en su detalle no aparece el botón Generar factura: emitir otra factura desde ahí cobraría la misma venta dos veces y volvería a aplicar el ITBIS sobre un importe que ya lo traía. Si necesitas facturar otra venta a ese cliente, crea una factura nueva; si lo que quieres es corregir la que existe, edítala mientras no tenga comprobante, o emite una nota.

¿Qué pasa si el tenant es nuevo y aún no tiene Consumidor Final?

El picker muestra un banner rojo y te ofrece crear tu primer contacto. Al completarlo, el singleton de Consumidor Final se inicializa automáticamente para que la próxima factura directa lo encuentre arriba sin que tengas que hacer nada más.

Campos importantes

Los términos se congelan en el documento. Si mañana cambias el texto en Configuración, las facturas ya emitidas se siguen reimprimiendo con el texto que llevaban: reimprimir una factura declarada tiene que mostrar lo que se entregó. Por el mismo motivo, una factura vieja que no tenía términos se reimprime sin ellos, no con los de hoy.
Una nota de crédito o de débito hereda los términos de la factura que corrige, no los de la configuración actual.

Cada línea referencia un ítem del Catálogo (catalogItemId). El nombre y precio se copian al momento de crear la línea, así cambios futuros en el catálogo no alteran facturas históricas.

Si vendes un bundle desde una factura core, hoy NO se descompone automáticamente en sus componentes (solo Commerce orders lo hace). Para inventario y reporting de servicios, vende bundles desde POS u Orders.

Enviar a DGII (e-CF)

Requiere modo cloud + addon Emisor e-CF activo + tipo e-CF asignado a la factura.

Antes de enviar, el sistema valida:

Todo lo anterior se comprueba antes de tomar el número e-NCF. Si algo falla, el número no se consume: corriges y vuelves a enviar con el mismo número disponible.

Si la validación falla, la factura no se envía y se muestra el error. Corrige el dato en el contacto o en la factura y reintenta.

Protección contra doble envío (idempotencia): si haces doble-click en "Enviar", o la vuelves a enviar cuando ya fue aceptada o sigue en proceso, el sistema NO genera un segundo e-NCF. Una bandera en memoria bloquea el reintento mientras el primer envío está en vuelo, y un índice único en la base de datos por (tenant, invoiceId) bloquea el caso entre pestañas o sesiones. Si reintentas una factura ya procesada, se devuelve el resultado original (con la bandera idempotent: true).

Si el envío termina en error de conexión o por tiempo agotado, no vuelvas a pulsar "Enviar". Un envío en error sí toma un número nuevo al reintentarlo, y la DGII pudo haber recibido el primero. Usa Verificar estatus para consultar el resultado real y, si sigue sin respuesta, contacta a soporte antes de reenviar.

Revisión del comprador contra el padrón de la DGII

Antes de gastar un comprobante, el sistema busca el RNC o la cédula del comprador en el padrón oficial de la DGII:

Es un aviso, no un bloqueo: si estás seguro, puedes pulsar Emitir de todas formas. Pero un e-CF que la DGII rechaza pierde su secuencia, así que vale la pena revisarlo. Se revisa a quien realmente se le factura: si la persona está vinculada a una empresa con RNC, se revisa la empresa.

Si el padrón no está disponible en ese momento, la factura sigue su curso normal.

Resiliencia de la conexión con DGII

El envío a DGII tiene varias capas de protección para que una red inestable o un pico de latencia en el fisco no te dejen facturas en limbo:

Aprobación comercial del comprador (ACECF)

Cuando un comprador recibe tu e-CF, puede enviarnos un ACECF (Aprobación o Rechazo comercial). Ese documento se recibe en el endpoint /fe/aprobacion, se valida criptográficamente y —nuevo en este release— se propaga automáticamente a la factura: los campos commercialStatus (accepted / rejected), commercialStatusAt y commercialStatusReason se actualizan solos. Ya no necesitas abrir la tabla de auditoría para saber si el comprador aceptó.

Enviar el e-CF al comprador por email

Después de que DGII acepta un documento, el modal de resultado ofrece el botón "Enviar al comprador". Se muestra solo si el contacto tiene un email registrado y el estado es accepted o conditional (nunca para rejected). Al hacer clic, se abre la vista PDF y se envía por email usando el SMTP del tenant.

Importar facturas históricas desde otro sistema

Botón Importar en la cabecera. Sirve para dar continuidad a la operación

cuando vienes de otro CRM: trae tu histórico de facturación para que sepas

quién te debe, cuánto y desde cuándo.

Carga primero las organizaciones (ver ayuda de Contactos). Las facturas van a

nombre de la organización y la referencian por su organization_external_id.

Descarga la plantilla de facturas desde el propio asistente. Lleva **una fila

por línea de factura**, repitiendo el external_id y el número en cada una:

external_idinvoice_numberorganization_external_idissue_datetotaldescriptionquantityunit_priceline_total
VT-INV-42FAC-0042VT-ORG-12023-05-1412500.00Soporte mensual18000.008000.00
VT-INV-42FAC-0042VT-ORG-12023-05-14Horas adicionales31500.004500.00

Antes de escribir nada, el asistente simula la importación y te muestra tres

totales: Total facturado, Cobrado y Por cobrar. Son los números que

debes comparar contra tu sistema anterior. Si no cuadran, corriges el archivo y

vuelves a intentar — no se ha tocado nada todavía.

Las filas con problemas no entran y se listan con su motivo, agrupadas por

categoría. Puedes descargar el reporte de excepciones en CSV, corregir el

archivo y reimportar: las facturas que ya entraron se actualizan, no se

duplican. Ninguna validación ajusta un importe por su cuenta — si las líneas no

suman el total de la cabecera, esa factura se rechaza y te dice la diferencia

exacta.

Columnas que tu sistema tiene y este no: nómbralas custom.lo_que_sea en el

archivo. El asistente las detecta y te deja vincularlas a un campo personalizado

existente o crearlo ahí mismo, sin salir de la importación.

Qué NO hace la importación (a propósito)

anterior. El NCF original se conserva en legacy_ncf y se ve, pero el

documento no entra al 606/607 ni se envía a la DGII.

contabilidad anterior; volver a contabilizarlos los duplicaría. Por eso el

histórico no aparece en el Mayor, solo en Facturas y Cuentas por Cobrar.

venta cerrada de este mes, y contarla distorsionaría tus indicadores.

Puedes ver una factura importada, registrarle pagos y editarla con

normalidad, aunque no tenga un negocio asociado (las migradas nunca lo tienen).

Al editarla verás el NCF original en solo lectura: un documento histórico no

recibe un comprobante nuevo, porque ya lo declaró tu sistema anterior.

Guía completa del proceso: ayuda de Importar desde otro sistema.

Anexo de imágenes

Una factura puede llevar imágenes en un anexo, después del comprobante. Al convertir una cotización en factura, las imágenes de la cotización pasan con ella.

El anexo va después del documento fiscal, no como páginas del comprobante. No es un detalle estético: cuando una representación impresa de e-CF se reparte en varias páginas, la norma exige repetir el encabezado y el QR en cada una y poner subtotales por página — algo pensado para partir el detalle de artículos, no para fotos. Manteniendo el anexo aparte, el comprobante se imprime completo en su página y no queda duda de cuál es el documento fiscal.

Requiere el complemento Almacenamiento. El detalle de cómo se suben, titulan y ordenan está en la ayuda de Cotizaciones.

Al enviar la factura por correo, las imágenes van como archivos adjuntos y se ven dentro del mensaje.

Las imágenes viven en el almacenamiento de tu empresa, no dentro del documento. Si borras un archivo de ahí, la factura se reimprime sin esa imagen y te avisa. Los datos fiscales —RNC, NCF, montos, ITBIS— sí quedan congelados en el documento y no cambian nunca.

Permisos

Inmutabilidad — cuándo una factura se bloquea

Una factura se vuelve inmutable en dos casos:

  1. Pagada (estado Paid) — no se puede editar ni cambiar de estado. Si la factura tiene comprobante, se corrige con una Nota de Crédito que lo referencia. Si nunca llegó a tener comprobante, no hay nota que emitir: se retira (ver «Retirar una factura sin comprobante»).
  2. Firmada en DGII (encf asignado o dgiiTrackId recibido) — aunque la factura aún no esté pagada, si ya fue enviada a DGII, editar montos, líneas o RNC del comprador desincronizaría el XML firmado con el registro en el CRM. DGII considera eso un fraude fiscal.

Cobrar exige el comprobante

Mientras una factura tenga el aviso «NCF pendiente» (elegiste un tipo de comprobante y el número todavía no se asignó), no se puede marcar como pagada ni registrar un cobro que la cierre. El sistema te lo dice y te muestra el motivo real del fallo.

Por qué. Una factura pagada queda bloqueada. Si se paga sin comprobante, ya no se le puede asignar el NCF, ni editarla, ni eliminarla — y la nota de crédito tampoco sirve, porque no hay comprobante que referenciar. Queda atrapada.

Qué sí puedes hacer mientras tanto: registrar cobros parciales. Un anticipo es un hecho real y se anota; lo que no se permite es cerrar la factura.

Cómo salir: configura el rango en Configuración → Secuencias NCF y abre y guarda la factura para que reciba su NCF. Ya con comprobante, se cobra normal.

Esto no aplica a las facturas sin tipo de comprobante (ventas no fiscales y las migradas de otro sistema): esas se cobran como siempre.

Además, una factura con NCF serie B asignado (B01, B02, B14, B15…) ya consumió su comprobante:

Qué queda bloqueado cuando una factura está firmada en DGII:

Eliminar y Papelera

Para preservar auditoría, las facturas no se eliminan físicamente. El botón Eliminar marca la factura como eliminada (soft-delete) con fecha, usuario y razón opcional. El registro sale de listas, KPIs, CxC y reportes de Contabilidad — pero sigue en la base de datos y en los asientos emitidos antes del borrado.

Retirar una factura sin comprobante

Para las facturas que quedaron pagadas pero sin comprobante (nunca recibieron NCF ni e-NCF) existe Retirar factura. Es la salida de una factura duplicada o creada por error que se marcó como pagada y quedó bloqueada.

Dónde está. Abre el menú Actualizar estado de la factura. Si cumple las condiciones, verás Retirar factura al pie del aviso de «Pagada».

Quién puede. Quien tenga permiso de eliminar facturas (dueño y contador).

Qué te pide. Un motivo de una lista: duplicado de otra factura, creada por error, la venta no se realizó, u «Otro» (aquí sí escribes el detalle). El motivo queda guardado con tu usuario y la fecha.

Qué hace. Manda la factura a la Papelera con el motivo registrado. La venta deja de contar en listas, KPIs, CxC y reportes.

Cuándo NO se puede:

Preguntas frecuentes

¿Por qué no puedo editar esta factura?

Porque está marcada como Paid. Si tiene comprobante, crea una Nota de Crédito vinculada para anular o ajustar. Si nunca tuvo comprobante y fue un duplicado o un error, usa Retirar factura desde el menú de estado.

Marqué una factura como pagada y ahora no puedo hacerle nada.

Si esa factura nunca recibió su comprobante, retírala con Retirar factura (menú Actualizar estado) y vuelve a facturar la venta correctamente. Desde ahora el sistema ya no deja llegar a ese punto: una factura con «NCF pendiente» no se puede marcar como pagada.

¿Por qué no me aparece el botón de Nota de Crédito?

El botón solo se ofrece cuando la nota de verdad se puede emitir. No aparece si:

modifica, nunca sobre otra nota;

duplicado, lo que aplica es Retirar factura, no una nota;

Si acreditaste solo una parte, el botón sigue disponible por el resto.

La DGII rechazó mi factura. ¿Dónde veo por qué?

En el listado de Facturas, debajo del estado Rechazado, aparece el motivo tal como lo

redactó la DGII. El mismo texto sale en el aviso de confirmación al pulsar Re-enviar.

Léelo antes de reenviar. Un rechazo puede consumir el comprobante, así que volver a

enviar sin corregir la causa gasta otro número y vuelve a ser rechazado por lo mismo. El

texto de la DGII usa los nombres de los campos del archivo que se le manda, no los de la

pantalla; si no queda claro a qué dato se refiere, guárdalo y consúltalo antes de reintentar.

Al enviar dice «Una factura a crédito necesita fecha de vencimiento».

La DGII exige esa fecha en todo comprobante a crédito y rechaza el envío sin ella. Abre la

factura, completa Vencimiento con una fecha igual o posterior a la de emisión, guarda y

vuelve a enviar. El aviso salta antes de pedir el número, así que no pierdes ninguna

secuencia. Si la venta es de contado, cambia la condición de pago y el dato deja de pedirse.

Al crear la Nota de Crédito dice que la factura «no tiene comprobante fiscal (NCF ni e-NCF) guardado».

Una nota de crédito o de débito tiene que referenciar el comprobante de la factura que modifica, no su número interno. Pasa en dos casos:

¿Puedo duplicar una factura?

Sí, con el botón Duplicar. La copia es un borrador nuevo con el mismo cliente, líneas y montos, pero sin el NCF, el e-NCF ni el resultado DGII de la original. Si la factura lleva tipo de NCF serie B, la copia aparece con el aviso «NCF pendiente»: ábrela y guárdala antes de enviarla o cobrarla, para que reciba su propio NCF. Si es electrónica, recibe su e-NCF al emitirla. Las notas de crédito y de débito no se duplican; se emiten desde la factura que modifican.

¿Cómo asigno un NCF automáticamente?

Selecciona el Tipo NCF B-series al crear la factura. El siguiente número del rango activo se asigna al guardar. Si no hay rango disponible, verás un error y la factura queda como borrador con el aviso «NCF pendiente». En ese estado el sistema no te deja marcarla como pagada ni cerrar su cobro; tampoco la vuelvas a crear. Configura el rango en Configuración → Secuencias NCF y edita la factura para que reciba su NCF. Cada tenant maneja sus propios rangos.

¿Por qué solo veo B16 y B02 en el select de NCF para este cliente?

Porque el contacto está marcado como extranjero (Pasaporte o Tax ID extranjero) en su Tipo de Identificación. Los únicos NCF que la DGII permite para clientes sin RNC dominicano son:

Si necesitas un B01 (Crédito Fiscal) para este cliente, primero edita el contacto y cambia su Tipo de Identificación a RNC (empresas dominicanas) o Cédula (personas físicas dominicanas) y completa el número correspondiente.

¿Y si el cliente no tiene Tipo de Identificación?

Entonces el sistema solo te ofrece B02 — Consumidor Final. Para desbloquear los demás NCF, abre el contacto y selecciona el Tipo de Identificación correcto. La lista de contactos muestra un banner ámbar contando cuántos faltan completar.

¿Cómo facturo en dólares (USD) a un cliente del exterior?

El selector de Moneda (DOP / USD / EUR) está siempre visible al crear la factura, sin necesidad de activar el e-CF. Para una factura de exportación comercial (sin comprobante fiscal dominicano) elige USD, deja el e-CF desactivado y el NCF en "Ninguno". El PDF y los totales se mostrarán en la moneda elegida.

Al elegir una moneda distinta de DOP aparece el campo Tasa de cambio (a DOP). Esa tasa es la que usa la contabilidad para convertir el asiento a pesos (los libros siempre están en DOP). Si dejas la tasa vacía, la factura se emite igual, pero su asiento contable queda en "borrador" en Asientos hasta que completes la tasa — así nunca se registra un monto en dólares como si fueran pesos. Si capturas la tasa, el asiento se contabiliza convertido a DOP automáticamente.

Esto aplica igual en el addon Emisor e-CF → Nueva Factura e-CF: al cambiar la moneda aparece el mismo campo de tasa, y si lo dejas vacío verás un aviso recordándote que el asiento quedará en borrador.

Nota: emitir un e-CF de Exportación (tipo 46) formal en moneda extranjera es una función distinta, aún en preparación. Consulta con tu contador si tu operación requiere el e-CF 46 o si basta una factura comercial en USD.

¿Puedo personalizar el diseño de mis facturas y cotizaciones con mi marca?

Sí. En Configuración → Diseño de Facturas (modo nube) puedes ajustar: logo, color primario y de acento, tipografía, plantilla (Moderna / Clásica / Minimal), texto de encabezado y de pie de página, y mostrar/ocultar los bloques de información de pago y de notas. Aplica tanto al PDF de factura como al de cotización.

Importante (cumplimiento DGII): en las facturas electrónicas, los campos fiscales obligatorios (e-NCF, RNC del emisor y comprador, QR, código de seguridad, desglose de ITBIS, totales, fecha de firma y la leyenda legal) siempre se muestran y la marca nunca los altera ni los puede ocultar. Si una factura firmada quedara sin algún dato obligatorio, verás un aviso ámbar en la vista previa. Las cotizaciones no son documentos fiscales, así que tienen libertad total de diseño.

Mi factura quedó como "borrador" en Asientos y dice que falta RNC ¿qué hago?

Sucede cuando emites una factura B01/B14/B15 (que requieren RNC) pero el contacto no tiene RNC capturado. Tienes dos caminos:

  1. Cliente local sin RNC en el sistema — abre el contacto, completa el RNC/Cédula y elige el Tipo de Identificación correspondiente. Después borra el draft del asiento y re-emite la factura.
  2. Cliente extranjero o consumidor final — cambia el Tipo de Identificación del contacto a Pasaporte/Tax ID extranjero (o déjalo sin identificar para consumidor final). El select de NCF se restringirá automáticamente a B16/B02. Re-emite la factura con la NCF correcta y el asiento postea limpio.

¿Qué pasa si se acaba el rango NCF?

La asignación falla con mensaje claro ("Sin rango NCF disponible para tipo XX") y la factura queda como borrador con el aviso «NCF pendiente». Agrega un nuevo rango autorizado por DGII en Configuración → Secuencias NCF y edita la factura para asignarle el NCF. Mientras tanto el sistema no permite cerrar su cobro; sí puedes registrar cobros parciales.

¿Por qué no me deja registrar un rango?

Un rango nuevo no puede incluir números que ya se entregaron, aunque el rango anterior esté anulado, ni cruzarse con otro rango activo del mismo tipo: los dos terminarían entregando el mismo NCF. El mensaje te dice con qué rango choca y desde qué número registrar. Por ejemplo, si un B01 del 1 al 100 entregó hasta el 40, el siguiente rango empieza en el 41. Para «ampliar» un rango activo, registra solo la continuación.

¿Las facturas se sincronizan a Contabilidad?

Sí, si tienes el addon Contabilidad activo — genera asientos automáticos al marcar como Paid.

¿Cómo elimino una factura?

Usa el icono de papelera en el listado: la factura se mueve a la Papelera (soft-delete, reversible) con auditoría. No se borra del archivo físico. No se pueden eliminar las facturas pagadas, las enviadas a la DGII ni las que tienen NCF serie B asignado: en esas el icono no aparece.

¿Puedo recuperar una factura borrada por error?

Sí. Abre la Papelera (botón arriba a la derecha en Facturas), localiza la factura y presiona Restaurar.

¿Por qué veía facturas duplicadas de mis contratos de servicio?

Era un bug ya corregido (v1.8.15). Las facturas recurrentes de Service Contracts usan desde ahora un id determinístico por (contrato, período) + un índice único en la base de datos, así que un refresh o un cierre de pestaña en medio de la generación ya no puede crear facturas duplicadas. Si ves duplicados viejos, envíalos a la Papelera.

Enviar por WhatsApp

Requiere modo cloud + addon WhatsApp activo + contacto con teléfono válido (formato DR 809/829/849-XXX-XXXX o E.164 internacional).

Cuando abres la vista previa de una factura (botón Descargar PDF), aparece un botón verde WhatsApp al lado de Enviar Email. Al hacer click se abre un modal con:

Hola {{1}} 👋 Hemos emitido tu factura electrónica número {{2}} por un monto total de RD${{3}}. La fecha de vencimiento para el pago es el {{4}}. Gracias por tu preferencia, cualquier consulta estamos a tu orden.

SimplifyCRM · Responde STOP para baja

Cómo funciona el envío

  1. El frontend llama al Edge Function whatsapp-send con type=template, nombre factura_emitida, idioma es y los 4 parámetros.
  2. El Edge Function busca el phone_number_id activo en whatsapp_accounts (Fase 1 single-tenant; multi-tenant llega en Fase 3 con Embedded Signup).
  3. POST a Meta Graph API v25.0 con el token System User long-lived.
  4. Meta responde con wa_message_id, que se persiste en whatsapp_messages con direction='outbound' y to_phone capturando el destinatario (para tracking bidireccional en Inbox / Customer 360).
  5. El activity log del contacto y de la factura registran el envío con timestamp.

Limitaciones actuales (Fase 1, single-tenant)

Errores comunes

¿No encontraste lo que buscabas? Abre la app y usa el botón ❓ del módulo, o contáctanos por Soporte. ← Toda la documentación