File size: 3,509 Bytes
22d9e39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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]