Facturación electrónica en Panamá para desarrolladores (2026)
Facturación electrónica en Panamá: guía técnica para desarrolladores
El SFEP es un sistema de pre-clearance: la factura no existe fiscalmente hasta que el gobierno la autoriza. No puedes conectarte al SFEP directamente, existe una capa obligatoria de intermediarios (PACs), y cada factura requiere un número de autorización antes de entregarse al cliente. Aquí está todo lo que necesitas para integrarlo.
Arquitectura del SFEP
Tu sistema → PAC (firma + enruta) → SFEP (valida + autoriza) → CUFE + nro. autorización
↓
CAFE PDF al cliente
El SFEP (Sistema de Facturación Electrónica de Panamá) opera la DGI (Dirección General de Ingresos). El flujo es siempre pre-clearance: construyes el documento, lo envías al SFEP a través de un PAC, el SFEP valida y devuelve un número de autorización. Sin ese número, no hay factura válida. El rechazo es sincrónico.
Diferencia con VeriFactu (España): VeriFactu es post-emisión, reportas después de emitir. El SFEP es pre-clearance, no puedes emitir sin autorización previa.
El ciclo completo:
- Tu sistema construye el documento fiscal en el formato de la DGI.
- Lo envías al SFEP a través de tu PAC.
- El PAC firma el documento con el certificado electrónico del contribuyente y lo enruta al SFEP.
- El SFEP valida estructura, datos fiscales y tasas de ITBMS.
- Si aprueba: devuelve
nroAuthorizationProtocol, fecha de recepción ycufe. - El PAC genera el CAFE PDF con esos datos.
- Tu sistema descarga el PDF y lo entrega al cliente.
PACs: la capa intermedia obligatoria
Un PAC (Proveedor Autorizado de Comprobantes) es el único canal de acceso al SFEP. La DGI no expone una API pública directa. A 2026 hay 18 PACs autorizados, cada uno con su propia API. El formato del documento fiscal sí está estandarizado por la DGI, pero la interfaz de cada PAC no lo está. Cambiar de PAC después de integrar implica rehacer la integración. El PAC también custodia y usa el certificado electrónico del contribuyente para firmar cada documento antes de enviarlo al SFEP.
Certificado electrónico
Para emitir en producción necesitas un certificado electrónico emitido por una entidad certificadora autorizada en Panamá. Si el certificado caduca, el PAC no puede firmar y los envíos al SFEP fallan. Monitorea la fecha de expiración.
Tipos de documentos fiscales
| Tipo | Código | Cuándo usarlo | Referencia requerida |
|---|---|---|---|
| Factura de operación interna | 01 | Venta estándar de bienes o servicios en Panamá | No |
| Factura de importación | 02 | Documentar importaciones de bienes | No |
| Factura de exportación | 03 | Venta a clientes fuera de Panamá (ITBMS 0%) | No |
| Nota de crédito | 04 | Reversar o corregir una factura autorizada | Sí — CUFE original |
| Nota de débito | 05 | Ajuste adicional sobre una factura ya emitida | Sí — CUFE original |
Las notas de crédito y débito requieren el cufe de la factura original. Guarda el CUFE en tu base de datos en el momento de la autorización.
Campos del documento fiscal
Campos de dataTransaction — la sección del payload que más variación tiene entre tipos de documento:
| Campo | Tipo | Req. | Notas |
|---|---|---|---|
| `typeEmission` | String | Sí | `01` = emisión normal |
| `typeDocument` | String | Sí | Ver tabla de tipos arriba |
| `numberDocumentFiscal` | String | Sí | Secuencial sin gaps, sin repeticiones por punto de facturación |
| `pointBillingFiscal` | String | Sí | Punto de facturación registrado en DGI |
| `dateBroadcast` | String | Sí | ISO 8601 con offset UTC-5 explícito: `2026-04-15T10:30:00-05:00` |
| `natureOperation` | String | Sí | `01` = operación estándar |
| `client` | Object | Sí | RUC, nombre, dirección del receptor |
| `destinationOperation` | String | Condicional | Requerido para exportaciones (`typeDocument: 03`) |
Campos raíz del payload:
| Campo | Tipo | Req. | Notas |
|---|---|---|---|
| `identifierControlShipping` | String | Sí | Tu ID de idempotencia. Reenvía con el mismo ID si hay timeout. |
| `environment` | String | Sí | `1` = producción, `2` = desarrollo |
| `codeBranchIssuer` | String | Sí | Código de sucursal del emisor, usualmente `0000` |
Estructura mínima:
{
"identifierControlShipping": "tu-id-interno-unico",
"environment": "1",
"document": {
"codeBranchIssuer": "0000",
"dataTransaction": {
"typeEmission": "01",
"typeDocument": "01",
"numberDocumentFiscal": "000001",
"pointBillingFiscal": "001",
"dateBroadcast": "2026-04-15T10:30:00-05:00",
"natureOperation": "01",
"client": { }
},
"listItems": [ ],
"totalsSubTotals": { }
}
}
El CAFE: qué recibes de vuelta
Cuando el SFEP autoriza el documento, el PAC genera el CAFE (Comprobante Autorizado de Factura Electrónica), el PDF fiscal que va al cliente. No lo generas tú. Lo descargas del endpoint DownloadPDF de G-Force Gateway como base64 después de recibir la autorización. G-Force se encarga de solicitarlo al PAC correspondiente.
La respuesta de autorización tiene esta forma:
{
"code": "200",
"cufe": "a1b2c3d4e5f6...",
"qr": "https://dgi-fep.mef.gob.pa/Consultas/facturas?cufe=a1b2c3d4e5f6...",
"receptionDateDGI": "2026-04-15T10:30:05-05:00",
"nroAuthorizationProtocol": "1234567890123"
}
El cufe es el identificador único de la factura en el SFEP. Aparece en el QR del CAFE. Guárdalo junto a la factura para poder emitir notas de crédito y débito.
Tasas de ITBMS
| Tasa | Código `rateITBMS` | Aplica a |
|---|---|---|
| 7% | `01` | La mayoría de bienes y servicios |
| 10% | `02` | Bebidas alcohólicas y tabaco |
| 15% | `03` | Servicios de telecomunicaciones |
| 0% | `00` | Exportaciones y operaciones exentas |
Enviar la tasa correcta con el código incorrecto resulta en rechazo del SFEP. Ambos campos son validados.
PAC directo vs API de abstracción
| Directo al PAC | API de abstracción (Conteo) | |
|---|---|---|
| Tiempo de integración inicial | Semanas | Días |
| Control sobre el payload | Total | Parcial — campos comunes cubiertos |
| Gestión del certificado | Tú | Incluida |
| CAFE PDF | Tú implementas la descarga | Incluida en la respuesta |
| Mantenimiento cuando el PAC cambia la API | Tú | Conteo lo absorbe |
| Acceso a múltiples PACs | Un PAC por integración | Mismo endpoint |
| Coste | Solo el PAC | Fee por documento + PAC |
Integración directa tiene sentido con volumen alto o necesidad de control fino sobre cada campo. La abstracción tiene sentido si quieres llegar a producción rápido sin mantener una integración fiscal.
Sandbox y certificación
El campo environment: "2" en el body activa el modo desarrollo. Las credenciales de sandbox son distintas a las de producción. El endpoint de desarrollo de G-Force es https://gateway-eb-develop.gforceint.com/api/v1/GFGatewayEB.
Qué debes demostrar antes de pasar a producción
Emisión de facturas estándar y notas de crédito, consulta de estado de un documento, anulación de una factura autorizada, y manejo de errores comunes (RUC inválido, estructura incorrecta). El número exacto de documentos de prueba requeridos lo coordina el PAC con la DGI.
Credenciales del PAC
Hay dos juegos de credenciales. Las de plataforma identifican tu aplicación ante G-Force. Las del PAC identifican al contribuyente específico y se obtienen durante la afiliación.
Credenciales de plataforma (nivel app, variables de entorno):
GF_COMPANY=tu_usuario_gforce
GF_TOKEN=tu_contraseña_gforce
GF_ENTERPRISE=tu_codigo_empresa
Credenciales del PAC (nivel contribuyente, encriptadas por usuario):
PAC_COMPANY=usuario_del_contribuyente
PAC_TOKEN=contraseña_del_contribuyente
ID_PAC=EBI # EBI | EFPTY | FF | TFHKA
En el body de cada request van los seis campos juntos:
{
"GF_Company": "tu_usuario_gforce",
"GF_Token": "tu_contraseña_gforce",
"Enterprise": "tu_codigo_empresa",
"Id_Pac": "EBI",
"Company": "usuario_contribuyente",
"Token": "contraseña_contribuyente"
}
| Campo | Nivel | Descripción |
|---|---|---|
| `GF_Company` | Plataforma | Usuario de plataforma con G-Force |
| `GF_Token` | Plataforma | Contraseña de plataforma con G-Force |
| `Enterprise` | Plataforma | Código de empresa asignado por G-Force |
| `Id_Pac` | Contribuyente | PAC de destino: `EBI`, `EFPTY`, `FF`, `TFHKA` |
| `Company` | Contribuyente | Usuario del contribuyente, emitido por el PAC |
| `Token` | Contribuyente | Contraseña del contribuyente, emitida por el PAC |
Integra facturación electrónica en Panamá sin implementar el protocolo del PAC
La API de Conteo maneja la comunicación con G-Force, la generación del CAFE y la gestión de credenciales. Tú mandas la factura, nosotros devolvemos el CUFE y el PDF.
Ver la documentaciónPreguntas frecuentes
- ¿Puedo llamar directamente a la API del SFEP sin pasar por un PAC?
- No. La DGI no expone una API pública directa al SFEP. Toda comunicación pasa obligatoriamente por uno de los 18 PACs autorizados.
- ¿Qué pasa si pierdo la respuesta por un timeout y no sé si el documento fue autorizado?
- Usa identifierControlShipping como ID de idempotencia. Reenvía el mismo request con el mismo ID y el PAC no duplica el documento. También puedes consultar el estado con StatusDocument usando los identificadores del documento.
- ¿Cómo valido el RUC de un cliente antes de emitir la factura?
- Usando el endpoint ConsultRucDV de tu PAC. Devuelve si el contribuyente está registrado en la DGI y datos básicos. Útil para validar en tiempo real cuando el usuario introduce el RUC en el formulario.
- ¿Cuántos PACs hay y cómo elijo uno?
- A 2026 hay 18 PACs autorizados. Los criterios principales son precio por documento, calidad del soporte técnico y documentación de la API. Cambiar de PAC después de integrar implica rehacer la integración a menos que uses una capa de abstracción.
- ¿El CAFE lo genero yo o lo genera el PAC?
- Lo genera el PAC. Una vez que el SFEP autoriza el documento, descargas el PDF llamando al endpoint DownloadPDF de G-Force Gateway con los identificadores del documento (codeBranchIssuing, numberDocumentFiscal, pointBillingFiscal, typeDocument, typeEmission). Lo recibes en base64 en el campo document. Almacenarlo y servirlo es tu responsabilidad.