Skip to content

Repository files navigation

API-SIRE 🇵🇪

API REST en Go para integración con el Sistema Integrado de Registros Electrónicos (SIRE) de SUNAT - Perú.

Permite gestionar los Registros de Ventas (RVIE) y Compras electrónicos mediante los servicios web oficiales de SUNAT.

📋 Requisitos Previos

🚀 Instalación

# Clonar el repositorio
git clone https://github.com/SwodLore/API-SIRE.git
cd API-SIRE
# Instalar dependencias
go mod download
# Configurar variables de entorno
cp .env.example .env
# Editar .env con tus credenciales reales

⚙️ Configuración

Crea un archivo .env en la raíz del proyecto con las siguientes variables:

VariableDescripción
CLIENT_IDID de cliente de la API SUNAT
CLIENT_SECRETSecreto del cliente API SUNAT
RUCNúmero de RUC del contribuyente (11 dígitos)
USUARIOUsuario SOL
CLAVE_SOLClave SOL

🏃 Ejecución

# Modo desarrollo (con hot-reload usando Air)
air
# Modo estándar
go run main.go

El servidor se iniciará en http://localhost:8080

📚 Endpoints Disponibles

🔐 Autenticación

MétodoEndpointDescripción
GET/api/sunat/auth/obtener-tokenObtener token usando variables de entorno
POST/api/sunat/auth/loginObtener token con credenciales en body

Login (Recomendado)

POST /api/sunat/auth/loginContent-Type: application/json
{
"ruc": "20123456789",
"usuarioSol": "USUARIO",
"claveSol": "clave123"
}

Respuesta:

{
"access_token": "eyJraWQ..."
}

⚠️ El token expira en 1 hora. Debes obtener uno nuevo cuando expire.


📊 Registro de Ventas (RVIE)

Todos los endpoints de ventas requieren el header Authorization: Bearer <token>

Consultas y Descargas

MétodoEndpointDescripción
GET/api/sunat/ventas/periodos/:codLibroConsultar periodos disponibles
GET/api/sunat/ventas/descargar-propuesta/:perTributarioDescargar propuesta SUNAT
GET/api/sunat/ventas/resumen-comprobantes/:perTributarioResumen de comprobantes RVIE
GET/api/sunat/ventas/descargar-no-incluidos/:perTributarioDescargar no incluidos
GET/api/sunat/ventas/descargar-resumen/:perTributario/:codTipoResumen/:codTipoArchivoDescargar resumen
GET/api/sunat/ventas/exportar-preliminar-ventas/:perTributarioExportar preliminar
GET/api/sunat/ventas/consultar-estado-ticketConsultar estado de ticket
GET/api/sunat/ventas/descargar-archivoDescargar archivo por ticket
GET/api/sunat/ventas/constancia-recepcionConstancia de recepción
GET/api/sunat/ventas/rvie-periodo/:perTributarioRVIE por período
GET/api/sunat/ventas/reporte-consolidado-periodo/:perTributarioReporte consolidado
GET/api/sunat/ventas/ajustes-posteriores/:perTributarioAjustes posteriores
GET/api/sunat/ventas/reporte-car/:perTributarioReporte CAR
GET/api/sunat/ventas/reporte-estadistico/:perTributarioReporte estadístico
GET/api/sunat/ventas/reporte-cumplimiento/:perTributario/:codLibroReporte cumplimiento
GET/api/sunat/ventas/reporte-exportadores/:perTributarioReporte exportadores

Importaciones y Registros

MétodoEndpointDescripción
POST/api/sunat/ventas/importar-reemplazo-propuesta/:perTributarioImportar reemplazo de propuesta
POST/api/sunat/ventas/importar-nuevos-comprobantes/:perTributarioImportar nuevos comprobantes
POST/api/sunat/ventas/importar-comprobantes-preliminar/:perTributarioImportar a preliminar
POST/api/sunat/ventas/importar-ajustes-posteriores/:perTributarioImportar ajustes
POST/api/sunat/ventas/aceptar-propuesta/:perTributarioAceptar propuesta RVIE
POST/api/sunat/ventas/registrar-preliminar/:perTributarioRegistrar preliminar
POST/api/sunat/ventas/exclusion-definitiva/:perTributarioExclusión definitiva NC y facturas
POST/api/sunat/ventas/tipo-cambio-masivo/:perTributarioTipo de cambio masivo

Modificaciones y Eliminaciones

MétodoEndpointDescripción
PUT/api/sunat/ventas/editar-tipo-cambio/:perTributarioEditar tipo de cambio
PUT/api/sunat/ventas/eliminar-comprobante-preliminar/:perTributarioEliminar de preliminar
PUT/api/sunat/ventas/eliminar-reemplazo/:perTributarioEliminar reemplazo
PUT/api/sunat/ventas/eliminapreliminar/:perTributarioEliminar preliminar registrado
DELETE/api/sunat/ventas/eliminar-comprobante/:perTributarioEliminar comprobante propuesta

🛒 Registro de Compras (RCE)

Gestión de Propuesta

MétodoEndpointDescripción
GET/api/sunat/compras/libros/rce/periodos/:codLibroConsultar períodos RCE
GET/api/sunat/compras/libros/rce/propuesta/:perTributario/descargarDescargar propuesta
POST/api/sunat/compras/aceptarpropuesta/:perTributarioAceptar propuesta
POST/api/sunat/compras/reemplazo-propuesta/:perTributarioImportar reemplazo propuesta
POST/api/sunat/compras/importar-comprobantes-propuesta/:perTributarioImportar nuevos comprobantes
POST/api/sunat/compras/importar-complemento-propuesta/:perTributarioImportar datos complementarios
POST/api/sunat/compras/incluir-excluir-propuesta/:perTributarioIncluir/excluir comprobantes
DELETE/api/sunat/compras/eliminar-comprobante-propuesta/:perTributarioEliminar comprobante de propuesta
POST/api/sunat/compras/comparar-documentos/:perTributarioComparar registro con propuesta

Datos FV621 (Formulario Virtual 621)

MétodoEndpointDescripción
PUT/api/sunat/compras/actualizar-coeficiente-prorrata/:perTributarioActualizar coeficiente de prorrata
PUT/api/sunat/compras/actualizar-reintegro-credito/:perTributarioActualizar reintegro del crédito fiscal
PUT/api/sunat/compras/actualizar-credito-fiscal-especial/:perTributarioActualizar crédito fiscal especial
GET/api/sunat/compras/consultar-fv0621Consultar datos FV621

Tipo de Cambio

MétodoEndpointDescripción
POST/api/sunat/compras/importar-tipo-cambio-masivo/:perTributario/:codLibroImportar tipo de cambio masivo (archivo)

Preliminares

MétodoEndpointDescripción
POST/api/sunat/compras/registrar-preliminar/:perTributarioRegistrar preliminar
POST/api/sunat/compras/importar-comprobantes-preliminar/:perTributarioImportar comprobantes a preliminar
POST/api/sunat/compras/eliminar-comprobante-preliminar/:perTributarioEliminar comprobante del preliminar
PUT/api/sunat/compras/eliminar-preliminar/:perTributario/:indEliminarEliminar preliminar

Generación de Registros

MétodoEndpointDescripción
POST/api/sunat/compras/generar-registro-correlativo/:perTributarioGenerar RVIE y RCE de manera correlativa

Nota:perTributario tiene formato YYYYMM (ej: 202501 para enero 2025)


🔄 Flujo de Uso Recomendado

1. POST /api/sunat/auth/login → Obtener token
2. GET /api/sunat/ventas/periodos/14 → Consultar periodos disponibles
3. GET /api/sunat/ventas/resumen-comprobantes/202501?codTipoResumen=1 → Ver resumen
4. GET /api/sunat/ventas/descargar-propuesta/202501?codTipoArchivo=0 → Descargar propuesta
5. POST /api/sunat/ventas/aceptar-propuesta/202501 → Aceptar propuesta

Ejemplo con cURL

# 1. Obtener token
TOKEN=$(curl -s -X POST http://localhost:8080/api/sunat/auth/login \ -H "Content-Type: application/json" \ -d '{"ruc":"20123456789","usuarioSol":"USUARIO","claveSol":"clave123"}' \| jq -r '.access_token')# 2. Consultar resumen de comprobantes
curl -X GET "http://localhost:8080/api/sunat/ventas/resumen-comprobantes/202501?codTipoResumen=1" \
-H "Authorization: Bearer $TOKEN"# 3. Descargar propuesta
curl -X GET "http://localhost:8080/api/sunat/ventas/descargar-propuesta/202501?codTipoArchivo=0" \
-H "Authorization: Bearer $TOKEN"

📁 Estructura del Proyecto

API-SIRE/
├── main.go # Punto de entrada
├── AUTH/ # Módulo de autenticación OAuth2
│ ├── controller.go # LoginController, ObtenerTokenController
│ ├── routes.go # /api/sunat/auth/*
│ └── service.go # ObtenerTokenService
├── VENTAS/ # Módulo Registro de Ventas (RVIE)
│ ├── controllers/
│ │ ├── controllers.go
│ │ └── resumen_controller.go
│ ├── models/
│ ├── routes/
│ └── services/
│ ├── services.go
│ └── resumen_service.go
├── COMPRAS/ # Módulo Registro de Compras (RCE)
│ ├── controllers/
│ ├── models/
│ ├── routes/
│ └── services/
├── .air.toml # Configuración hot-reload
├── .env.example # Ejemplo de variables de entorno
├── go.mod └── go.sum 

🛠️ Tecnologías

  • Gin - Framework web
  • Resty - Cliente HTTP
  • godotenv - Carga de variables de entorno
  • Air - Hot-reload para desarrollo

📖 Documentación SUNAT

⚠️ Notas Importantes

  • El token expira en 1 hora, usa /api/sunat/auth/login para renovarlo
  • Los errores 401 indican token expirado o inválido
  • Los errores 422 son normales al probar con datos no reales
  • El formato de perTributario es YYYYMM (ej: 202501)
  • codTipoArchivo: 0 = JSON, 1 = TXT

📄 Licencia

MIT License - Ver LICENSE para más detalles.


Desarrollado con ❤️ para la comunidad de desarrolladores peruanos.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages