Skip to content

feat(deploy): ecqm and twh instance support#46

Merged
Taleef7 merged 2 commits into
mainfrom
feat/ecqm-twh-instances
May 21, 2026
Merged

feat(deploy): ecqm and twh instance support#46
Taleef7 merged 2 commits into
mainfrom
feat/ecqm-twh-instances

Conversation

@Taleef7
Copy link
Copy Markdown
Owner

@Taleef7 Taleef7 commented May 21, 2026

Summary

  • Adds ecqm.os.mieweb.org (clinical quality / wellness measures: hypertension, diabetes HbA1c, BMI, cholesterol LDL)
  • Adds twh.os.mieweb.org (Total Worker Health: all 8 OSHA + wellness measures combined)
  • workwell.os.mieweb.org is unchanged (4 OSHA measures only)

What changed

Backend:

  • 4 new CQL measure files (hypertension, diabetes_hba1c, obesity_bmi, cholesterol_ldl)
  • WORKWELL_INSTANCE env var controls which measures are seeded (workwell|ecqm|twh)
  • 4 new measureSeedSpecFor() cases in CqlEvaluationService
  • 10 new wellness value sets in ValueSetGovernanceService (b000... UUID range, non-colliding)
  • 4 new compliance rates in application.yml

Frontend:

  • NEXT_PUBLIC_APP_NAME and NEXT_PUBLIC_APP_TAGLINE build args in Dockerfile
  • All public-facing branding surfaces (layout, page, dashboard, login, sandbox) use env vars — each instance gets its own baked image

CI/CD:

  • deploy-ecqm-mieweb.yml — deploys to ecqm-api/ecqm hostnames with WORKWELL_INSTANCE=ecqm
  • deploy-twh-mieweb.yml — deploys to twh-api/twh hostnames with WORKWELL_INSTANCE=twh

Secrets required (all added)

DATABASE_URL_ECQM, DATABASE_URL_TWH, WORKWELL_AUTH_JWT_SECRET_ECQM, WORKWELL_AUTH_JWT_SECRET_TWH

Test plan

  • PR CI passes
  • Merge to main triggers all three deploy workflows
  • GET https://ecqm-api.os.mieweb.org/actuator/health{"status":"UP"}
  • GET https://ecqm-api.os.mieweb.org/api/measures → 4 wellness measures (no OSHA)
  • GET https://twh-api.os.mieweb.org/api/measures → 8 measures (OSHA + wellness)
  • https://ecqm.os.mieweb.org page title = "WorkWell eCQM Studio"
  • https://twh.os.mieweb.org page title = "WorkWell TWH"
  • After first push, make workwell-ecqm-frontend and workwell-twh-frontend GHCR packages public

🤖 Generated with Claude Code

- Add 4 wellness CQL measures (hypertension, diabetes_hba1c, obesity_bmi, cholesterol_ldl)
- Add WORKWELL_INSTANCE env var with instance-aware seeding in MeasureService
- Add 4 new measureSeedSpecFor() cases in CqlEvaluationService
- Add 10 wellness value sets in ValueSetGovernanceService (b000... UUID range)
- Add NEXT_PUBLIC_APP_NAME/NEXT_PUBLIC_APP_TAGLINE branding to Dockerfile and all public frontend surfaces
- Add deploy-ecqm-mieweb.yml and deploy-twh-mieweb.yml GitHub Actions workflows
- Add docs/ECQM_TWH_DEPLOYMENT_PLAN.md and JOURNAL.md entry

Owner actions needed before deploy: create two Neon projects and add
DATABASE_URL_ECQM, DATABASE_URL_TWH, WORKWELL_AUTH_JWT_SECRET_ECQM,
WORKWELL_AUTH_JWT_SECRET_TWH as GitHub repository secrets.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 21, 2026 14:49
@vercel
Copy link
Copy Markdown

vercel Bot commented May 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
workwell-measure-studio Ready Ready Preview, Comment May 21, 2026 4:04pm

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5dd9e966fc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +37 to +38
and "Days Since Last HbA1c" > 160
and "Days Since Last HbA1c" <= 180
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Align diabetes seeded due-soon window with CQL threshold

This new diabetes measure defines Due Soon as 161–180 days since last HbA1c, but demo seeding in CqlEvaluationService.input() still assigns DUE_SOON subjects a fixed 350-day gap (the same value used for annual measures). In practice, seeded diabetes subjects targeted as DUE_SOON will evaluate as OVERDUE, which distorts demo run distributions (zero/near-zero due-soon and inflated overdue) for Diabetes HbA1c Monitoring.

Useful? React with 👍 / 👎.

Hardcoded DUE_SOON->350 days caused diabetes HbA1c seeds to evaluate as
OVERDUE instead of DUE_SOON (window is 180 days, not 365). Add
complianceWindowDays to MeasureSeedSpec (defaults to 365 via compact
constructor) and derive seed gaps: compliant=window/3, due_soon=window-10,
overdue=window+60. Set 180 for diabetes; all other measures keep 365.

Addresses Codex review on PR #46.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Taleef7 Taleef7 merged commit 3d74334 into main May 21, 2026
9 checks passed
@Taleef7 Taleef7 deleted the feat/ecqm-twh-instances branch May 21, 2026 17:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants