Async reseed alone still left the first Care request without an onboarded org; ensure the shell synchronously, then refresh demo data afterResponse().
Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid the onboarding flash when reset-on-login deletes the tenant before the afterResponse() reseed finishes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop pre-assigning prescriptions to a default counter so Call next follows arrival order and each pharmacist only serves one active patient at a time.
Co-authored-by: Cursor <cursoragent@cursor.com>
Doctors can return to the active consultation from forms, lab, prescriptions, pathways, and bills; queue cards can re-announce called/serving tickets via the existing Queue recall bridge.
Co-authored-by: Cursor <cursoragent@cursor.com>
Provision one consultation point per doctor (room + identity) and role-based
points for pharmacy, lab, billing, and triage. Fixed-doctor appointments and
walk-ins issue only to the assigned point; Call next respects that assignment
and flags unresolved patients rather than random routing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Demo/pre-integration waiting lists showed patients but Call next hit an empty Queue and flashed a red error. Backfill missing tickets on Call next and queue load, and treat empty Call next as info.
Co-authored-by: Cursor <cursoragent@cursor.com>
When Queue integration is on, role pages issue tickets into their own
department queues and drive Call next → Serve → Complete on the native
lists. Integration off leaves existing UI unchanged.
Co-authored-by: Cursor <cursoragent@cursor.com>
Free single-location Queue orgs often use a default name like
Main Branch while Care stubs send Main; reuse the only branch.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire module activation to the Queue create/upsert APIs, persist
queue and counter UUIDs on Care stubs, and soft-deactivate on
module off so embedded service counters work without manual setup.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove the standalone Service Queues nav so call-next/now-serving lives on clinical queue, appointments, pharmacy, lab, and specialty surfaces; Pro orgs can activate dentistry and related modules with branch departments and queue stubs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Branch-scoped Care devices with hashed agent tokens, patient barcode lookup/labels, and provenance-aware vitals from a minimal device agent (Pro for agent hardware; wedge free).
Co-authored-by: Cursor <cursoragent@cursor.com>
DemoWorld seeding already used deterministic catalogs; the last randomElement calls blocked production demo:seed without fakerphp/faker.
Co-authored-by: Cursor <cursoragent@cursor.com>
Patients, branches, and org identity now match suite continuity keys; staff Members are created for training SSO without login reseed.
Co-authored-by: Cursor <cursoragent@cursor.com>
act_runner v0.2.x does not expose gitea.run_attempt, so release archive and
workspace paths rendered with a trailing dash. Use gitea.run_id only, matching
the Meet/CRM deploy workflows.
Demo Free/Pro/Enterprise accounts wipe and reload sample clinic data on
authorization-code SSO callbacks so every sales walkthrough starts clean.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pro dashboards now pitch Enterprise instead of the Free unlock copy, and plan context is shared with the banner so Pro tenants no longer see Free messaging.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace internal design jargon (Layer 1, narrative source of truth,
pathway instruments) with plain clinical language on consultations,
patient charts, settings, and nav.
The assessment engine was built but opt-in and hidden: flag defaulted
off, no sidebar entry, and no settings toggle. Default assessments_engine
on, auto-seed catalog when empty, add Settings toggle and Assessments
nav, and surface guidance from the patients list.
Add a template-driven assessment system with universal intake, clinical
pathways, disease instruments (stroke MVP + extended, diabetes, and ten
specialty packs), scoring, patient outcome trends, REST/API + FHIR
export, and Enterprise org-level assessment analytics. Seed packs and
design/licensing docs ship for deploy and pre-GA review.
Patient-facing suite (and Bird fallback) emails should appear from the
organization name. Stop defaulting from_name to CARE_SMTP_FROM_NAME.
Appointment notifications also prefer suite messaging with the same rule.
Care still linked to Integrations for Bird/SMS credentials after zero-config
suite messaging. Update copy and readiness checks so suite platform keys
count as ready; Account Messaging is primary, product keys are advanced.
Clinics on Pro/Enterprise can connect their own gateway in Integrations and collect card or MoMo on bills with 0% Ladill fee, while cash payments and balance totals stay correct for pending checkouts.
Let operators pick how many branches to bill next to the monthly/prepaid toggles so Pro and Enterprise totals and charges use branches × per-branch rate.
Free keeps core records, appointments, and basic workflows; Pro unlocks lab, pharmacy, billing, and Queue. Both paid tiers bill per branch with unlimited branches. Enterprise adds multi-dept workflows, analytics, AI-assisted healthcare integration, and priority support (not Afia).
Staff can hand off patients between queues with ticket number kept, clearer actions, and success feedback.
Co-authored-by: Cursor <cursoragent@cursor.com>
Hospital admins can manage assignable doctors and invite team members
from Ladill mailboxes; invited staff only see Care tools they need.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keys issued on Bird live in Bird’s DB; the old ladill.com relay always returned Invalid or missing API key.
Co-authored-by: Cursor <cursoragent@cursor.com>
Patients can be SMS/email notified on booking and video schedule when enabled in Settings. Bird validation now accepts only lsk_live_ keys, strips paste artifacts, and surfaces the platform error.
Co-authored-by: Cursor <cursoragent@cursor.com>
Appointment cancel now calls Meet's room cancel API when a video visit was scheduled, without blocking Care if Meet is unavailable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Appointment cancel and other destructive actions now use the shared modal UI instead of window.confirm.
Co-authored-by: Cursor <cursoragent@cursor.com>
Patient SMS/email now use encrypted tenant keys via the platform relay instead of shared platform Care API keys.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire Care to Ladill SMS and Bird management APIs on the patient page, and surface Meet auth/config failures as friendly validation errors instead of a 502 page.
Co-authored-by: Cursor <cursoragent@cursor.com>
Members, appointments, bills, prescriptions, and patients now use consistent warning/danger pill buttons.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the once-per-session sessionStorage guard (which suppressed the loading
screen after its first appearance) with entry-aware logic: show on app entry
and reloads, suppress on internal link navigations and back/forward.
Introduce shared x-care.page-hero with summary stats so key list views
match the Ladill app hero pattern used across Frontdesk and Link.
Co-authored-by: Cursor <cursoragent@cursor.com>
Provision alone left care_enabled false on Queue; settings re-save and
service queue pages now recover when integration is out of sync.
Co-authored-by: Cursor <cursoragent@cursor.com>
Schedule and start video visits via the Meet service API, persist join links on appointments, and propagate the shared copy-button component.
Co-authored-by: Cursor <cursoragent@cursor.com>
Honors the intended URL for signed-in users instead of calling post-auth-redirect, which returned /sso/connect again.
Co-authored-by: Cursor <cursoragent@cursor.com>
Server-side auth ping cannot reliably see auth.ladill.com cookies, so treat 401 as inconclusive and use client keepalive instead of signing users out.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace public ID member form with email invites, SSO provisioning, and
post-auth redirect for pending team access.
Co-authored-by: Cursor <cursoragent@cursor.com>
When 6/12/24 month Paystack is selected, Pro and Business prices display the full term amount instead of /mo.
Co-authored-by: Cursor <cursoragent@cursor.com>
Organizations can subscribe from wallet, expire correctly on free tier, and renew nightly via care:pro-renew.
Co-authored-by: Cursor <cursoragent@cursor.com>
Facility settings stay in the sidebar footer; they no longer repeat under
Administration alongside Branches, Departments, and Team.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add Afia and notifications to the top bar, remove the duplicate desktop page
title, wire notification and AI routes, and fix mobile nav notification links.
Co-authored-by: Cursor <cursoragent@cursor.com>
When more than six rows of apps are available, the launcher panel stays fixed
height and scrolls with a styled scrollbar instead of growing indefinitely.
Co-authored-by: Cursor <cursoragent@cursor.com>
The layout partial already references favicon.svg as the primary icon; this
adds the Care launcher artwork so tabs and bookmarks show the correct brand.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove stale current symlink before promoting release and document
passwordless sudo fallback for deploy user.
Co-authored-by: Cursor <cursoragent@cursor.com>