feat(nakui): Fase 2 del ERP — relaciones legibles + formato

Column.ref_entity resuelve un UUID al label del record referido;
Column.format (ValueFormat Number/Currency) agrupa miles y prefija
símbolo. El campo entity_ref en formularios muestra el record elegido
por su label, no el UUID. human_label_for_record reconoce nombre/titulo
(español). El módulo CRM: las listas muestran el nombre del cliente y
monto como $12,000.

Helper format_value en meta-runtime. Tests en meta-schema, meta-runtime
y nakui-ui verdes; clippy limpio.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 19:05:04 +00:00
parent 86d06da020
commit eba629a806
10 changed files with 277 additions and 36 deletions
+24
View File
@@ -433,6 +433,30 @@ mod tests {
] {
assert!(m.views.contains_key(view), "falta la vista «{view}»");
}
// Fase 2: la lista de oportunidades resuelve `cliente_id` al
// label del cliente y formatea `monto` como moneda.
let nahual_meta_schema::View::List(lv) = &m.views["oportunidad_list"] else {
panic!("oportunidad_list debe ser una lista");
};
let cliente_col = lv
.columns
.iter()
.find(|c| c.field == "cliente_id")
.expect("columna cliente_id");
assert_eq!(cliente_col.ref_entity.as_deref(), Some("Cliente"));
let monto_col = lv
.columns
.iter()
.find(|c| c.field == "monto")
.expect("columna monto");
assert!(
matches!(
monto_col.format,
nahual_meta_schema::ValueFormat::Currency { .. }
),
"monto debe formatearse como moneda",
);
}
/// Carga el módulo crm por el mismo camino que usa `nakui-ui`