142 lines
6.4 KiB
TypeScript
142 lines
6.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import { runAddressDecomposeStage } from "../src/services/address_runtime/decomposeStage";
|
||
|
||
describe("address follow-up temporal regressions", () => {
|
||
it("replaces VAT month-only follow-up with the previous follow-up year", () => {
|
||
const result = runAddressDecomposeStage("а на март", {
|
||
previous_intent: "vat_payable_confirmed_as_of_date",
|
||
previous_filters: {
|
||
period_from: "2019-05-01",
|
||
period_to: "2019-05-31",
|
||
as_of_date: "2019-05-31"
|
||
},
|
||
previous_anchor_type: "unknown",
|
||
previous_anchor_value: null
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("vat_payable_confirmed_as_of_date");
|
||
expect(result?.filters.extracted_filters.period_from).toBe("2019-03-01");
|
||
expect(result?.filters.extracted_filters.period_to).toBe("2019-03-31");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2019-03-31");
|
||
expect(result?.baseReasons).toContain("period_derived_from_followup_context_year");
|
||
});
|
||
|
||
it("replaces VAT month-only follow-up with a later month from the same inherited year", () => {
|
||
const result = runAddressDecomposeStage("на сентябрь", {
|
||
previous_intent: "vat_payable_confirmed_as_of_date",
|
||
previous_filters: {
|
||
period_from: "2019-05-01",
|
||
period_to: "2019-05-31",
|
||
as_of_date: "2019-05-31"
|
||
},
|
||
previous_anchor_type: "unknown",
|
||
previous_anchor_value: null
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("vat_payable_confirmed_as_of_date");
|
||
expect(result?.filters.extracted_filters.period_from).toBe("2019-09-01");
|
||
expect(result?.filters.extracted_filters.period_to).toBe("2019-09-30");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2019-09-30");
|
||
expect(result?.baseReasons).toContain("period_derived_from_followup_context_year");
|
||
});
|
||
|
||
it("inherits the previous VAT period for 'за этот период' follow-up", () => {
|
||
const result = runAddressDecomposeStage("какой НДС мы должны примерно заплатить за этот период", {
|
||
previous_intent: "vat_payable_confirmed_as_of_date",
|
||
previous_filters: {
|
||
period_from: "2017-05-01",
|
||
period_to: "2017-05-31",
|
||
as_of_date: "2017-05-31"
|
||
},
|
||
previous_anchor_type: "unknown",
|
||
previous_anchor_value: null
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("vat_liability_confirmed_for_tax_period");
|
||
expect(result?.filters.extracted_filters.period_from).toBe("2017-05-01");
|
||
expect(result?.filters.extracted_filters.period_to).toBe("2017-05-31");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2017-05-31");
|
||
expect(result?.baseReasons).toContain("period_from_from_followup_context");
|
||
});
|
||
|
||
it("keeps inherited period when a follow-up retargets from receivables into VAT for the same period", () => {
|
||
const result = runAddressDecomposeStage("а какой НДС мы должны примерно заплатить за этот период", {
|
||
previous_intent: "receivables_confirmed_as_of_date",
|
||
target_intent: "vat_payable_confirmed_as_of_date",
|
||
previous_filters: {
|
||
period_from: "2017-05-01",
|
||
period_to: "2017-05-31",
|
||
as_of_date: "2017-05-31"
|
||
},
|
||
previous_anchor_type: "organization",
|
||
previous_anchor_value: 'ООО "Альтернатива Плюс"'
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("vat_liability_confirmed_for_tax_period");
|
||
expect(result?.filters.extracted_filters.period_from).toBe("2017-05-01");
|
||
expect(result?.filters.extracted_filters.period_to).toBe("2017-05-31");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2017-05-31");
|
||
});
|
||
|
||
it("uses follow-up target intent for short debt mirror like 'а нам?'", () => {
|
||
const result = runAddressDecomposeStage("а нам?", {
|
||
previous_intent: "payables_confirmed_as_of_date",
|
||
target_intent: "receivables_confirmed_as_of_date",
|
||
previous_filters: {
|
||
as_of_date: "2026-04-16"
|
||
},
|
||
previous_anchor_type: "organization",
|
||
previous_anchor_value: 'ООО "Альтернатива Плюс"'
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("receivables_confirmed_as_of_date");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2026-04-16");
|
||
});
|
||
|
||
it("keeps same-date inventory pivot anchored to the previous VAT date", () => {
|
||
const result = runAddressDecomposeStage("какие остатки по складу на эту же дату", {
|
||
previous_intent: "vat_payable_confirmed_as_of_date",
|
||
previous_filters: {
|
||
period_from: "2019-09-01",
|
||
period_to: "2019-09-30",
|
||
as_of_date: "2019-09-30"
|
||
},
|
||
previous_anchor_type: "unknown",
|
||
previous_anchor_value: null
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("inventory_on_hand_as_of_date");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2019-09-30");
|
||
expect(result?.filters.extracted_filters.warehouse).toBeUndefined();
|
||
expect(result?.baseReasons).toContain("as_of_date_from_followup_context");
|
||
});
|
||
|
||
it("retargets inventory purchase-date VAT bridge into confirmed VAT period with inherited purchase month", () => {
|
||
const result = runAddressDecomposeStage("ндс можешь прикинуть на дату покупки рабочей станции?", {
|
||
previous_intent: "inventory_purchase_provenance_for_item",
|
||
target_intent: "vat_liability_confirmed_for_tax_period",
|
||
previous_filters: {
|
||
item: "Рабочая станция универсального специалиста",
|
||
organization: 'ООО "Альтернатива Плюс"',
|
||
period_from: "2015-02-01",
|
||
period_to: "2015-02-28",
|
||
as_of_date: "2016-03-31"
|
||
},
|
||
previous_anchor_type: "item",
|
||
previous_anchor_value: "Рабочая станция универсального специалиста"
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("vat_liability_confirmed_for_tax_period");
|
||
expect(result?.filters.extracted_filters.period_from).toBe("2015-02-01");
|
||
expect(result?.filters.extracted_filters.period_to).toBe("2015-02-28");
|
||
expect(result?.baseReasons).toContain("period_from_followup_context");
|
||
});
|
||
});
|