Доказать полезность margin-agent через честный boundary replay
This commit is contained in:
+26
@@ -92,6 +92,12 @@ function asksForInventoryMarginBasis(userMessage) {
|
||||
const text = String(userMessage ?? "").toLowerCase();
|
||||
return (/(?:из\s+чего|как\s+(?:ты\s+)?(?:это\s+)?посчитал|какие\s+поля|чего\s+не\s+хватает|не\s+хватает|точн(?:ой|ая|ую)?\s+марж|basis|source|fields|calculated|missing)/iu.test(text) && /(?:марж|прибыл|себестоимост|выручк|margin|profit|cogs|revenue)/iu.test(text));
|
||||
}
|
||||
function asksInventoryMarginFromPaymentOrBank(userMessage) {
|
||||
const text = String(userMessage ?? "").toLowerCase();
|
||||
return (/(?:марж|прибыл|рентаб|profit|margin)/iu.test(text) &&
|
||||
/(?:товар|номенклатур|inventory|item|sku)/iu.test(text) &&
|
||||
/(?:банк|банковск|выписк|плат[её]ж|оплат|payment|bank|statement)/iu.test(text));
|
||||
}
|
||||
function inventoryRowItemLabel(row, deps) {
|
||||
return deps.summarizeInventoryTraceRows([row]).item;
|
||||
}
|
||||
@@ -471,6 +477,26 @@ function composeInventoryReply(intent, rows, options, deps) {
|
||||
const totalSpread = totalRevenue - totalCostProxy;
|
||||
const topMarginEntry = highMargin[0] ?? null;
|
||||
const marginBasisRequested = asksForInventoryMarginBasis(options.userMessage);
|
||||
const paymentOrBankFalseSourceRequested = asksInventoryMarginFromPaymentOrBank(options.userMessage);
|
||||
if (paymentOrBankFalseSourceRequested) {
|
||||
const lines = [
|
||||
"По оплатам и банку такой показатель нельзя честно подтвердить: платежи показывают денежный поток и факт оплаты, а не связь реализации с себестоимостью по номенклатуре."
|
||||
];
|
||||
(0, inventoryReplyPresentation_1.appendInventoryBulletSection)(lines, "Корректная база для маржинальности:", [
|
||||
"выручка реализации по номенклатуре;",
|
||||
"себестоимостная база реализации по той же номенклатуре;",
|
||||
"валовая разница и процент валовой маржи."
|
||||
]);
|
||||
(0, inventoryReplyPresentation_1.appendInventoryBulletSection)(lines, "Что можно сделать дальше:", [
|
||||
`посчитать управленческий рейтинг по выручке и себестоимостной базе за период ${periodLabel};`,
|
||||
"отдельно сверить оплаты и банк как денежный поток, но не использовать их как расчетную базу."
|
||||
]);
|
||||
(0, inventoryReplyPresentation_1.appendInventoryBulletSection)(lines, "Граница ответа:", [
|
||||
"оплаты могут помочь сверить поступление денег, но сами по себе не подтверждают валовую прибыль по товарам;",
|
||||
"строгий бухгалтерский расчет требует проводок реализации и себестоимости, а не только банковских движений."
|
||||
]);
|
||||
return (0, replyContracts_1.buildFactualSummaryReply)(lines, (0, replyContracts_1.buildConfirmedBalanceSemantics)("medium", false));
|
||||
}
|
||||
if (confirmedEntries.length === 0) {
|
||||
const costBaseRowsRequested = asksForInventoryCostBaseRows(options.userMessage);
|
||||
const lines = [
|
||||
|
||||
Reference in New Issue
Block a user