Refactor: historial de vehiculo pasa a log append-only con workflow (reemplaza el parche de forzar Otro)
DECISION DE ELAZAR 2026-08-14: en vez de parchear el modelo actual, refactorizar el historial de vehiculo a un log APPEND-ONLY simple, con workflow encima. Origen: pedido de Eugenia (stakeholder, equipo Parodi) en el nuevo todo-importacion-app-general.xlsx, asunto 12 hoja online-stakeholder: "que todos los cambios al vehiculo sean visibles, no solo los que tienen expediente", mas requisitos futuros para el PDF y el export Excel. La lista nueva reemplaza a la anterior. ESTADO MEDIDO HOY (dev, 2026-08-14): - vehiculo_historial.expediente es NULLABLE: una fila sin expediente ya es legal, no hace falta DDL para eso. - motivo_id FK a opciones, y "Otro" ya existe: id 172 (vehiculo/motivo_asignacion_linea) y id 166 (vehiculo/motivo_transferencia). Ver mem:reference_motivo_two_catalogs_one_column. - cambios jsonb ya guarda {campo:{anterior,nuevo}} y ExpedienteForm.tsx:245 ya renderiza un bucket "Otro". - observaciones es NOT NULL: toda fila autogenerada necesita texto generado al escribir, no inventado por la UI (regla de Elazar). EL BLOQUEANTE ES ESTRUCTURAL, NO DE CATALOGO: uq_vehiculo_historial_activo UNIQUE (vehiculo_id) WHERE borrado_en IS NULL admite UNA sola fila activa por vehiculo. Para insertar la siguiente hay que poner borrado_en en la anterior, o sea "borrado" significa "tramite cerrado". Eso es MOVILBA-12 y es lo que mantuvo las cadenas invisibles hasta el fix de vista del 14/08. Con auto-generacion de filas la colision pasa de ocasional a cada edicion. FORMA PROPUESTA (a validar antes de codear): tabla de eventos append-only, sin borrado logico como mecanismo de vigencia, sin indice de fila unica activa; la vigencia se deriva del ultimo evento, no de un NULL. El expediente pasa a ser un ATRIBUTO del evento, no su condicion de existencia. El workflow (que evento requiere expediente, cual no, quien lo puede registrar) va encima, no adentro del modelo de datos. ALCANCE A DEFINIR CON ELAZAR/EUGENIA antes de tocar codigo: que cuenta como evento visible (toda edicion de campo? solo un subconjunto?), que se muestra en el PDF y en el export, y que pasa con las 4045+ filas historicas existentes (migracion vs corte). Padre natural de MOVILBA-12. NO empezar sin GO explicito.