fix: harden phase summary open questions
This commit is contained in:
@@ -151,6 +151,22 @@ test("validatePhaseSummaryV2: rejects a section missing title or items", () => {
|
||||
assert.ok(out.errors.some((e) => /sections\[0\].*title/.test(e)));
|
||||
});
|
||||
|
||||
test("validatePhaseSummaryV2: rejects structured open_questions instead of crashing the UI", () => {
|
||||
const out = validatePhaseSummaryV2({
|
||||
schema_version: 2,
|
||||
summary: "s",
|
||||
open_questions: [
|
||||
{
|
||||
label: "pazienti_finale restituisce 0 righe",
|
||||
question: "Verificare se i filtri sono troppo restrittivi",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
assert.equal(out.ok, false);
|
||||
assert.ok(out.errors.some((error) => /open_questions\[0\]/.test(error)));
|
||||
});
|
||||
|
||||
test("validatePhaseSummaryV2: permissive on extra unknown fields", () => {
|
||||
const out = validatePhaseSummaryV2({ schema_version: 2, summary: "s", extra_field_from_model: "whatever" });
|
||||
assert.equal(out.ok, true);
|
||||
|
||||
@@ -115,6 +115,17 @@ function validatePhaseSummaryV2(data) {
|
||||
if (data.tables !== undefined && !isArray(data.tables)) {
|
||||
errors.push("tables deve essere un array se presente.");
|
||||
}
|
||||
if (data.open_questions !== undefined) {
|
||||
if (!isArray(data.open_questions)) {
|
||||
errors.push("open_questions deve essere un array di stringhe se presente.");
|
||||
} else {
|
||||
data.open_questions.forEach((question, i) => {
|
||||
if (typeof question !== "string") {
|
||||
errors.push(`open_questions[${i}] deve essere una stringa.`);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return { ok: errors.length === 0, errors };
|
||||
}
|
||||
|
||||
|
||||
@@ -100,6 +100,8 @@ substantive decisions.
|
||||
"columns":[{"name":"cod_paz","value_filter":""}]}],
|
||||
"open_questions":[]}
|
||||
```
|
||||
`open_questions` MUST be an array of plain strings (`string[]`). Never put objects
|
||||
such as `{label, question}` in it; express each open question as one complete string.
|
||||
Legacy free-text recaps still work (no `schema_version`), but prefer v2. Note: the
|
||||
F4 schema-linking recap travels in `tables` of this v2 phase payload — do NOT reuse
|
||||
`kind:"schema_linking"` for a phase recap.
|
||||
|
||||
Reference in New Issue
Block a user