from typing import Dict, List, Optional from dataclasses import dataclass from enum import Enum class DocumentType(str, Enum): KTP = "KTP" KK = "KK" BPJS = "BPJS" SURAT_RUJUKAN = "SURAT_RUJUKAN" RESEP = "RESEP" BUKTI_BAYAR = "BUKTI_BAYAR" SURAT_KETERANGAN = "SURAT_KETERANGAN" @dataclass class DocumentRequirement: document_type: DocumentType is_required: bool description: str validation_rules: Dict[str, str] class HealthcareProcess(str, Enum): PENDAFTARAN_BPJS = "PENDAFTARAN_BPJS" RUJUKAN_FASKES = "RUJUKAN_FASKES" PENDAFTARAN_RAWAT_INAP = "PENDAFTARAN_RAWAT_INAP" PENDAFTARAN_RAWAT_JALAN = "PENDAFTARAN_RAWAT_JALAN" # Document requirements for each healthcare process PROCESS_REQUIREMENTS = { HealthcareProcess.PENDAFTARAN_BPJS: [ DocumentRequirement( document_type=DocumentType.KTP, is_required=True, description="Kartu Tanda Penduduk asli", validation_rules={ "NIK": "required", "Nama": "required", "Alamat": "required" } ), DocumentRequirement( document_type=DocumentType.KK, is_required=True, description="Kartu Keluarga asli", validation_rules={ "Nomor KK": "required", "Nama Kepala Keluarga": "required" } ), DocumentRequirement( document_type=DocumentType.SURAT_KETERANGAN, is_required=False, description="Surat Keterangan Domisili", validation_rules={ "Nomor Surat": "required", "Tanggal": "required" } ) ], HealthcareProcess.RUJUKAN_FASKES: [ DocumentRequirement( document_type=DocumentType.KTP, is_required=True, description="Kartu Tanda Penduduk asli", validation_rules={ "NIK": "required", "Nama": "required" } ), DocumentRequirement( document_type=DocumentType.BPJS, is_required=True, description="Kartu BPJS aktif", validation_rules={ "Nomor Kartu": "required", "Nama Peserta": "required", "Status": "required" } ), DocumentRequirement( document_type=DocumentType.SURAT_RUJUKAN, is_required=True, description="Surat Rujukan dari Faskes tingkat 1", validation_rules={ "Nomor Rujukan": "required", "Tanggal": "required", "Diagnosa": "required" } ) ] } def get_process_requirements(process: HealthcareProcess) -> List[DocumentRequirement]: """Get document requirements for a specific healthcare process.""" return PROCESS_REQUIREMENTS.get(process, []) def get_required_documents(process: HealthcareProcess) -> List[DocumentType]: """Get list of required document types for a specific process.""" requirements = get_process_requirements(process) return [req.document_type for req in requirements if req.is_required] def get_optional_documents(process: HealthcareProcess) -> List[DocumentType]: """Get list of optional document types for a specific process.""" requirements = get_process_requirements(process) return [req.document_type for req in requirements if not req.is_required]