NODEDC_1C/llm_normalizer/backend/tests/addressFollowupTemporalRegr...

120 lines
5.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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_payable_confirmed_as_of_date");
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_payable_confirmed_as_of_date");
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");
});
});