Saltar al contenido principal

Integra con IA

Si programas con un asistente de IA (Claude, Codex, Cursor, ChatGPT, Copilot…), aquí tienes el prompt para que integre ZarelaFact en tu software siguiendo esta documentación.

Por defecto, el prompt integra lo que usa la mayoría: la factura de crédito fiscal (31), la de consumo (32) y la nota de crédito (34). El comprobante de compras (41) se agrega si lo pides. Cuando eso funcione, puedes ampliar con webhooks, recibidos o anulaciones (más abajo).

  1. Abre el asistente en el repositorio de tu ERP o POS.
  2. Copia el prompt de tu caso con el botón de copiar y pégalo.
  3. Si tu asistente no abre enlaces, adjúntale el OpenAPI y las páginas que cita el prompt (más abajo).
Antes de pegar nada
  • Nunca pegues en el chat una API key, una clave Partner, un secreto de webhook, el .p12 ni su contraseña. El código los lee de variables de entorno; tú los pones en tu .env local o en tu gestor de secretos.
  • Empieza en TesteCF, con una clave zrl_test_. Si eres Partner, cada cliente tiene su sandbox TesteCF en /fiscal-accounts/{id}/testecf/documents, fuera de tu plan; ?validate=true solo valida, sin enviar a la DGII.
  • Revisa el código que genere, como el de cualquier persona de tu equipo, y pruébalo antes de llevarlo a producción.

Elige tu caso​

Para una empresa que integra su propio ERP o POS con su API key (cómo funciona).

Prompt: cuenta directa
Eres un desarrollador senior. Vas a integrar este repositorio, nuestro ERP o POS, con ZarelaFact: la API que emite comprobantes fiscales electrónicos (e-CF) ante la DGII de República Dominicana. Somos una cuenta directa: emitimos con nuestro propio RNC y una API key por ambiente.

Mi proyecto (opcional): <ERP o POS, lenguaje, framework, dónde se registra una venta>
Credencial: la API key está en la variable de entorno ZARELAFACT_API_KEY=<TU_API_KEY de TesteCF>. La pongo yo: nunca me la pidas en el chat ni la escribas en el código, los logs o el frontend.

Qué integrar (si no te digo otra cosa):
- E31 Factura de Crédito Fiscal: venta a una empresa con RNC.
- E32 Factura de Consumo: venta a consumidor final. Envía siempre el documento completo; si es menor de RD$250,000, ZarelaFact manda el resumen (RFCE) a la DGII por nosotros. De RD$250,000 o más lleva el RNC o la identificación del comprador.
- E34 Nota de Crédito: devoluciones, descuentos o correcciones sobre una 31 o una 32 ya aceptada.
- E41 Comprobante de Compras, solo si te lo pido: compras a proveedores que no emiten comprobantes, con sus retenciones.
Nada más por ahora: ni otros tipos de e-CF, ni webhooks, recibidos o anulaciones. Si ves que nuestro negocio los necesita, dímelo y lo vemos aparte.

Antes de escribir código:
1. Lee la documentación. Si no puedes abrir enlaces, pídeme los archivos:
- https://zarelafact.com/docs/llms.txt (índice de toda la documentación)
- https://zarelafact.com/docs/integration/ecf-types (el JSON de cada tipo)
- https://zarelafact.com/docs/openapi.yaml (contrato: rutas, campos y errores)
2. Revisa el repositorio y propón un plan corto. Espera mi visto bueno.
3. No inventes rutas ni campos. Si algo no está en la documentación, pregunta.

Lo esencial de la API:
- URL base: https://api.zarelafact.com/{ambiente}, con ambiente TesteCF (pruebas), CerteCF (certificación) o eCF (producción). Entre ambientes solo cambian la URL y la API key; el ambiente sale de ZARELAFACT_ENVIRONMENT. Header X-API-KEY en cada solicitud.
- Emitir: POST /{ambiente}/documentos-ecf con el JSON del comprobante, en formato DGII (raíz "ECF") o con el contrato simplificado (type, encf, issueDate, buyer, paymentType, incomeType, lines…). Para 31, 32 y 34 el simplificado suele bastar. ?validate=true lo valida sin efectos fiscales.
- El eNCF lo asigna nuestro sistema, del rango que autorizó la DGII, y se guarda con la venta antes de llamar a la API. Ante un timeout o un 5xx, reenvía el mismo JSON con el mismo eNCF: la API no lo duplica.
- 202 significa "en cola", no "aceptado". Para imprimir en caja usa el header "Prefer: wait=10": cuando la DGII responde (TrackID o respuesta del resumen RFCE), el 201 trae result.printing (securityCode, signatureDate, qrUrl) para el ticket o la factura. Antes de esa respuesta no se imprime.
- Estado: POST /{ambiente}/documentos-ecf/status/batch con {"encfs": [...]}. Finales: accepted, accepted_conditional y rejected. Un rechazado no se reenvía: se corrige con un comprobante nuevo.
- Nota de crédito (34): referencia al eNCF original con InformacionReferencia (o reference, con reason, en el simplificado), siempre sobre un comprobante aceptado.
- Errores: un 422 trae el campo exacto en errors[].field: muéstralo y no reintentes igual. Con 429, espera Retry-After. Guarda siempre el correlationId.

Entrega:
1. Un módulo cliente pequeño: validar, emitir y consultar el estado.
2. El mapeo de nuestra venta (y de la devolución, para la 34) al JSON, con pruebas que usen ?validate=true.
3. Configuración por variables de entorno y un .env.example sin valores reales.
4. Pruebas contra TesteCF con secuencias altas, por ejemplo E310009000001: TesteCF es compartido y las bajas ya están usadas. Nunca contra eCF.

Amplía cuando lo necesites​

Cuando la emisión funcione en TesteCF (si eres Partner, en el sandbox /testecf/documents de un cliente), agrega lo demás de a una cosa a la vez, en la misma conversación:

Prompt: amplía la integración
Agrega a nuestra integración con ZarelaFact: <lo que necesitas>. Sigue esta página de la documentación: <URL de la tabla>. Mantén lo que ya funciona y las mismas reglas: nada de credenciales en el código, el mismo eNCF en cada reintento y pruebas sin emitir en eCF. Propón el plan antes de escribir código.
Qué agregarCuenta directaPartner
Comprobante de compras (41) u otro tipo (33, 43 a 47)/integration/ecf-typesLa misma página
Webhooks: avisos de cambio de estado en lugar de consultar/integration/webhooks/partners/webhooks
Descargar el XML firmado y el PDF/integration/printed-representation/partners/production
Documentos recibidos y aprobación comercial/integration/commercial-approval/partners/production
Anular eNCF no usados (ANECF)/integration/annulments/partners/production

Revisa una integración que ya tienes​

Para que el asistente audite tu código contra esta documentación, sin cambiar nada:

Prompt: revisa mi integración
Revisa la integración con ZarelaFact de este repositorio contra la documentación oficial. Lee primero https://zarelafact.com/docs/llms.txt y https://zarelafact.com/docs/openapi.yaml. Si no puedes abrir enlaces, pídeme los archivos. No cambies código todavía.

Revisa solo lo que la integración usa (por ejemplo, si no hay webhooks, sáltate ese punto). Comprueba y reporta, con archivo y línea:
1. Que ninguna API key, clave Partner, secreto de webhook, .p12 o contraseña esté en el código, en logs, en el frontend ni en el repositorio: todo sale del entorno o de un gestor de secretos.
2. Que las rutas, los headers (X-API-KEY o X-PARTNER-KEY, Prefer, Idempotency-Key) y los campos coincidan con el OpenAPI.
3. Que el eNCF se asigne y se guarde antes de llamar a la API, y que un reintento reenvíe el mismo JSON con el mismo eNCF, nunca uno nuevo ni un JSON regenerado.
4. Que 202 (en cola) y 201 (firmado) no se traten como aceptados, y que el estado se concilie por lote hasta accepted, accepted_conditional o rejected.
5. Que 400, 401, 402, 403, 409, 422, 423, 429 (con Retry-After), 5xx y timeouts se manejen como indica la documentación, y que se guarde el correlationId.
6. Si hay receptor de webhooks, que verifique Zarela-Signature con el cuerpo crudo, acepte dos v1, rechace timestamps de más de 5 minutos y deduplique por Zarela-Event-Id.
7. Que los documentos en contingency o rejected no se reenvíen ni se anulen por error.
8. Que las pruebas usen TesteCF o ?validate=true y nunca emitan en eCF.

Entrega una lista por prioridad (crítico, importante, menor), con la corrección que propones y el enlace a la página de la documentación que la respalda.

Dale contexto a tu IA​

Estos enlaces sirven para cualquier asistente. Si no navega por Internet, descárgalos y adjúntalos.

RecursoPara qué
https://zarelafact.com/docs/llms.txtÍndice de esta documentación pensado para IA: cada página con su URL y de qué trata.
https://zarelafact.com/docs/openapi.yamlEl contrato exacto: rutas, campos, respuestas y errores de la API directa y de la API Partner.
Formato JSON de e-CF y Ejemplos JSON por tipoCómo armar el JSON de cada tipo de comprobante.
Envío y ConsultaEmisión, idempotencia, estados y errores de la cuenta directa.
Qué construir en tu ERP y Rutas y erroresPantallas, datos y todas las rutas de la API Partner.

Si tu asistente lee reglas del proyecto (por ejemplo CLAUDE.md, AGENTS.md o las reglas de Cursor), agrega ahí los dos primeros enlaces para que los tenga en cada sesión.

Siguiente: Autenticación API.