File size: 1,623 Bytes
ede4a2e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
56
57
58
59
from datetime import datetime
from decimal import Decimal

from pydantic import BaseModel, ConfigDict, Field

from app.core.enums import DecisionAction, RuleType


class RuleBase(BaseModel):
    tenant_id: str = "default"
    product_type: str = "TWO_WHEELER_LOAN"
    dealer_id: str | None = None
    rule_code: str = Field(min_length=2, max_length=100)
    rule_name: str = Field(min_length=2, max_length=255)
    rule_type: RuleType
    field_name: str = Field(min_length=1, max_length=100)
    operator: str = Field(min_length=1, max_length=20)
    field_value: str = Field(min_length=1, max_length=255)
    score_value: Decimal | None = None
    score_component: str | None = None
    decision_action: DecisionAction | None = None
    reason_code: str = Field(min_length=2, max_length=100)
    priority: int = 100
    is_active: bool = True


class RuleCreate(RuleBase):
    created_by: str | None = "system"


class RuleUpdate(BaseModel):
    rule_name: str | None = None
    field_name: str | None = None
    operator: str | None = None
    field_value: str | None = None
    score_value: Decimal | None = None
    score_component: str | None = None
    decision_action: DecisionAction | None = None
    reason_code: str | None = None
    priority: int | None = None
    is_active: bool | None = None
    actor: str | None = "system"


class RuleStatusUpdate(BaseModel):
    is_active: bool
    actor: str | None = "system"


class RuleResponse(RuleBase):
    id: int
    version: int
    created_by: str | None
    created_at: datetime
    updated_at: datetime

    model_config = ConfigDict(from_attributes=True)