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 {}