satusehat-integration 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- satusehat_integration-0.1.0/PKG-INFO +11 -0
- satusehat_integration-0.1.0/README.md +184 -0
- satusehat_integration-0.1.0/pyproject.toml +9 -0
- satusehat_integration-0.1.0/setup.cfg +4 -0
- satusehat_integration-0.1.0/src/__init__.py +1 -0
- satusehat_integration-0.1.0/src/builder/__init__.py +227 -0
- satusehat_integration-0.1.0/src/builder/account.py +67 -0
- satusehat_integration-0.1.0/src/builder/adverse_event.py +31 -0
- satusehat_integration-0.1.0/src/builder/allergy_intolerance.py +48 -0
- satusehat_integration-0.1.0/src/builder/appointment.py +31 -0
- satusehat_integration-0.1.0/src/builder/appointment_response.py +31 -0
- satusehat_integration-0.1.0/src/builder/audit_event.py +31 -0
- satusehat_integration-0.1.0/src/builder/base_builder.py +26 -0
- satusehat_integration-0.1.0/src/builder/basic.py +31 -0
- satusehat_integration-0.1.0/src/builder/binary.py +31 -0
- satusehat_integration-0.1.0/src/builder/biologically_derived_product.py +31 -0
- satusehat_integration-0.1.0/src/builder/body_structure.py +31 -0
- satusehat_integration-0.1.0/src/builder/bundle.py +150 -0
- satusehat_integration-0.1.0/src/builder/care_plan.py +92 -0
- satusehat_integration-0.1.0/src/builder/care_team.py +31 -0
- satusehat_integration-0.1.0/src/builder/charge_item.py +87 -0
- satusehat_integration-0.1.0/src/builder/charge_item_definition.py +32 -0
- satusehat_integration-0.1.0/src/builder/charge_item_response.py +26 -0
- satusehat_integration-0.1.0/src/builder/claim.py +141 -0
- satusehat_integration-0.1.0/src/builder/claim_response.py +112 -0
- satusehat_integration-0.1.0/src/builder/clinical_impression.py +38 -0
- satusehat_integration-0.1.0/src/builder/communication.py +31 -0
- satusehat_integration-0.1.0/src/builder/communication_request.py +31 -0
- satusehat_integration-0.1.0/src/builder/composition.py +83 -0
- satusehat_integration-0.1.0/src/builder/condition.py +163 -0
- satusehat_integration-0.1.0/src/builder/consent.py +31 -0
- satusehat_integration-0.1.0/src/builder/contract.py +31 -0
- satusehat_integration-0.1.0/src/builder/coverage.py +31 -0
- satusehat_integration-0.1.0/src/builder/coverage_eligibility_request.py +35 -0
- satusehat_integration-0.1.0/src/builder/coverage_eligibility_response.py +32 -0
- satusehat_integration-0.1.0/src/builder/detected_issue.py +31 -0
- satusehat_integration-0.1.0/src/builder/device.py +111 -0
- satusehat_integration-0.1.0/src/builder/device_definition.py +31 -0
- satusehat_integration-0.1.0/src/builder/device_request.py +31 -0
- satusehat_integration-0.1.0/src/builder/device_use_statement.py +31 -0
- satusehat_integration-0.1.0/src/builder/diagnostic_report.py +109 -0
- satusehat_integration-0.1.0/src/builder/document_reference.py +104 -0
- satusehat_integration-0.1.0/src/builder/effect_evidence_synthesis.py +31 -0
- satusehat_integration-0.1.0/src/builder/encounter.py +134 -0
- satusehat_integration-0.1.0/src/builder/enrollment_request.py +31 -0
- satusehat_integration-0.1.0/src/builder/episode_of_care.py +60 -0
- satusehat_integration-0.1.0/src/builder/event_definition.py +31 -0
- satusehat_integration-0.1.0/src/builder/evidence.py +31 -0
- satusehat_integration-0.1.0/src/builder/evidence_variable.py +31 -0
- satusehat_integration-0.1.0/src/builder/example_scenario.py +31 -0
- satusehat_integration-0.1.0/src/builder/family_member_history.py +23 -0
- satusehat_integration-0.1.0/src/builder/flag.py +31 -0
- satusehat_integration-0.1.0/src/builder/genomic_study.py +23 -0
- satusehat_integration-0.1.0/src/builder/goal.py +71 -0
- satusehat_integration-0.1.0/src/builder/group.py +20 -0
- satusehat_integration-0.1.0/src/builder/guidance_response.py +31 -0
- satusehat_integration-0.1.0/src/builder/imaging_manifest.py +31 -0
- satusehat_integration-0.1.0/src/builder/imaging_selection.py +31 -0
- satusehat_integration-0.1.0/src/builder/imaging_study.py +98 -0
- satusehat_integration-0.1.0/src/builder/immunization.py +83 -0
- satusehat_integration-0.1.0/src/builder/immunization_evaluation.py +31 -0
- satusehat_integration-0.1.0/src/builder/immunization_recommendation.py +31 -0
- satusehat_integration-0.1.0/src/builder/invoice.py +130 -0
- satusehat_integration-0.1.0/src/builder/library.py +31 -0
- satusehat_integration-0.1.0/src/builder/linkage.py +31 -0
- satusehat_integration-0.1.0/src/builder/list_resource.py +40 -0
- satusehat_integration-0.1.0/src/builder/location.py +73 -0
- satusehat_integration-0.1.0/src/builder/measure.py +31 -0
- satusehat_integration-0.1.0/src/builder/measure_report.py +31 -0
- satusehat_integration-0.1.0/src/builder/media.py +31 -0
- satusehat_integration-0.1.0/src/builder/medication.py +40 -0
- satusehat_integration-0.1.0/src/builder/medication_administration.py +26 -0
- satusehat_integration-0.1.0/src/builder/medication_dispense.py +26 -0
- satusehat_integration-0.1.0/src/builder/medication_request.py +64 -0
- satusehat_integration-0.1.0/src/builder/medication_statement.py +26 -0
- satusehat_integration-0.1.0/src/builder/message_definition.py +31 -0
- satusehat_integration-0.1.0/src/builder/message_header.py +31 -0
- satusehat_integration-0.1.0/src/builder/molecular_sequence.py +99 -0
- satusehat_integration-0.1.0/src/builder/nutrition_order.py +20 -0
- satusehat_integration-0.1.0/src/builder/observation.py +139 -0
- satusehat_integration-0.1.0/src/builder/operation_outcome.py +31 -0
- satusehat_integration-0.1.0/src/builder/organization.py +62 -0
- satusehat_integration-0.1.0/src/builder/patient.py +52 -0
- satusehat_integration-0.1.0/src/builder/payment_notice.py +23 -0
- satusehat_integration-0.1.0/src/builder/payment_reconciliation.py +23 -0
- satusehat_integration-0.1.0/src/builder/person.py +31 -0
- satusehat_integration-0.1.0/src/builder/plan_definition.py +31 -0
- satusehat_integration-0.1.0/src/builder/practitioner.py +54 -0
- satusehat_integration-0.1.0/src/builder/practitioner_role.py +69 -0
- satusehat_integration-0.1.0/src/builder/procedure.py +164 -0
- satusehat_integration-0.1.0/src/builder/provenance.py +31 -0
- satusehat_integration-0.1.0/src/builder/questionnaire.py +31 -0
- satusehat_integration-0.1.0/src/builder/questionnaire_response.py +23 -0
- satusehat_integration-0.1.0/src/builder/related_person.py +77 -0
- satusehat_integration-0.1.0/src/builder/request_group.py +31 -0
- satusehat_integration-0.1.0/src/builder/research_definition.py +31 -0
- satusehat_integration-0.1.0/src/builder/research_element_definition.py +31 -0
- satusehat_integration-0.1.0/src/builder/research_subject.py +31 -0
- satusehat_integration-0.1.0/src/builder/risk_assessment.py +78 -0
- satusehat_integration-0.1.0/src/builder/risk_evidence_synthesis.py +31 -0
- satusehat_integration-0.1.0/src/builder/schedule.py +31 -0
- satusehat_integration-0.1.0/src/builder/search_parameter.py +31 -0
- satusehat_integration-0.1.0/src/builder/service_request.py +117 -0
- satusehat_integration-0.1.0/src/builder/slot.py +31 -0
- satusehat_integration-0.1.0/src/builder/specimen.py +75 -0
- satusehat_integration-0.1.0/src/builder/subscription.py +31 -0
- satusehat_integration-0.1.0/src/builder/substance.py +20 -0
- satusehat_integration-0.1.0/src/builder/substance_nucleic_acid.py +31 -0
- satusehat_integration-0.1.0/src/builder/substance_polymer.py +31 -0
- satusehat_integration-0.1.0/src/builder/substance_protein.py +31 -0
- satusehat_integration-0.1.0/src/builder/substance_source_material.py +31 -0
- satusehat_integration-0.1.0/src/builder/substance_specification.py +31 -0
- satusehat_integration-0.1.0/src/builder/supply_delivery.py +31 -0
- satusehat_integration-0.1.0/src/builder/supply_request.py +31 -0
- satusehat_integration-0.1.0/src/builder/task.py +115 -0
- satusehat_integration-0.1.0/src/builder/test_report.py +31 -0
- satusehat_integration-0.1.0/src/builder/test_script.py +31 -0
- satusehat_integration-0.1.0/src/builder/verification_result.py +31 -0
- satusehat_integration-0.1.0/src/datatype/__init__.py +69 -0
- satusehat_integration-0.1.0/src/datatype/datatype.py +6 -0
- satusehat_integration-0.1.0/src/datatype/datatypes.py +613 -0
- satusehat_integration-0.1.0/src/datatype/test_datatypes.py +13 -0
- satusehat_integration-0.1.0/src/queue/error_classifier.py +10 -0
- satusehat_integration-0.1.0/src/queue/monitor.py +5 -0
- satusehat_integration-0.1.0/src/queue/rate_limiter.py +15 -0
- satusehat_integration-0.1.0/src/satusehat_integration.egg-info/PKG-INFO +11 -0
- satusehat_integration-0.1.0/src/satusehat_integration.egg-info/SOURCES.txt +128 -0
- satusehat_integration-0.1.0/src/satusehat_integration.egg-info/dependency_links.txt +1 -0
- satusehat_integration-0.1.0/src/satusehat_integration.egg-info/requires.txt +7 -0
- satusehat_integration-0.1.0/src/satusehat_integration.egg-info/top_level.txt +4 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: satusehat-integration
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: SATUSEHAT FHIR R4 SDK for Python
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Requires-Dist: requests>=2.31
|
|
7
|
+
Requires-Dist: pydantic>=2.0
|
|
8
|
+
Provides-Extra: dev
|
|
9
|
+
Requires-Dist: pytest; extra == "dev"
|
|
10
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
11
|
+
Requires-Dist: ruff; extra == "dev"
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# satusehat-integration-python
|
|
2
|
+
|
|
3
|
+
> **Open-source Python SDK for integrating with SATUSEHAT** — Indonesia's national health data platform powered by FHIR R4. Pure Python, no framework dependency.
|
|
4
|
+
|
|
5
|
+
[](https://python.org)
|
|
6
|
+
[](https://hl7.org/fhir/R4/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://github.com/ivanwilliammd/satusehat-integration-python/actions)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
`satusehat-integration-python` is an **open-source** Python SDK for integrating with **SATUSEHAT** — Indonesia's national health data platform powered by FHIR R4.
|
|
15
|
+
|
|
16
|
+
Built on the official [SATUSEHAT Platform Guidelines](https://satusehat.kemkes.go.id/platform/docs). Ships with:
|
|
17
|
+
- **50 DataType** classes — composable FHIR R4 value objects with `to_json()` serialization
|
|
18
|
+
- **50 PayloadBuilder** classes — fluent builders for all FHIR resources (Patient, Practitioner, Organization, etc.)
|
|
19
|
+
- **Queue + Rate Limiter** — in-memory queue with configurable RPM rate limiting
|
|
20
|
+
|
|
21
|
+
Zero dependencies beyond standard library. Works standalone or with Django/FastAPI/Flask.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Requirements
|
|
26
|
+
|
|
27
|
+
- Python 3.10 or later
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Quick Install
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
pip install satusehat-integration-python
|
|
35
|
+
# or
|
|
36
|
+
git clone https://github.com/ivanwilliammd/satusehat-integration-python.git
|
|
37
|
+
cd satusehat-integration-python && pip install -e .
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```env
|
|
41
|
+
# .env
|
|
42
|
+
SATUSEHAT_ENV=DEV # DEV | STG | PROD
|
|
43
|
+
SATUSEHAT_BASE_URL_DEV=https://api-satusehat-dev.dto.kemkes.go.id
|
|
44
|
+
CLIENTID_DEV=your_client_id
|
|
45
|
+
CLIENTSECRET_DEV=your_client_secret
|
|
46
|
+
ORGID_DEV=your_org_id
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Architecture
|
|
52
|
+
|
|
53
|
+
### DataType Classes (`src/datatype/`)
|
|
54
|
+
|
|
55
|
+
Atomic FHIR R4 value objects. All provide a `to_json()` method — nested types serialize to clean FHIR JSON automatically.
|
|
56
|
+
|
|
57
|
+
| Category | Classes |
|
|
58
|
+
|----------|---------|
|
|
59
|
+
| Core | `Coding`, `CodeableConcept`, `Identifier`, `ContactPoint`, `Address`, `HumanName`, `Reference` |
|
|
60
|
+
| Quantity | `Age`, `Quantity` |
|
|
61
|
+
| Utility | `Period`, `ParameterComponent` |
|
|
62
|
+
|
|
63
|
+
Example — `HumanName`:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from src.datatype.datatypes import HumanName
|
|
67
|
+
|
|
68
|
+
name = HumanName(
|
|
69
|
+
family='Doe',
|
|
70
|
+
given=['John', 'Michael'],
|
|
71
|
+
use='official'
|
|
72
|
+
)
|
|
73
|
+
# name.to_json() → {'family': 'Doe', 'given': ['John', 'Michael'], 'use': 'official'}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### PayloadBuilder Pattern (`src/builder/`)
|
|
77
|
+
|
|
78
|
+
Fluent builder for each FHIR resource. Each builder exposes chainable methods and returns the resource payload via `to_json()`.
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
from src.builder.payload_builders import PatientBuilder, HumanName
|
|
82
|
+
|
|
83
|
+
patient = PatientBuilder()
|
|
84
|
+
patient.add_name(HumanName(family='Doe', given=['John'], use='official').to_json())
|
|
85
|
+
patient.set_gender('male')
|
|
86
|
+
patient.set_birth_date('1990-01-15')
|
|
87
|
+
|
|
88
|
+
payload = patient.to_json()
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Supported FHIR Resources
|
|
94
|
+
|
|
95
|
+
All 51 resources fully implemented via PayloadBuilder classes. Core (✅) + Non-Core (💼):
|
|
96
|
+
|
|
97
|
+
| # | Resource | Notes |
|
|
98
|
+
|---|----------|-------|
|
|
99
|
+
| 1 | Patient | ✅ MPI |
|
|
100
|
+
| 2 | Practitioner | ✅ SDMK |
|
|
101
|
+
| 3 | PractitionerRole | ✅ |
|
|
102
|
+
| 4 | Organization | ✅ MSI |
|
|
103
|
+
| 5 | Location | ✅ |
|
|
104
|
+
| 6 | Encounter | ✅ |
|
|
105
|
+
| 7 | Condition | ✅ |
|
|
106
|
+
| 8 | Observation | ✅ |
|
|
107
|
+
| 9 | Procedure | ✅ |
|
|
108
|
+
| 10 | MedicationRequest | ✅ |
|
|
109
|
+
| 11 | Bundle | ✅ batch/transaction |
|
|
110
|
+
| 12–37 | CarePlan through Task | ✅ |
|
|
111
|
+
| 38–50 | Account through Invoice | 💼 Billing/Claim resources |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Usage Examples
|
|
116
|
+
|
|
117
|
+
### Patient
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from src.builder.payload_builders import PatientBuilder
|
|
121
|
+
|
|
122
|
+
patient = PatientBuilder()
|
|
123
|
+
patient.add_name({
|
|
124
|
+
'family': 'Doe',
|
|
125
|
+
'given': ['John'],
|
|
126
|
+
'use': 'official'
|
|
127
|
+
})
|
|
128
|
+
patient.set_gender('male')
|
|
129
|
+
patient.set_birth_date('1990-01-15')
|
|
130
|
+
patient.add_telecom({'system': 'phone', 'value': '081234567890', 'use': 'mobile'})
|
|
131
|
+
|
|
132
|
+
payload = patient.to_json()
|
|
133
|
+
print(payload)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Claim (BPJS Klaim)
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
from src.builder.payload_builders import ClaimBuilder
|
|
140
|
+
|
|
141
|
+
claim = ClaimBuilder()
|
|
142
|
+
claim.set_status('active')
|
|
143
|
+
claim.set_use('claim')
|
|
144
|
+
claim.set_type('institutional')
|
|
145
|
+
claim.set_patient('pat-123', 'enc-456')
|
|
146
|
+
claim.add_item(1, 'PROCID001', 150000, 'IDR')
|
|
147
|
+
claim.set_total(150000, 'IDR')
|
|
148
|
+
|
|
149
|
+
payload = claim.to_json()
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Documentation
|
|
155
|
+
|
|
156
|
+
| Page | Description |
|
|
157
|
+
|------|-------------|
|
|
158
|
+
| [Wiki Home](https://github.com/ivanwilliammd/satusehat-integration-python.wiki.git) | Full documentation |
|
|
159
|
+
| [Getting Started](https://github.com/ivanwilliammd/satusehat-integration-python/wiki/Getting-Started) | Installation, configuration |
|
|
160
|
+
| [DataTypes](https://github.com/ivanwilliammd/satusehat-integration-python/wiki/DataTypes) | Complete type reference |
|
|
161
|
+
| [Builders](https://github.com/ivanwilliammd/satusehat-integration-python/wiki/Builders) | Builder usage guide |
|
|
162
|
+
| [Resources](https://github.com/ivanwilliammd/satusehat-integration-python/wiki/Resources) | All FHIR resources |
|
|
163
|
+
| [Claim Module](https://github.com/ivanwilliammd/satusehat-integration-python/wiki/Claim-Module) | BPJS Klaim integration |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## External Resources
|
|
168
|
+
|
|
169
|
+
- [HL7 FHIR R4 Specification](https://hl7.org/fhir/R4/)
|
|
170
|
+
- [SATUSEHAT Platform Docs](https://satusehat.kemkes.go.id/platform/docs)
|
|
171
|
+
- [Main PHP SDK](https://github.com/ivanwilliammd/satusehat-integration)
|
|
172
|
+
- [SATUSEHAT Sandbox API](https://api-satusehat-dev.dto.kemkes.go.id)
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Contributing
|
|
177
|
+
|
|
178
|
+
Contributions are welcome. Please ensure tests pass and follow existing code conventions.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## License
|
|
183
|
+
|
|
184
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "satusehat-integration"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "SATUSEHAT FHIR R4 SDK for Python"
|
|
5
|
+
requires-python = ">=3.10"
|
|
6
|
+
dependencies = ["requests>=2.31", "pydantic>=2.0"]
|
|
7
|
+
|
|
8
|
+
[project.optional-dependencies]
|
|
9
|
+
dev = ["pytest", "pytest-cov", "ruff"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# src package
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
from src.builder.account import AccountBuilder
|
|
2
|
+
from src.builder.adverse_event import AdverseEventBuilder
|
|
3
|
+
from src.builder.allergy_intolerance import AllergyIntoleranceBuilder
|
|
4
|
+
from src.builder.appointment import AppointmentBuilder
|
|
5
|
+
from src.builder.appointment_response import AppointmentResponseBuilder
|
|
6
|
+
from src.builder.audit_event import AuditEventBuilder
|
|
7
|
+
from src.builder.base_builder import BaseBuilder
|
|
8
|
+
from src.builder.basic import BasicBuilder
|
|
9
|
+
from src.builder.binary import BinaryBuilder
|
|
10
|
+
from src.builder.biologically_derived_product import BiologicallyDerivedProductBuilder
|
|
11
|
+
from src.builder.body_structure import BodyStructureBuilder
|
|
12
|
+
from src.builder.bundle import BundleBuilder
|
|
13
|
+
from src.builder.care_plan import CarePlanBuilder
|
|
14
|
+
from src.builder.care_team import CareTeamBuilder
|
|
15
|
+
from src.builder.charge_item import ChargeItemBuilder
|
|
16
|
+
from src.builder.charge_item_definition import ChargeItemDefinitionBuilder
|
|
17
|
+
from src.builder.charge_item_response import ChargeItemResponseBuilder
|
|
18
|
+
from src.builder.claim import ClaimBuilder
|
|
19
|
+
from src.builder.claim_response import ClaimResponseBuilder
|
|
20
|
+
from src.builder.clinical_impression import ClinicalImpressionBuilder
|
|
21
|
+
from src.builder.communication import CommunicationBuilder
|
|
22
|
+
from src.builder.communication_request import CommunicationRequestBuilder
|
|
23
|
+
from src.builder.composition import CompositionBuilder
|
|
24
|
+
from src.builder.condition import ConditionBuilder
|
|
25
|
+
from src.builder.consent import ConsentBuilder
|
|
26
|
+
from src.builder.contract import ContractBuilder
|
|
27
|
+
from src.builder.coverage import CoverageBuilder
|
|
28
|
+
from src.builder.coverage_eligibility_request import CoverageEligibilityRequestBuilder
|
|
29
|
+
from src.builder.coverage_eligibility_response import CoverageEligibilityResponseBuilder
|
|
30
|
+
from src.builder.detected_issue import DetectedIssueBuilder
|
|
31
|
+
from src.builder.device import DeviceBuilder
|
|
32
|
+
from src.builder.device_definition import DeviceDefinitionBuilder
|
|
33
|
+
from src.builder.device_request import DeviceRequestBuilder
|
|
34
|
+
from src.builder.device_use_statement import DeviceUseStatementBuilder
|
|
35
|
+
from src.builder.diagnostic_report import DiagnosticReportBuilder
|
|
36
|
+
from src.builder.document_reference import DocumentReferenceBuilder
|
|
37
|
+
from src.builder.effect_evidence_synthesis import EffectEvidenceSynthesisBuilder
|
|
38
|
+
from src.builder.encounter import EncounterBuilder
|
|
39
|
+
from src.builder.enrollment_request import EnrollmentRequestBuilder
|
|
40
|
+
from src.builder.episode_of_care import EpisodeOfCareBuilder
|
|
41
|
+
from src.builder.event_definition import EventDefinitionBuilder
|
|
42
|
+
from src.builder.evidence import EvidenceBuilder
|
|
43
|
+
from src.builder.evidence_variable import EvidenceVariableBuilder
|
|
44
|
+
from src.builder.example_scenario import ExampleScenarioBuilder
|
|
45
|
+
from src.builder.family_member_history import FamilyMemberHistoryBuilder
|
|
46
|
+
from src.builder.flag import FlagBuilder
|
|
47
|
+
from src.builder.genomic_study import GenomicStudyBuilder
|
|
48
|
+
from src.builder.goal import GoalBuilder
|
|
49
|
+
from src.builder.group import GroupBuilder
|
|
50
|
+
from src.builder.guidance_response import GuidanceResponseBuilder
|
|
51
|
+
from src.builder.imaging_manifest import ImagingManifestBuilder
|
|
52
|
+
from src.builder.imaging_selection import ImagingSelectionBuilder
|
|
53
|
+
from src.builder.imaging_study import ImagingStudyBuilder
|
|
54
|
+
from src.builder.immunization import ImmunizationBuilder
|
|
55
|
+
from src.builder.immunization_evaluation import ImmunizationEvaluationBuilder
|
|
56
|
+
from src.builder.immunization_recommendation import ImmunizationRecommendationBuilder
|
|
57
|
+
from src.builder.invoice import InvoiceBuilder
|
|
58
|
+
from src.builder.library import LibraryBuilder
|
|
59
|
+
from src.builder.linkage import LinkageBuilder
|
|
60
|
+
from src.builder.list_resource import ListResourceBuilder
|
|
61
|
+
from src.builder.location import LocationBuilder
|
|
62
|
+
from src.builder.measure import MeasureBuilder
|
|
63
|
+
from src.builder.measure_report import MeasureReportBuilder
|
|
64
|
+
from src.builder.media import MediaBuilder
|
|
65
|
+
from src.builder.medication import MedicationBuilder
|
|
66
|
+
from src.builder.medication_administration import MedicationAdministrationBuilder
|
|
67
|
+
from src.builder.medication_dispense import MedicationDispenseBuilder
|
|
68
|
+
from src.builder.medication_request import MedicationRequestBuilder
|
|
69
|
+
from src.builder.medication_statement import MedicationStatementBuilder
|
|
70
|
+
from src.builder.message_definition import MessageDefinitionBuilder
|
|
71
|
+
from src.builder.message_header import MessageHeaderBuilder
|
|
72
|
+
from src.builder.molecular_sequence import MolecularSequenceBuilder
|
|
73
|
+
from src.builder.nutrition_order import NutritionOrderBuilder
|
|
74
|
+
from src.builder.observation import ObservationBuilder
|
|
75
|
+
from src.builder.operation_outcome import OperationOutcomeBuilder
|
|
76
|
+
from src.builder.organization import OrganizationBuilder
|
|
77
|
+
from src.builder.patient import PatientBuilder
|
|
78
|
+
from src.builder.payment_notice import PaymentNoticeBuilder
|
|
79
|
+
from src.builder.payment_reconciliation import PaymentReconciliationBuilder
|
|
80
|
+
from src.builder.person import PersonBuilder
|
|
81
|
+
from src.builder.plan_definition import PlanDefinitionBuilder
|
|
82
|
+
from src.builder.practitioner import PractitionerBuilder
|
|
83
|
+
from src.builder.practitioner_role import PractitionerRoleBuilder
|
|
84
|
+
from src.builder.procedure import ProcedureBuilder
|
|
85
|
+
from src.builder.provenance import ProvenanceBuilder
|
|
86
|
+
from src.builder.questionnaire import QuestionnaireBuilder
|
|
87
|
+
from src.builder.questionnaire_response import QuestionnaireResponseBuilder
|
|
88
|
+
from src.builder.related_person import RelatedPersonBuilder
|
|
89
|
+
from src.builder.request_group import RequestGroupBuilder
|
|
90
|
+
from src.builder.research_definition import ResearchDefinitionBuilder
|
|
91
|
+
from src.builder.research_element_definition import ResearchElementDefinitionBuilder
|
|
92
|
+
from src.builder.research_subject import ResearchSubjectBuilder
|
|
93
|
+
from src.builder.risk_assessment import RiskAssessmentBuilder
|
|
94
|
+
from src.builder.risk_evidence_synthesis import RiskEvidenceSynthesisBuilder
|
|
95
|
+
from src.builder.schedule import ScheduleBuilder
|
|
96
|
+
from src.builder.search_parameter import SearchParameterBuilder
|
|
97
|
+
from src.builder.service_request import ServiceRequestBuilder
|
|
98
|
+
from src.builder.slot import SlotBuilder
|
|
99
|
+
from src.builder.specimen import SpecimenBuilder
|
|
100
|
+
from src.builder.substance import SubstanceBuilder
|
|
101
|
+
from src.builder.substance_nucleic_acid import SubstanceNucleicAcidBuilder
|
|
102
|
+
from src.builder.substance_polymer import SubstancePolymerBuilder
|
|
103
|
+
from src.builder.substance_protein import SubstanceProteinBuilder
|
|
104
|
+
from src.builder.substance_source_material import SubstanceSourceMaterialBuilder
|
|
105
|
+
from src.builder.substance_specification import SubstanceSpecificationBuilder
|
|
106
|
+
from src.builder.subscription import SubscriptionBuilder
|
|
107
|
+
from src.builder.supply_delivery import SupplyDeliveryBuilder
|
|
108
|
+
from src.builder.supply_request import SupplyRequestBuilder
|
|
109
|
+
from src.builder.task import TaskBuilder
|
|
110
|
+
from src.builder.test_report import TestReportBuilder
|
|
111
|
+
from src.builder.test_script import TestScriptBuilder
|
|
112
|
+
from src.builder.verification_result import VerificationResultBuilder
|
|
113
|
+
|
|
114
|
+
__all__ = [
|
|
115
|
+
"AccountBuilder",
|
|
116
|
+
"AdverseEventBuilder",
|
|
117
|
+
"AllergyIntoleranceBuilder",
|
|
118
|
+
"AppointmentBuilder",
|
|
119
|
+
"AppointmentResponseBuilder",
|
|
120
|
+
"AuditEventBuilder",
|
|
121
|
+
"BaseBuilder",
|
|
122
|
+
"BasicBuilder",
|
|
123
|
+
"BinaryBuilder",
|
|
124
|
+
"BiologicallyDerivedProductBuilder",
|
|
125
|
+
"BodyStructureBuilder",
|
|
126
|
+
"BundleBuilder",
|
|
127
|
+
"CarePlanBuilder",
|
|
128
|
+
"CareTeamBuilder",
|
|
129
|
+
"ChargeItemBuilder",
|
|
130
|
+
"ChargeItemDefinitionBuilder",
|
|
131
|
+
"ChargeItemResponseBuilder",
|
|
132
|
+
"ClaimBuilder",
|
|
133
|
+
"ClaimResponseBuilder",
|
|
134
|
+
"ClinicalImpressionBuilder",
|
|
135
|
+
"CommunicationBuilder",
|
|
136
|
+
"CommunicationRequestBuilder",
|
|
137
|
+
"CompositionBuilder",
|
|
138
|
+
"ConditionBuilder",
|
|
139
|
+
"ConsentBuilder",
|
|
140
|
+
"ContractBuilder",
|
|
141
|
+
"CoverageBuilder",
|
|
142
|
+
"CoverageEligibilityRequestBuilder",
|
|
143
|
+
"CoverageEligibilityResponseBuilder",
|
|
144
|
+
"DetectedIssueBuilder",
|
|
145
|
+
"DeviceBuilder",
|
|
146
|
+
"DeviceDefinitionBuilder",
|
|
147
|
+
"DeviceRequestBuilder",
|
|
148
|
+
"DeviceUseStatementBuilder",
|
|
149
|
+
"DiagnosticReportBuilder",
|
|
150
|
+
"DocumentReferenceBuilder",
|
|
151
|
+
"EffectEvidenceSynthesisBuilder",
|
|
152
|
+
"EncounterBuilder",
|
|
153
|
+
"EnrollmentRequestBuilder",
|
|
154
|
+
"EpisodeOfCareBuilder",
|
|
155
|
+
"EventDefinitionBuilder",
|
|
156
|
+
"EvidenceBuilder",
|
|
157
|
+
"EvidenceVariableBuilder",
|
|
158
|
+
"ExampleScenarioBuilder",
|
|
159
|
+
"FamilyMemberHistoryBuilder",
|
|
160
|
+
"FlagBuilder",
|
|
161
|
+
"GenomicStudyBuilder",
|
|
162
|
+
"GoalBuilder",
|
|
163
|
+
"GroupBuilder",
|
|
164
|
+
"GuidanceResponseBuilder",
|
|
165
|
+
"ImagingManifestBuilder",
|
|
166
|
+
"ImagingSelectionBuilder",
|
|
167
|
+
"ImagingStudyBuilder",
|
|
168
|
+
"ImmunizationBuilder",
|
|
169
|
+
"ImmunizationEvaluationBuilder",
|
|
170
|
+
"ImmunizationRecommendationBuilder",
|
|
171
|
+
"InvoiceBuilder",
|
|
172
|
+
"LibraryBuilder",
|
|
173
|
+
"LinkageBuilder",
|
|
174
|
+
"ListResourceBuilder",
|
|
175
|
+
"LocationBuilder",
|
|
176
|
+
"MeasureBuilder",
|
|
177
|
+
"MeasureReportBuilder",
|
|
178
|
+
"MediaBuilder",
|
|
179
|
+
"MedicationBuilder",
|
|
180
|
+
"MedicationAdministrationBuilder",
|
|
181
|
+
"MedicationDispenseBuilder",
|
|
182
|
+
"MedicationRequestBuilder",
|
|
183
|
+
"MedicationStatementBuilder",
|
|
184
|
+
"MessageDefinitionBuilder",
|
|
185
|
+
"MessageHeaderBuilder",
|
|
186
|
+
"MolecularSequenceBuilder",
|
|
187
|
+
"NutritionOrderBuilder",
|
|
188
|
+
"ObservationBuilder",
|
|
189
|
+
"OperationOutcomeBuilder",
|
|
190
|
+
"OrganizationBuilder",
|
|
191
|
+
"PatientBuilder",
|
|
192
|
+
"PaymentNoticeBuilder",
|
|
193
|
+
"PaymentReconciliationBuilder",
|
|
194
|
+
"PersonBuilder",
|
|
195
|
+
"PlanDefinitionBuilder",
|
|
196
|
+
"PractitionerBuilder",
|
|
197
|
+
"PractitionerRoleBuilder",
|
|
198
|
+
"ProcedureBuilder",
|
|
199
|
+
"ProvenanceBuilder",
|
|
200
|
+
"QuestionnaireBuilder",
|
|
201
|
+
"QuestionnaireResponseBuilder",
|
|
202
|
+
"RelatedPersonBuilder",
|
|
203
|
+
"RequestGroupBuilder",
|
|
204
|
+
"ResearchDefinitionBuilder",
|
|
205
|
+
"ResearchElementDefinitionBuilder",
|
|
206
|
+
"ResearchSubjectBuilder",
|
|
207
|
+
"RiskAssessmentBuilder",
|
|
208
|
+
"RiskEvidenceSynthesisBuilder",
|
|
209
|
+
"ScheduleBuilder",
|
|
210
|
+
"SearchParameterBuilder",
|
|
211
|
+
"ServiceRequestBuilder",
|
|
212
|
+
"SlotBuilder",
|
|
213
|
+
"SpecimenBuilder",
|
|
214
|
+
"SubstanceBuilder",
|
|
215
|
+
"SubstanceNucleicAcidBuilder",
|
|
216
|
+
"SubstancePolymerBuilder",
|
|
217
|
+
"SubstanceProteinBuilder",
|
|
218
|
+
"SubstanceSourceMaterialBuilder",
|
|
219
|
+
"SubstanceSpecificationBuilder",
|
|
220
|
+
"SubscriptionBuilder",
|
|
221
|
+
"SupplyDeliveryBuilder",
|
|
222
|
+
"SupplyRequestBuilder",
|
|
223
|
+
"TaskBuilder",
|
|
224
|
+
"TestReportBuilder",
|
|
225
|
+
"TestScriptBuilder",
|
|
226
|
+
"VerificationResultBuilder",
|
|
227
|
+
]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Account resource builder for SATUSEHAT FHIR R4."""
|
|
2
|
+
from typing import List, Optional
|
|
3
|
+
from src.builder.base_builder import BaseBuilder
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AccountBuilder(BaseBuilder):
|
|
7
|
+
"""Builder for Account resource."""
|
|
8
|
+
|
|
9
|
+
def __init__(self):
|
|
10
|
+
super().__init__("Account")
|
|
11
|
+
def set_id(self, id: str) -> "AccountBuilder":
|
|
12
|
+
self.data["id"] = id
|
|
13
|
+
return self
|
|
14
|
+
|
|
15
|
+
def set_status(self, status: str) -> "AccountBuilder":
|
|
16
|
+
self.data["status"] = status
|
|
17
|
+
return self
|
|
18
|
+
|
|
19
|
+
def set_type(self, code: str, system: str, display: Optional[str] = None) -> "AccountBuilder":
|
|
20
|
+
self.data["type"] = {"coding": [{"system": system, "code": code}]}
|
|
21
|
+
if display:
|
|
22
|
+
self.data["type"]["coding"][0]["display"] = display
|
|
23
|
+
return self
|
|
24
|
+
|
|
25
|
+
def set_name(self, name: str) -> "AccountBuilder":
|
|
26
|
+
self.data["name"] = name
|
|
27
|
+
return self
|
|
28
|
+
|
|
29
|
+
def set_subject(self, reference: str, display: Optional[str] = None) -> "AccountBuilder":
|
|
30
|
+
self.data["subject"] = {"reference": reference}
|
|
31
|
+
if display:
|
|
32
|
+
self.data["subject"]["display"] = display
|
|
33
|
+
return self
|
|
34
|
+
|
|
35
|
+
def set_service_period(self, start: Optional[str] = None, end: Optional[str] = None) -> "AccountBuilder":
|
|
36
|
+
period: dict = {}
|
|
37
|
+
if start:
|
|
38
|
+
period["start"] = start
|
|
39
|
+
if end:
|
|
40
|
+
period["end"] = end
|
|
41
|
+
self.data["servicePeriod"] = period
|
|
42
|
+
return self
|
|
43
|
+
|
|
44
|
+
def add_coverage(
|
|
45
|
+
self,
|
|
46
|
+
coverage_reference: str,
|
|
47
|
+
priority: Optional[int] = None,
|
|
48
|
+
coverage_display: Optional[str] = None
|
|
49
|
+
) -> "AccountBuilder":
|
|
50
|
+
self.data.setdefault("coverage", [])
|
|
51
|
+
cov: dict = {"coverage": {"reference": coverage_reference}}
|
|
52
|
+
if priority:
|
|
53
|
+
cov["priority"] = priority
|
|
54
|
+
if coverage_display:
|
|
55
|
+
cov["coverage"]["display"] = coverage_display
|
|
56
|
+
self.data["coverage"].append(cov)
|
|
57
|
+
return self
|
|
58
|
+
|
|
59
|
+
def set_owner(self, reference: str, display: Optional[str] = None) -> "AccountBuilder":
|
|
60
|
+
self.data["owner"] = {"reference": reference}
|
|
61
|
+
if display:
|
|
62
|
+
self.data["owner"]["display"] = display
|
|
63
|
+
return self
|
|
64
|
+
|
|
65
|
+
def set_description(self, description: str) -> "AccountBuilder":
|
|
66
|
+
self.data["description"] = description
|
|
67
|
+
return self
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from src.builder.base_builder import BaseBuilder
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AdverseEventBuilder(BaseBuilder):
|
|
6
|
+
def __init__(self) -> None:
|
|
7
|
+
super().__init__("AdverseEvent")
|
|
8
|
+
|
|
9
|
+
def set_id(id: str) -> "AdverseEventBuilder":
|
|
10
|
+
self._set("id", id)
|
|
11
|
+
return self
|
|
12
|
+
|
|
13
|
+
def add_identifier(system: str, value: str) -> "AdverseEventBuilder":
|
|
14
|
+
self._append("identifier", {"system": system, "value": value})
|
|
15
|
+
return self
|
|
16
|
+
|
|
17
|
+
def set_status(status: str) -> "AdverseEventBuilder":
|
|
18
|
+
self._set("status", status)
|
|
19
|
+
return self
|
|
20
|
+
|
|
21
|
+
def set_code(code: dict) -> "AdverseEventBuilder":
|
|
22
|
+
self._set("code", code)
|
|
23
|
+
return self
|
|
24
|
+
|
|
25
|
+
def set_subject(reference: str, display: str = None) -> "AdverseEventBuilder":
|
|
26
|
+
self._set("subject", {"reference": reference, "display": display}) if display else self._set("subject", {"reference": reference})
|
|
27
|
+
return self
|
|
28
|
+
|
|
29
|
+
def set_description(description: str) -> "AdverseEventBuilder":
|
|
30
|
+
self._set("description", description)
|
|
31
|
+
return self
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from src.builder.base_builder import BaseBuilder
|
|
2
|
+
|
|
3
|
+
class AllergyIntoleranceBuilder(BaseBuilder):
|
|
4
|
+
def __init__(self) -> None:
|
|
5
|
+
super().__init__("AllergyIntolerance")
|
|
6
|
+
|
|
7
|
+
def identifier(self, identifier: dict) -> "AllergyIntoleranceBuilder":
|
|
8
|
+
return self._push("identifier", identifier)
|
|
9
|
+
|
|
10
|
+
def clinical_status(self, code: str, system: str = "http://terminology.kemkes.go.id/CodeSystem/allergyintolerance-clinical", display: str = "") -> "AllergyIntoleranceBuilder":
|
|
11
|
+
v = {"coding": [{"system": system, "code": code, "display": display}]}
|
|
12
|
+
return self._set("clinicalStatus", v)
|
|
13
|
+
|
|
14
|
+
def verification_status(self, code: str, system: str = "http://terminology.kemkes.go.id/CodeSystem/allergyintolerance-verification", display: str = "") -> "AllergyIntoleranceBuilder":
|
|
15
|
+
return self._set("verificationStatus", {"coding": [{"system": system, "code": code, "display": display}]})
|
|
16
|
+
|
|
17
|
+
def type(self, code: str, system: str = "http://terminology.kemkes.go.id/CodeSystem/allergyintolerance-type", display: str = "") -> "AllergyIntoleranceBuilder":
|
|
18
|
+
return self._set("type", {"coding": [{"system": system, "code": code, "display": display}]})
|
|
19
|
+
|
|
20
|
+
def category(self, value: str) -> "AllergyIntoleranceBuilder":
|
|
21
|
+
return self._set("category", [value])
|
|
22
|
+
|
|
23
|
+
def code(self, codeable_concept: dict) -> "AllergyIntoleranceBuilder":
|
|
24
|
+
return self._set("code", codeable_concept)
|
|
25
|
+
|
|
26
|
+
def patient(self, reference: str, display: str = "") -> "AllergyIntoleranceBuilder":
|
|
27
|
+
sub = {"reference": reference}
|
|
28
|
+
if display:
|
|
29
|
+
sub["display"] = display
|
|
30
|
+
return self._set("patient", sub)
|
|
31
|
+
|
|
32
|
+
def encounter(self, reference: str) -> "AllergyIntoleranceBuilder":
|
|
33
|
+
return self._set("encounter", {"reference": reference})
|
|
34
|
+
|
|
35
|
+
def onset_date_time(self, value: str) -> "AllergyIntoleranceBuilder":
|
|
36
|
+
return self._set("onsetDateTime", value)
|
|
37
|
+
|
|
38
|
+
def recorded_date(self, value: str) -> "AllergyIntoleranceBuilder":
|
|
39
|
+
return self._set("recordedDate", value)
|
|
40
|
+
|
|
41
|
+
def recorder(self, reference: str) -> "AllergyIntoleranceBuilder":
|
|
42
|
+
return self._set("recorder", {"reference": reference})
|
|
43
|
+
|
|
44
|
+
def asserter(self, reference: str) -> "AllergyIntoleranceBuilder":
|
|
45
|
+
return self._set("asserter", {"reference": reference})
|
|
46
|
+
|
|
47
|
+
def note(self, text: str) -> "AllergyIntoleranceBuilder":
|
|
48
|
+
return self._set("note", [{"text": text}])
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from src.builder.base_builder import BaseBuilder
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AppointmentBuilder(BaseBuilder):
|
|
6
|
+
def __init__(self) -> None:
|
|
7
|
+
super().__init__("Appointment")
|
|
8
|
+
|
|
9
|
+
def set_id(id: str) -> "AppointmentBuilder":
|
|
10
|
+
self._set("id", id)
|
|
11
|
+
return self
|
|
12
|
+
|
|
13
|
+
def add_identifier(system: str, value: str) -> "AppointmentBuilder":
|
|
14
|
+
self._append("identifier", {"system": system, "value": value})
|
|
15
|
+
return self
|
|
16
|
+
|
|
17
|
+
def set_status(status: str) -> "AppointmentBuilder":
|
|
18
|
+
self._set("status", status)
|
|
19
|
+
return self
|
|
20
|
+
|
|
21
|
+
def set_code(code: dict) -> "AppointmentBuilder":
|
|
22
|
+
self._set("code", code)
|
|
23
|
+
return self
|
|
24
|
+
|
|
25
|
+
def set_subject(reference: str, display: str = None) -> "AppointmentBuilder":
|
|
26
|
+
self._set("subject", {"reference": reference, "display": display}) if display else self._set("subject", {"reference": reference})
|
|
27
|
+
return self
|
|
28
|
+
|
|
29
|
+
def set_description(description: str) -> "AppointmentBuilder":
|
|
30
|
+
self._set("description", description)
|
|
31
|
+
return self
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from src.builder.base_builder import BaseBuilder
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AppointmentResponseBuilder(BaseBuilder):
|
|
6
|
+
def __init__(self) -> None:
|
|
7
|
+
super().__init__("AppointmentResponse")
|
|
8
|
+
|
|
9
|
+
def set_id(id: str) -> "AppointmentResponseBuilder":
|
|
10
|
+
self._set("id", id)
|
|
11
|
+
return self
|
|
12
|
+
|
|
13
|
+
def add_identifier(system: str, value: str) -> "AppointmentResponseBuilder":
|
|
14
|
+
self._append("identifier", {"system": system, "value": value})
|
|
15
|
+
return self
|
|
16
|
+
|
|
17
|
+
def set_status(status: str) -> "AppointmentResponseBuilder":
|
|
18
|
+
self._set("status", status)
|
|
19
|
+
return self
|
|
20
|
+
|
|
21
|
+
def set_code(code: dict) -> "AppointmentResponseBuilder":
|
|
22
|
+
self._set("code", code)
|
|
23
|
+
return self
|
|
24
|
+
|
|
25
|
+
def set_subject(reference: str, display: str = None) -> "AppointmentResponseBuilder":
|
|
26
|
+
self._set("subject", {"reference": reference, "display": display}) if display else self._set("subject", {"reference": reference})
|
|
27
|
+
return self
|
|
28
|
+
|
|
29
|
+
def set_description(description: str) -> "AppointmentResponseBuilder":
|
|
30
|
+
self._set("description", description)
|
|
31
|
+
return self
|