View/refer users keep read surfaces and refer actions; zero-access
modules stay out of nav via existing enabledModulesForMember filtering.
Co-authored-by: Cursor <cursoragent@cursor.com>
Icon names live on the specialty catalog; SVG paths resolve through a shared map and render in sidebar, dashboard, settings, and the specialty shell.
Co-authored-by: Cursor <cursoragent@cursor.com>
The dropdown was fetching care.wallet (account redirect HTML) instead of a
billing balance API, so Alpine always fell back to "View wallet".
Co-authored-by: Cursor <cursoragent@cursor.com>
Give nurses, lab techs, pharmacists, and GPs broad access to day-to-day modules, keep restricted specialties for specialists (with support nurses), and let GPs view results or refer without full clinical edit.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace free-text specialty on practitioner and team-invite forms with a shared selectable list so clinicians pick a known specialty.
Co-authored-by: Cursor <cursoragent@cursor.com>
Make appointment/practitioner department (and practitioner) options show branch names so duplicates are distinguishable, and replace the patient select with a searchable dropdown.
Co-authored-by: Cursor <cursoragent@cursor.com>
Admin dashboard module cards open per-module settings with editable service prices; GP consultation and clinic fees live under Settings → GP pricing (inventory drugs unchanged).
Co-authored-by: Cursor <cursoragent@cursor.com>
Branch-scoped staff could 404 on charts when the patient's home branch differed from the visit site; Orders also linked doctors to a lab index they could not access.
Co-authored-by: Cursor <cursoragent@cursor.com>
Shorten composite index names under the 64-character limit and recover partial deploys where treatment plans already exist.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move timeline into a workspace tab, surface Complete consultation and Call again in Actions, and make Call next end the current encounter then open the next called patient.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove Dentistry and other specialty modules from the sidebar; Queue now uses each doctor's specialty desk context for Call next, waiting lists, and Start into specialty clinical workspaces.
Co-authored-by: Cursor <cursoragent@cursor.com>
Specialty homes now use the shared Waiting/In care board with Call next, Start routes specialty tickets into specialty workspaces, and redundant Dentistry/Specialty module chrome is removed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reuse the shared prescription form in x-modal so desktop gets a popup and mobile gets the existing bottomsheet behavior, then return to the consultation after create.
Co-authored-by: Cursor <cursoragent@cursor.com>
Desktop uses a right sticky Actions column; mobile uses a FAB above the nav that opens a bottomsheet. Request investigations moves into a modal/sheet, and Call next is available on the consultation panel.
Co-authored-by: Cursor <cursoragent@cursor.com>
Demo GP appointments now use core desk departments, and the doctor waiting list excludes specialty queue contexts so MAT/PHY tickets stay on specialty modules.
Co-authored-by: Cursor <cursoragent@cursor.com>
Demo cover desks on non-home branches now use specialty doctor names so Practitioners lists people, not departments.
Co-authored-by: Cursor <cursoragent@cursor.com>
Show the current invoice book by status so Paid/Partial are not hidden when create dates fall outside MTD.
Co-authored-by: Cursor <cursoragent@cursor.com>
Facility admins see analytics overviews instead of operational directories; floor roles keep list UIs, with optional ?view=list for admins who need records.
Co-authored-by: Cursor <cursoragent@cursor.com>
Hospital admins no longer see specialty/queue floor nav; Call next is a full-width button; specialty encounters open module-specific clinical forms instead of the general consultation page.
Co-authored-by: Cursor <cursoragent@cursor.com>
Admins without a desk now scan all specialty service points, KPIs use the same branch as queue ops, and empty Call next flashes explain tickets vs other branches.
Co-authored-by: Cursor <cursoragent@cursor.com>
Visit-scoped structured forms for Emergency triage, Blood Bank requests,
and Dentistry odontogram with derived alerts, document upload, and KPI counts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Overview/Visits/History/Billing/Workspace layout with stage maps, KPIs,
patient header/timeline, and service catalogs seeded into Billing on activate.
Emergency, Blood Bank, and Dentistry ship first-class shell configs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Issue, call-next, serve, and complete tickets locally so Care Pro no longer
needs QUEUE_API_* when CARE_QUEUE_DRIVER=native (default). Remote Ladill Queue
remains available for cutover; PHPUnit keeps the remote driver for existing fakes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Capture the unified workflow, UI, queue, and billing blueprint, and add a Cursor rule so specialty work follows the shared shell instead of one-off apps.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add Cardiology through Child Welfare to the specialty catalog, keep Emergency and Blood Bank always enabled on Pro/Enterprise sidebars, and generate matching demo specialty doctors.
Co-authored-by: Cursor <cursoragent@cursor.com>
Seed investigation types early (before clinical data), expand the default catalog, scope Lab → Catalog by organization, and harden practitioner-branch sync so a mid-reseed failure cannot wipe the catalog.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace optional “All branches” with required branch checkboxes; doctors may switch only among assigned sites, never org-wide by default.
Co-authored-by: Cursor <cursoragent@cursor.com>
Doctors were treated as multi-branch when Identity cleared branch_id; now they stay on their assigned/desk site, specialty desks are home-branch only, and the queue shows site name as text only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Nav and pages require a linked practitioner desk in the module department; demo seeds specialty doctors and stops overwriting their assigned waiters.
Co-authored-by: Cursor <cursoragent@cursor.com>
Doctors no longer see branch/practitioner pickers; queue, appointments, patients, and dashboard only include visits on their linked desk.
Co-authored-by: Cursor <cursoragent@cursor.com>
Demo doctors were querying their own public_id, so branches/patients/queues looked empty even though the Pro tenant had data.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stops cramming ticket status, destination, and patient name onto one line across Patient, Pharmacy, Lab, and specialty queues.
Co-authored-by: Cursor <cursoragent@cursor.com>
Patient queue syncs consultation and specialty waiters; specialty contexts now provision desks so check-in/onboarding no longer leaves half the list on local positions only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Specialty demo seed reused slot+1 per module; repair duplicates on queue load and renumber after demo seed so waiting lists show 1..n.
Co-authored-by: Cursor <cursoragent@cursor.com>
Admins pick a working branch once; session keeps Pharmacy Call Next and lists scoped to that site so ticket numbers no longer collide across branches.
Co-authored-by: Cursor <cursoragent@cursor.com>
Link DemoWorld doctor staff to practitioners, clear unresolved routing, distribute staff across branches, and restore scoped consultation/pharmacy ticket sync so demos are not left Unassigned.
Co-authored-by: Cursor <cursoragent@cursor.com>
Provision one branch/context at a time instead of the whole org, fall back to a desk when doctor counters are catching up, sync pharmacy tickets in Care list order on page load, and seed waiting_at/queue_position for demos.
Co-authored-by: Cursor <cursoragent@cursor.com>
Defer Queue provision and ticket backfill after the settings response, harden messaging credential creation against lock races, and stop wrapping demo seed in a long-held transaction.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enterprise reseeds were blocked for minutes on queue.ladill.com calls; local specialty data still seeds, and Queue tickets can backfill on first visit.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enterprise reseeds were hanging on per-module Queue HTTP; activate specialties locally first, then provision once, and limit ticket sync to core contexts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Free and real onboarding stay opt-in; Pro/Enterprise demos activate every catalog specialty and seed waiting appointments so module pages are populated.
Co-authored-by: Cursor <cursoragent@cursor.com>
Demo Pro was left as an empty workflow shell after lock-timeout races; clear leftover rollout flags on seed, sync-reseed empty tenants on login, and repair missing facility workflow indexes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Production already had care_facility_workflows from a prior attempt, so recreate checks let migrate finish and record the batch.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduces a facility workflow engine as Care's primary configuration
object: onboarding now leads with a facility category (which modules to
enable) and a workflow template (how patients move + where money is
collected), including standard herbal hospital/clinic templates.
Templates materialize into care_facility_workflows/care_workflow_stages.
The engine tracks a visit's position via care_visit_stage_advances and,
with FinancialGateService, gates a stage's queue behind a cleared
FinancialObligation (paid/authorized/waived/deferred) for "before"
payment timing while leaving "after" (pay-at-exit) flows unblocked.
Gated behavior is opt-in behind the workflow_engine/financial_gates
rollout flags; legacy orgs keep current behavior.
Co-authored-by: Cursor <cursoragent@cursor.com>
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>