feat(nakui): módulo crm — clientes, pipeline de ventas, interacciones
Módulo CRM declarativo (schema.ncl + nsmc.json + morfismos Rhai) con tres entities (Cliente, Oportunidad, Interaccion) y tres morfismos: abrir_oportunidad, mover_oportunidad (pipeline con validación de transiciones) y registrar_interaccion. crm_demo: demo realista de 18 eventos que —a diferencia de los otros demos— conserva el event log e imprime el comando de nakui-explorer, así el explorador muestra un CRM con cuerpo. tests/crm.rs: 8 tests. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -150,11 +150,9 @@ impl Manifest {
|
||||
resolved: resolved.display().to_string(),
|
||||
});
|
||||
}
|
||||
let content = std::fs::read_to_string(&resolved).map_err(|e| {
|
||||
ValidationError::Io {
|
||||
path: s.clone(),
|
||||
source: e,
|
||||
}
|
||||
let content = std::fs::read_to_string(&resolved).map_err(|e| ValidationError::Io {
|
||||
path: s.clone(),
|
||||
source: e,
|
||||
})?;
|
||||
for name in extract_schema_names(&content) {
|
||||
entity_to_files.entry(name).or_default().push(s.clone());
|
||||
@@ -168,8 +166,7 @@ impl Manifest {
|
||||
});
|
||||
}
|
||||
}
|
||||
let known_entities: HashSet<&str> =
|
||||
entity_to_files.keys().map(String::as_str).collect();
|
||||
let known_entities: HashSet<&str> = entity_to_files.keys().map(String::as_str).collect();
|
||||
|
||||
// 2. Manifest-level: morphism names must be unique.
|
||||
let mut seen: HashSet<&str> = HashSet::new();
|
||||
|
||||
Reference in New Issue
Block a user