from typing import Any


def build_features(payload: dict[str, Any]) -> dict[str, float]:
    dispatch_weight = float(payload.get("dispatch_weight", 0.0) or 0.0)
    received_weight = float(payload.get("received_weight", 0.0) or 0.0)
    expected_duration = float(payload.get("expected_duration_minutes", 0.0) or 0.0)
    actual_duration = float(payload.get("actual_duration_minutes", 0.0) or 0.0)
    deviation_distance = float(payload.get("deviation_distance_km", 0.0) or 0.0)
    unexpected_stop = float(payload.get("unexpected_stop_minutes", 0.0) or 0.0)
    face_verified = payload.get("face_verified")

    weight_delta = max(dispatch_weight - received_weight, 0.0)
    duration_delta = max(actual_duration - expected_duration, 0.0)
    face_mismatch = 0.0 if face_verified in (True, None) else 1.0

    return {
        "dispatch_weight": dispatch_weight,
        "received_weight": received_weight,
        "weight_delta": weight_delta,
        "expected_duration_minutes": expected_duration,
        "actual_duration_minutes": actual_duration,
        "duration_delta": duration_delta,
        "deviation_distance_km": deviation_distance,
        "unexpected_stop_minutes": unexpected_stop,
        "face_mismatch": face_mismatch,
    }
