43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
"""Risk prediction use-case orchestration."""
|
|
|
|
from app.domain.risk_engine import BaselineRiskEngine, IndicatorValue
|
|
from app.schemas.risk_prediction import (
|
|
ModelInfo,
|
|
RiskAssessmentRequest,
|
|
RiskAssessmentResult,
|
|
RiskFactorResult,
|
|
)
|
|
|
|
|
|
class RiskPredictionService:
|
|
_engine = BaselineRiskEngine()
|
|
|
|
@classmethod
|
|
def model_info(cls) -> ModelInfo:
|
|
return ModelInfo(model_version=cls._engine.model_version)
|
|
|
|
@classmethod
|
|
def preview(cls, request: RiskAssessmentRequest) -> RiskAssessmentResult:
|
|
score = cls._engine.predict(
|
|
[
|
|
IndicatorValue(name=item.name, value=item.value, weight=item.weight)
|
|
for item in request.indicators
|
|
]
|
|
)
|
|
return RiskAssessmentResult(
|
|
subject_id=request.subject_id,
|
|
score=score.score,
|
|
level=score.level,
|
|
model_version=cls._engine.model_version,
|
|
factors=[
|
|
RiskFactorResult(
|
|
name=item.name,
|
|
value=item.value,
|
|
weight=item.weight,
|
|
contribution=item.contribution,
|
|
)
|
|
for item in score.factors
|
|
],
|
|
)
|
|
|