91 lines
5.3 KiB
TypeScript
91 lines
5.3 KiB
TypeScript
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);
|
||
});
|