API pública de creación de guías¶
Estado: diseño aprobado el 2026-10-22. No hay código desplegado todavía. HU en ClickUp: HU: API pública de creación de guías.
¿Qué es?¶
Servicio para que integradores externos (tiendas o plataformas) creen guías por API REST, de a una o en lotes, consulten su etiqueta, las anulen y vean su cupo. Hasta hoy la API pública (ApiIntegracionesExternas) solo permite consultar pedidos (GET /pedidos).
El servicio replica exactamente el flujo que hoy hacen ApiLambdaCrearGuia, ApiLambdaCargarGuias y ApiLambdaCrearEtiquetaManual, con los mismos destinos de datos, para que liquidaciones, sincronizadores, inventario y Angular sigan funcionando sin cambios.
Más adelante (fase F5), las lambdas actuales y el front pueden migrar a este servicio.
Alcance¶
| Incluido en v1 | Fuera de v1 |
|---|---|
| Creación unitaria de guías | Contraentrega (COD) |
| Creación por lotes (varias guías en una llamada) | Recogidas (FECHA RECOGIDA) |
| Etiqueta (mismos buckets de hoy) | Cotización (llegará después) |
| Anulación de guías | Operación en otros países (el código no quema país ni moneda) |
| Cupo financiero y de conteo | Consulta de guías (ya existe GET /pedidos) |
| Administración de clientes API (tiendas, productos, transportadoras, bloqueo, auditoría) |
Transportadoras: Interrapidísimo primero (F1). Luego Envia, TCC, Servientrega y D2E (F3). XCargo no.
Arquitectura¶
flowchart LR
I[Integrador] -->|HTTPS + token M2M + x-api-key| W[WAF regional]
W --> G[API Gateway REST
ApiIntegracionesExternas rl7zt6zak5]
G -->|Authorizer Cognito + scopes| A[ApiLambdaGuias
ASP.NET Core .NET 10]
A -->|1 mensaje por guía| Q[SQS + DLQ]
Q --> K[ApiLambdaGuiasWorker]
A --> D[(DocumentDB / Atlas)]
K --> D
K --> T[Transportadoras
Inter, Envia, TCC, Servientrega, D2E]
K --> S3[S3: bucket-guias-inter-prod
bucket-guias-pdf-prod]
K --> TR[S3: trazas HTTP]
K --> INV[/actualizaInventarioLotes/]
| Pieza | Responsabilidad |
|---|---|
ApiLambdaGuias |
Autentica y autoriza, valida cada campo, aplica idempotencia, reserva cupo, encola y responde. Sirve también los endpoints de administración. |
ApiLambdaGuiasWorker |
Llama a la transportadora, inserta en CargaPedido/PedidosInter, genera la etiqueta, avisa al inventario, guarda trazas, reconcilia solicitudes inciertas y recalcula cupo. |
| SQS + DLQ | Desacopla la creación del request: ninguna Lambda procesa un lote entero, así que no aplica el límite de 15 minutos ni el de 29 s del API Gateway. |
Detalle de la decisión: ADR-001 Hosting en Lambda.
Ubicación del código¶
Regla del equipo: si es Lambda va en el repo de lambdas; si es API, en repo aparte.
Lambdas_NET_LogiGho/LambdasLogiGho.Aplicacion/ServicioPublicoLogigho/
ApiLambaConsultarPedidos/ (existe)
APILambdaObtenerToken/ (existe)
Guias/
Logigho.Guias.Dominio/
Logigho.Guias.Aplicacion/
Logigho.Guias.Infraestructura/
ApiLambdaGuias/
ApiLambdaGuiasWorker/
tests/
Pipeline: pipelines/servicio-publico/{ci,cd-preprod,cd-prod}.yml con las plantillas lambda-dotnet-*. Infraestructura en Terraform_Infraestructura_Logigho.
Flujo de creación de una guía¶
- Autenticación: el authorizer de Cognito valida el token M2M y el scope
guias:crear; el usage plan valida la API key y aplica el límite del cliente. - Perfil del cliente: se carga
ApiClientes(caché 30 s). Si el estado no esACTIVO, responde403 CLIENTE_BLOQUEADO. - Idempotencia: se registra la solicitud con
{ClienteId, Idempotency-Key}. Ver ADR-003. - Validación: cada campo con regla y mensaje claro; tienda, productos y transportadora deben estar permitidos para el cliente; la sucursal remitente se resuelve en el servidor con la misma regla de hoy, nunca desde el body.
- Cupo: reserva atómica del costo estimado. Ver
cupo.md. - Encolar: un mensaje SQS por guía. El API espera hasta ~20 s el resultado; si la transportadora tarda más responde
202con el id de la solicitud. - Worker: inserta en
CargaPedido(origenAPI), llama a la transportadora sin reintentar a ciegas el POST de creación, actualizaCargaPedido, inserta enPedidosIntercon el formato actual, genera la etiqueta (ADR-004), avisa al inventario (POST /actualizaInventarioLotes {Guias}) y guarda la traza (ADR-005). - Resultado:
CREADA,FALLIDA(libera cupo, error formal de la transportadora) oINCIERTA(timeout ambiguo; el reconciliador la resuelve antes de permitir otra creación).
Seguridad¶
- Token OAuth2
client_credentialsde Cognito + API key por cliente. Ver ADR-002. - WAF regional: reglas administradas de AWS, límite por IP y lista de IPs bloqueadas. Lista opcional de IPs permitidas por cliente.
- Tiendas, productos y transportadoras salen del perfil en servidor, nunca del token ni del body.
- Todo cambio de administradores o gerencia queda en
ApiAuditoriacon antes y después. - Datos personales enmascarados en logs.
- Configuración con el estándar actual (variables cifradas AES en variable groups bloqueados).
Documentos relacionados¶
- Endpoints
- Colecciones
- Observabilidad
- Hallazgos de las lambdas actuales
- Reglas de negocio, cupo y alarmas:
reglas-negocio.md,cupo.md,alarmas-pedidos.md(en construcción) - ADRs: 001 Hosting · 002 Autenticación · 003 Idempotencia · 004 Etiquetas · 005 Trazas · 006 Servidor MCP (propuesta)
Fases¶
| Fase | Contenido |
|---|---|
| F0 | Reglas de negocio, cupo y alarmas; Terraform base; documentación |
| F1 | Inter unitaria, autenticación, clientes API, cupo, etiqueta, inventario |
| F2 | Anulación y lotes |
| F3 | Envia, TCC, Servientrega, D2E |
| F4 | Administración en Angular, dashboard de cupo, piloto con integradores |
| F5 | Migración de las lambdas actuales y del front |