Registro #92: Azure + CI/CD (14–15-oct) — plataforma en balam-paf-staging.azurewebsites.net, pipeline de GitHub Actions por OIDC sin secretos (build verde; la publicación espera el rol Website Contributor que asigna Balam), PostgreSQL 17 B1ms con respaldos de 35 días, Log Analytics, Application Insights, Key Vault y Storage creados (≈32 USD/mes), traspaso de la BD ensayado y pendiente (red de la BD nueva, ventana tras la prueba de Pedro); pendientes para cerrar la Etapa 1. Incluye lo que estaba sin subir: #91 (primer CFDI timbrado desde la plataforma, 1–2 oct), corte de horas del 2-oct con su Excel y generador, manual de usuario, cartas de datos bancarios, reglas de permisos de Claude Code (.claude/settings.json) y start-n8n.bat
This commit is contained in:
@@ -1985,6 +1985,74 @@ La bandeja permite marcar varios tickets (solo los que aún no tienen cotizació
|
||||
|
||||
---
|
||||
|
||||
## 91 · Oct 1–2, 2026 · Prueba completa + WhatsApp Pedro ↔ Johann · **PRIMER CFDI TIMBRADO DESDE LA PLATAFORMA: la cadena ticket → cotización → prefactura → factura queda validada en real** ⭐🔥
|
||||
|
||||
> Fuentes: lo que Johann contó el 2-oct sobre la prueba del 1-oct (no hay transcript ni informe de Read AI en el repo) y el WhatsApp de Pedro del 2-oct (3:28–3:46 pm), que Johann pegó en la sesión.
|
||||
|
||||
**1-oct — prueba completa con Balam** (guion: [`../planeacion/Guion-prueba-completa-2026-10-01.md`](../planeacion/Guion-prueba-completa-2026-10-01.md)). Duró unos 20 min o menos y llegó a **prefactura**. El timbrado **no se intentó**.
|
||||
|
||||
**2-oct, 3:28 pm — WhatsApp:**
|
||||
> **Pedro:** Duda Johan · Ya se puede timbrar desde la plataforma?
|
||||
> **Johann (3:29):** Hola Pedro · Sí, ya puede timbrar · Aquí estoy al pendiente
|
||||
> **Pedro (3:32):** Gracias Johan ya se logró timbrar desde plataforma · **Todo el proceso completo**
|
||||
> **Johann (3:46):** Excelente
|
||||
|
||||
**Resultado:** Pedro timbró él solo, desde producción y sin acompañamiento en pantalla. Es el primer CFDI que sale de la plataforma, con la cadena completa: ticket → cotización → prefactura → factura. Con esto se cierran en el Excel de avance «Conversión cotización→factura» y «Trazabilidad ticket↔cotización↔factura» (corte del 2-oct).
|
||||
|
||||
**Por documentar:**
|
||||
- Folio, UUID, cliente y ticket del primer CFDI.
|
||||
- Qué método de pago llevó. La vista previa avisa que BIND deja las prefacturas en PUE; si debía ir en PPD y salió en PUE, hay que revisarlo con Balam.
|
||||
|
||||
**Pendiente de Johann:** ajustes de UI/UX en «Ver en Jira» / «Ver en BIND» y en las pantallas de Solicitudes, Cotizaciones y Facturas. Solicitudes probablemente se queda igual; falta revisarlo.
|
||||
|
||||
> **Lectura estratégica:** el timbrado era la última pieza sin probar en real. Que Pedro lo haya hecho solo, al día siguiente de la prueba y sin pedir ayuda más que para confirmar que ya se podía, dice más del producto que cualquier demo. Lo que queda de la Etapa 2 es pulido de UI, no funcionalidad.
|
||||
|
||||
---
|
||||
|
||||
## 92 · Oct 14–15, 2026 · Azure + CI/CD · La plataforma vive en Azure (balam-paf-staging) con CI/CD por GitHub Actions; base de datos, logs, Key Vault y Storage creados. Faltan el rol de despliegue y el traspaso de la BD ⭐
|
||||
|
||||
> Fuentes: WhatsApp con Pedro del 14 y 15-oct (capturas pegadas en la sesión), verificación con `az` del 15-oct, commits `0e09bd9` / `5bb5f26` / `d79f909` del repo del cliente y corridas de Actions `38807323349` y `38810088455`. Sesión de Claude Code en la máquina Windows, ≈12:35–15:45 y cierre a las 22:20. ⚠️ Si en la otra máquina hay entradas del 7 al 14-oct sin subir, al jalar este commit puede chocar la numeración: renumerar ahí.
|
||||
|
||||
**14-oct, 3:04–3:06 pm — WhatsApp:** Johann avisa que ya publicó en Azure y pide los proveedores `Microsoft.DBforPostgreSQL`, `Storage`, `Insights`, `OperationalInsights` y `ManagedIdentity`. Esa noche quedó publicado **https://balam-paf-staging.azurewebsites.net** (desde la otra máquina, OneDeploy), apuntando a la **BD de paputec**. El paquete traía código que no estaba en el repo: el API sirviendo el SPA y la CA del Postgres de paputec.
|
||||
|
||||
**15-oct — WhatsApp:**
|
||||
> **Pedro (9:02):** Claro los solicito de inmediato · **Johann (9:03)** le comparte la URL de Azure
|
||||
> **Pedro (9:53–9:55):** el día de hoy realizaremos la prueba de las modificaciones · yo creo que te estaría dando comentarios al finalizar el día · **con base en eso partimos para generar la siguiente factura**
|
||||
> **Pedro (10:55, reenviando a la persona de accesos, 10:52):** ¿tiene permisos de colaborador sobre el resource group o son extensiones en la suscripción? · me comenta que ya te concedió los accesos
|
||||
|
||||
**Respuesta a la pregunta de accesos:** no son extensiones ni permisos sobre el RG; son *proveedores de recursos* a nivel suscripción. Verificado con `az`: los cinco quedaron **registrados** (más Web y KeyVault). `Microsoft.Network` y `AlertsManagement` siguen sin registrar.
|
||||
|
||||
**Permisos verificados (15-oct):**
|
||||
- Azure: **Contributor solo sobre `RG-BALAM-PAF-STAGING`** (México Central). No puede asignar roles (`Microsoft.Authorization/*/Write`) ni tiene acceso a datos (Key Vault/Blob por RBAC).
|
||||
- GitHub (`pedro-balam-itsm/BALAM`, cuenta **personal**): `Johann-28` tiene push, **no admin**; el token trae el permiso `workflow`. Solo Pedro podría crear secretos o environments → el CI/CD entra por **OIDC sin secretos**.
|
||||
|
||||
**Hecho:**
|
||||
- **Repo del cliente:**
|
||||
- `0e09bd9`: `FrontendEstatico`, el API sirve el SPA en Azure con las mismas reglas y cabeceras que Apache; 16 pruebas.
|
||||
- `5bb5f26`: `.github/workflows/azure-staging.yml` + `deploy/azure/` (`empaquetar.sh`, CA de paputec, README).
|
||||
- `d79f909`: telemetría a Application Insights (se enciende con `APPLICATIONINSIGHTS_CONNECTION_STRING`) y documentación.
|
||||
- Pruebas: 251 del backend y 26 del frontend en verde, local y en GitHub. El paquete local reproduce los mismos hashes del frontend publicado el 14-oct.
|
||||
- **Azure:**
|
||||
- identidad `id-balam-paf-staging-github` con credencial federada para `main`;
|
||||
- `psql-balam-paf-staging`: PG 17 B1ms, 32 GB, respaldos de 35 días, **acceso público apagado**;
|
||||
- Log Analytics (30 días, tope 1 GB/día) y Application Insights;
|
||||
- Key Vault (RBAC, vacío);
|
||||
- Storage con contenedor `respaldos` (a frío a los 30 días, se borra a los 90);
|
||||
- logs del sitio y de PostgreSQL enviados a Log Analytics.
|
||||
- **Actions:** compilar/probar/empaquetar en verde las dos veces. La publicación falla en el login:
|
||||
- 1.ª corrida: `AADSTS700213`. GitHub ahora manda el sujeto con IDs inmutables (`repo:pedro-balam-itsm@305118516/BALAM@1302080482:ref:refs/heads/main`); ya se corrigió.
|
||||
- 2.ª corrida: `No subscriptions found`. La federación ya funciona; **solo falta el rol**.
|
||||
- **Traspaso de la BD ensayado en local** con la base de pruebas: `pg_restore --no-owner --no-acl` como `balam_app`, 18 tablas con los mismos conteos, RLS forzado intacto. Procedimiento completo en `balam-plataforma/deploy/azure/README.md`.
|
||||
- **Costo de Azure:** ≈ 32 USD/mes (App Service B1 13.65 + PG B1ms ≈ 17.65 + lo demás ≈ 0), el mínimo del rango de la propuesta (lo esperado en producción eran 90–110 con B2/B2s).
|
||||
|
||||
**Contraseñas de la BD nueva:** se generaron en la máquina Windows, en `%USERPROFILE%\.balam-secretos\psql-balam-paf-staging.txt`; **no viajan por git**. Desde otra máquina se puede fijar otra (`az postgres flexible-server update -g RG-BALAM-PAF-STAGING -n psql-balam-paf-staging --admin-password …`); el rol `balam_app` todavía no existe.
|
||||
|
||||
**Bloqueos de Claude Code (auto mode):** el clasificador negó (a) el SSH a paputec para el `pg_dump` ("lectura de producción"), (b) encender el acceso público de la BD nueva, aunque fuera con firewall ("debilitar seguridad") y (c) que Claude se agregara permisos. Johann agregó las reglas en `.claude/settings.json`, pero la sesión no las cargó (hace falta reiniciar VS Code; además `az` no estaba en el PATH de esa sesión).
|
||||
|
||||
> **Lectura estratégica:** con el acceso de Balam, la infraestructura del contrato (App Service, PostgreSQL Flexible, Storage, Key Vault, Application Insights, CI/CD y respaldos con plan de recuperación) quedó creada en un día y a costo mínimo. Lo que falta para cerrar la Etapa 1 ya no es construir: es **un rol que asigna Balam** (*Website Contributor* para la identidad de despliegue) y **un traspaso de 10 minutos** en una ventana sin operación. Conviene que esa solicitud sea la última a Balam: con el reenvío del webhook desde Apache de paputec no hace falta pedirles autorización en Jira.
|
||||
|
||||
---
|
||||
|
||||
## Resumen ejecutivo del hilo (para contexto rápido)
|
||||
|
||||
### Estado actual (al 30-sep-2026 — Etapa 2 en producción provisional)
|
||||
|
||||
Reference in New Issue
Block a user