Download the PHP package schoolaid/fel without Composer
On this page you can find all versions of the php package schoolaid/fel. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download schoolaid/fel
More information about schoolaid/fel
Files in schoolaid/fel
Informations about the package fel
Laravel FEL Guatemala
Este paquete proporciona una implementación completa para la Factura Electrónica en Línea (FEL) de Guatemala, conforme a los requerimientos de la SAT. Permite generar, certificar y gestionar facturas electrónicas de manera sencilla en aplicaciones Laravel.
Documentación
La documentación completa (en inglés) vive en docs/:
guías de uso (instalación, credenciales INFILE,
operaciones, impuestos), arquitectura,
pruebas y los documentos de seguimiento del paquete.
Características
- Generación de XML para documentos fiscales electrónicos
- Certificación de documentos con proveedores autorizados por la SAT
- Soporte para múltiples addendas personalizadas
- Validación automática de datos según normativa SAT
- Cálculo automático de impuestos (IVA)
- Soporte para diferentes tipos de documentos (Facturas, Notas de Crédito, etc.)
Requisitos
- PHP 8.3 o superior
- Laravel 11.0 o superior
- Extensión XML de PHP habilitada
Instalación
Puedes instalar el paquete vía composer:
Publica el archivo de configuración:
Configuración de Credenciales INFILE
Obtención de Credenciales
Para utilizar este paquete necesitas credenciales del proveedor certificador INFILE (FEEL). Sigue estos pasos:
-
Contactar a INFILE/FEEL
- Sitio web: https://feel.com.gt
- Solicita información sobre el servicio de certificación FEL
- Completa el proceso de registro como empresa
-
Documentación Requerida
- RTU (Registro Tributario Unificado) de la empresa
- Patente de comercio
- Representante legal con DPI
- Autorización de la SAT para emitir facturas electrónicas
- Credenciales que Recibirás
- Usuario (username): Usuario/prefijo para autenticación (se envía como
UsuarioFirmayUsuarioApi) - Llave de Firma: llave del firmador, usada para firmar documentos (INFILE la recibe como
llaveFirma) - Llave API: llave del API REST (INFILE la recibe como
llaveApiyllave) - NIT Emisor: Número de Identificación Tributaria de tu empresa
- Usuario (username): Usuario/prefijo para autenticación (se envía como
⚠️ Nombres invertidos: por compatibilidad histórica, en este paquete el parámetro
apiKey/api_keyes el que viaja comollaveFirma, ysignatureKey/signature_keyes el que viaja comollaveApi/llave. Es decir: pon la Llave de Firma enapi_keyy la Llave API ensignature_key. No se "corrige" el cruce porque los consumidores existentes del paquete ya compensan; el mapeo está fijado porInfileHeadersTest.Para no depender de los nombres invertidos, usa los nombres veraces: el constructor
FelConfig::forInfile($username, $llaveFirma, $llaveApi), las variables de entornoFEL_LLAVE_FIRMA/FEL_LLAVE_API, y los accesoresgetLlaveFirma()/setLlaveFirma()ygetLlaveApi()/setLlaveApi(). Solo el constructor histórico (apiKey:/signatureKey:) conserva los nombres invertidos, por compatibilidad con las apps existentes.
Configuración en Laravel
Resumen de Opciones:
| Opción | Método | Caso de Uso Ideal |
|---|---|---|
| 1 | Variables de Entorno (.env) | Una sola empresa, configuración estática |
| 2 | Archivo de configuración | Configuración centralizada, deployment |
| 3 | Configuración Programática | Credenciales dinámicas, sin archivos |
| 4 | Desde Base de Datos | Múltiples empresas, SaaS |
| 5 | Sistema Multi-tenant | Aplicaciones empresariales complejas |
Opción 1: Variables de Entorno (.env)
Agrega las siguientes variables a tu archivo .env:
Opción 2: Archivo de Configuración (config/fel.php)
Opción 3: Configuración Programática (Directa)
Puedes pasar las credenciales directamente sin usar .env ni archivos de configuración:
Opción 4: Credenciales desde Base de Datos
Si guardas las credenciales de tus clientes en la base de datos:
Opción 5: Sistema Multi-tenant
Para aplicaciones con múltiples empresas:
Ambiente de Pruebas
INFILE también ofrece un ambiente de pruebas (sandbox). Para utilizarlo:
Verificación de Configuración
Prueba tu configuración con este código:
Ejemplo Completo sin usar .env
Aquí un ejemplo completo de certificación pasando credenciales directamente:
Casos de Uso Comunes
Factura LOCAL_INVOICE (FACT)
La factura local (FACT) es el tipo de documento más común utilizado para transacciones dentro de Guatemala.
Factura a Consumidor Final (CF)
Para ventas a consumidores finales sin NIT:
Factura de Exportación (FEXP)
Para exportaciones, no se aplica IVA:
Nota de Crédito (NCRE) y Nota de Débito (NDEB)
Para ajustar (devolución, descuento, corrección) una factura ya certificada.
La SAT exige que toda NCRE/NDEB incluya el complemento ReferenciasNota con
los datos del documento origen; el paquete lo genera a partir de un
FelReferenceNote (sin él, generateXml() lanza XmlGenerationException):
Esto emite dentro de dte:DatosEmision, después de dte:Totales:
Reglas SAT a tener en cuenta (las valida el certificador, rechazo si no se cumplen): el DTE origen debe existir, estar vigente y ser FACT o FCAM; NIT emisor, receptor, fecha y moneda deben coincidir con el origen; cada nota referencia un solo DTE; y un DTE con nota vigente asociada ya no puede anularse. La Ley del IVA da 2 meses desde la factura para que el ajuste conserve el derecho a crédito fiscal (pasado el plazo la SAT certifica igual).
Para referenciar una factura en papel del régimen antiguo (pre-FEL):
Factura de Pequeño Contribuyente (FPEQ)
Para contribuyentes en el régimen de pequeño contribuyente:
Recibo de Donación (RDON)
Para organizaciones sin fines de lucro:
Operaciones Avanzadas
Cancelar una Factura
Generar XML sin Certificar
Si solo necesitas generar el XML sin enviarlo a INFILE:
Manejo de Errores
Tipos de Documentos Soportados
| Tipo de Documento | Enum | Código SAT | Descripción |
|---|---|---|---|
| Factura Local | DocumentTypeEnum::LOCAL_INVOICE |
FACT | Factura estándar con IVA |
| Factura de Cambio | DocumentTypeEnum::EXCHANGE_INVOICE |
FCAM | Factura de cambio |
| Factura de Exportación | DocumentTypeEnum::EXPORT_INVOICE |
FEXP | Factura sin IVA para exportaciones |
| Factura Especial | DocumentTypeEnum::SPECIAL_INVOICE |
FESP | Factura especial |
| Nota de Crédito | DocumentTypeEnum::CREDIT_NOTE |
NCRE | Anulación o reducción de factura |
| Nota de Débito | DocumentTypeEnum::DEBIT_NOTE |
NDEB | Aumento de factura |
| Nota de Abono | DocumentTypeEnum::CREDIT_MEMO |
NABN | Nota de abono |
| Recibo | DocumentTypeEnum::RECEIPT |
RECI | Recibo genérico |
| Recibo de Donación | DocumentTypeEnum::DONATION_RECEIPT |
RDON | Recibo para donaciones |
| Factura Pequeño Contribuyente | DocumentTypeEnum::SMALL_TAXPAYER_INVOICE |
FPEQ | Factura régimen pequeño contribuyente |
Impuestos Soportados
| Impuesto | Enum | Tasa | Descripción |
|---|---|---|---|
| IVA | TaxEnum::IVA |
12% | Impuesto al Valor Agregado |
| ISO | TaxEnum::ISO |
1% | Impuesto de Solidaridad |
| RETIVA | TaxEnum::RETIVA |
1% | Retención de IVA |
| ISR | TaxEnum::ISR |
1% | Impuesto Sobre la Renta |
Frases y Escenarios SAT
Las frases indican el régimen fiscal aplicable:
Solución de Problemas
Error de Autenticación
Solución: Verifica que tus credenciales en .env sean correctas:
FEL_USERNAMEFEL_LLAVE_FIRMA(llave del firmador — viaja comollaveFirma)FEL_LLAVE_API(llave del API REST — viaja comollaveApi)
Si usas los nombres legados, recuerda que están invertidos: la llave de firma
va en FEL_KEY y la llave del API en FEL_PASSWORD (ver la nota en
"Configuración de Credenciales INFILE").
Error de Validación SAT
Solución: Verifica que el NIT tenga el formato correcto (sin guiones) o usa "CF" para consumidor final.
Timeout de Conexión
Solución: Aumenta el timeout en tu configuración:
Error de SSL
Solución: Si estás en desarrollo, puedes deshabilitar la verificación SSL (NO recomendado para producción):
Licencia
MIT License
Soporte
Para reportar bugs o solicitar nuevas funcionalidades, por favor abre un issue en el repositorio del proyecto```
All versions of fel with dependencies
laravel/framework Version *
illuminate/support Version *
vlucas/phpdotenv Version ^5.6