📚 Nota: Si ya usabas anteriormente el firmador brindado por Hacienda, este microservicio devuelve el mismo formato de respuesta y error asi como de mensajes y códigos de error.
Microservicio encargado de la firma digital de Documentos Tributarios Electrónicos (DTE) que cumple con los requisitos establecidos por el Ministerio de Hacienda en El Salvador.
- Firma digital de documentos utilizando certificados
.crt
- Soporte para múltiples certificados organizados por NIT
- Internacionalización de mensajes de error (español/inglés)
- API REST simple y de alto rendimiento
- Monitoreo de estado del servicio
- Diseño modular siguiendo principios de arquitectura hexagonal
Este proyecto está implementado siguiendo principios de:
- Arquitectura Hexagonal (Ports & Adapters): Separación clara entre lógica de dominio y acceso a recursos externos
- Diseño guiado por dominio (DDD): Estructura organizada de acuerdo al dominio del problema
.
├── cmd # Punto de entrada de la aplicación
├── configs # Configuraciones y archivos de localización
├── internal # Código interno
│ ├── application # Casos de uso y servicios de aplicación
│ ├── domain # Modelos, puertos y servicios de dominio
│ └── infrastructure # Adaptadores y componentes de infraestructura
├── pkg # Paquetes reutilizables
│ ├── i18n # Internacionalización
│ ├── logs # Logging
│ └── response # Estructuras de respuesta estandarizadas
└── uploads # Directorio para almacenar certificados
- Go 1.23: Lenguaje de programación principal
- Gorilla Mux: Enrutador HTTP
- Viper: Gestión de configuración
- Docker: Contenerización para despliegue
- Docker y Docker Compose (recomendado para despliegue)
- Go 1.23+ (para desarrollo)
- Certificados digitales de firma en formato PKCS#8
- Clonar el repositorio:
git clone https://github.com/chainedpixel/go-dte-signer.git
cd go-dte-signer
-
Colocar certificados de firma digital en la carpeta
uploads
siguiendo la estructura especificada en el README de ese directorio. -
Iniciar el servicio:
docker-compose up -d
- Instalar dependencias:
go mod download
- Ejecutar el servicio:
go run cmd/signserver/main.go
La configuración se maneja mediante un archivo config.yaml
:
# Server
server:
port: "8113"
signerroute: "/sign"
healthroute: "/health"
readtimeout: 30
writetimeout: 30
# Internationalization
locale:
defaultlocale: "es"
localesdir: "./configs/locales"
# File system
filesystem:
certificatesdir: "./uploads/"
# Logging
log:
level: "info"
format: "text"
El servicio expone dos endpoints principales que son configurables a través del archivo config.yaml
:
POST /sign
(ruta configurable en server.signerroute
)
Ejemplo de solicitud:
{
"nit": "06140101780010",
"passwordPri": "cl4v3-pr1v4d4",
"dteJson": {
"identificacion": {
"version": 3,
"ambiente": "00",
"tipoDte": "01"
// ... más propiedades del DTE
}
}
}
{
"status": "OK",
"body": "eyJhbGciOiJSUzUxM..."
}
GET /health
(ruta configurable en server.healthroute
)
Proporciona información sobre el estado del servicio, tiempo de ejecución y versión.
{
"status": "OK",
"body": {
"status": "UP",
"uptime": "27.2275698s",
"timestamp": "2025-04-20T19:39:09.256993-06:00",
"goVersion": "go1.23.2"
}
}
Este servicio de firma es un componente esencial para la emisión de DTEs pero no implementa la lógica completa para facturación electrónica. Si estás buscando una solución integral para facturación electrónica, consulta mi API de Facturación Electrónica para El Salvador que integra este servicio de firma con la funcionalidad completa para emisión, validación y transmisión de documentos tributarios electrónicos según normativa vigente.
Para obtener más información sobre el funcionamiento interno del servicio, consulta los siguientes recursos:
Este proyecto está licenciado bajo la Licencia GNU General Public License v3.0 (GPL-3.0) - ver el archivo LICENSE para más detalles.