File size: 1,067 Bytes
7ff7119 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | """drop_business_normal_node — semantic cross-check against extracted_data.
Filters out the 6 NORMAL business patterns (fulfillment ≤14 days, payment due
0–120 days, standard VAT, subjective high-price, missing PO reference, delivery
note without amount).
Input:
{"llm_risks_raw": list[Risk], "extracted": dict, ...}
Output:
{"llm_risks_raw": list[Risk]} # filtered
"""
from __future__ import annotations
from nodes.risk.filter_llm_risks_node import _dict_to_risk, _risk_to_dict
from validation.llm_risk_filters import drop_business_normal_risks
async def drop_business_normal_node(state: dict) -> dict:
"""Semantic filter: cross-check against ``extracted_data``."""
raw = state.get("llm_risks_raw") or []
extracted = state.get("extracted") or {}
if not raw:
return state
raw_dicts = [_risk_to_dict(r) for r in raw]
filtered_dicts = drop_business_normal_risks(raw_dicts, extracted)
filtered = [_dict_to_risk(d) for d in filtered_dicts]
return {
**state,
"llm_risks_raw": filtered,
}
|