Этап 4 / Волна 16: добивка остаточных ошибок и устранение шаблонных ответов
This commit is contained in:
@@ -1262,7 +1262,9 @@ function isProblemUnitAlignedWithNarrativeDomain(unit: ProblemUnit, domain: P0Na
|
||||
if (accounts.some((item) => isVatAccountToken(item))) {
|
||||
return true;
|
||||
}
|
||||
return /(vat|ндс|invoice|book_entry|register|книг|счет[\s-]?фактур|сч[её]т[\s-]?фактур)/i.test(corpus);
|
||||
return /(vat|ндс|invoice|book_entry|register|книг|сч[её]т(?:а|у|ом|е)?[\s-]?фактур(?:а|ы|е|у|ой)?|вычет|налогов(?:ый|ого)?\s+эффект)/i.test(
|
||||
corpus
|
||||
);
|
||||
}
|
||||
|
||||
if (domain === "month_close_costs_20_44") {
|
||||
@@ -2387,13 +2389,15 @@ function hasStrongNarrativeDomainSignalInText(userMessage: string, domain: P0Nar
|
||||
if (domain === "settlements_60_62") {
|
||||
return (
|
||||
accountTokens.some((item) => isSettlementAccountToken(item)) ||
|
||||
/(60\.0[12]|62\.0[12]|долг|аванс|зач[её]т|взаимозач|расч[её]т)/i.test(text)
|
||||
/(60\.0[12]|62\.0[12]|долг|аванс|зач[её]т|взаимозач|расч[её]т|оплат|плат[её]ж|деньг[аи])/i.test(text)
|
||||
);
|
||||
}
|
||||
if (domain === "vat_document_register_book") {
|
||||
return (
|
||||
accountTokens.some((item) => isVatAccountToken(item)) ||
|
||||
/(ндс|vat|счет[-\s]?фактур|сч[её]т[-\s]?фактур|книг[аи]|регистр)/i.test(text)
|
||||
/(ндс|vat|сч[её]т(?:а|у|ом|е)?[-\s]?фактур(?:а|ы|е|у|ой)?|книг[аи]|регистр|вычет|налогов(?:ый|ого)?\s+эффект)/i.test(
|
||||
text
|
||||
)
|
||||
);
|
||||
}
|
||||
if (domain === "month_close_costs_20_44") {
|
||||
@@ -2855,7 +2859,7 @@ function buildProblemCentricAnswerStructure(input: {
|
||||
}
|
||||
|
||||
function limitationReasonToUserText(code: EvidenceLimitationReasonCode): string {
|
||||
if (code === "snapshot_only") return "Вывод сделан по snapshot и может не включать самые свежие изменения.";
|
||||
if (code === "snapshot_only") return "Оценка построена на snapshot-срезе и может не включать самые свежие изменения.";
|
||||
if (code === "heuristic_inference") return "Часть вывода построена эвристически и требует проверки в базе.";
|
||||
if (code === "missing_mechanism") return "Механизм проблемы подтвержден не полностью.";
|
||||
if (code === "weak_source_mapping") return "Связка между источниками подтверждена частично.";
|
||||
@@ -2884,7 +2888,14 @@ function inferNarrativeDomainFromText(value: string): P0NarrativeDomain {
|
||||
if (/(долг|аванс|взаимозач|зачет|зачёт|62\.01|62\.02|60\.01|60\.02|не\s+сход)/i.test(text)) {
|
||||
settlementScore += 2;
|
||||
}
|
||||
if (/(ндс|vat|счет[-\s]?фактур|сч[её]т[-\s]?фактур|книг[аи]|регистр)/i.test(text)) {
|
||||
if (/(расч[её]т|оплат|плат[её]ж|деньг[аи]|закрыти[ея]\s+расч)/i.test(text)) {
|
||||
settlementScore += 2;
|
||||
}
|
||||
if (
|
||||
/(ндс|vat|сч[её]т(?:а|у|ом|е)?[-\s]?фактур(?:а|ы|е|у|ой)?|книг[аи]|регистр|вычет|налогов(?:ый|ого)?\s+эффект)/i.test(
|
||||
text
|
||||
)
|
||||
) {
|
||||
vatScore += 3;
|
||||
}
|
||||
if (
|
||||
@@ -3080,8 +3091,8 @@ function buildEvidenceSectionLines(
|
||||
function buildDefaultChecksByDomain(domain: P0NarrativeDomain): string[] {
|
||||
if (domain === "settlements_60_62") {
|
||||
return [
|
||||
"Проверьте договор, объект расчетов, регистр расчетов и документ закрытия (зачет аванса или взаимозачет).",
|
||||
"Сверьте связку платеж -> расчетный документ -> проводки по 60/62/76 и подтверждение закрытия хвоста."
|
||||
"Сверьте договор и объект расчетов, затем подтвердите запись в регистре расчетов и документ зачета.",
|
||||
"Проверьте связку платеж -> расчетный документ -> проводки по 60/62/76 и факт закрытия хвоста."
|
||||
];
|
||||
}
|
||||
if (domain === "vat_document_register_book") {
|
||||
@@ -3248,10 +3259,12 @@ function buildChecksSectionLines(structure: AnswerStructureV11, context?: Answer
|
||||
if (domain === "settlements_60_62") {
|
||||
lines.push(...domainFallback.slice(0, 2));
|
||||
lines.push(...actionLines.slice(0, 2));
|
||||
} else if (actionLines.length > 0) {
|
||||
lines.push(...actionLines.slice(0, 2));
|
||||
} else {
|
||||
lines.push(...domainFallback.slice(0, 2));
|
||||
lines.push(...domainFallback.slice(0, 1));
|
||||
lines.push(...actionLines.slice(0, 2));
|
||||
if (lines.length < 2) {
|
||||
lines.push(...domainFallback.slice(1, 2));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (hasMissingPeriod) {
|
||||
@@ -3283,7 +3296,7 @@ function humanizeLimitationToken(value: string): string | null {
|
||||
return "Целевой механизм активного домена подтвержден частично; вывод ограничен.";
|
||||
if (normalized === "settlement_primary_evidence_not_confirmed")
|
||||
return "Опора по расчетному контуру не подтверждена: в приоритете были сигналы из смежных доменов.";
|
||||
if (normalized.includes("snapshot")) return "Вывод сделан по snapshot и может не включать часть цепочки.";
|
||||
if (normalized.includes("snapshot")) return "Оценка сделана на snapshot-срезе и может не включать часть цепочки.";
|
||||
if (normalized.includes("heuristic")) return "Часть вывода основана на эвристике.";
|
||||
if (normalized.includes("weak_source_mapping")) return "Связка между источниками подтверждена частично.";
|
||||
if (normalized.includes("missing_mechanism")) return "Механизм проблемы подтвержден не полностью.";
|
||||
@@ -3297,7 +3310,7 @@ function humanizeLimitationToken(value: string): string | null {
|
||||
if (/broad query support is limited/i.test(raw)) return "Запрос широкий, поэтому вывод ограничен частичной опорой.";
|
||||
if (/broad ranking output was tightened/i.test(raw)) return "Часть ранжирования ограничена, чтобы избежать ложной точности.";
|
||||
if (/weak mechanism evidence/i.test(raw)) return "Доказательность механизма слабая, нужен ручной контроль.";
|
||||
if (/evidence is snapshot-only/i.test(raw)) return "Вывод сделан по snapshot и может не включать самые свежие изменения.";
|
||||
if (/evidence is snapshot-only/i.test(raw)) return "Оценка сделана на snapshot-срезе и может не включать самые свежие изменения.";
|
||||
if (/source-of-record/i.test(raw)) return "Часть цепочки нужно подтвердить в исходной учетной базе.";
|
||||
if (/[a-z]/i.test(raw) && !/[а-яё]/iu.test(raw)) return null;
|
||||
|
||||
@@ -3361,6 +3374,18 @@ function buildQuestionTypeShortLine(context: AnswerRenderContext): string | null
|
||||
if (context.questionType === "what_to_check_first") {
|
||||
return `\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 ${domainName}.`;
|
||||
}
|
||||
if (context.questionType === "why_breaks") {
|
||||
if (context.focusDomain === "settlements_60_62") {
|
||||
return "Наиболее вероятная причина: переход от оплаты к закрытию расчета подтвержден не полностью.";
|
||||
}
|
||||
if (context.focusDomain === "vat_document_register_book") {
|
||||
return "Наиболее вероятная причина: переход документа НДС к регистру и книге подтвержден частично.";
|
||||
}
|
||||
if (context.focusDomain === "month_close_costs_20_44") {
|
||||
return "Наиболее вероятная причина: цепочка распределения затрат и закрытия месяца подтверждена не полностью.";
|
||||
}
|
||||
return "Наиболее вероятный механизм проблемы подтвержден частично и требует первичной проверки.";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user