import { describe, expect, it } from "vitest"; import { runAddressDecomposeStage } from "../src/services/address_runtime/decomposeStage"; describe("inventory root frame follow-up", () => { it("restores the root inventory frame for a temporal patch after drilldown", () => { const result = runAddressDecomposeStage("а на май 2020", { previous_intent: "inventory_purchase_provenance_for_item", previous_filters: { item: "Кресло орион", organization: "альтернатива", counterparty: "альтернатива", as_of_date: "2020-03-31", period_from: "2020-03-01", period_to: "2020-03-31" }, previous_anchor_type: "item", previous_anchor_value: "Кресло орион", root_intent: "inventory_on_hand_as_of_date", root_filters: { organization: "альтернатива", counterparty: "альтернатива", as_of_date: "2020-03-31", period_from: "2020-03-01", period_to: "2020-03-31" }, root_anchor_type: "organization", root_anchor_value: "ООО \\Альтернатива Плюс\\", current_frame_kind: "inventory_drilldown" }); expect(result).not.toBeNull(); expect(result?.intent.intent).toBe("inventory_on_hand_as_of_date"); expect(result?.baseReasons).toContain("intent_restored_to_inventory_root_frame"); expect(result?.filters.extracted_filters.item).toBeUndefined(); expect(result?.filters.extracted_filters.organization).toBe("альтернатива"); expect(result?.filters.extracted_filters.counterparty).toBe("альтернатива"); expect(result?.filters.extracted_filters.period_from).toBe("2020-05-01"); expect(result?.filters.extracted_filters.period_to).toBe("2020-05-31"); expect(result?.filters.extracted_filters.as_of_date).toBe("2020-05-31"); }); it("derives a relative month from the root frame year", () => { const result = runAddressDecomposeStage("а на май этого же года", { previous_intent: "inventory_purchase_provenance_for_item", previous_filters: { item: "Кресло орион", organization: "альтернатива", counterparty: "альтернатива", as_of_date: "2020-03-31", period_from: "2020-03-01", period_to: "2020-03-31" }, previous_anchor_type: "item", previous_anchor_value: "Кресло орион", root_intent: "inventory_on_hand_as_of_date", root_filters: { organization: "альтернатива", counterparty: "альтернатива", as_of_date: "2020-03-31", period_from: "2020-03-01", period_to: "2020-03-31" }, root_anchor_type: "organization", root_anchor_value: "ООО \\Альтернатива Плюс\\", current_frame_kind: "inventory_drilldown" }); expect(result).not.toBeNull(); expect(result?.intent.intent).toBe("inventory_on_hand_as_of_date"); expect(result?.filters.extracted_filters.period_from).toBe("2020-05-01"); expect(result?.filters.extracted_filters.period_to).toBe("2020-05-31"); expect(result?.filters.extracted_filters.as_of_date).toBe("2020-05-31"); expect(result?.baseReasons).toContain("period_derived_from_inventory_root_frame_year"); }); });