ocr-ktp / src /document_config.py
cheesecz's picture
Create document_config.py
22d9e39 verified
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]