NODEDC_1C/llm_normalizer/backend/tests/addressCounterpartyUtf8Regr...

56 lines
2.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { resolveCounterpartyAddressIntent } from "../src/services/addressCounterpartyIntentSignals";
import { resolveAddressIntent } from "../src/services/addressIntentResolver";
const utf8Deps = {
hasAny: (text: string, hints: readonly string[]) => hints.some((hint) => text.includes(hint)),
openItemsHints: ["хвост", "долг", "open items"],
openContractsHints: ["договор", "контракт", "open contracts"],
documentsByCounterpartyHints: ["документы по", "documents by counterparty"],
bankOperationsByCounterpartyHints: ["банк", "выписка", "bank operations by counterparty"],
documentsByContractHints: ["документы по договору", "documents by contract"],
hasCounterpartyDebtLongevitySignal: () => false,
hasInventoryAgingSignal: () => false,
hasInventoryProvenanceSignalV2: () => false,
hasInventoryPurchaseDocumentsSignalV2: () => false,
hasInventorySaleTraceSignalV2: () => false,
hasAccountNumberAnchor: (text: string) => /(?:60|62|76)/.test(text),
hasCompactAccountCodeToken: () => false,
hasPeriodCoverageProfileSignal: () => false,
hasPartyAnchorMention: () => false,
hasContractAnchorSignal: (text: string) => text.includes("договор"),
hasAccountBalanceSignal: () => false,
hasDocumentTypeAndAccountSectionProfileSignal: () => false,
hasCounterpartyPopulationAndRolesSignal: () => false,
hasCounterpartyActivityLifecycleSignal: () => false,
hasContractUsageOverviewSignal: () => false,
hasOpenContractsListSignal: () => false,
hasCustomerRevenueAndPaymentsSignal: () => false,
hasSupplierPayoutsProfileSignal: () => false,
hasContractUsageAndValueSignal: () => false,
hasContractListByCounterpartySignal: () => false,
hasBankOperationSignal: (text: string) => text.includes("банк"),
hasDocumentSignal: (text: string) => text.includes("док"),
hasLooseByAnchorMention: () => false,
hasHeuristicCounterpartyAnchor: () => false,
hasCounterpartyShipmentItemFlowSignal: (text: string) => text.includes("отгружал"),
hasImplicitCounterpartyAnchorAroundDocs: () => false,
hasGenericAddressLookupSignal: (text: string) => text.includes("покажи")
};
describe("address counterparty utf8 regression", () => {
it("classifies direct documents-by-counterparty wording with a loose human anchor", () => {
const result = resolveCounterpartyAddressIntent("покажи все документы по чепурнову", utf8Deps);
expect(result?.intent).toBe("list_documents_by_counterparty");
expect(result?.reasons).toContain("documents_by_counterparty_signal_detected");
});
it("keeps the main resolver in the supported contour for direct documents-by-counterparty wording", () => {
const result = resolveAddressIntent("покажи все документы по чепурнову");
expect(result.intent).toBe("list_documents_by_counterparty");
});
});