Medication Service — Local Dev Setup
Status: populated Owner: TBD Last updated: 2026-04-17 Companion: Service Template
1. Prerequisites
| Tool | Version |
|---|---|
| Node | 22 LTS |
| pnpm | 9.x |
| Docker + Compose | 24+ |
| psql | 16 (for direct DB) |
2. Bring-up
cd services/medication-service
pnpm install
cp .env.example .env
docker compose up -d postgres nats redis
pnpm db:migrate
pnpm db:seed
pnpm dev
Service listens on http://localhost:4130 by default.
3. docker-compose services
postgres: ghcr.io/ghasi/pg16-rls:latest # preloaded RLS helpers
nats: nats:2.10-alpine --jetstream
redis: redis:7-alpine
vault-dev: hashicorp/vault:1.16 (dev mode)
mock-fhir: ghcr.io/ghasi/mock-fhir:latest # mocks chart/terminology/gateway
4. Seed Data
pnpm db:seed loads:
- 2 tenants (
ten_demo_afg_01,ten_demo_uae_01). - 10 patients per tenant.
- 150 RxNorm medications, WHO EML subset.
- 3 pharmacy locations per tenant (1 inpatient, 1 outpatient, 1 retail).
- 200 stock items with varied lots/expiries (some near-expiry, one recalled lot).
- 5 prescribers, 3 pharmacists, 1 pharmacist-in-charge per tenant.
5. Common Commands
| Command | Purpose |
|---|---|
pnpm dev | Start dev server (watch) |
pnpm test | Unit tests |
pnpm test:int | Integration tests (docker required) |
pnpm test:e2e | E2E flows |
pnpm db:migrate | Drizzle migration |
pnpm db:seed | Seed dev data |
pnpm openapi:gen | Regenerate openapi.json |
pnpm pact:publish | Publish consumer pacts |
pnpm outbox:replay --since 1h | Manual outbox replay |
6. Environment Variables
| Var | Example |
|---|---|
DATABASE_URL | postgres://...:5432/medication |
NATS_URL | nats://localhost:4222 |
REDIS_URL | redis://localhost:6379 |
IDENTITY_JWKS_URL | http://localhost:4100/.well-known/jwks.json |
FHIR_CHART_BASE_URL | http://localhost:4200/fhir/R4 |
TERMINOLOGY_BASE_URL | http://localhost:4300 |
EPRESCRIBING_GATEWAY_BASE_URL | http://localhost:4140 |
DRUG_KB_BASE_URL | http://localhost:4500/mock-kb |
NCPDP_ENABLED | false |
OTEL_EXPORTER_OTLP_ENDPOINT | http://localhost:4318 |
Validated via Zod at startup; missing variables fail fast.