Open-World: закрепить границу просрочки долгов

This commit is contained in:
2026-05-05 12:05:11 +03:00
parent c6024f52eb
commit 264cbcee12
14 changed files with 215 additions and 9 deletions
@@ -311,6 +311,9 @@ function hasReceivablesDebtAgingFocus(userMessage) {
const hasCounterpartySignal = /(?:заказчик|клиент|покупател|контрагент|должник|counterpart|customer|client|buyer)/iu.test(text);
return hasDebtSignal && hasLongevitySignal && hasCounterpartySignal;
}
function receivablesDueDateBoundaryLine() {
return "Граница доказанности: это возрастной сигнал/хвост дебиторки по 62/76, а не подтвержденная договорная просрочка или due-date aging; для due-date нужны сроки оплаты из договора или условий оплаты.";
}
function formatAgeYearsMonthsDays(daysRaw) {
const safeDays = Math.max(0, Math.floor(daysRaw));
const years = Math.floor(safeDays / 365);
@@ -3229,7 +3232,8 @@ function composeFactualReplyBody(intent, rows, options = {}) {
"Проверил должников по сроку жизни задолженности (контур 62/76).",
`Дата среза: ${formatDateRu(asOfDate)}.`,
`Строк в выборке: ${rows.length}.`,
`Контрагентов с сигналом: ${aging.length}.`
`Контрагентов с сигналом: ${aging.length}.`,
receivablesDueDateBoundaryLine()
];
if (aging.length > 0) {
lines.push("Приоритет ручной проверки (по возрасту долга, по убыванию):");
@@ -3255,7 +3259,8 @@ function composeFactualReplyBody(intent, rows, options = {}) {
const lines = [
"Проверил покупателей с признаками затянутой оплаты (контур 62/76).",
`Строк в выборке: ${rows.length}.`,
`Контрагентов с сигналом: ${counterparties.length}.`
`Контрагентов с сигналом: ${counterparties.length}.`,
receivablesDueDateBoundaryLine()
];
if (counterparties.length > 0) {
lines.push("Приоритет ручной проверки (по сумме/частоте хвостов):");