basquetWi + New ticket
movilba MOVILBA-204 · child of MOVILBA-125 RUTAP full-history refactor Backlog

MOVILBA-125 UI: wide vehicle-history readers and typed differences

Done high cmcoder-mba-l-ca

Cut Vehicle History ficha/PDF/API readers to one shared wide-RUTAP projection. Return typed before/after differences (including interno and equipment), first-event initial values, canonical book-header fields, and descending business-date history with ascending chain orden/anteriorId semantics. Remove the legacy narrow public.vehiculo_historial reader and permanent-null audit/status placeholders; retain resolved entity, line, and tramite details.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Activity

  • wi-cli-venus created · 6w ago
    parent=#3027
  • wi-cli-venus statusChanged · 6w ago
    Implementing typed history adapters and UI/PDF diff support; final DB-backed reader wiring follows MOVILBA-202 schema evidence.
  • wi-cli-venus note · 6w ago
    coder02: src/lib/rutap-history-diff.ts + test on dev v5.4.150 (28351b07). Contract: buildChainEvents over 39 raw_* columns, chain-aware, ascending business order. Next: repository over rutap.v_vehiculo_historial_actual by chasis chain, HistorialItem.cambios server-side.
  • wi-cli-venus note · 6w ago
    coder02: dev v5.4.154 (47428f4a) getVehiculoHistorial reads rutap.vehiculo_historial_normalizado by chasis chain, HistorialItem.cambios typed RutapHistoryChange[] server-side. Audit PASS with: (1) snapshot predicate - DEV evidence 1 snapshot, 0 dup (vehiculo_id,fila_excel); reader predicate added next bump; (2) UI-truth 'Registrado por: Sistema' fallback in ExpedienteForm -> coder03, PDF -> coder-ca. Not exercised: rendered ficha on dev01 (dev viewer creds expired, MOVILBA-231).
  • wi-cli-venus progress · 6w ago
    Elazar 2026-09-04: no more deferring - see MOVILBA-125 decision of this date. Cutover is the deliverable that makes the legacy findings moot.
  • wi-cli-venus note · 6w ago
    v5.4.157 c6091f11: fixture tiebreak (equal fecha_alta -> rutap_fila_excel) + null fecha_alta last. audit note: reader picks latest snapshot by max(rutap_snapshot_id); v_rutap_latest by fecha_descarga DESC,id DESC - diverge only on re-import of an older book after a newer one.
  • wi-cli-venus progress · 6w ago
    coder-ca 7a5f65a7 (v5.4.158): PDF path renders typed cambios, keeps (vacio)/Primer valor, drops source-less Registrado por. Sent to audit.
  • wi-cli-venus verified · 6w ago
    audit PASS 7a5f65a7 (v5.4.158): no fabricated attribution, PDF reads h.cambios. Not exercised: generated PDF/rendered ficha (dev01 creds, MOVILBA-231). Follow-up assigned to coder-ca: remove dead narrow reader in src/lib/historial-vehiculo.ts (getCambios/filaAnterior/compararCampo/CambioHistorial).
  • wi-cli-venus progress · 6w ago
    coder-ca a6254dbd (v5.4.159): dead narrow reader removed from src/lib/historial-vehiculo.ts; sent to audit.
  • wi-cli-venus verified · 6w ago
    audit PASS a6254dbd (v5.4.159). Leftover ETIQUETA_CAMPO/etiquetaCampo orphaned; coder-ca removing in a follow-up.
  • wi-cli-venus progress · 6w ago
    coder-ca 4307c436 (v5.4.161): orphaned ETIQUETA_CAMPO/etiquetaCampo removed; FIELD_LABEL sole label source. Sent to audit.
  • wi-cli-venus verified · 6w ago
    audit closes 204: 47428f4a, 76a118ce, c6091f11, 993a2a1a, 7a5f65a7, a6254dbd, 4307c436 all PASS. Standing gap: rendered ficha + PDF on dev01 unexercised, blocked on MOVILBA-231 (viewer creds). Item stays inProgress until a visual pass runs.
  • wi-cli-venus note · 6w ago
    dev01 probe 22:01: /api/health ok, /vehiculos/3801 -> 307 /user/login (gate correct). Served build version not observable from outside (health masks it); visual pass still blocked on a dev01 login (MOVILBA-231), asked Elazar in CLI.
  • wi-cli-venus verified · 5w ago
    RENDER PASS on dev01 (proxy-mba-w-cc via coder03, v5.4.164, /vehiculos/5813): typed cambios, badges and filter render, no console errors, no Registrado lines. Two UI defects fixed by coder03 e35a1f65 (v5.4.165): alta card carried a modification badge (now [] for first chain event); blanked cells rendered 'A:' empty (now '(vacio)'). PM decision: the five period-boundary fields (startDate, endDate, startCaseFile, endCaseFile, observations) stay in cambios but are hidden from the card's change list and +N count - they change on every row by construction and the card already shows them as fields. Follow-up on coder03. Chain case 3801/6025 + PDF still with proxy.
  • wi-cli-venus verified · 5w ago
    audit 22:16, render on real data (proxy, v5.4.165, /vehiculos/5806 chain AH850FS->AI239RA, 5 rows): tiebreak verified against the one real chain that exercises it (filas 5068/5069 share fecha_alta 2026-03-02, rendered in the right order); newest-first, De/A lines verbatim, (vacio) on blanked cells, Primer valor only on the oldest row, no badge on the alta, no Registrado lines, observaciones on 5/5. NOT verified: the PDF - export is window.print(), no surface for the automated browser; PDF claims stay diff-only and need a human print. Product question raised (audit): the re-plate row lands under ADMINISTRATIVO with no +N, same label as period-boundary noise; whether a re-plate is its own subtype is Elazar's/Eugenia's call.
  • wi-cli-venus verified · 5w ago
    proxy 22:17 on /vehiculos/6025 (AE100DB chain, v5.4.166): 4 events, De/A lines, no Registrado text, observaciones present. /vehiculos/3801 -> 404: vehiculos 3801 has borrado_en set (older chain link retired), the live row is 6025; gate correct, chain still walked from 6025. Transient ChunkLoadError on /vehiculos during a live redeploy, known stale-chunk pattern. PDF unverifiable by automation (window.print).
  • wi-cli-venus progress · 5w ago
    coder02 b3245435 (v5.4.167): HistorialItem carries orden + anteriorId from the wide event; alta = anteriorId null, a server fact. coder03 5e5d1712 (v5.4.166): period-boundary fields hidden from the card list/+N; proxy re-render on 5806 confirms one-line 'Camaras ADAS: De 2 A 4' on the newest card. PM decision on audit finding (badge from full array vs filter from visible can disagree): both derive from visible; boundary-only modification gets no badge. coder03 ships. 203 writer: coder-ca ready locally, db03 running the DEV double-run gate, audit reviewing; hash pending.
  • wi-cli-venus verified · 5w ago
    audit PASS b3245435 (v5.4.167, orden/anteriorId passthrough, survives the newest-first reverse) and coder03 eafd7020 (v5.4.168: badge, +N, dropdown and filter from one array; esPrimerEvento still from the full array). Boundary-only population: 28 of 3108 events (coder03's measurement) lose their badge. Outstanding: alta rule to anteriorId === null (coder03), one render on a vehicle from the 28.
  • wi-cli-venus verified · 5w ago
    coder03 2e99272a (v5.4.170): alta = anteriorId === null. proxy render v5.4.171 on /vehiculos/3350 AA040BD (one of the 28 boundary-only events): top card no badge, no Cambios block; alta card no badge; dropdown 7 options each backed by a visible row; no console errors. audit PASS on the population that exercises it. PM decision: procedure joins the hidden set (six fields = the ones the card renders itself). Open for Elazar: 39-line 'Primer valor' alta card (keep or trim), re-plate as own subtype, PDF print (never rendered by anyone).
  • wi-cli-venus progress · 5w ago
    coder03 bbd5d72e (v5.4.172): hidden set = the six fields the card renders itself (CAMPOS_PROPIOS_DE_LA_TARJETA, incl. procedure); single predicate for list/badge/+N/filter. Audit + proxy render on 3350 requested by coder03.
  • wi-cli-venus verified · 5w ago
    proxy render v5.4.172 on /vehiculos/3350: Tramite line gone from the change list on every card, dropdown without Administrativo, +N recounted, no console errors. ExpedienteForm.tsx closed from coder03. Alta card ~33 'Primer valor' lines pending Elazar.
  • wi-cli-venus verified · 5w ago
    audit PASS bbd5d72e. Coverage gap measured (coder02, DEV snapshot 10, chain by chasis, whitespace-stripped compare of the 33 visible raw columns): 3113 non-first events; 83 have no visible change (55 of them with a tramite change) -> card with no badge/no change list, own fields still shown. coder03's 28 was trim-only; reconciliation pending. Not a defect: those rows changed only what the card renders as fields.
  • wi-cli-venus verified · 5w ago
    Badge-less modification cards, settled with the UI's own comparator (normalizeRaw: NBSP->space, trim), DEV snapshot 10: 83 of 3109 non-first events (55 with tramite change, 28 without); numerator identical across three normalizations, denominator moves 3108-3113 with the chain key (chain identity = MOVILBA-89). Cards still show their own dates/expediente/tramite/observaciones. PROD not measured. Thread closed with audit + coder03.
  • wi-cli-venus assigned · 5w ago
    unassigned
  • wi-cli-venus assigned · 5w ago
    coder-mba-l-ca
  • wi-cli-venus progress · 5w ago
    Started cutover audit on current DEV. Confirmed ficha/PDF use getVehiculoHistorial -> wide rutap reader; found /api/vehiculos/[id]/historia still routes to VehiculoService.getVehiculoStatusHistory -> legacy public.vehiculo_historial. Requested db03 step-3 view/API inventory to establish consumer contracts before a non-overlapping patch.
  • wi-cli-venus audit-finding · 5w ago
    DEV 47405737 contract audit: GET /api/vehiculos/{id}/historia currently returns { historial: InferSelectModel<public.vehiculo_historial>[], requestId }, ordered by legacy creadoEn DESC. Legacy item fields: id, vehiculoId, expteAlta, observaciones, entidadId, lineaId, estadoId, cambios (untyped JSONB), creadoEn, creadoPor, fechaAlta, borradoEn, borradoPor, motivoId, expteBaja, tramite, fechaBaja, tramiteId. Target must return the current wide chain event projection used by ficha/PDF, newest business-date first: id, orden, anteriorId, vehiculoId, vehiculoDominio, expediente, expedienteBaja, fechaExpediente, observaciones, entidadId/nombre, lineaId/numeroLinea, estadoId/nombre=null, motivoId/nombre=null, tramiteNombre/Valor, fechaBaja, borradoEn=null, periodoHasta, cambios typed, creadoEn/Por*=null. Same-name semantic change: id now wide snapshot row ID; fechaBaja remains source business date; cambios becomes typed computed diff rather than stored legacy JSONB. Fields removed: expteAlta, creadoPor, borradoPor, tramite, tramiteId; fields renamed: expteAlta->expediente, fechaAlta->fechaExpediente, lineaId gains numeroLinea, tramite->tramiteValor. Fields added: order/previous ID, domain, display names, period, typed diffs. OpenAPI currently declares the endpoint with no response schema; patch must add wide schema and envelope in same commit.
  • wi-cli-venus progress · 5w ago
    Implemented isolated DEV-based API cutover in /tmp/movilba-204-api-history (branch coder-mba-l-ca/movilba-204-api-history) and sent it to audit-mba-l-cc. GET /api/vehiculos/{id}/historia now reads rutap.vehiculo_historial_normalizado via getRutapHistorialByChain, returns the ficha/PDF-equivalent typed wide event projection in descending business order, validates positive integer IDs, and no longer calls legacy getVehiculoStatusHistory (deleted). Added explicit OpenAPI RutapHistorialItem/RutapHistorialChange schema and historial envelope. typecheck, targeted eslint, OpenAPI build, and diff check pass; full lint is baseline-blocked by 8,092 errors in vendored public/vendor/scalar/api-reference-1.58.0.js.
  • wi-cli-venus audit-finding · 5w ago
    Pre-ship review correction: the first API diff is held and must not be committed. Contract mapping is now explicit. Legacy fields removed: expteAlta, cambios JSONB, creadoEn/creadoPor/borradoEn/borradoPor, estadoId, motivoId, tramite/tramiteId, plus all permanent-null provenance/status placeholders. Wide fields added: business-sequence orden/anteriorId, vehiculoDominio, resolved entidadNombre/lineaNumero/tramiteNombre, periodoHasta, and typed cambios. Same-name semantic changes: id is RUTAP snapshot-row ID rather than public.vehiculo_historial ID; cambios is computed typed diff rather than stored JSONB; fechaBaja remains a business date. Canonical replacements: expteAlta, expteBaja, fechaAlta, tramite follow the book headers; retired expediente/fechaExpediente/tramiteValor names must not be introduced in the API. Array is newest-first while orden counts the underlying chain in ascending business order. API projection and ficha/PDF projection will be consolidated into one helper; strict decimal path parsing will replace permissive Number().
  • wi-cli-venus audit-finding · 5w ago
    Shared-projection correction: ficha/PDF and API now consume the same canonical RUTAP item. The history-row estado/motivo branches were deleted because their guards are permanently false (estadoId/motivoNombre are null); this removes no rendered UI. The ficha's actual vehicle estado remains sourced independently from its authoritative vdc row. PDF now uses expteAlta/expteBaja/fechaAlta/tramite and no longer carries null audit provenance fields. Array order remains newest-first; orden is the 1-based ascending business-chain sequence and is not a display index.
  • wi-cli-venus audit-finding · 5w ago
    Post-ship reproducible comparison target, named before execution: DEV vehiculo_id 5818, dominio AH846RC, has a two-dominio RUTAP chain and five history events on snapshot 10. Compare ficha and authenticated historia endpoint field-for-field and order-for-order; proxy owns the ficha/PDF render follow-up. Empty-history 200 remains separately untested unless DEV identifies a zero-row vehicle.
  • wi-cli-venus spec · 5w ago
    SUJETOS DE PRUEBA, medidos por coder02 contra DEV el 2026-09-05 (snapshot 10). Se nombran ANTES de la corrida para que la comparacion no se elija despues de ver el resultado. CASO FALSIFICADOR - cadena que cruza varios dominios. AH846RC (vehiculo_id 5818): 2 dominios en la cadena, 5 filas de historial. Suplentes de la misma forma: AI234WR (5825), AH846RK (5733), AI239RA (5806), AI282FN (5881). Query: por cada vehiculo, contar DISTINCT h.dominio sobre rutap.vehiculo_historial_normalizado filtrada al max(rutap_snapshot_id), uniendo por v_vehiculo_cadena (eslabon_vehiculo_id) UNION el id propio - que es exactamente la cadena que arma getRutapHistorialByChain - y quedarse con los que dan > 1. POR QUE ESTE Y NO CUALQUIERA: comparar ficha contra endpoint en un vehiculo de UN dominio solo demuestra que las dos superficies llaman a la misma funcion. Con la cadena cruzando dominios, una direccion equivocada o un equivocado se ven como una SECUENCIA distinta, no como las mismas filas en el mismo orden. CASO VACIO - historial vacio, 200 con historial: []. EXISTE en DEV: 3 vehiculos vivos cuya cadena no tiene ninguna fila en la tabla ancha del snapshot vigente. DHU474 (6621), AA111EE (6623), PAN219 (6061). Misma query, filas = 0. O sea que la rama vacia SE PUEDE ejercitar y no queda como 'no hay caso'. NO EJERCITADO AL MOMENTO DE ESCRIBIR ESTO: ninguno de los dos. Son sujetos nombrados, no resultados.
  • wi-cli-venus note · 5w ago
    db02 2026-09-05, DEV, dos SELECT read-only. SUJETOS DE PRUEBA NOMBRADOS ANTES DE LA CORRIDA, a pedido de audit. Resueltos con la MISMA definicion que usa el lector (v_vehiculo_cadena UNION el id consultado, filtrado al ultimo rutap_snapshot_id), no con una consulta parecida. PRIMARIO - cadena multi-dominio con la secuencia mas larga: dominio AI153BP, vehiculo_id 5888, cadena {AH850GK, AI153BP}, 5 eventos. SECUNDARIO - cadena multi-dominio con exactamente 2 eventos: dominio AH850GD, vehiculo_id 6602, cadena {AH850GD, AI239RU}, 2 eventos. HISTORIAL VACIO (200 con historial: []): dominio DHU474, vehiculo_id 6621. Alternativas equivalentes: AA111EE (6623) y PAN219 (6061). Existen: son 27 vehiculos sin ninguna fila ancha en su cadena, 3 de ellos no borrados. Esa rama SE PUEDE probar; no hay que darla por no ejercitable. TRES COSAS QUE CAMBIAN COMO SE CORRE EL TEST: 1. LA CADENA ES SIMETRICA. Los dos extremos resuelven al MISMO conjunto de eventos: consultar AI153BP y consultar AH850GK devuelve lo mismo. La ficha es por vehiculo_id, asi que el test tiene que FIJAR cual de los dos ids se consulta en las dos superficies. Comparar la ficha de un extremo contra el endpoint del otro pasa por casualidad y no prueba nada. 2. EN DEV NINGUNA CADENA PASA DE DOS DOMINIOS. Distribucion completa de las cadenas multi-dominio: 304 vehiculos, TODOS con 2 dominios exactos - 28 con 2 eventos, 204 con 3, 58 con 4, 14 con 5. Cero con 3 o mas dominios. O sea que un defecto del recorrido de cadena que aparezca recien a profundidad 3 NO ES TESTEABLE EN DEV HOY, con ningun sujeto. Eso queda como no ejercitado, no como cubierto. 3. Los 304 son 152 cadenas contadas por sus dos puntas. No citar 304 como cantidad de cadenas. NO EJERCITADO por mi: no abri ninguna ficha, no llame al endpoint y no compare nada. Esto es la seleccion de sujetos, no la corrida.
  • wi-cli-venus spec · 5w ago
    SUJETOS DE PRUEBA, medidos por coder02 contra DEV el 2026-09-05 (snapshot 10). Se nombran ANTES de la corrida para que la comparacion no se elija despues de ver el resultado. CASO FALSIFICADOR - cadena que cruza varios dominios. AH846RC (vehiculo_id 5818): 2 dominios en la cadena, 5 filas de historial. Suplentes de la misma forma: AI234WR (5825), AH846RK (5733), AI239RA (5806), AI282FN (5881). Query: por cada vehiculo, contar DISTINCT h.dominio sobre rutap.vehiculo_historial_normalizado filtrada al max(rutap_snapshot_id), uniendo por v_vehiculo_cadena (eslabon_vehiculo_id) UNION el id propio - que es exactamente la cadena que arma getRutapHistorialByChain - y quedarse con los que dan mas de 1. POR QUE ESTE Y NO CUALQUIERA: comparar ficha contra endpoint en un vehiculo de UN dominio solo demuestra que las dos superficies llaman a la misma funcion. Con la cadena cruzando dominios, una direccion equivocada o un orden equivocado se ven como una SECUENCIA distinta, no como las mismas filas en el mismo orden. CASO VACIO - historial vacio, 200 con historial vacio en vez de 404. EXISTE en DEV: 3 vehiculos vivos cuya cadena no tiene ninguna fila en la tabla ancha del snapshot vigente. DHU474 (6621), AA111EE (6623), PAN219 (6061). Misma query, filas = 0. O sea que la rama vacia SE PUEDE ejercitar y no queda archivada como "no hay caso". NO EJERCITADO AL MOMENTO DE ESCRIBIR ESTO: ninguno de los dos. Son sujetos nombrados, no resultados.
  • wi-cli-venus spec · 5w ago
    RESOLUCION DE SUJETOS - coder02, 2026-09-05. Habia DOS nombres para el mismo slot (AH846RC/5818 mio, AI153BP/5888 de db02, misma forma). Se fija uno para que el resultado no se reporte contra un sujeto no declarado. PRIMARIO: vehiculo_id 5818. SUPLENTE: vehiculo_id 5888. SE ESCRIBE EL ID, NO EL DOMINIO, Y ES EL MISMO ID EN LAS DOS SUPERFICIES. La cadena es SIMETRICA: consultar cualquiera de los dos extremos devuelve el mismo conjunto de eventos, y la ficha es por vehiculo_id. Comparar la ficha de un extremo contra el endpoint del otro da coincidencia por un motivo que no tiene nada que ver con el codigo bajo prueba, y esa coincidencia no falsifica nada. LIMITE DE PROFUNDIDAD - va en la declaracion de cobertura, no se absorbe en la linea de multi-dominio. Medido en DEV: ninguna cadena pasa de DOS dominios. 2106 vehiculos vivos con cadena de 1 dominio, 302 con 2, CERO con 3 o mas. Entonces el caso multi-dominio ejercita el recorrido de cadena a PROFUNDIDAD 2 y nada mas: un defecto que aparezca recien en profundidad 3 NO ES TESTEABLE EN DEV CON NINGUN SUJETO. Eso es distinto de "no probado". Los 302 son VEHICULOS y cuentan cada cadena por sus dos extremos, o sea ~151 cadenas; no dejar que el numero de vehiculos llegue al item como conteo de cadenas. db02 midio 304 sobre la misma condicion sin el filtro vehiculos.borrado_en IS NULL - las dos cifras son correctas y contestan preguntas distintas; la de aca es sobre vehiculos VIVOS. HISTORIAL VACIO: los dos carriles nombraron independientemente los mismos tres vehiculos (6621, 6623, 6061), asi que la rama es ejercitable y una sola request contra vehiculo_id 6621 la cierra.
  • wi-cli-venus decision · 5w ago
    db02 2026-09-05: UN SOLO SUJETO PRIMARIO, para que no queden dos nombres para el mismo lugar. PRIMARIO: vehiculo_id 5818. Se consulta ESE id en LAS DOS superficies, ficha y endpoint. No se cita por dominio: la cadena es simetrica y el otro extremo (6526) devuelve el MISMO conjunto de eventos, asi que nombrarla 'AH846RC' deja sin decidir cual id se consulta. BACKUP: vehiculo_id 5888. SEGUNDO CASO, distinto proposito: vehiculo_id 6602 (2 eventos, 2 dominios). HISTORIAL VACIO: vehiculo_id 6621. POR QUE 5818 Y NO 5888: no hay diferencia medible entre los dos. Los compare evento por evento y son la misma forma exacta - 3 eventos en el dominio viejo, 2 en el nuevo, Alta + 4 Modif, fila_excel contigua, y las dos cadenas cortan el mismo dia (2026-04-23 y 2026-04-27). Elijo el que ya estaba nombrado por coder02 para no forzar una segunda edicion del item. Si alguien prefiere 5888 el resultado es igual de defendible; lo que NO puede pasar es correrlo sin haber escrito cual. LO QUE HACE FALSIFICABLE A ESTE SUJETO, y no lo habia dicho ninguno de los dos carriles: la cadena de 5818 contiene un PERIODO DE LARGO CERO - las filas 5131 y 5132 tienen fecha_alta = fecha_baja = 2026-03-02 (MOVILBA-250). Dos eventos con la MISMA fecha de negocio no se pueden ordenar por fecha: solo los separa el desempate por orden/fila_excel. Ahi es exactamente donde una direccion de array invertida o un mal calculado se ve como una secuencia distinta y no como las mismas filas. 5888 tiene el mismo par (5253/5254). El sujeto de 2 eventos, 6602, NO lo tiene: sus dos eventos tienen fechas distintas, asi que prueba el recorrido de cadena pero NO el desempate. COBERTURA, textual, no absorbible en la linea de multi-dominio: el caso multi-dominio ejercita el recorrido de cadena A PROFUNDIDAD 2 UNICAMENTE. En DEV ninguna cadena pasa de dos dominios - 304 vehiculos, todos con exactamente 2, ninguno con 3 o mas - asi que un defecto que aparezca recien a profundidad 3 NO ES TESTEABLE EN DEV CON NINGUN SUJETO. Eso no es 'sin probar': es sin sujeto disponible. Y los 304 son 152 cadenas contadas por sus dos puntas; 304 no es una cantidad de cadenas.
  • wi-cli-venus note · 5w ago
    db02: en mi evento anterior una palabra se perdio por una sustitucion de shell. Donde dice "una direccion de array invertida o un mal calculado", falta la palabra: es el campo ORDEN. Se lee "una direccion de array invertida o un ORDEN mal calculado". El resto del evento esta completo. Y coincide con la resolucion que coder02 publico un segundo antes: PRIMARIO vehiculo_id 5818, suplente 5888, el mismo id en las dos superficies. Sin discrepancia. Sobre la diferencia 302/304: es la misma condicion con y sin el filtro vehiculos.borrado_en IS NULL - la de coder02 es sobre vivos, la mia sobre todos. Las dos contestan preguntas distintas y ninguna corrige a la otra. Lo unico que agrega mi evento sobre el suyo es POR QUE el sujeto falsifica: la cadena de 5818 contiene un periodo de largo cero (filas 5131 y 5132, fecha_alta = fecha_baja = 2026-03-02, MOVILBA-250). Dos eventos con la misma fecha de negocio no se ordenan por fecha, y ahi es donde un orden mal calculado se ve. El sujeto de 2 eventos, 6602, NO tiene ese par: prueba el recorrido de cadena, no el desempate.
  • wi-cli-venus audit-finding · 5w ago
    Post-deploy evidence on DEV v5.4.199 / 14bf06b5: GET /api/vehiculos/6621/historia returned 200 with {historial:[]}; the same URL returned one legacy row on v5.4.197, confirming the wide-reader cutover and empty-history branch. Proxy confirmed vehiculo_id 5818 / AH846RC has five history rows with correct newest-first order, dominio badges, and orden/anteriorId chain. PDF handler invoked URL.createObjectURL with a non-empty application/pdf Blob (8374 bytes), so export generation works; document content inspection remains MOVILBA-258. A visible "Cambios detectados por MovilBA:" -> "Cambios:" label difference was MOVILBA-250 (e6ae4e01), not 204; therefore this combined-build render does not independently prove 204's zero-pixel history-row removal. Remaining 204 limits: no DEV chain deeper than two dominios; no authenticated non-admin route run.
  • wi-cli-venus descriptionChanged · 5w ago
    was: Cut Vehicle History screen/PDF/API readers to the additive wide-history relation. Show typed before/after differences including interno and equipment fields, initial values for the first event, source audit details, and business-date descending order. Remove dependence on legacy cambios JSONB for imported RUTAP history.
  • wi-cli-venus completed · 5w ago
    Delivered on DEV v5.4.199 / 14bf06b5: shared ficha/PDF/API projection, canonical wide contract, strict decimal path validation, OpenAPI/Postman updates, and legacy reader removed. Verified 5818 chain behavior and 6621 empty-history 200; remaining documented coverage limits are depth-3 chains unavailable in DEV and no non-admin route run.
feature
6w ago by wi-cli-venus
5w ago
2026-09-05 08:25