NODEDC_1C/llm_normalizer/backend/tests/addressVatConfirmedRoute.te...

91 lines
5.3 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 { resolveAddressIntent } from "../src/services/addressIntentResolver";
import { extractAddressFilters } from "../src/services/addressFilterExtractor";
import { buildAddressRecipePlan, selectAddressRecipe } from "../src/services/addressRecipeCatalog";
import { resolveAddressCapabilityRouteDecision } from "../src/services/addressCapabilityPolicy";
import { evaluateAddressRouteExpectation } from "../src/services/addressRouteExpectations";
import { AddressQueryService } from "../src/services/addressQueryService";
describe("vat payable confirmed as-of route", () => {
it("routes VAT payable question into exact confirmed intent", () => {
const result = resolveAddressIntent("сколько НДС к уплате на март 2020");
expect(result.intent).toBe("vat_liability_confirmed_for_tax_period");
expect(
result.reasons.includes("vat_liability_confirmed_tax_period_signal_detected") ||
result.reasons.includes("vat_liability_colloquial_bridge_signal_detected")
).toBe(true);
});
it("treats colloquial 'сгрузить' wording as confirmed VAT payable intent", () => {
const result = resolveAddressIntent("какой НДС мы должны сгрузить на март 2020");
expect(result.intent).toBe("vat_liability_confirmed_for_tax_period");
expect(result.reasons).toContain("vat_liability_colloquial_bridge_signal_detected");
});
it("treats colloquial VAT wording with month in prepositional case as confirmed intent", () => {
const result = resolveAddressIntent("Какой НДС необходимо сгрузить в марте 2020 года?");
expect(result.intent).toBe("vat_liability_confirmed_for_tax_period");
expect(result.reasons).toContain("vat_liability_colloquial_bridge_signal_detected");
});
it("keeps VAT period-inspection wording out of inventory snapshot arbitration", () => {
const result = resolveAddressIntent(
"Что с НДС за 2020 год по Альтернативе Плюс: какая позиция видна, на чем она основана и чего не хватает для налогового вывода?"
);
expect(result.intent).toBe("vat_liability_confirmed_for_tax_period");
expect(result.reasons).toContain("vat_period_inspection_bridge_signal_detected");
});
it("keeps VAT forecast intent when explicit forecast wording is used", () => {
const result = resolveAddressIntent("мож прикинусь плиз скока ндс надо заплатить на 15 марта 2020 года");
expect(result.intent).toBe("vat_payable_forecast");
expect(result.reasons).toContain("forecast_tax_signal_detected");
});
it("derives as_of_date for confirmed VAT route from period boundary", () => {
const extracted = extractAddressFilters("сколько НДС к уплате на март 2020", "vat_payable_confirmed_as_of_date");
expect(extracted.extracted_filters.period_from).toBe("2020-03-01");
expect(extracted.extracted_filters.period_to).toBe("2020-03-31");
expect(extracted.extracted_filters.as_of_date).toBe("2020-03-31");
});
it("selects confirmed VAT recipe and builds balance query", () => {
const filters = extractAddressFilters("сколько НДС к уплате на март 2020", "vat_payable_confirmed_as_of_date").extracted_filters;
const selected = selectAddressRecipe("vat_payable_confirmed_as_of_date", filters);
expect(selected.selected_recipe?.recipe_id).toBe("address_vat_payable_confirmed_as_of_date_v1");
const plan = buildAddressRecipePlan(selected.selected_recipe!, filters);
expect(plan.query).toContain("РегистрБухгалтерии.Хозрасчетный.Остатки");
expect(plan.query).toContain("СуммаРазвернутыйОстатокКт");
expect(plan.query).toContain("Остатки.Счет");
expect(plan.query).toContain("68.02");
});
it("exposes compute exact capability and route expectation for confirmed VAT route", () => {
const capability = resolveAddressCapabilityRouteDecision("vat_payable_confirmed_as_of_date");
expect(capability.capability_id).toBe("confirmed_vat_payable_as_of_date");
expect(capability.capability_layer).toBe("compute");
expect(capability.capability_route_mode).toBe("exact");
const expectation = evaluateAddressRouteExpectation({
intent: "vat_payable_confirmed_as_of_date",
selectedRecipe: "address_vat_payable_confirmed_as_of_date_v1",
requestedResultMode: "confirmed_balance",
resultMode: "confirmed_balance"
});
expect(expectation.status).toBe("matched");
});
it("uses exact VAT route in runtime for monthly as-of query", async () => {
const service = new AddressQueryService();
const result = await service.tryHandle("сколько НДС к уплате на март 2020");
expect(result?.handled).toBe(true);
expect(result?.debug.detected_intent).toBe("vat_liability_confirmed_for_tax_period");
expect(result?.debug.selected_recipe).toBe("address_vat_liability_confirmed_tax_period_v1");
expect(result?.debug.requested_result_mode).toBe("confirmed_balance");
expect(result?.debug.route_expectation_status).toBe("matched");
expect(result?.debug.limited_reason_category).not.toBe("unsupported");
}, 15000);
});