Registros #71–#83: se cierran los huecos del 21-ago al 29-sep — login web a BIND entregado, endpoint interno de la UI (Generar Venta → Prefactura, InvoiceDetails) y modelo de dos endpoints confirmado con el SDK oficial
Reconstruido desde el buzón (informes de Read AI, correos de Noé) y los commits del repo del cliente: homologación de estados (21-ago), false = remisión (24-ago), Generar Venta y requisitos de Azure (24/25-ago), la sesión del incidente (26-ago), tenant de Azure + ítem por código (3-sep), publicación en paputec.mx (3-sep), cotización en lote (7-sep), primera prefactura observada por DevTools (9-sep), captura con Pedro (10-sep), corte de horas (15/16-sep) y la sesión de hoy. - REGISTRO.md: encabezado Periodo, entradas #71–#83, bloque "Estado actual (al 29-sep)". - PENDIENTES.md: sección 29-sep (credenciales fuera del repo, especificar InvoiceDetails, BindUiClient bajo ADR-001, CreatedByName, soporte BIND, error al crear cotización); cerrados los huecos de registro, el correo de causa del 21-ago, el experimento de folio compartido, el servicio por combo; movimientos de Azure y de la 2386. - fuentes/: extractos de Read AI (9 informes), correo "Generar Venta" de Noé y el hilo de acceso a Azure. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
+23
-13
@@ -2,32 +2,42 @@
|
|||||||
|
|
||||||
Acciones vivas del proyecto. Formato: `[ ]` abierta · `[x]` cerrada (no se borran, dejan rastro). Cada una con responsable y, si aplica, fecha. Ver contexto en [REGISTRO.md](REGISTRO.md).
|
Acciones vivas del proyecto. Formato: `[ ]` abierta · `[x]` cerrada (no se borran, dejan rastro). Cada una con responsable y, si aplica, fecha. Ver contexto en [REGISTRO.md](REGISTRO.md).
|
||||||
|
|
||||||
_Última actualización: **2026-09-15** — corte de horas 10-ago→15-sep reconstruido y huecos de registro listados (seis sesiones sin bitácora). Anterior: **2026-08-21, mediodía** — ⭐ primera cotización real emitida (folio 1026; la 2.ª, corregida, pendiente de confirmar). Anterior: **2026-08-20, noche.** Cruce completo del buzón contra la bitácora (MCP ms365): se incorporaron 9 comunicaciones faltantes y se corrigieron 2 errores de registro. **Hay sesión mañana viernes 21-ago, 7:00 am** con Noé, Ara y Pedro sobre el formulario modificado y `FAC-106`. Ver [REGISTRO #65](REGISTRO.md)–[#68](REGISTRO.md)._
|
_Última actualización: **2026-09-29** — ⭐ Balam entrega **login web a BIND** con permisos de prefactura; endpoint interno de la UI confirmado (*Generar Venta → Prefactura*, petición `InvoiceDetails`) y el modelo de dos endpoints corroborado con el SDK oficial ([REGISTRO #83](REGISTRO.md)). **Huecos de registro cerrados:** las sesiones del 21-ago al 10-sep se reconstruyeron desde el buzón ([#71](REGISTRO.md)–[#82](REGISTRO.md)). Anterior: **2026-09-15** — corte de horas 10-ago→15-sep reconstruido y huecos de registro listados (seis sesiones sin bitácora). Anterior: **2026-08-21, mediodía** — ⭐ primera cotización real emitida (folio 1026; la 2.ª, corregida, pendiente de confirmar). Anterior: **2026-08-20, noche.** Cruce completo del buzón contra la bitácora (MCP ms365): se incorporaron 9 comunicaciones faltantes y se corrigieron 2 errores de registro. **Hay sesión mañana viernes 21-ago, 7:00 am** con Noé, Ara y Pedro sobre el formulario modificado y `FAC-106`. Ver [REGISTRO #65](REGISTRO.md)–[#68](REGISTRO.md)._
|
||||||
|
|
||||||
|
## 🔥 29-sep — login web a BIND y endpoint interno de la UI ([REGISTRO #83](REGISTRO.md))
|
||||||
|
|
||||||
|
- [ ] 🔑 **Guardar las credenciales del login web fuera del repo** (`dotnet user-secrets` en desarrollo; `/opt/balam/.env` en paputec) y **destruir el TXT** en correo y disco. Misma lección del token de julio (VALIDACION-API.md §8.12).
|
||||||
|
- [ ] 🔴 **Johann — revisar el error que impide cargar la solicitud al crear una cotización en BIND** (visto en la sesión) y **crear la cotización** después de corregirlo. Puntos de acción del informe de Read AI.
|
||||||
|
- [ ] ⭐ **Especificar el endpoint interno `InvoiceDetails` con la sesión propia:** URL, método, `Content-Type`, shape del payload, respuesta, cookies y `__RequestVerificationToken`, y el flujo de `/Login/Login`. Capturar con DevTools o con el script Playwright `captura-prefactura.mjs` (planeado en el #70; **aún no existe**); sanitizar (sin cookies ni token) y escribirlo en la bitácora como contrato antes de codificar. Crear UNA prefactura de prueba (no fiscal, borrable) y cancelarla al terminar; avisar a Pedro (candado del 12-ago).
|
||||||
|
- [ ] 🔧 **Construir `BindUiClient`** (sesión por cookie) con el mismo protocolo ADR-001: dry-run → confirmación humana → verificación por lectura (fila `IsFiscalInvoice=false` + `UUID=null` en la secuencia compartida de folios). Reemplaza el 409 de `POST /api/emision/prefactura`.
|
||||||
|
- [ ] ⚠️ **Acordar con Balam que las prefacturas creadas así llevan `CreatedByName` = cuenta de Noé** (o pedir un usuario de servicio dedicado).
|
||||||
|
- [ ] 📧 **Pedir en paralelo a soporte BIND el campo/endpoint oficial de prefactura**, con la evidencia del #70 + el swagger del SDK (`NewInvoice` sin campo de tipo) + la solicitud pública "agregar PREFACTURA" de su foro. Replicar la UI es frágil y posiblemente ajeno a sus términos de servicio.
|
||||||
|
- [ ] 📼 **Recuperar los informes completos de Read AI** (al menos 9, 10 y 29-sep) desde app.read.ai con sesión — los correos solo traen el extracto — y guardarlos en `../fuentes/`.
|
||||||
|
|
||||||
## 🚨 Huecos de registro (detectados en el corte del 15-sep)
|
## 🚨 Huecos de registro (detectados en el corte del 15-sep)
|
||||||
|
|
||||||
- [ ] 🚨 **Seis sesiones con Balam sin entrada en REGISTRO.md** (evidencia: convocatorias de Pedro e informes de Read AI en el buzón): **21-ago 1:00 pm** "Seguimiento - PAF (2)" (homologación de estados del flujo; pendiente prueba de escritura en Jira), **24-ago 7:00 am** (validación cotización→prefactura MXN/USD, IVA 16 %/0 %; Noé condiciona Azure a que las pruebas funcionen), **26-ago 7:00 am** (permisos y flujo remisión/prefactura/factura; el POST se timbró en vivo → [#70](REGISTRO.md)), **3-sep 7:00 am** (datos del tenant de Azure; conceptos de Acuntia por headcount; definición: ítem por código y concepto = título del ticket) y **1:30 pm** (tres tickets de Pedro cotizados desde la plataforma publicada), **9-sep 1:00 pm** "Seguimiento PAF - Prefactura" (Araceli crea una prefactura en la UI de BIND con "Generar venta" mientras se capturan las peticiones: `InvoiceDetails`), **10-sep 1:00 pm** (con Pedro: cotización 1078 de Acuntia y captura de la petición de red de la prefactura).
|
- [x] ~~🚨 **Seis sesiones con Balam sin entrada en REGISTRO.md**~~ → **REGISTRADAS el 29-sep** ([#72](REGISTRO.md), [#73](REGISTRO.md), [#75](REGISTRO.md), [#76](REGISTRO.md), [#78](REGISTRO.md), [#80](REGISTRO.md), [#81](REGISTRO.md); la del 29-sep en [#83](REGISTRO.md)) — ⚠️ solo con el extracto del correo de Read AI, sin transcript. Detalle original (evidencia: convocatorias de Pedro e informes de Read AI en el buzón): **21-ago 1:00 pm** "Seguimiento - PAF (2)" (homologación de estados del flujo; pendiente prueba de escritura en Jira), **24-ago 7:00 am** (validación cotización→prefactura MXN/USD, IVA 16 %/0 %; Noé condiciona Azure a que las pruebas funcionen), **26-ago 7:00 am** (permisos y flujo remisión/prefactura/factura; el POST se timbró en vivo → [#70](REGISTRO.md)), **3-sep 7:00 am** (datos del tenant de Azure; conceptos de Acuntia por headcount; definición: ítem por código y concepto = título del ticket) y **1:30 pm** (tres tickets de Pedro cotizados desde la plataforma publicada), **9-sep 1:00 pm** "Seguimiento PAF - Prefactura" (Araceli crea una prefactura en la UI de BIND con "Generar venta" mientras se capturan las peticiones: `InvoiceDetails`), **10-sep 1:00 pm** (con Pedro: cotización 1078 de Acuntia y captura de la petición de red de la prefactura).
|
||||||
- [ ] 📝 **Registrar la publicación del 3-sep** (https://paputec.mx/balam/, runbook en `balam-plataforma/deploy/paputec/README.md`) y la **cotización en lote del 7-sep** — hoy solo constan en el CLAUDE.md del repo del cliente y en los commits `03582af`, `ed4c819`, `fbdbd18` (pusheados el 15-sep).
|
- [x] ~~📝 **Registrar la publicación del 3-sep**~~ → **HECHO (29-sep): [#77](REGISTRO.md) y [#79](REGISTRO.md).** Original: registrar la publicación del 3-sep (https://paputec.mx/balam/, runbook en `balam-plataforma/deploy/paputec/README.md`) y la **cotización en lote del 7-sep** — hoy solo constan en el CLAUDE.md del repo del cliente y en los commits `03582af`, `ed4c819`, `fbdbd18` (pusheados el 15-sep).
|
||||||
- [ ] ⏱️ **Validar las 39.25 h reconstruidas** del 10-ago al 15-sep en `../planeacion/Seguimiento-horas.csv` (todas marcadas `reconstruida`, con la evidencia en cada fila) y decidir a quién se reporta el corte ahora que el seguimiento es con Pedro. Excel listo: `../planeacion/Avance-Balam-2026-09-15.xlsx`.
|
- [ ] ⏱️ **Validar las 39.25 h reconstruidas** del 10-ago al 15-sep en `../planeacion/Seguimiento-horas.csv` (todas marcadas `reconstruida`, con la evidencia en cada fila) y decidir a quién se reporta el corte ahora que el seguimiento es con Pedro. Excel listo: `../planeacion/Avance-Balam-2026-09-15.xlsx`.
|
||||||
- [ ] 📧 **Correos de Noé del 24-ago sin registrar:** "Re: Seguimiento FAC-106" (explica que la prefactura se genera con *Generar venta* en Acciones) y "Acceso a Azure Balam y permisos" (pide los requisitos exactos; Johann respondió el 25-ago con suscripción + grupo de recursos + Contributor).
|
- [x] ~~📧 **Correos de Noé del 24-ago sin registrar:**~~ → **REGISTRADOS en [#74](REGISTRO.md)**, evidencia en `../fuentes/`. Original: "Re: Seguimiento FAC-106" (explica que la prefactura se genera con *Generar venta* en Acciones) y "Acceso a Azure Balam y permisos" (pide los requisitos exactos; Johann respondió el 25-ago con suscripción + grupo de recursos + Contributor).
|
||||||
|
|
||||||
## 🔥🔴 26-ago — incidente del timbrado y cierre de la investigación ([REGISTRO #70](REGISTRO.md))
|
## 🔥🔴 26-ago — incidente del timbrado y cierre de la investigación ([REGISTRO #70](REGISTRO.md))
|
||||||
|
|
||||||
- [ ] 🔥🔴 **CANCELAR EL CFDI 2386 EN BIND** (motivo SAT 02 "sin relación"). ⚠️ **Al 26-ago tarde sigue `Activa` con UUID** — verificado por API. Receptor ACUNTIA (RFC genérico extranjero, $1,160 MXN). Confirmar además que BIND no le haya enviado el correo automático al cliente.
|
- [ ] 🔥🔴 **CANCELAR EL CFDI 2386 EN BIND** (motivo SAT 02 "sin relación"). ⚠️ **Al 26-ago tarde sigue `Activa` con UUID** — verificado por API. Receptor ACUNTIA (RFC genérico extranjero, $1,160 MXN). Confirmar además que BIND no le haya enviado el correo automático al cliente. **Movimiento (26-ago, en la sesión): Pedro tomó la acción de solicitar apoyo para cancelarla ([#75](REGISTRO.md)); al 29-sep no consta confirmación.**
|
||||||
- [ ] 📧 **Avisar a Noé/Arturo del incidente con transparencia** (qué pasó, por qué, contención aplicada, CFDI cancelado). La plataforma tiene la auditoría completa en `WriteOperations` #73.
|
- [x] ~~📧 **Avisar a Noé/Arturo del incidente con transparencia**~~ → **Noé y Pedro estaban en la sesión donde ocurrió** ([#75](REGISTRO.md)) y Pedro tomó la cancelación. ⚠️ A Arturo no consta que se le haya informado. Original: avisar (qué pasó, por qué, contención aplicada, CFDI cancelado). La plataforma tiene la auditoría completa en `WriteOperations` #73.
|
||||||
- [x] ~~🧪 **Experimento decisivo: crear UNA prefactura a mano en la UI**~~ → **RESUELTO sin crear nada: el folio 2384 (Araceli, 19-ago) ES una prefactura** — confirmado en UI por Johann. Prefacturas = filas `false`+UUID null; `Status=2` = facturada (parió a la 2385 timbrada). Ver adenda del [#70](REGISTRO.md). **La detección/vinculación automática de prefacturas ya es construible sin escribir.**
|
- [x] ~~🧪 **Experimento decisivo: crear UNA prefactura a mano en la UI**~~ → **RESUELTO sin crear nada: el folio 2384 (Araceli, 19-ago) ES una prefactura** — confirmado en UI por Johann. Prefacturas = filas `false`+UUID null; `Status=2` = facturada (parió a la 2385 timbrada). Ver adenda del [#70](REGISTRO.md). **La detección/vinculación automática de prefacturas ya es construible sin escribir.**
|
||||||
- [ ] 🧪 **Experimento seguro pendiente de go-ahead: POST `false` apuntando a la secuencia de folios compartida** (`Number` explícito + espejo de 2384: `CFDIUse=23`, `ShowIEPS=true`, plazo) para ver si la UI lo etiqueta Prefactura. Riesgo máximo: documento no fiscal borrable con folio raro. Requiere `Bind:Mode=Write` en sesión y autorización expresa.
|
- [x] ~~🧪 **Experimento seguro pendiente de go-ahead: POST `false` apuntando a la secuencia de folios compartida**~~ → **EJECUTADO la noche del 26-ago (op #79, folio 1002): BIND ignoró el `Number`** — adenda 2 del [#70](REGISTRO.md). Original: POST `false` a la secuencia compartida (`Number` explícito + espejo de 2384: `CFDIUse=23`, `ShowIEPS=true`, plazo) para ver si la UI lo etiqueta Prefactura. Riesgo máximo: documento no fiscal borrable con folio raro. Requiere `Bind:Mode=Write` en sesión y autorización expresa.
|
||||||
- [ ] 📧 **Preguntar a Pedro / soporte BIND:** "¿cómo se crea una venta de tipo *Prefactura* por API? Con `IsFiscalInvoice=false` cae como Remisión (secuencia 1000) y con `true` se timbra al crear; el diff contra una prefactura real no muestra ningún campo de tipo". Adjuntar la evidencia del #70.
|
- [ ] 📧 **Preguntar a Pedro / soporte BIND** *(sigue vigente como vía paralela al endpoint interno del [#83](REGISTRO.md), ahora con la evidencia del SDK oficial)*: "¿cómo se crea una venta de tipo *Prefactura* por API? Con `IsFiscalInvoice=false` cae como Remisión (secuencia 1000) y con `true` se timbra al crear; el diff contra una prefactura real no muestra ningún campo de tipo". Adjuntar la evidencia del #70.
|
||||||
- [ ] 🧹 **Borrar las remisiones 1000 y 1001** (siguen `Activas`). En la UI, o por API (`DELETE /api/Invoices/{id}`) con autorización expresa.
|
- [ ] 🧹 **Borrar las remisiones 1000 y 1001** (siguen `Activas`). En la UI, o por API (`DELETE /api/Invoices/{id}`) con autorización expresa.
|
||||||
|
|
||||||
## ✅ 21-ago — la cotización ya se emite; lo que deja la sesión ([REGISTRO #69](REGISTRO.md))
|
## ✅ 21-ago — la cotización ya se emite; lo que deja la sesión ([REGISTRO #69](REGISTRO.md))
|
||||||
|
|
||||||
- [ ] 🔥 **Cancelar el folio 1026 en BIND** (IVA 243,640.96 por el error de escala). Araceli o Johann, desde Ventas → Cotizaciones.
|
- [ ] 🔥 **Cancelar el folio 1026 en BIND** (IVA 243,640.96 por el error de escala). Araceli o Johann, desde Ventas → Cotizaciones.
|
||||||
- [ ] 🔥 **Confirmar la segunda emisión** (`VAT: 0.16`): folio esperado 1027, total **1,431.44 MXN**. Verificar por lectura y anotar el folio en #69.
|
- [ ] 🔥 **Confirmar la segunda emisión** (`VAT: 0.16`): folio esperado 1027, total **1,431.44 MXN**. Verificar por lectura y anotar el folio en #69.
|
||||||
- [ ] 📧 **Enviar el correo a Pedro (CC Noé, Ara)** con la causa — borrador listo en `../planeacion/Correo-error-resuelto-2026-08-21.md`; faltan los dos corchetes (folio y estado de la 1026).
|
- [x] ~~📧 **Enviar el correo a Pedro (CC Noé, Ara)** con la causa~~ → **ENVIADO el 21-ago 7:32 am** a Noé (CC Pedro), hilo "Seguimiento FAC-106" ([#71](REGISTRO.md)); Noé respondió el 24-ago con el mecanismo *Generar Venta* ([#74](REGISTRO.md)). Original: enviar el correo con la causa — borrador listo en `../planeacion/Correo-error-resuelto-2026-08-21.md`; faltan los dos corchetes (folio y estado de la 1026).
|
||||||
- [ ] 📝 **Capturar la minuta de las definiciones de la sesión:** ¿se validaron las 17 categorías? ¿`Empresa origen` = 3 cuentas o 1? ¿se agrega IVA 0%? ¿Azure? ¿a quién se reportan horas ahora?
|
- [ ] 📝 **Capturar la minuta de las definiciones de la sesión:** ¿se validaron las 17 categorías? ¿`Empresa origen` = 3 cuentas o 1? ¿se agrega IVA 0%? ¿Azure? ¿a quién se reportan horas ahora? *(29-sep: el extracto de Read AI de esa sesión solo alcanza a decir "Se definió que el IVA nacional…"; sigue sin minuta.)*
|
||||||
- [ ] 🔧 **Resolver el servicio desde el combo, no fijo:** la UI manda el GUID del servicio 027 hardcodeado. Falta el mapeo 17 categorías de Jira → GUID de `/api/Services` (y BIND tiene 5 "Servicio de Enlace": hay que elegir uno por categoría, idealmente después de que Balam depure su catálogo).
|
- [x] ~~🔧 **Resolver el servicio desde el combo, no fijo:**~~ → **HECHO el 3-sep** (definición de Pedro: categoría → código del catálogo `/api/Services`, mapeo `Emision:ServicioPorCategoria`, selector de ítem; commit `ed4c819`, [#76](REGISTRO.md)). Original: la UI manda el GUID del servicio 027 hardcodeado. Falta el mapeo 17 categorías de Jira → GUID de `/api/Services` (y BIND tiene 5 "Servicio de Enlace": hay que elegir uno por categoría, idealmente después de que Balam depure su catálogo).
|
||||||
- [ ] 🔧 **Lista de precios desde el cliente:** usar `Clients.PriceListID` (CEMEX → "A") en vez del GUID fijo; el read model de `Quotes` reporta ese campo mal.
|
- [ ] 🔧 **Lista de precios desde el cliente** *(hecho en la prefactura el 23-ago, commit `a07fff6`; falta verificar que la cotización haga lo mismo)*: usar `Clients.PriceListID` (CEMEX → "A") en vez del GUID fijo; el read model de `Quotes` reporta ese campo mal.
|
||||||
- [x] ~~**Sesión 21-ago**~~ → **Hecha.** Tres intentos en vivo fallaron (protocolo aplicado, nada creado); la causa se encontró después y la emisión funcionó al 5.º intento.
|
- [x] ~~**Sesión 21-ago**~~ → **Hecha.** Tres intentos en vivo fallaron (protocolo aplicado, nada creado); la causa se encontró después y la emisión funcionó al 5.º intento.
|
||||||
- [x] ~~🔒 **Bind:Mode ReadOnly al cerrar**~~ → **Hecho en esta máquina** (y API/ng apagados). ⚠️ En la otra máquina configurar user-secrets desde cero; `Bind:Mode` por default es ReadOnly.
|
- [x] ~~🔒 **Bind:Mode ReadOnly al cerrar**~~ → **Hecho en esta máquina** (y API/ng apagados). ⚠️ En la otra máquina configurar user-secrets desde cero; `Bind:Mode` por default es ReadOnly.
|
||||||
|
|
||||||
@@ -45,7 +55,7 @@ _Última actualización: **2026-09-15** — corte de horas 10-ago→15-sep recon
|
|||||||
- [ ] 🔥 **Johann — en la sesión: encender `Bind:Mode=Write` solo para emitir y regresarlo a ReadOnly antes de cerrar.**
|
- [ ] 🔥 **Johann — en la sesión: encender `Bind:Mode=Write` solo para emitir y regresarlo a ReadOnly antes de cerrar.**
|
||||||
- [ ] ⚠️🔥 **Johann — anunciar al abrir la sesión el destino de la cotización real** (cancelarla al terminar vs. cliente de prueba) y que la prefactura pertenece a una sesión posterior. **Pendiente arrastrado del 12-ago; sigue sin resolverse.**
|
- [ ] ⚠️🔥 **Johann — anunciar al abrir la sesión el destino de la cotización real** (cancelarla al terminar vs. cliente de prueba) y que la prefactura pertenece a una sesión posterior. **Pendiente arrastrado del 12-ago; sigue sin resolverse.**
|
||||||
- [ ] 🔴 **Validar las 17 categorías con Noé y Ara.** Pedro redujo el catálogo de servicios de **67 → 17** pero lo condicionó: *"tengo que verlas con Noé y Ara antes"*. **Es el momento de cerrar el hueco de conceptos/partidas** que bloquea B7 desde el [#62](REGISTRO.md).
|
- [ ] 🔴 **Validar las 17 categorías con Noé y Ara.** Pedro redujo el catálogo de servicios de **67 → 17** pero lo condicionó: *"tengo que verlas con Noé y Ara antes"*. **Es el momento de cerrar el hueco de conceptos/partidas** que bloquea B7 desde el [#62](REGISTRO.md).
|
||||||
- [ ] ☁️ **Azure — insistir; lleva 3 semanas sin avanzar.** El 11-ago Noé ofreció explorarlo en la sesión *"con una cuenta que estamos creando para este uso"*; **el 12-ago no se tocó** — Noé solo dijo *"eso lo resuelvo con Pedro"* ([REGISTRO #65](REGISTRO.md) §8). Ahora que Pedro es el responsable, es su pendiente directo. Requisitos ya comunicados el 28-jul: grupo de recursos + **Contributor** (app + BD + Key Vault), sin Global Admin. **Sin esto la transición automática no existe** y todo queda en disparo manual.
|
- [ ] ☁️ **Azure — insistir; lleva 3 semanas sin avanzar.** El 11-ago Noé ofreció explorarlo en la sesión *"con una cuenta que estamos creando para este uso"*; **el 12-ago no se tocó** — Noé solo dijo *"eso lo resuelvo con Pedro"* ([REGISTRO #65](REGISTRO.md) §8). Ahora que Pedro es el responsable, es su pendiente directo. Requisitos ya comunicados el 28-jul: grupo de recursos + **Contributor** (app + BD + Key Vault), sin Global Admin. **Sin esto la transición automática no existe** y todo queda en disparo manual. **Movimientos:** 24-ago Noé condiciona Azure a que las pruebas funcionen y pide la app en un VPS ([#73](REGISTRO.md)); 25-ago Johann manda los requisitos exactos ([#74](REGISTRO.md)); 3-sep se piden los datos del tenant y Noé debía reenviarlos a Pedro ([#76](REGISTRO.md)); mientras, la plataforma vive en https://paputec.mx/balam/ desde el 3-sep ([#77](REGISTRO.md)).
|
||||||
- [x] ~~👤 **Confirmar quién es el responsable del proyecto.**~~ → **CONFIRMADO: Pedro.** Noé lo anunció el 12-ago: *"Erika ya no va a ser la PM de este proyecto. El seguimiento del proyecto lo va a traer Pedro."* ⚠️ **Nunca se comunicó por escrito** — el anuncio existe solo en la grabación. Ver [REGISTRO #65](REGISTRO.md) §1.
|
- [x] ~~👤 **Confirmar quién es el responsable del proyecto.**~~ → **CONFIRMADO: Pedro.** Noé lo anunció el 12-ago: *"Erika ya no va a ser la PM de este proyecto. El seguimiento del proyecto lo va a traer Pedro."* ⚠️ **Nunca se comunicó por escrito** — el anuncio existe solo en la grabación. Ver [REGISTRO #65](REGISTRO.md) §1.
|
||||||
|
|
||||||
## 🆕 Abierto por la sesión del 12-ago ([REGISTRO #65](REGISTRO.md))
|
## 🆕 Abierto por la sesión del 12-ago ([REGISTRO #65](REGISTRO.md))
|
||||||
|
|||||||
+151
-1
@@ -12,7 +12,7 @@
|
|||||||
- **Arturo Rosas Hernandez** — Gerencia administrativa / operación, Balam — `arturo.rosas@balamtalentoestrategico.com`
|
- **Arturo Rosas Hernandez** — Gerencia administrativa / operación, Balam — `arturo.rosas@balamtalentoestrategico.com`
|
||||||
- **Paola de los Angeles Castro Martínez** — Recursos Humanos, Balam — `hr@balamtalentoestrategico.com` · coordinó la firma del contrato (WhatsApp)
|
- **Paola de los Angeles Castro Martínez** — Recursos Humanos, Balam — `hr@balamtalentoestrategico.com` · coordinó la firma del contrato (WhatsApp)
|
||||||
|
|
||||||
**Periodo:** 8 abr 2026 → 21 ago 2026 (última actualización: **21-ago** — ⭐ **primera cotización real emitida en BIND desde un ticket** (folio 1026, [#69](REGISTRO.md)); `Type=2` y `VAT` como tasa, indocumentados. Anterior: **20-ago** — cruce completo del buzón de Outlook vía MCP ms365 + recuperación del transcript del **12-ago**. Se incorporan 10 comunicaciones que faltaban y se corrigen 2 errores. ⭐ **Cambio de gobernanza: Pedro Ayala releva a Erika en el seguimiento del proyecto desde el 12-ago.** Próxima sesión: **viernes 21-ago, 7:00 am** con Noé, Ara y Pedro sobre `FAC-106`)
|
**Periodo:** 8 abr 2026 → 29 sep 2026 (última actualización: **29-sep** — ⭐ **Balam entrega login web a BIND con permisos de prefactura** y queda confirmado el modelo de dos endpoints: externo = API (remisión o CFDI timbrado), interno = UI (*Generar Venta → Prefactura*, petición `InvoiceDetails`) ([#83](REGISTRO.md)). Se reconstruyen desde el buzón las sesiones sin registro del 21-ago al 10-sep ([#71](REGISTRO.md)–[#82](REGISTRO.md)): homologación de estados, `false` = remisión, la sesión del incidente, publicación en paputec.mx, cotización en lote y la primera prefactura observada por DevTools. Anterior: **21-ago** — ⭐ **primera cotización real emitida en BIND desde un ticket** (folio 1026, [#69](REGISTRO.md)); `Type=2` y `VAT` como tasa, indocumentados. Anterior: **20-ago** — cruce completo del buzón de Outlook vía MCP ms365 + recuperación del transcript del **12-ago**. Se incorporan 10 comunicaciones que faltaban y se corrigen 2 errores. ⭐ **Cambio de gobernanza: Pedro Ayala releva a Erika en el seguimiento del proyecto desde el 12-ago.** Próxima sesión: **viernes 21-ago, 7:00 am** con Noé, Ara y Pedro sobre `FAC-106`)
|
||||||
**Orden:** cronológico (más antiguo arriba)
|
**Orden:** cronológico (más antiguo arriba)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -1610,8 +1610,158 @@ Se aplicó el protocolo del guion §6: parar, anunciar el diagnóstico, pivotear
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 71 · Ago 21, 2026 — 7:32 AM · Correo · Johann → Noé (CC Pedro) · "Seguimiento FAC-106": la causa del error y la primera cotización real
|
||||||
|
|
||||||
|
> Dirección: enviado. Evidencia: buzón (hilo "Seguimiento FAC-106"); borrador en [`../planeacion/Correo-error-resuelto-2026-08-21.md`](../planeacion/Correo-error-resuelto-2026-08-21.md). Complementa el [#69](REGISTRO.md). *(Registrado el 29-sep-2026 al cerrar los huecos de bitácora.)*
|
||||||
|
|
||||||
|
**Resumen:** tras la sesión de las 7:00 am, Johann informa que ya encontró la causa del error y que la cotización desde `FAC-106` **ya se genera correctamente en BIND**. El problema no eran los datos del ticket ni el formulario nuevo (*"quedó muy bien"*), sino dos detalles del API de BIND que no están en su documentación y solo se descubren probando: (1) cada partida lleva `Type` (producto vs servicio) sin valores documentados — con el valor de producto BIND buscaba el servicio en el catálogo equivocado y devolvía el error genérico de *"comunicarte con soporte técnico"*; (2) la escala del IVA por partida. Noé respondió el 24-ago con el mecanismo de la UI ([#74](REGISTRO.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 72 · Ago 21, 2026 — 1:00 PM · Llamada · "Seguimiento - PAF (2)" · Homologación de estados del flujo ticket → cotización → prefactura → factura
|
||||||
|
|
||||||
|
> Participan: Johann, Pedro (convocatoria de Pedro a las 7:14 am con la liga a `FAC-106`; Noé convocado). Canal: Teams. Evidencia: informe de Read AI (1:34 pm), **solo el extracto del correo, sin transcript** — [`../fuentes/2026-08-21 a 2026-09-29 - Read AI - Informes Seguimiento PAF (extractos del correo).md`](../fuentes/2026-08-21%20a%202026-09-29%20-%20Read%20AI%20-%20Informes%20Seguimiento%20PAF%20(extractos%20del%20correo).md). ⚠️ Reconstruida el 29-sep desde ese extracto.
|
||||||
|
|
||||||
|
**Resumen:** se definió la integración Jira ↔ BIND ↔ plataforma de punta a punta: creación del ticket → cotización → prefactura → factura → timbrado. Se acordó **homologar los estados del flujo**: la prefactura se reflejaría como **"En proceso de facturación"** y la factura completada como **"Facturado"** — coincide con la regla del [#62](REGISTRO.md): la aprobación de Araceli va entre esos dos estados. Quedó pendiente la **prueba de escritura en Jira** (cambiar el estado de un ticket desde la plataforma). Johann y Pedro acordaron **repetir una prueba desde cero** para validar la generación de la cotización y la escritura en BIND.
|
||||||
|
|
||||||
|
**Pendientes que surgieron:**
|
||||||
|
- [ ] Johann — prueba de escritura en Jira (transición de estado de un ticket).
|
||||||
|
- [ ] Johann — validar con Pedro la cotización creada en BIND cuando él tenga acceso para revisarla.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 73 · Ago 24, 2026 — 7:00 AM · Llamada · "Seguimiento - PAF" · Validación cotización → prefactura (MXN/USD, IVA 16 %/0 %) y la primera semántica dura: `IsFiscalInvoice=false` = REMISIÓN
|
||||||
|
|
||||||
|
> Participan: Noé, Pedro, Johann. Canal: Teams. Evidencia: informe de Read AI (7:44 am), extracto. Preparación: la noche del 23-ago se construyó en la plataforma el camino cotización → prefactura (`POST /api/emision/prefactura` con el mismo protocolo ADR-001; commits `a893fa9`…`a07fff6` del repo del cliente): el wizard deja de simular (paso 4 = borrador, paso 5 = aprobación y generación real) y `CFDIUse`, `ServiceID` y `PriceListID` se heredan de una factura real y del detalle del cliente porque BIND los exige aun en prefactura.
|
||||||
|
|
||||||
|
**Resumen:** se validó el flujo de conversión de cotizaciones a prefacturas en BIND — captura, revisión, aprobación y registro financiero — con pruebas **en moneda nacional e internacional, IVA 16 % y 0 %**. Se identificaron ajustes pendientes en la lógica fiscal y en la **clasificación del documento**: los POST con `IsFiscalInvoice=false` produjeron los **folios 1000 y 1001 como Remisiones**, no prefacturas. Ajuste en vivo (commit `77d3767`, 7:38 am): `false` = remisión; la prefactura pasa a modelarse como "factura sin timbrar" con opt-in explícito; la bandeja gana una columna BIND. Se evaluará automatizar el paso Jira → BIND como cotización para reducir clics. **Noé condicionó los accesos de Azure a que las pruebas funcionen** y pidió a Johann **habilitar la aplicación en un VPS** para facilitar las pruebas — origen de la publicación provisional ([#77](REGISTRO.md)).
|
||||||
|
|
||||||
|
**Puntos de acción (según Read AI):**
|
||||||
|
- Noé — gestionar los accesos de Azure una vez validado el funcionamiento de las pruebas.
|
||||||
|
- Johann — habilitar la aplicación en el VPS para facilitar las pruebas.
|
||||||
|
|
||||||
|
> **Lectura estratégica:** la hipótesis *"true = factura sin timbrar = la prefactura del flujo"* nació aquí, de la evidencia de que `false` era remisión y de que el API no tenía operación de timbrado. Dos días después resultó falsa ([#70](REGISTRO.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 74 · Ago 24–25, 2026 · Correo · Noé ↔ Johann · dos hilos: cómo se hace una PREFACTURA en BIND ("Generar Venta") y los requisitos exactos de Azure ⭐
|
||||||
|
|
||||||
|
> Dirección: recibidos (24-ago 3:48 pm y 3:52 pm; 25-ago 4:19 pm) y enviado (25-ago 4:54 pm). Evidencia: [`../fuentes/2026-08-24 - Correo - Noe Generar Venta = prefactura (Re Seguimiento FAC-106).md`](../fuentes/2026-08-24%20-%20Correo%20-%20Noe%20Generar%20Venta%20=%20prefactura%20(Re%20Seguimiento%20FAC-106).md) y [`../fuentes/2026-08-25 - Correo - Noe y Johann Acceso a Azure Balam y permisos.md`](../fuentes/2026-08-25%20-%20Correo%20-%20Noe%20y%20Johann%20Acceso%20a%20Azure%20Balam%20y%20permisos.md).
|
||||||
|
|
||||||
|
**1 · "Re: Seguimiento FAC-106" (Noé, 24-ago 3:48 pm, con 4 capturas de pantalla).** Balam revisó las cotizaciones que se convirtieron en Remisión y explica el camino de la UI: *"Cuando una cotización se hace y se quiere convertir en Prefectura [sic] se selecciona la opción en Acciones en Bind que dice **'Generar Venta'**, si se selecciona la opción **Generar Pedido** se hace remisión y eso no lo manejamos en Balam."* Y en la ventana siguiente *"se selección la opción 'Prefectura' para revisar antes de mandar la factura al cliente"*. ⭐ **Primera descripción escrita del mecanismo interno:** el tipo de documento se elige **en la UI, después de "Generar Venta"** — no existe en el API público (adenda 2 del [#70](REGISTRO.md), [#83](REGISTRO.md)).
|
||||||
|
|
||||||
|
**2 · "Acceso a Azure Balam y permisos" (Noé, 25-ago 4:19 pm; antes, 24-ago 3:52 pm en el hilo de Jira).** *"Para cerrar el tema del acceso a Azure y no dar más vueltas, ¿nos ayudas a detallar exactamente qué necesitas para publicar el ambiente? … lo validamos con la cuenta que estamos preparando para este uso y te damos acceso."* Johann respondió el 25-ago 4:54 pm con la lista exacta: suscripción a nombre de Balam; grupo de recursos dedicado (`rg-balam-paf-staging`); rol **Contributor** solo sobre ese grupo; **Key Vault Secrets Officer**; proveedores para App Service Linux (.NET 10), PostgreSQL Flexible Server 17, Key Vault, Storage y Application Insights/Log Analytics; identidad OIDC para CI/CD desde GitHub; y los cinco datos a recibir (Tenant ID, Subscription ID, grupo, región, cuenta). Sin Global Admin ni facturación.
|
||||||
|
|
||||||
|
**Acción derivada:** Azure sigue en manos de Balam ([#76](REGISTRO.md)); la plataforma se publica provisionalmente en un VPS propio ([#77](REGISTRO.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 75 · Ago 26, 2026 — 7:00 AM · Llamada · "Seguimiento - PAF" · la sesión en la que el POST se TIMBRÓ (complemento del [#70](REGISTRO.md))
|
||||||
|
|
||||||
|
> Participan: Noé, Pedro, Johann. Canal: Teams. Evidencia: informe de Read AI (7:35 am), extracto. Preparación: la noche del 25-ago se construyó el camino prefactura → factura (commits `1ad0e27`…`02cb042`): detección del timbrado al instante, puertas idempotentes, y el botón "Timbrar" enlaza a BIND porque *"el API no lo permite (130 operaciones revisadas, ninguna de timbrado/CFDI)"* — la inferencia que falló esa misma mañana.
|
||||||
|
|
||||||
|
**Resumen:** la sesión revisó la **habilitación de permisos** y el flujo remisión / prefacturación / facturación entre la plataforma y BIND. Noé señaló que **algunas funcionalidades aún debían construirse** para permitir el uso completo de la plataforma. Johann explicó que BIND **no permite timbrar por API** y propuso generar la prefactura desde la plataforma y timbrar en BIND. Al confirmar desde el wizard (op #73, cotización 1028 / ticket `FAC-108`), BIND **creó la venta 2386 como CFDI y la timbró**: el incidente, su contención y la investigación están en el [#70](REGISTRO.md). Johann estimó que la revisión del flujo de prefacturación podría quedar resuelta durante el día — lo que quedó resuelto ese día fue el diagnóstico, no la creación.
|
||||||
|
|
||||||
|
**Puntos de acción (según Read AI):**
|
||||||
|
- Pedro — solicitar apoyo para **cancelar la factura generada durante la prueba** (2386).
|
||||||
|
- Noé — construir las funcionalidades necesarias para habilitar los permisos solicitados.
|
||||||
|
- Johann — revisar y ajustar "el estatus y el parámetro" que provoca que la operación se genere como factura en lugar de prefactura → resultado: **ese parámetro no existe en el API** (adenda 2 del [#70](REGISTRO.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 76 · Sep 3, 2026 — 7:00 AM · Llamada · "Seguimiento PAF - 02/09/26" · Datos del tenant de Azure, los conceptos de Acuntia por headcount y una definición: ítem por CÓDIGO de catálogo, concepto = título del ticket
|
||||||
|
|
||||||
|
> Participan: Noé, Pedro, Johann. Canal: Teams. Evidencia: informe de Read AI (7:28 am), extracto (6 capítulos, no visibles).
|
||||||
|
|
||||||
|
**Resumen:** la reunión se enfocó en automatizar la generación de cotizaciones y facturas de **Acuntia** entre Jira, BIND y el ambiente de Azure. Se revisaron los datos necesarios "de Jitco" [sic, Read AI] para configurar el **tenant de Azure** y permitir el montaje. Para Acuntia, **los conceptos dependen del headcount activo** e incluyen textos por colaborador — coherente con "1 factura por colaborador, ~40" del Discovery. **Definición de Balam (Pedro):** la categoría del combo `Servicio/Producto` de Jira se traduce a un **código del catálogo de servicios de BIND** (p. ej. "Servicios Profesionales Generales" → `101`), el ítem se conserva tal cual y **solo el concepto se sobreescribe con el título del ticket**. Sustituye el GUID del servicio 027 que iba fijo en la UI desde el 21-ago. Implementado el mismo día (commit `ed4c819`): `GET /api/Services` en `BindClient`, mapeo configurable `Emision:ServicioPorCategoria`, selector de ítem en la pantalla de cotización, y la caché de la bandeja se invalida al cotizar — en producción la pantalla mostraba "—" hasta un minuto después de crear la cotización.
|
||||||
|
|
||||||
|
**Puntos de acción (según Read AI):**
|
||||||
|
- Noé — reenviar por correo a Pedro la solicitud de datos para configurar el tenant de Azure.
|
||||||
|
- Balam/Johann — a la 1:30 pm, ejercicio de conversión de dos o tres tickets en cotizaciones ([#78](REGISTRO.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 77 · Sep 3, 2026 · Desarrollo · La plataforma queda PUBLICADA en https://paputec.mx/balam/ — ambiente provisional propio mientras llega Azure ⭐
|
||||||
|
|
||||||
|
> Evidencia: commit `03582af` del repo del cliente (pusheado el 15-sep) y runbook [`../balam-plataforma/deploy/paputec/README.md`](../balam-plataforma/deploy/paputec/README.md). Origen: la petición de Noé del 24-ago de habilitar la aplicación en un VPS para facilitar las pruebas ([#73](REGISTRO.md)).
|
||||||
|
|
||||||
|
**Qué se publicó:** frontend Angular bajo `/balam/` y API en `/balam/api/`, en un VPS propio (Ubuntu 24.04 · Plesk · Apache · Docker): Postgres 17 sin puertos publicados; API en contenedor *chiseled* (usuario sin privilegios, FS de solo lectura, `cap_drop ALL`) escuchando solo en loopback; Apache como única cara pública (TLS, HSTS, CSP); `deploy.sh` reproducible; rol `balam_app` sin `BYPASSRLS` (cierra el hueco de RLS del [#53](REGISTRO.md)); respaldo diario con 14 días de retención; seeder de un solo administrador. **Endurecimiento del API:** rate limit por IP (global y de login), bloqueo 15 min tras 5 fallos, contraseñas ≥ 12, `no-store`/`nosniff`, sin banner, `X-Forwarded-*` solo desde loopback. **Secretos solo en `/opt/balam/.env`** (root, 0600): nada en el repo ni en imágenes. **Producción corre con `Bind:Mode=ReadOnly` y `Jira:Mode=ReadOnly`**; para una sesión acompañada de escritura se enciende `Write` y se apaga al terminar (regla del cliente, ADR-001).
|
||||||
|
|
||||||
|
> **Lectura estratégica:** Azure llevaba cinco semanas sin destrabarse ([#59](REGISTRO.md), [#63](REGISTRO.md), [#65](REGISTRO.md), [#74](REGISTRO.md)). Publicar en infraestructura propia convirtió las sesiones de pantalla compartida en pruebas sobre una URL viva: la tarde de ese mismo día Balam cotizó tres tickets reales desde ahí ([#78](REGISTRO.md)). El costo: la plataforma vive fuera del tenant del cliente hasta que Azure exista.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 78 · Sep 3, 2026 — 1:30 PM · Llamada · "Seguimiento PAF (2) 03/09/26" · Tres tickets de Pedro convertidos en cotizaciones desde la plataforma publicada
|
||||||
|
|
||||||
|
> Participan: Pedro, Johann. Canal: Teams. Evidencia: informe de Read AI (1:51 pm), extracto (capítulos y acciones bloqueados).
|
||||||
|
|
||||||
|
**Resumen:** se validó la aplicación para convertir tickets en cotizaciones como etapa previa a la facturación. Johann confirmó que **los tres tickets de Pedro ya se habían enviado como cotizaciones** a BIND y que **el concepto usa el nombre del ticket** (definición de la mañana, [#76](REGISTRO.md)). En una prueba con **un ticket de Linares** se verificó [el resto del informe está truncado]. **Primera vez que Balam opera la plataforma sobre la URL publicada.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 79 · Sep 7, 2026 · Desarrollo · Cotización EN LOTE desde la bandeja: una cotización BIND por ticket, dry-run y confirmación en serie
|
||||||
|
|
||||||
|
> Evidencia: commit `fbdbd18` del repo del cliente (pusheado el 15-sep); documentado en su `CLAUDE.md`.
|
||||||
|
|
||||||
|
La bandeja permite marcar varios tickets (solo los que aún no tienen cotización) y "Cotizar seleccionados" abre `solicitudes/cotizar-lote?ids=…`: una fila por ticket, prellenada con las mismas reglas que la pantalla individual (`cotizacion-prefill.ts`), editable, con vista previa (dry-run) y confirmación por ticket. Cada confirmación es una `WriteOperation` y un `QuoteInvoiceLink` independientes; un rechazo de BIND deja la fila en error y **no aborta el lote**. Las llamadas van **en serie** para respetar la cuota de BIND y no mezclar folios. Responde al caso Acuntia (~40 facturas al mes, una por colaborador, [#76](REGISTRO.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 80 · Sep 9, 2026 — 1:00 PM · Llamada · "Seguimiento PAF - Prefactura" · Araceli crea una prefactura en vivo con "Generar venta" y aparece el endpoint interno: `InvoiceDetails` ⭐
|
||||||
|
|
||||||
|
> Participan: Araceli, Pedro, Johann (Noé convocado). Canal: Teams, con pantalla compartida de Araceli. Evidencia: informe de Read AI (1:24 pm), extracto (capítulos y acciones bloqueados). Es la vía "endpoint interno de la UI" que dejó abierta la adenda 2 del [#70](REGISTRO.md).
|
||||||
|
|
||||||
|
**Resumen:** el equipo revisó el procedimiento para crear una prefactura a partir de una cotización y **confirmó que debe usarse "Generar venta"** — "Generar pedido" no habilita esa función (lo mismo que Noé escribió el 24-ago, [#74](REGISTRO.md)). Durante las pruebas, **Araceli creó y guardó una prefactura** mientras Johann analizaba las peticiones registradas en las herramientas de desarrollador del navegador. **Identificaron `InvoiceDetails`** como la petición interna de `app.bind.com.mx` involucrada en la creación [el resto del informe está truncado].
|
||||||
|
|
||||||
|
**Lo que NO quedó documentado en ningún lado (verificado el 29-sep en repo, disco y buzón):** URL completa, método, payload, respuesta ni el manejo del anti-forgery token. Solo el nombre.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 81 · Sep 10, 2026 — 1:00 PM · Llamada · "Seguimiento PAF - Prefactura" · Con Pedro: cotización 1078 (Acuntia) y captura de la petición de red de la prefactura para evaluar su réplica
|
||||||
|
|
||||||
|
> Participan: Pedro, Johann. Canal: Teams. Evidencia: informe de Read AI (1:21 pm), extracto (capítulos y acciones bloqueados).
|
||||||
|
|
||||||
|
**Resumen:** Johann y Pedro analizaron la **cotización 1078 de Acuntia** para identificar la petición de red que la UI usa al generar una prefactura y **evaluar su posible replicación manual e integración posterior**. Configuraron DevTools: caché deshabilitada, *preserve log* y columna de método [el resto está truncado]. Conclusión operativa de estas dos sesiones: para replicar la petición hace falta **una sesión web propia** (cookies + token) — Johann no tenía usuario en `app.bind.com.mx`; se pidió a Balam y llegó el 29-sep ([#83](REGISTRO.md)).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 82 · Sep 15–16, 2026 · Administración · Corte de horas 10-ago → 16-sep (94.58 h), Excel de avance con fechas reales publicado en Google Sheets, y push de los tres commits de septiembre al repo del cliente
|
||||||
|
|
||||||
|
> Evidencia: commits `d9047de`, `69e06df`, `68aedc7` (este repo); [`../planeacion/Seguimiento-horas.md`](../planeacion/Seguimiento-horas.md); `Avance-Balam-2026-09-16.xlsx`; Sheet compartido "Avance-Balam" en Drive:/Balam.
|
||||||
|
|
||||||
|
39.25 h del 10-ago al 15-sep **reconstruidas con evidencia** (commits, correos, informes de Read AI) y marcadas `reconstruida` en el CSV; **seis sesiones sin bitácora** quedaron listadas como huecos — cerrados en este bloque ([#72](REGISTRO.md)–[#81](REGISTRO.md)). Etapa 2 sin ajuste Jira: 23.75 h de 38–46 estimadas; el ajuste Jira → BIND rebasó (14.75 h de 7–10) por las semánticas indocumentadas del API y cinco sesiones acompañadas. El Excel muestra fechas reales por tarea (primer y último día trabajado). Los commits `03582af`, `ed4c819` y `fbdbd18` se pushearon al repo del cliente el 15-sep.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 83 · Sep 29, 2026 — 7:00 AM · Llamada · "Seguimiento PAF - Integración ERP" · Balam entrega LOGIN WEB a BIND con permisos de prefactura; el modelo de dos endpoints (externo = API, interno = UI) queda confirmado con fuente primaria ⭐🔥
|
||||||
|
|
||||||
|
> Participan: Pedro, Johann (Noé convocado; las cuentas son de Noé). Canal: Teams. Convocatoria de Pedro el 28-sep 5:10 pm. Evidencia: informe de Read AI (7:23 am), extracto con capítulos y acciones: [`../fuentes/2026-08-21 a 2026-09-29 - Read AI - Informes Seguimiento PAF (extractos del correo).md`](../fuentes/2026-08-21%20a%202026-09-29%20-%20Read%20AI%20-%20Informes%20Seguimiento%20PAF%20(extractos%20del%20correo).md).
|
||||||
|
|
||||||
|
**Resumen:** la reunión se enfocó en **validar accesos** y ejecutar una **prueba de integración ERP creando cotizaciones y prefacturas en BIND**. Pedro confirmó que su perfil estaba habilitado y que **las cuentas de Noé tienen permisos para crear facturas, prefacturas y operaciones relacionadas**. Johann solicitó las credenciales; se acordó **entregarlas en un archivo TXT** para usarlas en la aplicación. Con eso, al cierre del día **Johann ya tiene login web** a `app.bind.com.mx`. Durante la prueba apareció **un error que impide cargar la solicitud al crear una cotización** desde la plataforma; queda como acción de Johann.
|
||||||
|
|
||||||
|
**Puntos de acción (según Read AI):**
|
||||||
|
- Johann — revisar el error que impide cargar la solicitud al crear una cotización en BIND.
|
||||||
|
- Johann — crear la cotización en BIND después de corregir el error.
|
||||||
|
|
||||||
|
**Investigación de cierre (29-sep, solo lectura, sin tocar BIND):**
|
||||||
|
- **El modelo de dos endpoints queda confirmado con fuente primaria.** El SDK oficial de BIND (`Bind-ERP/BindERP-Python`, cuyo swagger es el contrato autoritativo) expone **un único POST de creación de ventas**, `Invoices_AddInvoice`, con el modelo `NewInvoice`: 7 campos requeridos (`currency_id`, `client_id`, `location_id`, `warehouse_id`, `cfdi_use`, `invoice_date`, `price_list_id`) y opcionales entre los que están `is_fiscal_invoice`, `serie`, `number`, `credit_days`, `services[]`, `emails[]`, `purchase_order` y `payments[]` — **y ningún campo de tipo de documento** (`DocumentType`, `Prefactura`, `IsPreInvoice`… no existen). En todo el repo del SDK no hay un solo archivo con "prefactura", "proforma" o "remision". Explica por qué las 12 sondas y el `Number` del [#70](REGISTRO.md) fueron ignorados: no están en el contrato y el deserializador los descarta.
|
||||||
|
- **Externo** = `api.bind.com.mx` → Remisión (`false`) o CFDI timbrado (`true`). **Interno** = `app.bind.com.mx` (ASP.NET MVC, sesión por cookie, login en `/Login/Login`) → *Acciones → Generar Venta → Prefactura*, petición `InvoiceDetails` ([#80](REGISTRO.md)).
|
||||||
|
- En el foro público de mejoras de BIND existe una solicitud abierta "agregar PREFACTURA" (`binderp.featureupvote.com`, bloqueado por Cloudflare para lectura automática): otros clientes piden lo mismo.
|
||||||
|
- ⚠️ **Lo que sigue sin especificarse:** URL, método, `Content-Type`, shape del payload, respuesta, cookies y `__RequestVerificationToken` de `InvoiceDetails`, y el flujo de login. La captura del 10-sep no se guardó en el repo, en disco ni en correo. Con el login propio ya se puede **recapturar sin depender de nadie**.
|
||||||
|
|
||||||
|
> **Lectura estratégica:**
|
||||||
|
> - **Se abrió la vía que el #70 dejó como única salida.** Un mes después del incidente, Balam entrega la llave (login web) y autoriza la prueba con prefacturas. La prefactura por UI es un documento no fiscal y borrable: el riesgo es cero comparado con el timbrado.
|
||||||
|
> - **Antes de codificar el cliente interno hay que escribir su contrato**, como se hizo con `Quotes_NewQuote` en el [#64](REGISTRO.md): capturar con la sesión propia, sanitizar (sin cookies ni token) y dejarlo en la bitácora. Después, `BindUiClient` con el mismo protocolo ADR-001 (dry-run → confirmación humana → verificación por lectura).
|
||||||
|
> - **Tres riesgos abiertos:** (1) las prefacturas creadas así saldrán con `CreatedByName` = cuenta de Noé — hay que acordarlo o pedir un usuario de servicio; (2) replicar la UI es frágil ante cambios de BIND y posiblemente ajeno a sus términos de servicio — conviene pedir en paralelo el campo oficial a soporte BIND con esta evidencia; (3) las credenciales llegan en TXT: **van a `user-secrets`/`.env` gitignoreado y el TXT se destruye** (lección del token de julio, VALIDACION-API.md §8.12).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Resumen ejecutivo del hilo (para contexto rápido)
|
## Resumen ejecutivo del hilo (para contexto rápido)
|
||||||
|
|
||||||
|
### Estado actual (al 29-sep-2026 — Etapa 2 en producción provisional)
|
||||||
|
|
||||||
|
**La plataforma está publicada en https://paputec.mx/balam/** desde el 3-sep (ambiente provisional propio; Azure sigue sin entregarse, [#74](REGISTRO.md)/[#76](REGISTRO.md)) y Balam ya la opera en sesiones acompañadas: cotizaciones reales desde tickets, individuales y en lote, con `Bind:Mode=ReadOnly` fuera de sesión ([#77](REGISTRO.md)–[#79](REGISTRO.md)). **La cadena termina hoy en la cotización.** La prefactura por el API público es imposible — `false` = remisión, `true` = CFDI timbrado; incidente 2386 del 26-ago ([#70](REGISTRO.md)) — y el SDK oficial lo confirma ([#83](REGISTRO.md)). El camino es el **endpoint interno de la UI** (*Generar Venta → Prefactura*, petición `InvoiceDetails`, [#80](REGISTRO.md)), para el que Balam entregó **login web** el 29-sep. **Siguiente hito:** especificar ese endpoint con la sesión propia y construir `BindUiClient` bajo ADR-001. **Seguimiento con Pedro** (sesiones "Seguimiento PAF" a las 7:00 am o 1:00 pm; informes de Read AI de Noé). Horas al 16-sep: 94.58 h; Excel de avance en Google Sheets ([#82](REGISTRO.md)). **Abiertos:** cancelación SAT de la 2386, remisiones 1000/1001, Azure, a quién se reportan horas, y el error al cargar la solicitud al crear cotización visto el 29-sep.
|
||||||
|
|
||||||
### Datos duros confirmados por Balam
|
### Datos duros confirmados por Balam
|
||||||
- **BIND ERP:** API existe y es viable (confirmado 25-may). Límite 20K req/día. PAC para CFDI integrado en BIND.
|
- **BIND ERP:** API existe y es viable (confirmado 25-may). Límite 20K req/día. PAC para CFDI integrado en BIND.
|
||||||
- **BUK:** ✅ tiene API (confirmado 27-may por Pedro). No es prioridad para MVP — habilita Fase 2 post-MVP. Link pendiente de recibir.
|
- **BUK:** ✅ tiene API (confirmado 27-may por Pedro). No es prioridad para MVP — habilita Fase 2 post-MVP. Link pendiente de recibir.
|
||||||
|
|||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
# Informes de reunión de Read AI — sesiones "Seguimiento PAF" (21-ago → 29-sep 2026)
|
||||||
|
|
||||||
|
> Fuente: correos de `executiveassistant@e.read.ai` ("Noe Rocha via Read AI") en el buzón de Johann, leídos vía MCP ms365 el 29-sep-2026. **Solo el extracto que viaja en el correo**: el resumen, y capítulos/puntos de acción cuando el correo los muestra (varios vienen bloqueados: "🔒 Actualizar para ver"). Los informes completos viven en `app.read.ai/analytics/meetings/<id>` y requieren sesión. Horas en CDMX (UTC−6). Las convocatorias (Teams) las envió Pedro Ayala.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-08-21 · 7:00 AM · "Seguimiento - PAF" (informe 7:16 am)
|
||||||
|
|
||||||
|
**Resumen (truncado):** La reunión tuvo como objetivo validar la generación de una cotización desde Jira hacia "Vine" [sic: BIND]. Noe Rocha explicó que Pedro Alberto Ayala Elizondo homologó campos y ajustó el ticket para cumplir con los requisitos obligatorios. Se definió que el IVA nacional…
|
||||||
|
|
||||||
|
*(La parte técnica de esta sesión está en REGISTRO #69.)*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-08-21 · 1:00 PM · "Seguimiento - PAF (2)" (informe 1:34 pm) — convocatoria 7:14 am con https://balam-jsm-temp.atlassian.net/browse/FAC-106
|
||||||
|
|
||||||
|
**Resumen:** La reunión definió la integración entre Jira, Bind y la plataforma de cotizaciones, desde la creación del ticket y la cotización hasta la prefactura, factura y timbrado. Se acordó homologar los estados del flujo: la prefactura podría reflejarse como "en proceso de facturación" y la factura completada como "facturado". Algunos estados… *(truncado)*
|
||||||
|
|
||||||
|
**Capítulos & temas (visibles, de 9):**
|
||||||
|
- Validación inicial y pruebas de escritura
|
||||||
|
- Aún falta realizar pruebas de escritura en Jira para cambiar el estado de un ticket.
|
||||||
|
- Johann y Pedro acordaron repetir una prueba desde cero para validar la generación de la cotización y la escritura en Bind.
|
||||||
|
|
||||||
|
**Puntos de acción (visibles, de 12 capítulos):**
|
||||||
|
- Johann: Ejecuta una prueba de escritura en Jira para cambiar el estado de un ticket.
|
||||||
|
- Johann: Valida la cotización creada en "Vine" cuando Pedro tenga acceso para revisarla.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-08-24 · 7:00 AM · "Seguimiento - PAF" (informe 7:44 am)
|
||||||
|
|
||||||
|
**Resumen:** La reunión validó el flujo de conversión de cotizaciones a prefacturas en Bind, incluyendo captura, revisión, aprobación y registro financiero. Se realizaron pruebas en moneda nacional e internacional, con IVA del 16 % y 0 %, y se identificaron ajustes pendientes en la lógica fiscal y en la clasificación del… *(truncado)*
|
||||||
|
|
||||||
|
**Capítulos & temas (visibles, de 11):**
|
||||||
|
- Automatización entre Jira y Bind
|
||||||
|
- Se evaluará automatizar el paso de Jira a Bind como cotización para reducir clics y trabajo manual.
|
||||||
|
|
||||||
|
**Puntos de acción (visibles, de 15 capítulos):**
|
||||||
|
- Noe Rocha: Gestiona los accesos de Azure una vez validado el funcionamiento de las pruebas.
|
||||||
|
- Johann: Habilita o utiliza la aplicación en el VPS para facilitar las pruebas.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-08-26 · 7:00 AM · "Seguimiento - PAF" (informe 7:35 am)
|
||||||
|
|
||||||
|
**Resumen:** La reunión revisó la habilitación de permisos y el flujo de remisiones, prefacturación y facturación entre la plataforma y Bind. Noe Rocha señaló que algunas funcionalidades aún debían construirse para permitir el uso completo de la plataforma. Johann explicó que Bind no permite timbrar facturas mediante su API y propuso generar… *(truncado)*
|
||||||
|
|
||||||
|
**Capítulos & temas (visibles, de 7):**
|
||||||
|
- Coordinación para resolver la prefacturación
|
||||||
|
- Pedro debe solicitar apoyo para cancelar la factura generada durante la prueba.
|
||||||
|
- Johann estimó que la revisión del flujo de prefacturación podría quedar resuelta durante el día.
|
||||||
|
|
||||||
|
**Puntos de acción (visibles, de 5 capítulos):**
|
||||||
|
- Noe Rocha: Construye las funcionalidades necesarias para habilitar los permisos solicitados.
|
||||||
|
- Johann: Revisa y ajusta el estatus y el parámetro que está provocando que la operación se genere como factura en lugar de prefactura.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-09-03 · 7:00 AM · "Seguimiento PAF - 02/09/26" (informe 7:28 am)
|
||||||
|
|
||||||
|
**Resumen:** La reunión se enfocó en automatizar la generación de cotizaciones y facturas de Acuntia entre Jira, Bind y el ambiente de Azure. Se revisaron los datos necesarios de "Jitco" [sic] para configurar el Azure Tenant y permitir el montaje correspondiente. Para Acuntia, los conceptos dependen del headcount activo e incluyen textos como… *(truncado)*
|
||||||
|
|
||||||
|
**Capítulos & temas (visibles, de 6):**
|
||||||
|
- Solicitud de datos y preparación del ambiente de Azure
|
||||||
|
|
||||||
|
**Puntos de acción (visibles, de 8 capítulos):**
|
||||||
|
- Noe Rocha: Reenviar por correo a Pedro la solicitud de datos del "Jitco" para configurar el ambiente de Azure Tenant.
|
||||||
|
- Meeting participant: Realizar a la una y media el ejercicio de conversión de dos o tres tickets en cotizaciones.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-09-03 · 1:30 PM · "Seguimiento PAF (2) 03/09/26" (informe 1:51 pm)
|
||||||
|
|
||||||
|
**Resumen:** La reunión validó una aplicación para convertir tickets de "gira" [sic: Jira] en cotizaciones como etapa previa a la facturación. Johann confirmó que los tres tickets de Pedro ya se habían enviado como cotizaciones y que el concepto utiliza el nombre del ticket. En una prueba con un ticket de Linares se verificó… *(truncado)*
|
||||||
|
|
||||||
|
Capítulos y puntos de acción: 🔒 bloqueados en el correo.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-09-09 · 1:00 PM · "Seguimiento PAF - Prefactura" (informe 1:24 pm)
|
||||||
|
|
||||||
|
**Resumen:** El equipo revisó el procedimiento para crear una prefactura a partir de una cotización y confirmó que debe utilizarse «Generar venta», ya que «Generar pedido» no habilita esta función. Durante las pruebas, Araceli creó y guardó una prefactura mientras Johann analizaba las solicitudes registradas en las herramientas de desarrollador. Identificaron «InvoiceDetails»… *(truncado)*
|
||||||
|
|
||||||
|
Capítulos y puntos de acción: 🔒 bloqueados en el correo.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-09-10 · 1:00 PM · "Seguimiento PAF - Prefactura" (informe 1:21 pm)
|
||||||
|
|
||||||
|
**Resumen:** Johann Velazquez y Pedro Alberto Ayala Elizondo analizaron la cotización 1078 de Acuntia para identificar la petición de red utilizada al generar una prefactura y evaluar su posible replicación manual e integración posterior. Configuraron las herramientas de desarrollador, deshabilitaron la caché, conservaron los registros y habilitaron la columna de método… *(truncado)*
|
||||||
|
|
||||||
|
Capítulos y puntos de acción: 🔒 bloqueados en el correo.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-09-29 · 7:00 AM · "Seguimiento PAF - Integración ERP" (informe 7:23 am) — convocatoria 28-sep 5:10 pm
|
||||||
|
|
||||||
|
**Resumen:** La reunión se enfocó en validar accesos y ejecutar una prueba de integración ERP mediante la creación de cotizaciones y prefacturas en Bind. Pedro Alberto Ayala Elizondo confirmó que su perfil estaba habilitado y que las cuentas de Noe tenían permisos para crear facturas, prefacturas y operaciones relacionadas. Johann solicitó las… *(truncado)*
|
||||||
|
|
||||||
|
**Capítulos & temas (visibles, de 4):**
|
||||||
|
- Preparación de accesos para la prueba
|
||||||
|
- Pedro confirmó que las cuentas de Noe tienen permisos para crear facturas y prefacturas necesarias para la prueba
|
||||||
|
- Johann necesita recibir las credenciales en un archivo TXT para utilizarlas en la aplicación
|
||||||
|
|
||||||
|
**Puntos de acción (visibles, de 5 capítulos):**
|
||||||
|
- Johann: Revisar el error que impide cargar la solicitud al crear una cotización en Bind
|
||||||
|
- Johann: Crear la cotización en Bind después de corregir el error
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
# Correo · Noe Rocha → Johann (CC Pedro) · "Re: Seguimiento FAC-106" · 2026-08-24 3:48 pm
|
||||||
|
|
||||||
|
> Respuesta al correo de Johann del 21-ago 7:32 am ("Seguimiento FAC-106": causa del error 500 — `Type` de partida y escala del IVA — y cotización ya generada desde `FAC-106`). Traía **4 capturas de pantalla** de la UI de BIND (no se conservan aquí). Transcrito del buzón vía MCP ms365 el 29-sep-2026.
|
||||||
|
|
||||||
|
Hola Johan,
|
||||||
|
|
||||||
|
Ya revisamos las cotizaciones que se convirtieron en Remisión, y lo que nos explican es lo siguiente:
|
||||||
|
|
||||||
|
[captura 1]
|
||||||
|
|
||||||
|
Cuando una cotización se hace y se quiere convertir en Prefectura [sic] se selecciona la opción en Acciones en Bind que dice "Generar Venta", si se selecciona la opción Generar Pedido se hace remisión y eso no lo manejamos en Balam.
|
||||||
|
|
||||||
|
[captura 2]
|
||||||
|
|
||||||
|
Y en la siguiente ventana se selección [sic] la opción "Prefectura" para revisar antes de mandar la factura al cliente.
|
||||||
|
|
||||||
|
[captura 3]
|
||||||
|
|
||||||
|
[captura 4]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Lectura (29-sep):** es la primera descripción escrita del mecanismo interno de la UI: *Acciones → Generar Venta → (ventana siguiente) Prefactura*. "Generar Pedido" = remisión, que es exactamente donde caían los POST con `IsFiscalInvoice=false` (folios 1000/1001). El tipo de documento se elige en la UI, no existe en el API público (REGISTRO #70, #74, #83).
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Correo · hilo "Acceso a Azure Balam y permisos." · 2026-08-24/25
|
||||||
|
|
||||||
|
> Transcrito del buzón vía MCP ms365 el 29-sep-2026. Antecedente: el 24-ago 3:52 pm Noé pidió lo mismo en el hilo "Re: Seguimiento: medición de consumo API de Jira y accesos" ("Para cerrar el tema del acceso a Azure vamos a necesitar de tu apoyo, ¿nos ayudas a detallar exactamente qué necesitas para publicar el ambiente?…").
|
||||||
|
|
||||||
|
## Noe Rocha → Johann (CC Pedro) · 2026-08-25 4:19 pm
|
||||||
|
|
||||||
|
Buenos días Johan,
|
||||||
|
Para cerrar el tema del acceso a Azure y no dar más vueltas, ¿nos ayudas a detallar exactamente qué necesitas para publicar el ambiente? Con eso preparamos la cuenta y los permisos correctos desde la primera vez.
|
||||||
|
En cuanto tengamos ese detalle lo validamos con la cuenta que estamos preparando para este uso y te damos acceso.
|
||||||
|
Quedo atento.
|
||||||
|
Saludos.
|
||||||
|
|
||||||
|
## Johann → Noe Rocha · 2026-08-25 4:54 pm
|
||||||
|
|
||||||
|
Buenos días,
|
||||||
|
Para publicar inicialmente el ambiente de staging de la plataforma necesito:
|
||||||
|
|
||||||
|
1. Una suscripción activa de Azure a nombre de Balam.
|
||||||
|
2. Un grupo de recursos dedicado al proyecto, por ejemplo rg-balam-paf-staging.
|
||||||
|
3. Acceso con rol Contributor únicamente sobre ese grupo de recursos.
|
||||||
|
4. Permiso Key Vault Secrets Officer sobre el Key Vault, para configurar las credenciales de BIND, Jira, JWT y base de datos.
|
||||||
|
5. Que estén habilitados los proveedores necesarios para:
|
||||||
|
- Azure App Service Linux (.NET 10)
|
||||||
|
- Azure Database for PostgreSQL Flexible Server 17
|
||||||
|
- Azure Key Vault
|
||||||
|
- Storage Account / Blob Storage
|
||||||
|
- Application Insights y Log Analytics
|
||||||
|
6. Para CI/CD desde GitHub, una identidad de despliegue mediante OpenID Connect, con rol Contributor sobre el mismo grupo de recursos. Si prefieren, puedo configurarla con apoyo de alguien que pueda realizar las asignaciones de roles.
|
||||||
|
|
||||||
|
Al habilitarlo necesitaría que me compartan:
|
||||||
|
- Tenant ID
|
||||||
|
- Subscription ID
|
||||||
|
- Nombre del grupo de recursos
|
||||||
|
- Región autorizada
|
||||||
|
- Cuenta con la que debo ingresar
|
||||||
|
|
||||||
|
No necesito Global Administrator, acceso a facturación ni permisos sobre toda la suscripción. Todo puede quedar limitado al grupo de recursos del proyecto.
|
||||||
|
Quedo atento. Saludos.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Seguimiento:** al 29-sep-2026 el acceso a Azure no se ha entregado. El 3-sep se pidieron los datos del tenant en sesión (REGISTRO #76). La plataforma se publicó provisionalmente en https://paputec.mx/balam/ el 3-sep (REGISTRO #77).
|
||||||
Reference in New Issue
Block a user