@digitalmedika/satusehat
v0.9.0
Published
Type-safe TypeScript wrapper for SATUSEHAT API.
Maintainers
Readme
@digitalmedika/satusehat
Type-safe TypeScript SDK untuk SATUSEHAT API.
SDK ini dirancang untuk:
- validasi request dan response dengan runtime schema
- type inference end-to-end di TypeScript
- OAuth2 client credentials
- token cache in-memory atau file-based
- ergonomi SDK yang cocok untuk backend service dan internal tooling
Helpers
Helper builder yang saat ini tersedia:
createEncounterBuildercreateEncounterClassFromConsultationMethodcreateEncounterDiagnosiscreateEncounterConditionBuildercreateEncounterIdentifiercreateEncounterLocationcreateEncounterParticipantcreateEncounterQueueBuildercreateEncounterServiceProviderReferencecreateEncounterStatusTimelinecreateEncounterMedicationBuildercreateEncounterMedicationAdministrationBuildercreateEncounterMedicationRequestBuildercreateEncounterProcedureBuildercreateEmergencyEncounterHistorycreateChestXRayStudyBuildercreateCompleteBloodCountPanelBuildercreateLaboratoryPanelBuildercreateOrganizationBuildercreateRiskAssessmentBuildercreateServiceRequestImagingStudyDiagnosticReportBuildercreateServiceRequestSpecimenObservationBuilder
Installation
bun add @digitalmedika/satusehatUntuk development library ini sendiri:
bun installQuick Start
import {
createEncounterBuilder,
createSatuSehatClientFromEnv,
} from "@digitalmedika/satusehat";
const client = createSatuSehatClientFromEnv();
const patientResult = await client.patient.search({
identifier: "https://fhir.kemkes.go.id/id/nik|9271060312000001",
});
const patient = patientResult.entry?.[0]?.resource;
if (!patient?.id) {
throw new Error("Patient tidak ditemukan");
}
const encounterDraft = createEncounterBuilder({
preset: "outpatient",
identifier: {
system: "http://sys-ids.kemkes.go.id/encounter/10000004",
use: "official",
value: "RJ-20240001",
},
status: "arrived",
subject: {
reference: `Patient/${patient.id}`,
display: patient.name?.[0]?.text ?? "Pasien SATUSEHAT",
},
period: {
start: "2024-04-01T01:00:00+00:00",
end: "2024-04-01T02:00:00+00:00",
},
reasonCode: {
coding: [
{
system: "http://terminology.hl7.org/CodeSystem/encounter-reason",
code: "185349003",
display: "Encounter for check up",
},
],
},
diagnosis: {
condition: {
reference: "Condition/4bbbe654-14f5-4ab3-a36e-a1e307f67bb8",
},
use: {
coding: [
{
system: "https://www.hl7.org/fhir/Codesystem-diagnosis-role",
code: "AD",
display: "Admission diagnosis",
},
],
},
rank: 1,
},
location: {
location: {
reference: "Location/408ba28c-3115-4df5-85c6-60f15b44e7fa",
display: "Poliklinik Rawat Jalan",
},
status: "active",
},
serviceProvider: {
reference: "Organization/10000004",
display: "RS SATUSEHAT",
},
}).build();
const encounter = await client.encounter.create(encounterDraft);
console.log({
patientId: patient.id,
encounterId: encounter.id,
});Environment Variables
Salin template dari .env.example.
Variable utama:
SATUSEHAT_ENVSATUSEHAT_BASE_URLSATUSEHAT_AUTH_BASE_URLSATUSEHAT_DICOM_BASE_URLSATUSEHAT_CLIENT_IDSATUSEHAT_CLIENT_SECRETSATUSEHAT_TOKEN_CACHE_FILE
Available Resources
Saat ini resource yang sudah tersedia:
allergyIntoleranceclinicalImpressioncompositionconditiondicomRouterdiagnosticReportencounterimagingStudymedicationAdministrationobservationnutritionOrderproceduremedicationmedicationRequestserviceRequestspecimenpatientorganizationlocationpractitionerpractitionerRolequestionnaireResponseriskAssessment
Token Handling
Secara default SDK mendukung:
- token provider berbasis OAuth2 client credentials
- cache token in-memory
- file-based token store opsional untuk local testing/internal tools
- refresh otomatis saat token expired atau mendekati expired
- retry sekali saat menerima
401jika token bisa di-invalidasi
Development
bun run typecheck
bun test
bun run buildSmoke test ke SATUSEHAT live:
bun run smoke:liveUntuk environment sandbox, smoke test akan memakai dummy patient resmi SATUSEHAT bila parameter test belum diisi.
Documentation
- Getting Started
- Authentication
- Errors
- AllergyIntolerance
- ClinicalImpression
- Composition
- Condition
- DICOM Router
- QuestionnaireResponse
- RiskAssessment
- DiagnosticReport
- ImagingStudy
- Encounter Builder
- Encounter Queue Builder
- Encounter -> Condition Builder
- Encounter -> Medication Builder
- Encounter -> MedicationAdministration Builder
- Encounter -> MedicationRequest Builder
- Encounter -> Procedure Builder
- Patient
- Encounter
- Procedure
- Observation
- MedicationAdministration
- NutritionOrder
- Medication
- MedicationRequest
- ServiceRequest
- Specimen
- ServiceRequest -> Specimen -> Observation Builder
- ServiceRequest -> ImagingStudy -> DiagnosticReport Builder
- Chest X-Ray Study Builder
- Laboratory Panel Builder
- CBC Panel Builder
- Risk Assessment Builder
- Organization
- Location
- Practitioner
- PractitionerRole
- Planning
DICOM Router
SDK ini juga mendukung download file docker-compose.yml untuk DICOM Router SATUSEHAT:
const dockerCompose = await client.dicomRouter.downloadConfig();Secara default SDK akan memakai endpoint berikut:
- sandbox:
https://api-satusehat-stg.dto.kemkes.go.id/dicom-router - production:
https://api-satusehat.kemkes.go.id/dicom-router
Buy Us a Coffee
Kalau project ini membantu, kamu bisa dukung Digital Medika lewat Saweria:
Premium Support
Untuk premium support dan implementasi, hubungi:
- Email: [email protected]
- WhatsApp: Digital Medika

