Усилить семантический контур агента и большой прогон
This commit is contained in:
@@ -542,6 +542,33 @@ function needsVatCalendarDetails(userMessage) {
|
||||
}
|
||||
return /(?:срок|когда|дата\s+уплат|декларац|дол(?:я|ями)|по\s+частям|платежн(?:ый|ого)\s+график)/iu.test(text);
|
||||
}
|
||||
function needsVatPurchaseDateAnchorDisclosure(userMessage) {
|
||||
const text = normalizeQuestionText(userMessage);
|
||||
if (!text) {
|
||||
return false;
|
||||
}
|
||||
return /(?:дата|дату|дате|момент)\s+(?:покуп|закуп)|(?:покуп|закуп)\S*\s+(?:дат|момент)|purchase\s+date|date\s+of\s+purchase/iu.test(text);
|
||||
}
|
||||
function buildVatPurchaseDateAnchorDisclosureLine(options, periodWindowLabel) {
|
||||
if (!periodWindowLabel || !needsVatPurchaseDateAnchorDisclosure(options.userMessage)) {
|
||||
return null;
|
||||
}
|
||||
const asOfDate = normalizeIsoDateOnly(options.asOfDate);
|
||||
const periodFrom = normalizeIsoDateOnly(options.periodFrom);
|
||||
const periodTo = normalizeIsoDateOnly(options.periodTo);
|
||||
const asOfTs = toUtcDayTimestamp(asOfDate);
|
||||
const fromTs = toUtcDayTimestamp(periodFrom);
|
||||
const toTs = toUtcDayTimestamp(periodTo);
|
||||
if (asOfDate &&
|
||||
asOfTs !== null &&
|
||||
fromTs !== null &&
|
||||
toTs !== null &&
|
||||
asOfTs >= fromTs &&
|
||||
asOfTs <= toTs) {
|
||||
return `- Якорь периода: дата покупки ${formatDateRu(asOfDate)} попадает в налоговый период ${periodWindowLabel}; поэтому расчет ниже взят из книг продаж/покупок за это окно.`;
|
||||
}
|
||||
return `- Якорь периода: дата покупки из вопроса/контекста использована для выбора налогового периода ${periodWindowLabel}; сам расчет ниже взят из книг продаж/покупок за это окно.`;
|
||||
}
|
||||
function detectRankingLimit(userMessage, fallback = 20) {
|
||||
const text = normalizeQuestionText(userMessage);
|
||||
if (!text) {
|
||||
@@ -3033,6 +3060,7 @@ function composeFactualReplyBody(intent, rows, options = {}) {
|
||||
const formatConfirmedMoney = (value) => (options.useRubCurrency ? formatMoneyRub(value) : formatMoney(value));
|
||||
const organizationLabel = (0, assistantOrganizationMatcher_1.normalizeOrganizationScopeValue)(options.organizationHint);
|
||||
const organizationScopeLabel = organizationLabel ? ` по организации ${organizationLabel}` : "";
|
||||
const purchaseDateAnchorLine = buildVatPurchaseDateAnchorDisclosureLine(options, periodWindowLabel);
|
||||
const lines = [
|
||||
`Коротко: подтвержденный НДС к уплате за налоговый период${organizationScopeLabel} — ${formatConfirmedMoney(vatToPay)}.`,
|
||||
"Расчет сделан по книгам продаж и покупок.",
|
||||
@@ -3040,6 +3068,7 @@ function composeFactualReplyBody(intent, rows, options = {}) {
|
||||
"Что вошло в расчет:",
|
||||
...(organizationLabel ? [`- Организация: ${organizationLabel}.`] : []),
|
||||
`- Налоговый период расчета: ${periodWindowLabel ?? "не задан (нужен явный период)"}.`,
|
||||
...(purchaseDateAnchorLine ? [purchaseDateAnchorLine] : []),
|
||||
`- НДС по книге продаж: ${formatConfirmedMoney(salesVat)}.`,
|
||||
`- НДС по книге покупок (вычеты): ${formatConfirmedMoney(purchaseVat)}.`,
|
||||
`- Нетто НДС (книга продаж - книга покупок): ${formatConfirmedMoney(netVat)}.`
|
||||
|
||||
Reference in New Issue
Block a user