--- name: rpa-validation description: "RPA 입력 항목 Validation 학습 스킬. ITSM 프로젝트 소스코드(models.py, routers/)에서 Pydantic 스키마를 파싱하여 모든 입력 항목의 validation 규칙(타입·필수·제약·enum)을 학습하고 DB에 저장한다. 다음 상황에서 반드시 사용: (1) 'validation 학습', 'API 스키마 학습', '입력 규칙 학습'; (2) 'Pydantic 모델 파싱', '소스 분석'; (3) RPA 봇 실행 전 입력 검증 규칙 갱신; (4) 새 라우터/모델 추가 후 재학습; (5) 다시 실행, 업데이트, 보완." --- # RPA Validation 학습 스킬 ITSM 프로젝트 소스코드를 직접 분석하여 모든 입력 항목의 validation 규칙을 학습한다. --- ## 학습 전략: 소스 기반 정적 분석 OpenAPI JSON 대신 **소스코드를 직접 파싱**한다. 이유: OpenAPI JSON은 일부 validator가 누락되고, 소스 파싱이 더 정확하다. ### 학습 대상 파일 ``` itsm/models.py ← Pydantic BaseModel (SRCreate, SRStatusUpdate, 등) itsm/routers/*.py ← 각 라우터에서 사용하는 스키마 매핑 ``` ### 파싱 방법 `POST /api/rpa/validations/learn` 호출 시 서버가: 1. `itsm/models.py` AST 파싱 2. `class XXXCreate(BaseModel)` / `class XXXUpdate(BaseModel)` 클래스 탐색 3. 각 클래스의 필드 분석: ```python # 분석 대상 패턴 class SRCreate(BaseModel): sr_type: SRType # Enum → allowed_values 추출 title: str # required str description: Optional[str] = None # optional priority: Priority = Priority.MEDIUM # enum + default server_id: Optional[int] = None # optional int inst_id: int # required int assigned_to: Optional[str] = None ``` ### 추출되는 규칙 구조 ```json { "endpoint": "POST /api/tasks", "schema_class": "SRCreate", "field_name": "sr_type", "field_type": "enum", "is_required": true, "allowed_values": ["DEPLOY", "RESTART", "LOG", "INQUIRY", "OTHER"], "default": null, "constraints": {} } ``` --- ## 학습 API ``` POST /api/rpa/validations/learn Body: { "source_path": "auto", "overwrite": true } 응답: { "learned": 127, "schemas": ["SRCreate", "SRStatusUpdate", "InstitutionCreate", ...], "endpoints_mapped": 43, "errors": [] } ``` --- ## 검증 적용 RPA 봇이 `POST /api/rpa/execute` 호출 시: ```python # 내부 검증 흐름 rules = db.query(RPAValidationRule).filter_by(endpoint="POST /api/tasks") for rule in rules: field_val = payload.get(rule.field_name) if rule.is_required and field_val is None: raise RPAValidationError(f"{rule.field_name}: 필수 항목") if rule.field_type == "enum" and field_val not in rule.allowed_values: raise RPAValidationError( f"{rule.field_name}: 허용값 {rule.allowed_values} 중 하나" ) if rule.constraints.get("max_length") and len(str(field_val)) > rule.constraints["max_length"]: raise RPAValidationError(f"{rule.field_name}: 최대 {rule.constraints['max_length']}자") ``` --- ## 주요 학습 대상 스키마 | 스키마 | 엔드포인트 | 핵심 필드 | |--------|----------|---------| | SRCreate | POST /api/tasks | sr_type(enum), title(required), inst_id(required) | | SRStatusUpdate | PATCH /api/tasks/{id}/status | status(enum), comment | | InstitutionCreate | POST /api/institutions | inst_code, inst_name | | ServerCreate | POST /api/servers | server_name, inst_id, server_role | | ApprovalCreate | POST /api/approvals | sr_id, result(enum) | | IncidentCreate | POST /api/incidents | title, severity(enum), server_id | --- ## 재학습 트리거 조건 - 신규 라우터 추가 후 - models.py 스키마 변경 후 - RPA 봇 validation 오류 급증 시 - 주 1회 자동 재학습 (스케줄러)