Этап 4 добивка двух хвостов: settlement polarity и чистое разделение month_close / RBP в live acceptance

This commit is contained in:
2026-03-29 16:30:10 +03:00
parent f74e7b697a
commit c82ebd70b7
12 changed files with 705 additions and 19 deletions
@@ -26,6 +26,8 @@ export interface TemporalWindow {
export interface ClaimBoundAnchorAudit {
claim_type: ClaimType;
settlement_role?: "supplier" | "customer" | "mixed" | "unknown";
settlement_role_resolution_reason?: string[];
polarity_resolution_status?: "resolved_supplier" | "resolved_customer" | "mixed" | "unknown" | "not_applicable";
required_anchors: string[];
resolved_anchors: Record<string, string[]>;
missing_anchors: string[];
@@ -431,12 +433,29 @@ export function resolveClaimBoundAnchors(input: {
if (!allowedContextWindow && input.primaryPeriod) {
reasonCodes.push("controlled_temporal_expansion_window_unavailable");
}
const settlementRole = resolveSettlementRole({
const settlementRoleRaw = resolveSettlementRole({
claimType,
counterpartyScope: resolvedAnchors.counterparty_scope ?? [],
accountPrefixes,
userMessage: input.userMessage
});
const settlementRole = typeof settlementRoleRaw === "string" ? settlementRoleRaw : undefined;
const settlementRoleReason: string[] =
claimType === "prove_settlement_closure_state" || claimType === "prove_advance_offset_state"
? settlementRole
? [`settlement_role_resolved_${settlementRole}`]
: ["no_supplier_customer_anchor"]
: [];
const polarityResolutionStatus =
claimType === "prove_settlement_closure_state" || claimType === "prove_advance_offset_state"
? settlementRole === "supplier"
? "resolved_supplier"
: settlementRole === "customer"
? "resolved_customer"
: settlementRole === "mixed"
? "mixed"
: "unknown"
: "not_applicable";
if (
(claimType === "prove_settlement_closure_state" || claimType === "prove_advance_offset_state") &&
(settlementRole === "mixed" || settlementRole === "unknown")
@@ -447,6 +466,8 @@ export function resolveClaimBoundAnchors(input: {
return {
claim_type: claimType,
settlement_role: settlementRole,
settlement_role_resolution_reason: settlementRoleReason,
polarity_resolution_status: polarityResolutionStatus,
required_anchors: requiredAnchors,
resolved_anchors: resolvedAnchors,
missing_anchors: missingAnchors,