Registro #69: primera cotización real en BIND desde FAC-106 (folio 1026) tras 5 intentos; Type=2 y VAT como tasa, indocumentados

Sesión del 21-ago: tres intentos en vivo fallaron (uno con error explícito
que se corrigió al momento, dos con 500 genérico); se aplicó el protocolo,
se verificó por lectura que nada quedó en BIND, y con autorización de Balam
se siguió sobre el ticket de prueba. La causa fue Items[].Type (2 =
servicio, el catálogo donde BIND busca el ID) y, ya emitida, la escala de
Items[].VAT (tasa, no monto) que dejó el folio 1026 con IVA absurdo y debe
cancelarse. La segunda emisión corregida queda pendiente de confirmar.

Incluye el borrador del correo a Balam con la causa y el Excel de campos y
catálogos de BIND que fue el insumo del formulario nuevo de Jira.

Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Johann
2026-08-21 10:16:53 -06:00
parent 072a3cdab2
commit d31747df93
4 changed files with 69 additions and 3 deletions
+31 -1
View File
@@ -12,7 +12,7 @@
- **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)
**Periodo:** 8 abr 2026 → 20 ago 2026 (última actualización: **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 → 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`)
**Orden:** cronológico (más antiguo arriba)
---
@@ -1543,6 +1543,36 @@ Correo escueto: la liga de **`FAC-106`** y la reunión de **Microsoft Teams** (I
---
## 69 · Ago 21, 2026 — 7:00 AM · Llamada + trabajo posterior · PRIMERA COTIZACIÓN REAL EN BIND desde un ticket (folio 1026) — tras 5 intentos y dos semánticas indocumentadas ⭐🔥
> Asistentes: Noé, Araceli, Pedro, Johann. Preparación: [`../planeacion/Guion-sesion-2026-08-21.md`](../planeacion/Guion-sesion-2026-08-21.md) y [`../planeacion/Sondeo-FAC-106-y-payload-2026-08-20.md`](../planeacion/Sondeo-FAC-106-y-payload-2026-08-20.md). ⚠️ **Minuta de la parte de definiciones (17 categorías, Empresa origen, IVA 0%, Azure) pendiente de capturar por Johann** — esta entrada cubre la parte técnica, que quedó auditada en `WriteOperations`.
**En la sesión (7:04–7:11 am) — tres intentos, cero cotizaciones creadas:**
| # | Op | Body | Respuesta de BIND |
|---|---|---|---|
| 1 | 23 | sin `ID`/`Type` de partida, sin `PriceListID` | 500 **explícito**: *"Required property 'ID'… 'Type' not found… El ID de la lista de precio es requerido"* → se corrigió en vivo (lista "A" dada por Araceli) |
| 2 | 28 | + `ID` servicio 027, `Type: 1`, `PriceListID` A, `Unit: "Servicio"`, **sin `ExchangeRate`** | 500 **genérico** `174068216` (*"comunicarte con soporte técnico"*) |
| 3 | 34 | ídem con el servicio `ChargeVAT:true` | 500 genérico `174068255` |
Se aplicó el protocolo del guion §6: parar, anunciar el diagnóstico, pivotear a las definiciones. **Verificado por lectura después de cada intento: 52 cotizaciones en BIND, ninguna nueva.** Al salir de la sesión, Balam autorizó seguir sobre `FAC-106` por ser ticket de prueba.
**Investigación posterior (solo lectura):**
- Schema tipado del portal (APIM, anónimo): `Items` son **`NewFullProducts`**, requeridos solo `ID` y `Type`, **sin enums ni descripciones**. Permiso descartado: el token trae `5|11|AgregarCotizacion`. `GET /api/Series?docType=n` devuelve `[]` para todo `n` (sin series → `DocNumberID` no aplica). El read model de `Quotes` reporta `PriceListID` = su propio `ID` (bug de BIND); la lista real de CEMEX es **"A" `03e4bb2d`** (`Clients.PriceListID`).
- Intento 4 (op 44): + `ExchangeRate 1.0`, `Unit E48` + `SelectedUnit`, `Type: 1` → 500 genérico `174068365`.
- ⭐ **Intento 5 (op 45): `Type: 2` → HTTP 200, folio 1026.** `Type` es **el catálogo donde BIND busca el `ID`: 2 = servicio, 1 = producto.** Indocumentado; solo descubrible por ensayo.
**Pero el folio 1026 salió mal:** `VAT = 243,640.96` sobre base 1,234 = **1,234 × 197.44**. ⭐ **En el write model `Items[].VAT` es TASA (0.16), no monto** — BIND lo multiplica por precio × cantidad. El read model sí devuelve montos, lo que indujo el error. **Corregido en UI y con guard de 400** (misma regla que `VATRate`). **El folio 1026 debe cancelarse** (IVA absurdo) y la segunda emisión, ya con `VAT: 0.16`, debe dar 1,234 + 197.44 = **1,431.44 MXN** — folio y confirmación pendientes de Johann.
> **Lectura estratégica:**
> - **Se cumplió lo que la prueba acompañada existe para hacer:** dos semánticas que ningún documento de BIND contiene (`Type` y la escala de `VAT`) quedaron resueltas contra producción y escritas en el modelo. El costo fue un folio de prueba que se cancela sin efecto.
> - **El primer error de BIND fue útil y los tres siguientes no:** cuando falla la validación del JSON, BIND dice qué falta; cuando falla por dentro, solo da un código. El diagnóstico salió de comparar con cotizaciones reales y del schema del portal, no del mensaje.
> - **La plataforma se portó como se diseñó:** cada intento auditado en `WriteOperations` con body y respuesta, verificación por lectura entre intentos, y el candado de `Bind:Mode` encendido solo para emitir. Es el argumento de confianza ante Noé, y va en el correo.
> - ⚠️ **Deuda que deja:** el GUID del servicio (027) y la lista de precios ("A") van **fijos en la UI**. Lo correcto es resolver el servicio desde el combo `Servicio/Producto` (17 categorías → GUID de BIND, que además hoy tiene 5 "Servicio de Enlace" distintos) y la lista desde `Clients.PriceListID`.
> - Borrador del correo a Balam: [`../planeacion/Correo-error-resuelto-2026-08-21.md`](../planeacion/Correo-error-resuelto-2026-08-21.md).
---
## Resumen ejecutivo del hilo (para contexto rápido)
### Datos duros confirmados por Balam