File size: 1,798 Bytes
0c591a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""
Strategic confidence calculation service.
Computes confidence scores based on analysis quality and data coverage.
"""


def calculate_confidence(score: float, sources_available: list, sources_failed: list) -> dict:
    """
    Calculate strategic confidence based on score and data coverage.

    Args:
        score: Quality score from critic (0-10)
        sources_available: List of successfully fetched data sources
        sources_failed: List of failed data sources

    Returns:
        Dictionary with:
        - confidence: Overall confidence percentage (0-100)
        - readiness: Human-readable readiness label
        - level: Confidence level (high/medium/low)
        - score_contribution: Points from quality score
        - data_contribution: Points from data coverage
    """
    # Base confidence from score (0-10 -> 0-60%)
    score_confidence = (score / 10) * 60 if isinstance(score, (int, float)) else 30

    # Data coverage bonus (0-40%)
    total_sources = len(sources_available) + len(sources_failed)
    if total_sources > 0:
        coverage = len(sources_available) / total_sources
        data_confidence = coverage * 40
    else:
        data_confidence = 20

    total_confidence = score_confidence + data_confidence

    # Determine readiness label
    if total_confidence >= 75 and len(sources_failed) == 0:
        readiness = "Board-ready"
        level = "high"
    elif total_confidence >= 60:
        readiness = "Review recommended"
        level = "medium"
    else:
        readiness = "Exploratory"
        level = "low"

    return {
        "confidence": round(total_confidence),
        "readiness": readiness,
        "level": level,
        "score_contribution": round(score_confidence),
        "data_contribution": round(data_confidence)
    }