Skip to main content

Data Contracts

What flows through DOSE​

DOSE receives drug list update files from upstream clients and delivers individual records to RxClaim. Two contracts define what that data looks like at each end:

ContractDirectionOwner
DOSEPayload.1.0Upstream → DOSEDOSE (schema validated)
BasePlanGpiApiRequestModelDOSE → RxClaimRxClaim CAT API

The field mapping between the two is maintained in a JOLT specification file in blob storage — not hard-coded.


Upstream payload — what clients send​

Each file contains an envelope describing the submission, and a list of GPI plan records to process.

Submission envelope​

FieldDescription
upstreamApplicationIdIdentifies the sending system (e.g. CLIC)
upstreamTaskIdUpstream task or work order reference
workOrderRequestIdBusiness work order identifier
submittingUserUser who initiated the submission
submissionTimestampWhen the file was submitted
batchRecordCountTotal number of records in the file

Each record​

Record metadata (recordMeta) — all fields required:

FieldTypeDescription
doseIdintegerAuto-assigned by DOSE — unique record identifier
requestIdstringUpstream request reference
requestRecordIdintegerPosition of this record within the request
targetRxClaimEnv.serverenumRxClaim server to target (see table below)
targetRxClaimEnv.schemastringRxClaim schema name (paired with server)
actionenumADD (only supported action in Phase 1)

RxClaim environment routing — server and schema are validated as a pair:

ServerSchemaEnvironment
RXDV1CLMV25FILDevelopment
RXBK1UAT / RXBCHUATCLMPRDFILUAT
RXBK1 / RXBCHCLMPRDFILProduction
RXCL1TSTCLMHA4FIL or CLMQA6FILTest

Each record independently specifies its target environment. Records in the same file can route to different RxClaim environments.

Record data (recordData) — core drug details:

FieldRequiredDescription
gpiYes14-character Generic Product Identifier
listIdYesGPI list name (1–10 chars)
fromDateYesEffective date
mscNoMulti-source code — *, B, M, N, O, Y (default *)
rxOtcNoRx/OTC indicator — *, N, O, P, R, S, Y (default *)
thruDateNoTermination date
drugStatusNoDrug status code — 50+ valid values (default F)
(50+ additional optional fields)NoDosing limits, pricing, contingent therapy, messages

Complex optional sub-objects:

Sub-objectWhat it captures
pricePricing schedules — pharmacy, client, copay, tier
quantityLimitsOverrideDate-specific quantity/days supply overrides
drugStatusTableDate-ranged drug status with group renewal
contingentTherapyScheduleContingent therapy protocol and date range
bypassContingentTherapyConditionsConditions under which contingent therapy is bypassed
messageMessage codes shown at point of sale
noteFree-text note (up to 50 chars)

Field mapping — how DOSE fields become RxClaim fields​

The mapping is JOLT-driven. Key mappings for Phase 1:

DOSE fieldRxClaim fieldNotes
targetRxClaimEnv.schemarxclaimEnvironmentTop-level routing
actionpgoPlanGpiOptionsDtl.action
listIdgpiListName
gpigenericProductId
mscproductMsc
rxOtcproductOtc
fromDatecurrentEffDate AND intentProductEffDateMaps to two fields
thruDatecurrentTermDate
drugStatuscurrentDrugStatus

Changing a field mapping requires updating the JOLT spec file in blob storage — not a code change or deployment.


RxClaim CAT API — what DOSE sends downstream​

One HTTP call per record:

POST /v1/rxclaim/plan/gpi/

Rate limits: 75 calls/sec · 10,000/hour · 30,000/day · 2,100ms response SLA


Record and job status tracking​

Upload job (upstream_job) — one per file:

Initiated → Uploaded → Processing → Completed
→ Partial Failed → (retry) → Processing
→ Error

Individual record (IntentRecord) — one per record in the file:

In Progress → Completed
→ Validation Failed (never retried — upstream notified)
→ Failed (RxClaim rejected — never retried)
→ Retry Pending → In Progress