|
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" |
|
|
|
|
|
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] |