GuideGLP

Retiring as a standalone service under the Canvas-first architecture. GuideGLP partners become Organizations in the shared Canvas instance.

GuideGLP is no longer a separate service.

Under Canvas-first, each GuideGLP partner (Biologics, LCMC, Sleep Corner, etc.) is a FHIR Organization.kind='b2b' in the same Canvas instance that serves YourEra DTC. Their patients have Patient.managingOrganization pointing to their org. They get white-labeled portals, branded notifications, and tenant-scoped admin views — but share the same orchestrator, pharmacy-router, commerce, payment, shipping, and notification services.

Why GuideGLP as a service is retiring

The original design put GuideGLP in its own standalone service with its own database, its own physician tables, its own orders table. This created:

  • Duplicate effort: GuideGLP and DTC had parallel implementations of order lifecycle, billing, pharmacy routing, and notifications.
  • Divergent data models: guide_physicians vs the YourEra physician table, guide_orders vs orchestrator orders.
  • A cross-cutting "source" discriminator threading through every service that had to branch on whether a request came from GuideGLP or DTC.
  • No path to share Canvas infrastructure — GuideGLP patients were explicitly excluded from Canvas.

Under Canvas-first, GuideGLP partners are tenants in the shared platform. The tenant discriminator is Organization.kind, not a service boundary. See canvas-first-principles §3 for the multi-tenancy pattern.

What happens to each GuideGLP responsibility

  • Partner identity + branding: organization-service.organizations + organization_branding + organization_portal_config + organization_notification_config.
  • White-label portals: patient-portal (white-labeled per organization_custom_domains) + admin-portal (tenant-scoped with admin_org_memberships).
  • Partner physicians: physician-registry + physician_org_memberships. The same registry powers YourEra DTC physicians; a physician can serve multiple orgs.
  • Partner orders: commerce-service.orders with organization_id. Same orchestrator saga runs for every fill, regardless of tenant.
  • Partner intake flows: intake-gateway with host-based org resolution. Custom domains configured via organization_custom_domains.
  • Partner patient records: Canvas FHIR Patient with managingOrganization set to the partner's Organization. Clinical data isolation is enforced in our service layer, not by Canvas.
  • Partner notifications: notification-service with per-org verified senders (from organization_notification_config.from_email) and per-org template overrides.
  • Partner pharmacy routing: Same pharmacy-router, same policy (GMP primary, Strive fallback), with routing re-evaluated per fill saga.
  • Partner billing: commerce-service + payment-service support billing_plans.organization_id for per-org pricing overrides.

Migration path

The standalone guide-glp service + DB retires as the final phase (17) of the Canvas-first refactor. For each partner:

  1. Create an organizations row + Canvas Organization resource.
  2. Configure branding, portal flags, notification config, custom domains.
  3. Onboard partner physicians via physician_org_memberships.
  4. Migrate partner patients: create Canvas Patient with managingOrganization + patient_directory row.
  5. Migrate in-flight orders to commerce-service.orders with charge_method reflecting their plan.
  6. Cut the partner over: new intakes land on Canvas-first; old guide-glp service stops accepting new writes for them.
  7. Once all partners cut over, delete the guide-glp service, repo, and database.

See Refactor Sequence for the full ordered plan.

If you're looking for GuideGLP-specific information

For anything about a specific partner's configuration (Biologics branding, LCMC physicians, Sleep Corner custom domain, etc.), the canonical sources under Canvas-first are:

  • Organization state — admin-portal /all/organizations/{id}/manage (superadmin only).
  • Partner physician memberships — admin-portal /org/{slug}/physicians.
  • Partner custom domain TLS status — admin-portal /org/{slug}/custom-domains.
  • Partner branding — admin-portal /org/{slug}/branding.
  • Partner pharmacy routing overrides — (if any) Pharmacy Router §per-org routes.
  • Partner pricing overrides — commerce-service billing_plans with organization_id set.