Skip to main content

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_01 with care_plans entitlement enabled
  • Patient: pat_dev_01 linked to tenant
  • Sample care plan with 2 goals and 1 activity

Common Commands

CommandPurpose
pnpm devStart with hot reload
pnpm testRun unit + integration tests
pnpm test:unitUnit tests only
pnpm test:integrationIntegration tests (requires Docker)
pnpm test:e2eE2E tests
pnpm drizzle-kit generateGenerate migration from schema changes
pnpm drizzle-kit migrateApply pending migrations
pnpm lintESLint check
pnpm typecheckTypeScript 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"}'