Skip to Content
CMSSmartCMS (Singapore)Service Registry (Developers)

Service Registry (Developers)

@repo/smartcms-contract (packages/smartcms-contract/src/service-types.ts) lists all 56 SmartCMS service types from section 4 of the SmartCMS Interface Specification v1.8.8. Every other part of the integration looks services up here.

import { serviceBySn, serviceByRoute, serviceByWireType } from '@repo/smartcms-contract'; const balance = serviceBySn(1); // chasAnnualBalanceEnquiry

What each entry carries

FieldMeaning
snThe specification’s serial number, 1 to 56.
serviceTypeThe catalog name, exactly as the specification spells it.
wireServiceTypeThe value actually sent in the control header and the ServiceType header. Equal to serviceType except for S/N 48 (getPaginatedReferralByInstitution, as its workbook spells it) and S/N 54 and 55 (kebab-case).
routeThe path under the gateway base URL. null only for S/N 25, whose route the specification leaves blank; the client refuses to call it.
formatxml or json.
envelopeThe default wrapper: scg-json for JSON services, scg-xml for XML ones. It can be overridden per route with SMARTCMS_ENVELOPE_OVERRIDES.
legacyEnvelopeThe older AP481 request shape the service’s workbook documents (wrapping elements, fields, fixed values), or null.
legacyEnvelopeCandidateTrue exactly when legacyEnvelope is set: S/N 1 to 3 and 12 to 16.
groupThe entitlement group. Where a module exists, the group has the module’s name.
phaseDelivery phase: P0 platform, P1 CHAS and MHCP subsidies, P2 CDMP, P3 registries and NEHR contribution, P4 Healthier SG, PM an opt-in module outside the CHAS Badge, X out of scope, L legacy or retired.
kindenquiry when the call changes no remote state, otherwise submission.
safeToRetryTrue exactly for enquiries.

Do not correct the spelling. Names and routes are copied exactly, misspellings included (submisssion/hsg/iquitjourney, putReconcillationFile, getPaginatedReferralByInstituion). The gateway routes on these strings, and a test compares the list against a transcription of the specification.

A service can only be called when its group belongs to a module the organisation subscribes to and the location is entitled to it (see Gateway). Groups with no module (CHAS_DENTAL, ALPS, PSS, LEGACY) cannot be called at all. The planned modules, CMIS and HSG_BUNDLE, can be subscribed to, but Medbot has no code that calls their services yet. S/N 7, the clinic accreditation status query, is what a location’s connection test calls.

Each group below says what Medbot does with it today. Everything has been tested against the mock gateway only; nothing has been sent to Synapxe UAT yet.

Services by group

CHAS: CHAS and MOH subsidy claims

Module: CHAS

In Medbot: all seven are used. S/N 1 verifies the CHAS card at check-in; S/N 2 sends CHAS, PHPC, vaccination (VSS), developmental screening (CDS) and Screen for Life claims from the issued bill; S/N 3 polls claim status on a schedule; S/N 4 appeals a rejected claim; S/N 7 checks accreditation and is the connection test; S/N 8 and 9 read a patient’s vaccination and CDS claim history, which the bill’s subsidy claims are built from. See Claims Workflow.

S/NService typeRouteFormatKindPhase
1chasAnnualBalanceEnquiryenquiry/chasannualbalanceXMLEnquiryP1
2chasBillClaimSubmissionclaims/submission/chasXMLSubmissionP1
3chasBillClaimSubmissionStatusEnquiryclaims/enquiry/chasXMLEnquiryP1
4CHASAppealSubmissionsubmission/appealXMLSubmissionP1
7ClinicAccreditationStatusqueryaccreditation/clinicstatusXMLEnquiryP0
8VaccinationClaimHistoryenquiry/vaccinationclaimXMLEnquiryP1
9CDSClaimHistoryenquiry/cdsclaimXMLEnquiryP1

SFL: Screen for Life

Module: SFL. Screen for Life claims are submitted with S/N 2, so subscribing to SFL also creates CHAS entitlements.

In Medbot: both are used, to ask whether a patient is due for screening (S/N 11, which fans out to EISS and eCHAS) and to read their screening claims (S/N 10).

S/NService typeRouteFormatKindPhase
10CHASClaimHistoryQueryclaims/enquiry/claimhistoryXMLEnquiryP1
11SFLEligibilityQueryclaims/enquiry/sflXMLEnquiryP1

CDMP: Medisave (Chronic Disease Management Programme)

Module: CDMP

In Medbot: all four are used. S/N 15 checks the payer’s Medisave balance (with the once-off consent); S/N 12 submits, amends and cancels Medisave claims; S/N 13 pulls CPF’s advice from the CDMP mailbox; S/N 14 pulls CPF’s payment files for reconciliation.

S/NService typeRouteFormatKindPhase
12cdmpClaimSubmissionclaims/submission/cdmpXMLSubmissionP2
13CdmpClaimStatusclaims/enquiry/cdmpXMLEnquiryP2
14CdmpPaymentReconnclaims/enquiry/cdmpreconXMLEnquiryP2
15cdmpPayerBalanceEnquiryenquiry/payerbalanceXMLEnquiryP2

CIDC: Chronic disease clinical indicators

Module: CIDC

In Medbot: used. A report is prepared from each chronic visit and sent, updated or deleted once a doctor confirms it. See Reports.

S/NService typeRouteFormatKindPhase
16cidcReportSubmissionsubmission/cidcXMLSubmissionP3

DEROM: Disease notification

Module: DEROM

In Medbot: used. A notification is prepared from each notifiable diagnosis and sent once a doctor confirms it. Tuberculosis’s own form is not built. See Reports.

S/NService typeRouteFormatKindPhase
47putDiseaseNotificationsubmission/diseasenotificationJSONSubmissionP3

NIR: National Immunisation Registry

Module: NIR

In Medbot: S/N 24 notifies NIR of each vaccination given with an SDD product code, without review. S/N 25 has no route, so a change after NIR has the record is held for staff to make with NIR directly. See Reports.

S/NService typeRouteFormatKindPhase
24NIRsubmitNotificationOfVaccinationsubmission/nirimmunizationXMLSubmissionP3
25NIRsubmitVaccinationRecordUpdateNoneXMLSubmissionP3

CMIS: Medical alerts and allergies

Module: CMIS (planned)

In Medbot: not used yet.

S/NService typeRouteFormatKindPhase
20cmisSubmissionADRsubmission/allergiesXMLSubmissionP3
21cmisSubmissionMAsubmission/medicalalertXMLSubmissionP3
22CMISReportEnquiryADRenquiry/allergiesXMLEnquiryP3
23CMISReportEnquiryMAenquiry/medicalalertXMLEnquiryP3

MW_HEALTH: Migrant worker health (MOM)

Module: MW_HEALTH

In Medbot: used. A consult report is prepared from each completed visit of a migrant worker and sent once a doctor submits it. See Reports.

S/NService typeRouteFormatKindPhase
19PutHealthRecordsMWHsubmission/mwhJSONSubmissionPM

HSG_BUNDLE: Healthier SG

Module: HSG_BUNDLE (planned)

In Medbot: not used yet.

S/NService typeRouteFormatKindPhase
26getEnrolledResidentListenquiry/hsg/enrolledresidentsJSONEnquiryP4
27getEnrolledResidentToPCPenquiry/hsg/enrolledresidentpcpJSONEnquiryP4
28getHealthPlanenquiry/hsg/healthplanJSONEnquiryP4
29getHealthPlanListenquiry/hsg/healthplanlistJSONEnquiryP4
30putHealthPlansubmission/hsg/healthplanJSONSubmissionP4
31getQuestionnaireResponseenquiry/hsg/questionnaireresponseJSONEnquiryP4
32putCareReportsubmission/hsg/carereportJSONSubmissionP4
33getCareReportSummaryListenquiry/hsg/carereportsummarylistJSONEnquiryP4
34getCareReportenquiry/hsg/carereportJSONEnquiryP4
35getHealthPlanSummaryListenquiry/hsg/healthplansummarylistJSONEnquiryP4
36getiQuitJourneysubmisssion/hsg/iquitjourneyJSONEnquiryP4
37getImmunizationHistoryenquiry/hsg/ImmunizationJSONEnquiryP4
40putReferralsubmission/hsg/referralJSONSubmissionP4
41putCEGAppealsubmission/hsg/secureemailJSONSubmissionP4
42getWhitelistedDrugCatalogenquiry/drugcatalogueJSONEnquiryP4
43getWhitelistedDrugClaimCalculatorenquiry/claimcalculatorJSONEnquiryP4
48getPaginatedReferralByInstituionenquiry/paginatedreferralJSONEnquiryP4
49putNewReferralLinksubmission/newreferrallinkJSONSubmissionP4
50getFullReferralDetailsenquiry/fullreferraldetailsJSONEnquiryP4
51deleteDraftReferralsubmission/draftreferralJSONSubmissionP4
52cancelReferralsubmission/cancelreferralJSONSubmissionP4
53getReferralActionLinkenquiry/referralactionlinkJSONEnquiryP4
56getPatientCareSummaryTokenenquiry/hsg/patientcaresummarytokenJSONEnquiryP4

NEHR_REFERRAL: Referral contribution to NEHR

Module: NEHR_REFERRAL

In Medbot: both are used. S/N 38 sends each issued referral letter to the National Electronic Health Record, and a Cancelled composition with the same identifier when a letter NEHR has, or may have, is voided. S/N 39 sends the daily reconciliation file at 00:15 Singapore time. A letter that may carry termination-of-pregnancy, voluntary sterilisation or transplant information is held until a doctor confirms the patient’s consent. See Reports.

S/NService typeRouteFormatKindPhase
38putCompositionsubmission/hsg/compositionJSONSubmissionP3
39putReconcillationFilesubmission/hsg/nehrreconcillationJSONSubmissionP3

CHAS_DENTAL: CHAS dental

Module: None (out of scope)

S/NService typeRouteFormatKindPhase
5CHASDentalBalanceQueryenquiry/dentalXMLEnquiryX
6CHASDentalSubmissionsubmission/dentalXMLSubmissionX

ALPS: Home medication delivery

Module: None (out of scope)

S/NService typeRouteFormatKindPhase
44putHomeDeliveryMedicationsubmission/hsg/homedeliverymedicationJSONSubmissionX
45getMedicationDeliverystatusenquiry/hsg/medicationdeliverystatusJSONEnquiryX

PSS: Screening

Module: None (out of scope)

S/NService typeRouteFormatKindPhase
54getPSSEligibility (sent as get-screening-eligibility)enquiry/getPSSEligibilityJSONEnquiryX
55putPSSInfo (sent as put-screening)submission/putPSSInfoJSONSubmissionX

LEGACY: Legacy or retired

Module: None

S/NService typeRouteFormatKindPhase
17IRISMD131Notificationsubmission/md131XMLSubmissionL
18putMD532submission/md532JSONSubmissionL
46getPatientCareSummaryenquiry/hsg/patientcaresummaryJSONEnquiryL

Other contract exports

ModuleWhat it provides
envelope.tsZod schemas for the control header, SCG_RequestInfo and SCG_ResponseInfo (strict on documented fields, passing unknown keys through); SCG_STATUS_CODES with HTTP status, error type and retry flag; formatMsgDateTime / parseMsgDateTime for Singapore-time timestamps.
modules.tsSMARTCMS_MODULES (label, description, badge, status, service groups, “needs” chips, presets), modulesForPreset('gp-starter') and SMARTCMS_BADGE_LABELS. See Modules & Gating.
vocab.tsSubmission states, actor kinds (member, agent, job), gateway outcome kinds, business-error categories and entitlement environments (off, uat, prod).
codesets/Code tables for MHCP (CHAS, Screen for Life, VSS and CDS), MCAF and Mediclaim (Medisave), HSAR ValueSet 7.3, NIR, MW Health, CIDC (including its ICD-10-AM mapping), DEROM (including the notifiable diseases) and NEHR, with crosswalks between them. Date-aware lookup(setId, code, onDate) and activeEntries(setId, onDate).
fhir-urls.tsurn:gov:sg:nric and Medbot’s http://medbot.me/fhir/.../smartcms-* StructureDefinition, CodeSystem and NamingSystem URLs.
schema-version.tsSCHEMA_VERSION, the version of the knowledge base the contract was transcribed from (kb-2026-09).
identifiers.tsisValidNric, isValidFin and isValidNricOrFin: the one NRIC and FIN check-letter implementation every Medbot surface uses, including M-series FINs.
fhir/Helpers that build and read Medbot’s SmartCMS FHIR shapes: national demographics on Patient, coded ICD-10-AM encounter diagnoses (with search), CDS screening Procedures, and the CHAS, Screen for Life, VSS/CDS and Medisave choices on an Invoice.
dto/The wire shapes apps/api returns and the CMS parses, with their validation rules where the back-end has them: coverage.ts (CHAS card verification, S/N 1), claims.ts (the claims queue and review), sfl.ts (Screen for Life), vcdss.ts (VSS and CDS), cdmp.ts (Medisave balance, consent and claims), registry.ts (CIDC reports), derom.ts (DEROM notifications, with DROM’s error codes), mwh.ts (MW Health records, with MOM’s first-error check), demographics.ts (national demographics) and settings.ts (the SmartCMS settings page). hsg.ts is an empty placeholder for Healthier SG.

Run the package’s tests with pnpm --filter @repo/smartcms-contract test.

Last updated on