m-medical Module
CGHS/CSMA-style medical claims and reimbursement.
DocTypes
Section titled “DocTypes”MedicalAdvance
Section titled “MedicalAdvance”class MedicalAdvance(BaseDocType): """Medical advance application."""
advance_number: str = Field(max_length=50, unique=True) depot: str # FK to Depot employee: str # FK to Employee
dependent: str | None = None # FK to EmployeeFamily (None = self) illness_name: str
application_date: date amount_requested: Decimal amount_approved: Decimal | None = None
justification: str | None = None status: str = "Pending" # Pending, Approved, Rejected, Recovered
# Recovery tracking recovery_status: str = "Unrecovered" # Unrecovered, UnderRecovery, Recovered
remarks: str | None = None
class Meta: table_name = "medical_advance"MedicalClaim
Section titled “MedicalClaim”class MedicalClaim(BaseDocType): """Form 97 medical reimbursement claim."""
form_97_number: str = Field(max_length=50, unique=True) depot: str employee: str
submission_date: date
# Patient dependent: str | None = None # None = self place_of_illness: str | None = None treatment_reason: str
treatment_start_date: date treatment_end_date: date | None = None
# TBCT (special fund) is_tbct_case: bool = False
# Amounts net_claim_amount: Decimal = Decimal("0") net_admissible_amount: Decimal = Decimal("0") amount_approved: Decimal = Decimal("0")
# Reference to advance medical_advance: str | None = None # FK to MedicalAdvance
status: str = "Pending" # Pending, Verified, Approved, Rejected
remarks: str | None = None
# Child tables medicines: list["MedicalClaimMedicine"] = [] tests: list["MedicalClaimTest"] = [] hospitalizations: list["MedicalClaimHospitalization"] = [] consultations: list["MedicalClaimConsultation"] = [] miscellaneous: list["MedicalClaimMisc"] = []
class Meta: table_name = "medical_claim"MedicalClaimMedicine
Section titled “MedicalClaimMedicine”class MedicalClaimMedicine(BaseDocType): """Medicine details in claim."""
parent: str # FK to MedicalClaim serial_no: int
medicine: str | None = None # FK to MedicineMaster medicine_name: str
claimed_amount: Decimal admissible_amount: Decimal = Decimal("0") is_admissible: bool = True
remarks: str | None = None
class Meta: table_name = "medical_claim_medicine"MedicalClaimTest
Section titled “MedicalClaimTest”class MedicalClaimTest(BaseDocType): """Test details in claim."""
parent: str serial_no: int
test: str | None = None # FK to TestMaster hospital_name: str | None = None
claimed_amount: Decimal admissible_amount: Decimal = Decimal("0") is_admissible: bool = True
remarks: str | None = None
class Meta: table_name = "medical_claim_test"MedicalClaimHospitalization
Section titled “MedicalClaimHospitalization”class MedicalClaimHospitalization(BaseDocType): """Hospitalization details in claim."""
parent: str serial_no: int
hospital: str | None = None # FK to HospitalMaster hospital_name: str
admission_date: date discharge_date: date | None = None
emergency_certificate: bool = False distant_hospital_certificate: bool = False
claimed_amount: Decimal admissible_amount: Decimal = Decimal("0") is_admissible: bool = True
remarks: str | None = None
class Meta: table_name = "medical_claim_hospitalization"MedicalClaimConsultation
Section titled “MedicalClaimConsultation”class MedicalClaimConsultation(BaseDocType): """Consultation details in claim."""
parent: str serial_no: int
ama: str | None = None # FK to AMAMaster doctor_name: str is_specialist: bool = False hospital_name: str | None = None
claimed_amount: Decimal admissible_amount: Decimal = Decimal("0") is_admissible: bool = True
remarks: str | None = None
class Meta: table_name = "medical_claim_consultation"MedicalClaimMisc
Section titled “MedicalClaimMisc”class MedicalClaimMisc(BaseDocType): """Miscellaneous expenses in claim."""
parent: str serial_no: int
csma_code: str | None = None # FK to CSMARates description: str
claimed_amount: Decimal admissible_amount: Decimal = Decimal("0") is_admissible: bool = True
remarks: str | None = None
class Meta: table_name = "medical_claim_misc"Masters
Section titled “Masters”HospitalMaster
Section titled “HospitalMaster”class HospitalMaster(BaseDocType): """Legacy ERP authorized hospitals."""
code: str = Field(max_length=20, unique=True) name: str = Field(max_length=200)
address_line_1: str | None = None address_line_2: str | None = None city: str | None = None pincode: str | None = None
class Meta: table_name = "hospital_master"MedicineMaster
Section titled “MedicineMaster”class MedicineMaster(BaseDocType): """Approved medicines."""
code: str = Field(max_length=20, unique=True) name: str = Field(max_length=200)
category: str # Allopathic, Ayurvedic, Unani, Homoeopathic, Siddha medicine_type: str | None = None # Tablet, Capsule, Syrup, Injection, etc.
is_admissible: bool = True
class Meta: table_name = "medicine_master"TestMaster
Section titled “TestMaster”class TestMaster(BaseDocType): """Medical tests with admissible rates."""
code: str = Field(max_length=20, unique=True) name: str = Field(max_length=200)
admissible_amount: Decimal = Decimal("0")
class Meta: table_name = "test_master"AMAMaster
Section titled “AMAMaster”class AMAMaster(BaseDocType): """Authorized Medical Attendants."""
code: str = Field(max_length=20, unique=True) name: str = Field(max_length=200)
qualification: str | None = None registration_number: str | None = None
address_line_1: str | None = None city: str | None = None pincode: str | None = None
class Meta: table_name = "ama_master"CSMARates
Section titled “CSMARates”class CSMARates(BaseDocType): """CSMA miscellaneous rates (ambulance, nurse, etc.)."""
code: str = Field(max_length=20, unique=True) description: str = Field(max_length=200) rate: Decimal = Decimal("0")
remarks: str | None = None
class Meta: table_name = "csma_rates"API Endpoints
Section titled “API Endpoints”| Endpoint | Method | Description |
|---|---|---|
/api/v1/medical-advance |
GET, POST | Advances |
/api/v1/medical-claim |
GET, POST | Claims (Form 97) |
/api/v1/medical-claim/{id}/verify |
POST | Verify claim |
/api/v1/medical-claim/{id}/approve |
POST | Approve claim |
/api/v1/hospital |
GET, POST | Hospital master |
/api/v1/medicine |
GET, POST | Medicine master |
/api/v1/test |
GET, POST | Test master |