File size: 960 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 | """evidence_score_node — ISA 500 evidence score per-doc.
Separate entry point (NOT Send-fan-out via the domain checks) because the
score depends on doc_type and produces a per-document info-level risk.
"""
from __future__ import annotations
from domain_checks import EvidenceScoreCheck
from graph.states.pipeline_state import PipelineState, ProcessedDocument
async def evidence_score_node(state: PipelineState) -> dict:
documents: list[ProcessedDocument] = state.get("documents") or []
check = EvidenceScoreCheck()
risks: list = []
for doc in documents:
if doc.classification is None:
continue
doc_risks = check.apply(
extracted=doc.extracted.raw if doc.extracted else {},
doc_type=doc.classification.doc_type,
)
for r in doc_risks:
r.affected_document = doc.ingested.file_name
risks.extend(doc_risks)
return {"risks": risks} if risks else {}
|