guardia-itsm/.claude/skills/rpa-validation/SKILL.md

3.8 KiB

name description
rpa-validation 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. 각 클래스의 필드 분석:
# 분석 대상 패턴
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

추출되는 규칙 구조

{
  "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 호출 시:

# 내부 검증 흐름
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회 자동 재학습 (스케줄러)