# Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. """ Data models for the MedCodeRL Environment. Medical Coding & Billing Compliance environment where agents must assign ICD-10/CPT codes, make billing compliance decisions, and identify fraud patterns. """ from typing import Dict, List, Literal, Optional from openenv.core.env_server.types import Action, Observation from pydantic import Field class MedAction(Action): """Action for the MedCodeRL environment — a complete medical coding assessment.""" diagnosis_codes: List[str] = Field( ..., min_length=1, max_length=5, description="ICD-10-CM diagnosis codes (primary + secondary)" ) procedure_codes: List[str] = Field( default_factory=list, max_length=5, description="CPT procedure codes" ) decision: Literal["approve", "reject", "review"] = Field( ..., description="Billing compliance decision" ) confidence: float = Field( ..., ge=0.0, le=1.0, description="Agent confidence in its coding decision" ) reasoning: str = Field( ..., min_length=15, max_length=500, description="Clinical justification for the coding decision" ) modifier_codes: List[str] = Field( default_factory=list, max_length=3, description="Optional CPT modifier codes" ) risk_flags: List[str] = Field( default_factory=list, max_length=5, description="Compliance risk flags identified" ) class MedObservation(Observation): """Observation from the MedCodeRL environment — a clinical case to code.""" case_id: str = Field(default="", description="Unique case identifier") difficulty: str = Field(default="easy", description="easy | medium | hard") clinical_note: str = Field(default="", description="Clinical documentation") symptoms: List[str] = Field(default_factory=list, description="Reported symptoms") treatments: List[str] = Field(default_factory=list, description="Treatments administered or planned") insurance_type: str = Field(default="Private", description="Medicare | Medicaid | Private | Uninsured") prior_auth_required: bool = Field(default=False, description="Prior authorization needed") treatment_cost: str = Field(default="low", description="low | medium | high") patient_age: int = Field(default=0, description="Patient age in years") patient_sex: str = Field(default="M", description="M | F") provider_specialty: str = Field(default="", description="Treating provider specialty") visit_type: str = Field(default="outpatient", description="inpatient | outpatient | emergency | telehealth") comorbidities: List[str] = Field(default_factory=list, description="Pre-existing conditions") lab_results: Optional[str] = Field(default=None, description="Relevant lab results") medications: List[str] = Field(default_factory=list, description="Current medications") # Reward breakdown returned after step reward_breakdown: Optional[Dict] = Field(default=None, description="Detailed reward breakdown after grading") feedback: str = Field(default="", description="Grader feedback text")