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)