Care Plan Service — Local Dev Setup
Status: populated Owner: TBD Last updated: 2026-04-18 Companion: Service Template · 03 platform-services · 02 DDD
Prerequisites
- Docker Desktop 4.x+
- Node.js 22 LTS
- pnpm 9+
docker-compose.yml
version: "3.9"
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: care_plan_dev
POSTGRES_USER: care_plan
POSTGRES_PASSWORD: dev_password
ports:
- "5434:5432"
volumes:
- care_plan_pg_data:/var/lib/postgresql/data
nats:
image: nats:2.10-alpine
command: ["--jetstream", "--store_dir=/data"]
ports:
- "4222:4222"
- "8222:8222"
volumes:
- care_plan_nats_data:/data
keycloak:
image: ghcr.io/ghasi/keycloak-dev:latest
ports:
- "8080:8080"
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
volumes:
care_plan_pg_data:
care_plan_nats_data:
Environment Setup
cp .env.example .env
# Edit .env with local values
.env.example:
DATABASE_URL=postgres://care_plan:dev_password@localhost:5434/care_plan_dev
NATS_URL=nats://localhost:4222
KEYCLOAK_JWKS_URI=http://localhost:8080/realms/ghasi-dev/protocol/openid-connect/certs
TERMINOLOGY_SERVICE_URL=http://localhost:3010
AUDIT_SERVICE_URL=http://localhost:3011
PROVIDER_DIRECTORY_SERVICE_URL=http://localhost:3012
CARE_PLAN_MODULE_ENTITLEMENT=ehr.care_plans
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
PORT=3000
Start and Migrate
# Start dependencies
docker compose up -d
# Install packages
pnpm install
# Run database migrations
pnpm drizzle-kit migrate
# Seed development data
pnpm seed
# Start service in watch mode
pnpm dev
Seed Data
pnpm seed creates:
- Tenant:
ten_dev_01with care_plans entitlement enabled - Patient:
pat_dev_01linked to tenant - Sample care plan with 2 goals and 1 activity
Common Commands
| Command | Purpose |
|---|---|
pnpm dev | Start with hot reload |
pnpm test | Run unit + integration tests |
pnpm test:unit | Unit tests only |
pnpm test:integration | Integration tests (requires Docker) |
pnpm test:e2e | E2E tests |
pnpm drizzle-kit generate | Generate migration from schema changes |
pnpm drizzle-kit migrate | Apply pending migrations |
pnpm lint | ESLint check |
pnpm typecheck | TypeScript strict check |
Verify Service
# Health check
curl http://localhost:3000/health/ready
# Create a care plan (requires dev JWT)
curl -X POST http://localhost:3000/api/v1/care-plans \
-H "Authorization: Bearer <dev-token>" \
-H "Content-Type: application/json" \
-d '{"patientId":"pat_dev_01","title":"Test Plan"}'