115 lines
5.3 KiB
TypeScript
115 lines
5.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import { runAddressDecomposeStage } from "../src/services/address_runtime/decomposeStage";
|
||
|
||
describe("inventory root frame regressions", () => {
|
||
it("restores inventory root frame for restatement on the same period after foreign domain drift", () => {
|
||
const result = runAddressDecomposeStage(
|
||
"ладно ок. покажи мне еще раз позиции на складе на тот же период рассмотрения",
|
||
{
|
||
previous_intent: "customer_revenue_and_payments",
|
||
previous_filters: {
|
||
organization: "ООО \\Альтернатива Плюс\\"
|
||
},
|
||
previous_anchor_type: "organization",
|
||
previous_anchor_value: "ООО \\Альтернатива Плюс\\",
|
||
root_intent: "inventory_on_hand_as_of_date",
|
||
root_filters: {
|
||
organization: "ООО \\Альтернатива Плюс\\",
|
||
period_from: "2022-02-01",
|
||
period_to: "2022-02-28",
|
||
as_of_date: "2022-02-28"
|
||
},
|
||
root_anchor_type: "organization",
|
||
root_anchor_value: "ООО \\Альтернатива Плюс\\",
|
||
current_frame_kind: "generic"
|
||
}
|
||
);
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("inventory_on_hand_as_of_date");
|
||
expect(result?.intent.reasons).toContain("intent_restored_to_inventory_root_frame");
|
||
expect(result?.filters.extracted_filters.organization).toBe("ООО \\Альтернатива Плюс\\");
|
||
expect(result?.filters.extracted_filters.period_from).toBe("2022-02-01");
|
||
expect(result?.filters.extracted_filters.period_to).toBe("2022-02-28");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2022-02-28");
|
||
expect(result?.filters.warnings).toContain("period_from_from_followup_context");
|
||
expect(result?.filters.warnings).toContain("period_to_from_followup_context");
|
||
});
|
||
|
||
it("promotes selected-object provenance slang with 'где мы взяли это' into inventory provenance", () => {
|
||
const result = runAddressDecomposeStage(
|
||
'По выбранному объекту "Зеркало для инвалидов поворотное травмобезопасное": где мы взяли это говнище?',
|
||
{
|
||
previous_intent: "inventory_on_hand_as_of_date",
|
||
previous_filters: {
|
||
organization: "ООО \\Альтернатива Плюс\\",
|
||
warehouse: "Основной склад",
|
||
period_from: "2022-02-01",
|
||
period_to: "2022-02-28",
|
||
as_of_date: "2022-02-28"
|
||
},
|
||
previous_anchor_type: "unknown",
|
||
previous_anchor_value: null
|
||
}
|
||
);
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("inventory_purchase_provenance_for_item");
|
||
expect(result?.filters.extracted_filters.item).toBe("Зеркало для инвалидов поворотное травмобезопасное");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2022-02-28");
|
||
expect(
|
||
result?.baseReasons?.includes("intent_adjusted_to_inventory_followup_context") ||
|
||
result?.intent.reasons.includes("inventory_selected_object_provenance_signal_detected")
|
||
).toBe(true);
|
||
});
|
||
|
||
it("does not restore inventory root when the follow-up is an explicit receivables root query", () => {
|
||
const result = runAddressDecomposeStage("покажи кто нам должен денег на май 2017", {
|
||
previous_intent: "inventory_sale_trace_for_item",
|
||
previous_filters: {
|
||
item: "Четки Пост (84*117)",
|
||
as_of_date: "2020-05-31",
|
||
period_from: "2020-05-01",
|
||
period_to: "2020-05-31"
|
||
},
|
||
previous_anchor_type: "item",
|
||
previous_anchor_value: "Четки Пост (84*117)",
|
||
root_intent: "inventory_on_hand_as_of_date",
|
||
root_filters: {
|
||
period_from: "2020-05-01",
|
||
period_to: "2020-05-31",
|
||
as_of_date: "2020-05-31"
|
||
},
|
||
root_anchor_type: "unknown",
|
||
root_anchor_value: null,
|
||
current_frame_kind: "inventory_drilldown"
|
||
});
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("receivables_confirmed_as_of_date");
|
||
expect(result?.intent.reasons).not.toContain("intent_restored_to_inventory_root_frame");
|
||
expect(result?.filters.extracted_filters.as_of_date).toBe("2017-05-31");
|
||
});
|
||
|
||
it("keeps selected-object loose documents wording in the inventory document contour", () => {
|
||
const result = runAddressDecomposeStage(
|
||
'По выбранному объекту "Четки Пост (84*117)": меня четки интересуют покажи документы все по ним и все операции',
|
||
{
|
||
previous_intent: "inventory_on_hand_as_of_date",
|
||
previous_filters: {
|
||
as_of_date: "2020-05-31",
|
||
period_from: "2020-05-01",
|
||
period_to: "2020-05-31"
|
||
},
|
||
previous_anchor_type: "unknown",
|
||
previous_anchor_value: null
|
||
}
|
||
);
|
||
|
||
expect(result).not.toBeNull();
|
||
expect(result?.intent.intent).toBe("inventory_purchase_documents_for_item");
|
||
expect(result?.intent.intent).not.toBe("bank_operations_by_counterparty");
|
||
expect(result?.filters.extracted_filters.item).toBe("Четки Пост (84*117)");
|
||
});
|
||
});
|