86 lines
4.2 KiB
TypeScript
86 lines
4.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import { resolveAddressIntent } from "../src/services/addressIntentResolver";
|
||
|
||
describe("addressIntentResolver regression bridges", () => {
|
||
it("detects colloquial VAT liability for a month period", () => {
|
||
const result = resolveAddressIntent("прикинь какой ндс нам надо заплатить на февраль 2017");
|
||
|
||
expect(result.intent).toBe("vat_liability_confirmed_for_tax_period");
|
||
});
|
||
|
||
it("detects payables snapshot wording in plain human form", () => {
|
||
const result = resolveAddressIntent("мы должны комуто денег на сегодня?");
|
||
|
||
expect(result.intent).toBe("payables_confirmed_as_of_date");
|
||
});
|
||
|
||
it("detects receivables snapshot wording through light current-turn typo noise", () => {
|
||
const result = resolveAddressIntent(
|
||
"\u043a\u0442\u043e \u043d\u0430\u043c\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0435\u043d\u0435\u0433 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f"
|
||
);
|
||
|
||
expect(result.intent).toBe("receivables_confirmed_as_of_date");
|
||
expect(result.reasons).toContain("current_turn_noise_normalized");
|
||
});
|
||
|
||
it("detects top customer all-time revenue wording", () => {
|
||
const result = resolveAddressIntent("кто у нас самый доходный клиент за все время");
|
||
|
||
expect(result.intent).toBe("customer_revenue_and_payments");
|
||
});
|
||
|
||
it("defers top-year company revenue wording to business overview discovery", () => {
|
||
const result = resolveAddressIntent("какой у нас самый доходный год");
|
||
|
||
expect(result.intent).toBe("unknown");
|
||
expect(result.reasons).toContain("unicode_business_overview_earnings_deferred_to_discovery");
|
||
});
|
||
|
||
it("defers paired receivables and payables wording to business overview instead of one debt side", () => {
|
||
const result = resolveAddressIntent(
|
||
"\u043f\u043e\u043a\u0430\u0436\u0438 \u0441\u0440\u0435\u0437 \u0434\u0435\u0431\u0438\u0442\u043e\u0440\u043a\u0438 \u0438 \u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0440\u043a\u0438 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438"
|
||
);
|
||
|
||
expect(result.intent).toBe("unknown");
|
||
expect(result.reasons).toContain("unicode_business_overview_debt_position_deferred_to_discovery");
|
||
});
|
||
|
||
it("detects specific counterparty turnover wording as revenue profile", () => {
|
||
const result = resolveAddressIntent(
|
||
"\u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u0431\u044b\u043b \u0441\u0432\u043a"
|
||
);
|
||
|
||
expect(result.intent).toBe("customer_revenue_and_payments");
|
||
expect(result.reasons).toContain("specific_counterparty_revenue_bridge_signal_detected");
|
||
});
|
||
|
||
it("keeps documents by counterparty wording out of revenue bridge", () => {
|
||
const result = resolveAddressIntent(
|
||
"\u043f\u043e\u043a\u0430\u0436\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u0441\u0432\u043a"
|
||
);
|
||
|
||
expect(result.intent).toBe("list_documents_by_counterparty");
|
||
});
|
||
|
||
it("does not treat by-these-data wording as a loose counterparty anchor", () => {
|
||
const result = resolveAddressIntent(
|
||
"\u043f\u043e\u043a\u0430\u0436\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c"
|
||
);
|
||
|
||
expect(result.intent).not.toBe("list_documents_by_counterparty");
|
||
expect(result.reasons).not.toContain("generic_lookup_with_loose_anchor_fallback");
|
||
expect(result.reasons).not.toContain("unicode_documents_by_counterparty_bridge_signal_detected");
|
||
});
|
||
|
||
it("does not collapse very old stock request into generic inventory snapshot", () => {
|
||
const result = resolveAddressIntent("Есть ли остатки товара, которые закупались очень давно");
|
||
|
||
expect(result.intent).toBe("inventory_aging_by_purchase_date");
|
||
});
|
||
it("detects bare historical inventory root with explicit month-year", () => {
|
||
const result = resolveAddressIntent("остатки на март 2016");
|
||
|
||
expect(result.intent).toBe("inventory_on_hand_as_of_date");
|
||
});
|
||
});
|