Open-World: уточнить незакрытые проверки бизнес-обзора

This commit is contained in:
2026-05-04 10:50:18 +03:00
parent 3a28709ce4
commit 34e7a135ee
6 changed files with 138 additions and 7 deletions
@@ -321,6 +321,56 @@ function metadataRouteFamilyLabelRu(routeFamily) {
}
return null;
}
function businessOverviewInventoryUnknownLabel(overview) {
if (overview.inventory_staleness_risk_proxy) {
return "резервы/списания/ликвидационная стоимость склада";
}
if (overview.inventory_turnover_proxy) {
return "FIFO-оборачиваемость/подтвержденная складская ликвидность";
}
if (overview.inventory_position) {
return "полноценная складская ликвидность";
}
return "склад";
}
function businessOverviewNextStepLine(overview) {
const missing = new Set(overview.missing_signal_families);
const checks = [];
if (missing.has("profit_or_clean_margin")) {
checks.push("чистую прибыль через себестоимость продаж, расходы и закрытие периода");
}
else if (missing.has("profit_or_margin")) {
checks.push("прибыль/маржу по проверенному финрезультату");
}
if (missing.has("tax_position")) {
checks.push("НДС/налоговую позицию за явный период");
}
if (missing.has("debt_due_date_aging_quality")) {
checks.push("договорные сроки оплаты и due-date aging");
}
else if (missing.has("debt_open_settlement_quality")) {
checks.push("качество открытых расчетов");
}
else if (missing.has("debt_position")) {
checks.push("долговой срез на дату");
}
if (missing.has("inventory_reserve_liquidation_quality")) {
checks.push("резервы, списания, неликвидность и ликвидационную стоимость склада");
}
else if (missing.has("inventory_liquidity_quality")) {
checks.push("FIFO-оборачиваемость и подтвержденную складскую ликвидность");
}
else if (missing.has("inventory_turnover_quality")) {
checks.push("скорость продаж и оборачиваемость склада");
}
else if (missing.has("inventory_position")) {
checks.push("складской остаток на дату");
}
const target = checks.length > 0
? checks.join("; ")
: "оставшиеся непроверенные области по выбранному контуру";
return `Следующий шаг для полного бизнес-аудита: отдельно проверить ${target}, не смешивая эти будущие проверки с уже подтвержденным обзором.`;
}
function headlineFor(mode, pilot) {
const askedMonthlyBreakdown = pilot.derived_bidirectional_value_flow?.aggregation_axis === "month" ||
pilot.derived_value_flow?.aggregation_axis === "month";
@@ -378,7 +428,7 @@ function headlineFor(mode, pilot) {
unknownFamilies.push("долговой срез");
}
unknownFamilies.push(overview.debt_open_settlement_quality ? "due-date просрочка" : "качество открытых расчетов");
unknownFamilies.push(overview.inventory_position ? "полноценная складская ликвидность" : "склад");
unknownFamilies.push(businessOverviewInventoryUnknownLabel(overview));
return `По данным 1С собран ограниченный бизнес-обзор: ${families.join(", ")} подтверждены найденными строками; ${unknownFamilies.join(", ")} остаются отдельными непроверенными областями.`;
}
if (isBusinessOverviewPilot(pilot) && mode === "checked_sources_only") {
@@ -521,7 +571,9 @@ function nextStepFor(mode, pilot) {
return "Следующий шаг - связать inventory route-template с exact inventory runtime и затем проверить live-прогоном.";
}
if (mode === "confirmed_with_bounded_inference" && isBusinessOverviewPilot(pilot)) {
return "Если нужен уже управленческий вывод, следующим шагом стоит отдельно проверить прибыль/маржу, долги, НДС и складскую ликвидность, а затем собрать полный бизнес-аудит.";
return pilot.derived_business_overview
? businessOverviewNextStepLine(pilot.derived_business_overview)
: "Если нужен уже управленческий вывод, следующим шагом стоит отдельно проверить прибыль/маржу, долги, НДС и складскую ликвидность, а затем собрать полный бизнес-аудит.";
}
if (mode === "confirmed_with_bounded_inference" && pilot.derived_metadata_surface) {
const surface = pilot.derived_metadata_surface;