La ficha de vehiculo gatea el equipamiento contra el literal 24 en cinco lugares, justo lo que el formulario hermano prohibe por comentario y MOVILBA-317 resolvio por clave de catalogo
src/app/vehiculos/[dominio]/page.tsx tiene cinco gates hardcodeados contra el id 24 (el SI de opciones): lineas 873, 882 y 1181/1188 sobre adas_presente_id (preexistentes) y 898 sobre mdvr_id, que la agregue yo shipeando MOVILBA-414 (ccb0e1ed, v5.5.120). El formulario hermano src/app/vehiculos/[dominio]/editar/colectivo/page.tsx:212-218 hace lo contrario y lo dice literal en un comentario: "Id de SI resuelto por clave canonica del catalogo, nunca por el literal 24", con siValue = dropdowns.siNo.find(o => o.valor === "SI") y isSi() encima; agregar/colectivo/page.tsx:289 tiene el mismo patron. Es la regla de MOVILBA-317 y de .claude/rules/catalogos.md: la columna guarda el ID entero y el ID se resuelve por valor_opcion, nunca se escribe el numero. CONSECUENCIA si el catalogo se remapea (ya paso en este proyecto): los gates de la ficha se vuelven falsos en silencio y las filas de IP ADAS / IP MDVR desaparecen del PDF sin ningun error, mientras el editor de al lado sigue funcionando porque resuelve por clave. Ademas el estado seguro se invierte: isSi es false hasta que carga el catalogo (deshabilita, seguro) y el literal es true siempre (publica). ARREGLO: llevar siValue/isSi a la ficha, o a un helper compartido con las otras dos pantallas, y reemplazar los cinco literales. PROCEDENCIA: audit-mba-l-cc cerro este punto en la review de MOVILBA-414 argumentando que el gate preexistente adasPresenteId===24 probaba la codificacion. Prueba que las dos pantallas leen el MISMO catalogo compartido, no que 24 sea SI de forma estable; y la cita apuntaba a src/app/vehiculos/[id]/page.tsx, ruta de otra rama que no existe en dev/dev - contaminacion de una medicion mia que ya retracte.
Activity
-
was: src/app/vehiculos/[dominio]/page.tsx tiene cinco gates hardcodeados contra el id 24 ('SI' de opciones): lineas 873, 882 y 1181/1188 sobre adas_presente_id (preexistentes) y 898 sobre mdvr_id, que la agregue yo shipeando MOVILBA-414 (ccb0e1ed, v5.5.120). El formulario hermano src/app/vehiculos/[dominio]/editar/colectivo/page.tsx:212-218 hace lo contrario y lo dice literal: 'Id de SI resuelto por clave canonica del catalogo, nunca por el literal 24', con = dropdowns.siNo.find(o => o.valor === 'SI') y encima; agregar/colectivo/page.tsx:289 tiene el mismo patron. Es la regla de MOVILBA-317 y de .claude/rules/catalogos.md: la columna guarda el ID entero y el ID se resuelve por , nunca se escribe el numero. Consecuencia si el catalogo se remapea (que ya paso en este proyecto): los gates de la ficha se vuelven falsos en silencio y las filas de IP ADAS / IP MDVR desaparecen del PDF sin ningun error, mientras el editor de al lado sigue funcionando porque resuelve por clave. Ademas el estado seguro se invierte: es false hasta que carga el catalogo (deshabilita, seguro), el literal es true siempre (publica). ARREGLO: llevar / a la ficha (o a un helper compartido con las otras dos pantallas) y reemplazar los cinco literales. NOTA DE PROCEDENCIA: audit-mba-l-cc cerro este punto en la review de 414 argumentando que el gate preexistente probaba la codificacion; prueba que las dos pantallas usan el MISMO catalogo compartido, no que 24 sea 'SI' de forma estable, y la cita apuntaba a src/app/vehiculos/[id]/page.tsx, que es una ruta de otra rama y no existe en dev/dev.
-
ebd62f19 v5.5.122 en DEV. Dos archivos: detail-dropdowns/route.ts devuelve ahora valor (valor_opcion) en siNo, igual que ya hacia en estados por MOVILBA-218, porque la ficha no podia resolver por clave con un endpoint que solo daba id+label; y [dominio]/page.tsx resuelve siId por la clave SI y reemplaza los cinco literales por un helper esSi(). La guarda de null va ADENTRO del helper: id === siId con los dos en null da true, o sea que la version ingenua publicaba las filas dependientes justo cuando no se sabe nada. Catalogo sin cargar = false = se omite la fila, que es el estado seguro y el mismo que isSi() en el formulario de edicion. NO EJERCITADO: no abri la ficha en dev01; falta ver una con ADAS=Si y otra con ADAS=No.
-
PASS de coder-mba-l-ca sobre ebd62f19 (API expone valor_opcion, SI se resuelve por valor === SI, esSi conserva la guarda de null adentro, las cinco sustituciones consistentes). PASS de audit-mba-l-cc sobre el hallazgo original contra dev/dev: los cinco literales confirmados en 873/882/898/1181/1188 y el patron canonico confirmado en editar/colectivo. QUEDA ABIERTO por una sola cosa: nadie abrio una ficha autenticada en dev01 contra v5.5.122. Falta ver una con ADAS=Si (fila IP ADAS presente) y una con ADAS=No (fila ausente). Se cierra con eso, no antes.
-
coder04-mba-l-cc / coder
-
Taking implementation lane; inspecting latest origin/dev for hard-coded option ID 24 and replacing it with canonical catalog-key resolution.
-
Implementation ebd62f19 remains deployed; source/audit checks passed. The only remaining acceptance is authenticated DEV rendering for one ADAS=SI and one ADAS=NO record. Browser/proxy verification was assigned to coder04-mba-l-ca on 2026-09-10; no further code change is pending.
-
Authenticated DEV acceptance PASS on v5.5.142. Catalog-resolved fixture AA013AA (ADAS=SI) renders 'ID Cámaras ADAS: 0'; AA114TB (ADAS=NO) omits the row. Evidence: /data-lezama/movilba/evidencia/MOVILBA-415/acceptance.json and corresponding full-page PNGs. Temporary VIEWER QA account removed; zero fixture rows remain.
-
Implemented in ebd62f19 and authenticated DEV UI acceptance passed on v5.5.142 for SI-visible and NO-hidden cases.