АРЧ АП11 - Архитектура после регресса: Архитектура: убрать lane-лейблы из plain list exact-ответов и сделать верх ответа business-first

This commit is contained in:
2026-04-18 15:36:08 +03:00
parent 0c6440fc5e
commit 49f291a14b
4 changed files with 31 additions and 32 deletions
@@ -3301,9 +3301,8 @@ function composeFactualReplyBody(intent, rows, options = {}) {
.map((item) => String(item ?? "").trim())
.filter((item) => item.length > 0));
const lines = [
"Собран список договоров по контрагенту (catalog address lane).",
`Строк отобрано: ${rows.length}.`,
`Уникальных договоров: ${contracts.length}.`
`Коротко: найдено ${contracts.length} договоров по контрагенту.`,
`В выборке ${rows.length} строк для подтверждения списка.`
];
if (counterparties.length === 1) {
lines.push(`Контрагент: ${counterparties[0]}.`);
@@ -3319,7 +3318,7 @@ function composeFactualReplyBody(intent, rows, options = {}) {
}
}
else {
lines.push("Договоры по указанному якорю в текущем live-срезе не найдены.");
lines.push("По указанному контрагенту договоры в текущем срезе не найдены.");
}
return {
responseType: "FACTUAL_LIST",
@@ -3386,9 +3385,8 @@ function composeFactualReplyBody(intent, rows, options = {}) {
}
if (intent === "list_documents_by_contract") {
const lines = [
`Найдено документов по договору: ${rows.length}.`,
"Собран список документов по договору (live address lane).",
`Строк отобрано: ${rows.length}.`,
`Коротко: найдено документов по договору ${rows.length}.`,
`Показываю подтвержденные документы из текущего среза.`,
...formatTopRows(rows, rows.length)
];
return {
@@ -3398,9 +3396,8 @@ function composeFactualReplyBody(intent, rows, options = {}) {
}
if (intent === "bank_operations_by_counterparty") {
const lines = [
`Найдено банковских операций по контрагенту: ${rows.length}.`,
"Собран список банковских операций по контрагенту (live address lane).",
`Строк отобрано: ${rows.length}.`,
`Коротко: найдено банковских операций по контрагенту ${rows.length}.`,
"Показываю подтвержденные банковские операции из текущего среза.",
...formatTopRows(rows, rows.length)
];
return {
@@ -3410,9 +3407,8 @@ function composeFactualReplyBody(intent, rows, options = {}) {
}
if (intent === "bank_operations_by_contract") {
const lines = [
`Найдено банковских операций по договору: ${rows.length}.`,
"Собран список банковских операций по договору (live address lane).",
`Строк отобрано: ${rows.length}.`,
`Коротко: найдено банковских операций по договору ${rows.length}.`,
"Показываю подтвержденные банковские операции из текущего среза.",
...formatTopRows(rows, rows.length)
];
return {
@@ -3420,7 +3416,7 @@ function composeFactualReplyBody(intent, rows, options = {}) {
text: lines.join("\n")
};
}
const lines = ["Срез адресного запроса собран.", `Строк отобрано: ${rows.length}.`, ...formatTopRows(rows, 6)];
const lines = ["Коротко: собрал подтвержденный срез по запросу.", `В выборке ${rows.length} строк.`, ...formatTopRows(rows, 6)];
return {
responseType: "FACTUAL_LIST",
text: lines.join("\n")
@@ -4224,9 +4224,8 @@ function composeFactualReplyBody(
);
const lines: string[] = [
"Собран список договоров по контрагенту (catalog address lane).",
`Строк отобрано: ${rows.length}.`,
`Уникальных договоров: ${contracts.length}.`
`Коротко: найдено ${contracts.length} договоров по контрагенту.`,
`В выборке ${rows.length} строк для подтверждения списка.`
];
if (counterparties.length === 1) {
@@ -4242,7 +4241,7 @@ function composeFactualReplyBody(
lines.push(`Показаны первые ${visible.length} из ${contracts.length} договоров.`);
}
} else {
lines.push("Договоры по указанному якорю в текущем live-срезе не найдены.");
lines.push("По указанному контрагенту договоры в текущем срезе не найдены.");
}
return {
@@ -4324,9 +4323,8 @@ function composeFactualReplyBody(
if (intent === "list_documents_by_contract") {
const lines = [
`Найдено документов по договору: ${rows.length}.`,
"Собран список документов по договору (live address lane).",
`Строк отобрано: ${rows.length}.`,
`Коротко: найдено документов по договору ${rows.length}.`,
`Показываю подтвержденные документы из текущего среза.`,
...formatTopRows(rows, rows.length)
];
return {
@@ -4337,9 +4335,8 @@ function composeFactualReplyBody(
if (intent === "bank_operations_by_counterparty") {
const lines = [
`Найдено банковских операций по контрагенту: ${rows.length}.`,
"Собран список банковских операций по контрагенту (live address lane).",
`Строк отобрано: ${rows.length}.`,
`Коротко: найдено банковских операций по контрагенту ${rows.length}.`,
"Показываю подтвержденные банковские операции из текущего среза.",
...formatTopRows(rows, rows.length)
];
return {
@@ -4350,9 +4347,8 @@ function composeFactualReplyBody(
if (intent === "bank_operations_by_contract") {
const lines = [
`Найдено банковских операций по договору: ${rows.length}.`,
"Собран список банковских операций по договору (live address lane).",
`Строк отобрано: ${rows.length}.`,
`Коротко: найдено банковских операций по договору ${rows.length}.`,
"Показываю подтвержденные банковские операции из текущего среза.",
...formatTopRows(rows, rows.length)
];
return {
@@ -4361,7 +4357,7 @@ function composeFactualReplyBody(
};
}
const lines = ["Срез адресного запроса собран.", `Строк отобрано: ${rows.length}.`, ...formatTopRows(rows, 6)];
const lines = ["Коротко: собрал подтвержденный срез по запросу.", `В выборке ${rows.length} строк.`, ...formatTopRows(rows, 6)];
return {
responseType: "FACTUAL_LIST",
text: lines.join("\n")
@@ -451,7 +451,8 @@ describe("address compose stage utf8 headers", () => {
analytics: []
}
]);
expect(reply.text).toContain("Собран список документов по договору (live address lane).");
expect(reply.text).toContain("Коротко: найдено документов по договору");
expect(reply.text).not.toContain("live address lane");
});
it("renders readable russian header for contract bank operations", () => {
@@ -465,7 +466,8 @@ describe("address compose stage utf8 headers", () => {
analytics: []
}
]);
expect(reply.text).toContain("Собран список банковских операций по договору (live address lane).");
expect(reply.text).toContain("Коротко: найдено банковских операций по договору");
expect(reply.text).not.toContain("live address lane");
});
it("renders readable russian header for contracts-by-counterparty list", () => {
@@ -479,8 +481,9 @@ describe("address compose stage utf8 headers", () => {
analytics: ["Жуковка 51"]
}
]);
expect(reply.text).toContain("Собран список договоров по контрагенту (catalog address lane).");
expect(reply.text).toContain("Уникальных договоров: 1.");
expect(reply.text).toContain("Коротко: найдено 1 договоров по контрагенту.");
expect(reply.text).not.toContain("catalog address lane");
expect(reply.text).toContain("В выборке 1 строк для подтверждения списка.");
expect(reply.text).toContain("Договор №19/15");
});