
   PASS  Tests\Feature\AdminPageSmokeTest
  ✓ parameterless get pages render without server errors                                                         8.64s  
  ✓ record pages render without server errors                                                                    4.69s  
  ✓ the administrator can reach the beds admissions and invoice capabilities                                     0.77s  

   PASS  Tests\Feature\AllergyMedicationTest
  ✓ missing status is unknown not none                                                                           0.60s  
  ✓ allergies page renders unknown banner for unassessed patient                                                 0.73s  
  ✓ assessed none is distinct from unknown                                                                       0.75s  
  ✓ recording an allergy sets status to recorded                                                                 0.61s  
  ✓ blank allergen is rejected                                                                                   0.60s  
  ✓ unknown severity is preserved not defaulted                                                                  0.61s  
  ✓ assessed none refused while active allergies exist                                                           0.62s  
  ✓ entered in error keeps the row and recalculates status                                                       0.62s  
  ✓ entered in error requires a reason                                                                           0.61s  
  ✓ reset to unknown requires a reason                                                                           0.60s  
  ✓ reset to unknown withdraws an assessment                                                                     0.60s  
  ✓ nurse can record allergies                                                                                   0.59s  
  ✓ receptionist cannot record allergies                                                                         0.60s  
  ✓ recording a medication with source and provenance                                                            0.60s  
  ✓ blank medication name is rejected                                                                            0.58s  
  ✓ discontinuing keeps the row with a reason                                                                    0.60s  
  ✓ discontinue requires a reason                                                                                0.59s  
  ✓ only active medications can be discontinued                                                                  0.59s  
  ✓ reconciliation records actor and time                                                                        0.60s  
  ✓ allergies page renders for doctor                                                                            0.72s  
  ✓ receptionist cannot open the allergies page                                                                  0.73s  
  ✓ tenant isolation second tenant patient is not reachable                                                      0.67s  
  ✓ audit actions are recorded                                                                                   0.63s  
  ✓ medication page shows discontinued items retained                                                            0.73s  

   PASS  Tests\Feature\AppointmentBookingTest
  ✓ booking succeeds inside a published window                                                                   0.61s  
  ✓ clinician double booking is rejected                                                                         0.62s  
  ✓ room double booking is rejected                                                                              0.60s  
  ✓ booking outside published window is rejected                                                                 0.59s  
  ✓ booking during a whole day override is rejected                                                              0.57s  
  ✓ reschedule revalidates conflicts against the new slot                                                        0.61s  
  ✓ reschedule moves the appointment when the new slot is free                                                   0.61s  
  ✓ cancellation requires a reason and frees the slot                                                            0.61s  
  ✓ status transitions are recorded and audited                                                                  0.59s  
  ✓ no show marks the appointment                                                                                0.61s  
  ✓ booking without manage permission is rejected                                                                0.62s  
  ✓ portal resolves only the signed in patients own record                                                       0.73s  
  ✓ portal requires the book own permission                                                                      0.85s  
  ✓ the portal offers only clinical roles as bookable clinicians                                                 1.43s  
  ✓ appointments index requires view permission                                                                  1.42s  
  ✓ booking form requires manage permission                                                                      1.40s  
  ✓ http booking surfaces conflicts as validation errors                                                         1.24s  
  ✓ tenant isolation on appointments                                                                             1.43s  
  ✓ the booking service refuses a patient from another tenant                                                    1.20s  
  ✓ availability service blocks unavailable clinicians                                                           1.18s  

   PASS  Tests\Feature\AskBitmedAiTest
  ✓ demo mode is labelled and is not presented as model output                                                   0.79s  
  ✓ asking a question stores the turn                                                                            0.60s  
  ✓ a demo answer is clearly labelled as an example                                                              0.56s  
  ✓ an unavailable provider produces no fabricated answer                                                        1.04s  
  ✓ urgent symptom prompt triggers escalation without false reassurance                                          1.17s  
  ✓ a question without a subject asks for clarification                                                          1.17s  
  ✓ the interface explains that no records are accessible                                                        0.85s  
  ✓ the provider interface offers no way to reach a record                                                       0.55s  
  ✓ the question service accepts no patient context at all                                                       0.81s  
  ✓ possible identifiers in a question are flagged                                                               1.31s  
  ✓ history is private to one user and never shared                                                              1.15s  
  ✓ history of another tenant is not visible                                                                     0.64s  
  ✓ validation rejects an empty question                                                                         0.60s  
  ✓ a patient can ask general questions                                                                          0.67s  
  ✓ jargon adjustment is available without patient context                                                       0.58s  

   PASS  Tests\Feature\AuditTest
  ✓ seeding writes audit entries                                                                                 0.69s  
  ✓ audit entries are append only                                                                                1.36s  
  ✓ audit entries cannot be deleted                                                                              1.31s  
  ✓ reading the audit trail is itself audited                                                                    1.72s  
  ✓ metadata never records secrets or clinical values                                                            1.25s  
  ✓ audit entry keeps attribution even if the account is removed                                                 1.32s  
  ✓ a tenant cannot read another tenants audit trail                                                             1.84s  

   PASS  Tests\Feature\AuthorizationTest
  ✓ doctor holds clinical permissions                                                                            1.67s  
  ✓ administration rights do not grant clinical access                                                           1.68s  
  ✓ patient holds only self service permissions                                                                  1.29s  
  ✓ unknown permission key is denied                                                                             1.16s  
  ✓ patient scoped permission requires an assigned care relationship                                             1.19s  
  ✓ facility scoped grant does not travel to another facility                                                    1.21s  
  ✓ expired grant loses access                                                                                   1.20s  
  ✓ revoked grant loses access immediately                                                                       1.20s  
  ✓ disabled account holds no permission                                                                         1.16s  
  ✓ emergency access requires the explicit capability and a reason                                               1.18s  
  ✓ authorization denials are audited                                                                            1.29s  
  ✓ route permission denial returns forbidden without revealing records                                          1.62s  
  ✓ patient cannot reach staff workspaces                                                                        1.83s  
  ✓ platform account requires a platform role for platform powers                                                1.29s  
  ✓ tenant account never gains platform powers                                                                   0.94s  

   PASS  Tests\Feature\BedAndAdmissionIsolationTest
  ✓ a bed can be assigned and becomes occupied                                                                   0.77s  
  ✓ a bed already taken cannot be assigned again                                                                 0.72s  
  ✓ a patient can be transferred between beds                                                                    0.75s  
  ✓ a transfer to a bed already taken is refused                                                                 0.73s  
  ✓ a bed can be released and the stay retained                                                                  0.74s  
  ✓ an admission can be raised and then discharged                                                               0.83s  
  ✓ an admission cannot be discharged twice                                                                      0.79s  
  ✓ discharge requires a summary                                                                                 0.73s  
  ✓ the discharge form renders and submits                                                                       1.03s  
  ✓ the bed runner cannot admit or discharge                                                                     0.89s  
  ✓ the admitting doctor cannot move a patient between beds                                                      0.85s  
  ✓ a patient cannot open the bed register or place themselves                                                   1.06s  
  ✓ another clinics bed is not readable                                                                          0.77s  
  ✓ a patient cannot be placed in another clinics bed                                                            0.77s  
  ✓ a bed cannot be transferred into another clinic                                                              0.76s  
  ✓ another clinics bed stay cannot be released                                                                  0.74s  
  ✓ another clinics admission is not readable                                                                    0.74s  
  ✓ another clinic cannot discharge your admission                                                               0.78s  
  ✓ an admission cannot be raised against another clinic                                                         0.75s  

   PASS  Tests\Feature\CalendarFoundationTest
  ✓ seeded availability windows exist for the pilot                                                              0.61s  
  ✓ calendar is permission guarded                                                                               0.74s  
  ✓ calendar renders for a doctor                                                                                0.77s  
  ✓ calendar uses text labels not colour alone                                                                   0.80s  
  ✓ a whole day override blocks the whole day                                                                    0.82s  
  ✓ a part day override blocks only the covered slots                                                            0.82s  
  ✓ a different tenant cannot view another tenants calendar                                                      0.70s  
  ✓ time off is recorded against one staff member                                                                0.62s  

   PASS  Tests\Feature\CareRecordingTest
  ✓ recording a care action attributes it to the authenticated user                                              0.75s  
  ✓ a care action cannot be attributed to someone else via the form                                              0.72s  
  ✓ a care action cannot be recorded against another clinics patient                                             0.73s  
  ✓ a care action cannot reference another clinics order                                                         0.76s  
  ✓ a care action requires an amendment reason to be amended                                                     0.80s  
  ✓ amending a care action never reassigns its performer or patient                                              0.72s  
  ✓ a staff member cannot be assigned to the same patient twice                                                  0.76s  
  ✓ ending a care team assignment retains the row for the history                                                0.78s  
  ✓ a care team assignment cannot be ended twice                                                                 0.76s  
  ✓ a care team assignment cannot name another clinics staff member                                              0.75s  
  ✓ a treatment entry stores a diagnosis code verbatim                                                           0.71s  
  ✓ amending a treatment entry never reassigns who treated the patient                                           0.77s  
  ✓ a treatment entry cannot be recorded for another clinics patient                                             0.73s  
  ✓ a cashier is refused because clinical access is not theirs                                                   1.21s  
  ✓ the clinic screens render with their seeded data                                                             0.87s  
  ✓ one clinic cannot read another clinics care record                                                           0.72s  

   PASS  Tests\Feature\ClinicalDecisionSupportTest
  ✓ only approved active rules fire                                                                              0.63s  
  ✓ recorded allergy rule fires for the patient with allergies                                                   0.63s  
  ✓ unknown allergy status is reported as unknown never none                                                     0.62s  
  ✓ assessed none allergy status triggers neither allergy rule                                                   0.63s  
  ✓ approval makes a reviewed rule fire                                                                          0.62s  
  ✓ duplicate order rule reports a missing input when no line is selected                                        0.62s  
  ✓ approval requires a note and only from review                                                                0.62s  
  ✓ a draft rule cannot be approved                                                                              0.61s  
  ✓ unvalidated rule content cannot be created                                                                   0.62s  
  ✓ approved rule is immutable and retirement stops it firing                                                    0.66s  
  ✓ retired rule no longer fires                                                                                 0.66s  
  ✓ rule outside its effective window does not fire                                                              0.62s  
  ✓ override requires a reason and records the rule snapshot                                                     0.67s  
  ✓ override and acknowledgement are recorded                                                                    0.64s  
  ✓ retirement does not rewrite recorded guidance events                                                         0.67s  
  ✓ alert burden metrics report firings and override rate                                                        0.60s  
  ✓ guidance verbs are patient scoped                                                                            0.68s  
  ✓ rule governance requires the governance verb                                                                 0.62s  
  ✓ rule register is hidden from other tenants                                                                   0.61s  
  ✓ record panel shows guidance for a clinician                                                                  0.78s  
  ✓ cds register is open to clinicians and closed to reception                                                   0.87s  
  ✓ order placement records guidance surfacing without blocking                                                  0.64s  

   PASS  Tests\Feature\ClinicalOrderTest
  ✓ seeded catalogue is orderable and a retired line is not                                                      0.62s  
  ✓ order copies catalog code name and version at placement                                                      0.64s  
  ✓ retiring a catalog line never rewrites an existing order                                                     0.64s  
  ✓ ordering a retired or unknown line is refused                                                                0.69s  
  ✓ catalog line requiring an indication enforces it                                                             0.61s  
  ✓ order records its author and timestamp                                                                       0.62s  
  ✓ receptionist cannot place an order                                                                           0.61s  
  ✓ nurse without clinical order cannot place an order                                                           0.62s  
  ✓ amending an order supersedes it and keeps the original                                                       0.60s  
  ✓ amending requires a reason                                                                                   0.65s  
  ✓ a terminal order cannot be amended                                                                           0.65s  
  ✓ fulfilling an order records actor and time                                                                   0.63s  
  ✓ duplicate fulfillment is refused                                                                             0.68s  
  ✓ a cancelled order can never be fulfilled                                                                     0.65s  
  ✓ cancelling requires a reason and retains the row                                                             0.64s  
  ✓ entered in error keeps the row for attribution                                                               0.64s  
  ✓ an order can be started once                                                                                 0.62s  
  ✓ a retried request with the same key returns the original order                                               0.64s  
  ✓ reusing a key with a different request is refused                                                            0.66s  
  ✓ orders page renders for a doctor                                                                             0.79s  
  ✓ receptionist cannot open the orders page                                                                     0.74s  
  ✓ tenant isolation second tenant patient is not reachable                                                      0.60s  
  ✓ audit actions are recorded                                                                                   0.65s  
  ✓ cancelled orders remain visible on the page                                                                  0.76s  

   PASS  Tests\Feature\ClinicalRecordTest
  ✓ doctor can open a standalone encounter                                                                       0.63s  
  ✓ second open encounter for same patient is rejected                                                           0.63s  
  ✓ waiting queue entry cannot start an encounter                                                                0.60s  
  ✓ with clinician queue entry starts an encounter                                                               0.64s  
  ✓ nurse can open encounter but cannot sign                                                                     0.61s  
  ✓ draft can be saved and sections persist                                                                      0.61s  
  ✓ blank sections stay null not empty string                                                                    0.60s  
  ✓ empty note cannot be saved                                                                                   0.63s  
  ✓ draft author can edit their own draft                                                                        0.67s  
  ✓ signing a note makes it immutable                                                                            0.66s  
  ✓ doctor signs note with full attribution                                                                      0.64s  
  ✓ amendment preserves original and attributes both                                                             0.73s  
  ✓ amendment requires a reason                                                                                  0.63s  
  ✓ only signed note can be amended                                                                              0.66s  
  ✓ all four entry kinds can be recorded                                                                         0.62s  
  ✓ entries are locked after encounter closes                                                                    0.64s  
  ✓ entries are only editable by the recording clinician                                                         0.67s  
  ✓ closed encounter cannot be reopened or double closed                                                         0.66s  
  ✓ close encounter completes a linked checked in appointment                                                    0.64s  
  ✓ longitudinal record page renders for doctor                                                                  0.82s  
  ✓ receptionist cannot access the clinical workspace                                                            0.76s  
  ✓ imported notes display source label                                                                          0.80s  
  ✓ cannot save draft on a closed encounter                                                                      0.63s  
  ✓ tenant isolation a second tenant patient is not reachable                                                    0.62s  
  ✓ audit actions are recorded                                                                                   0.72s  

   PASS  Tests\Feature\ClinicalResultTest
  ✓ delivery records severity as delivered with the ordering clinician as owner                                  0.62s  
  ✓ unknown severity is refused and source is required                                                           0.86s  
  ✓ a retried delivery for the same order is refused                                                             0.74s  
  ✓ delivery is refused for an order that is not open                                                            0.75s  
  ✓ rejected delivery is retained escalated and keeps the order open                                             0.67s  
  ✓ rejected delivery requires a reason                                                                          0.63s  
  ✓ doctor may review but may not deliver a result                                                               0.60s  
  ✓ laboratory may deliver but may not review                                                                    0.64s  
  ✓ receptionist cannot review results                                                                           0.63s  
  ✓ acknowledge records the reviewer and blocks double acknowledgment                                            0.64s  
  ✓ action requires a note and follow up requires a due date                                                     0.65s  
  ✓ critical and abnormal cannot close without an actioned result                                                0.65s  
  ✓ normal result can close as reviewed                                                                          0.63s  
  ✓ only the owner or a reviewer may be assigned a result                                                        0.63s  
  ✓ owner can be reassigned before review                                                                        0.64s  
  ✓ overdue review escalates once and the escalation survives acknowledgment                                     0.64s  
  ✓ follow up outlives the closed encounter                                                                      0.66s  
  ✓ seeded results cover each review state                                                                       0.66s  
  ✓ worklist is open to reviewers and closed to reception                                                        0.85s  
  ✓ patient results page requires clinical access and scopes to the patient                                      0.76s  
  ✓ results of one tenant are invisible to another                                                               0.69s  
  ✓ delivery queue is open to the performing service                                                             0.83s  
  ✓ http delivery by the performing service lands awaiting review                                                0.62s  
  ✓ http delivery by unauthorised roles creates nothing                                                          0.65s  
  ✓ review lifecycle is audited                                                                                  0.70s  

   PASS  Tests\Feature\DashboardMetricsTest
  ✓ weekly slot total reconciles to the availability rows                                                        0.68s  
  ✓ weekday chart counts reconcile to the same rows                                                              0.71s  
  ✓ chart labels and values are structured for the data table                                                    0.73s  
  ✓ time off count reconciles to the override rows                                                               0.90s  
  ✓ active account count reconciles to the user rows                                                             0.79s  
  ✓ undelivered modules are listed rather than counted as features                                               0.74s  
  ✓ dashboard of a pharmacy admin shows only that organisations records                                          0.76s  
  ✓ audit chart is hidden without audit permission                                                               1.10s  
  ✓ manager dashboard renders every chart with a data table                                                      0.69s  

   PASS  Tests\Feature\DashboardPermissionGatingTest
  ✓ the patient sees no revenue figure anywhere on the dashboard                                                 0.93s  
  ✓ the revenue rows exist but are not computed for an unauthorised role                                         0.83s  
  ✓ the finance roles and the tenant administrator keep the revenue chart                                        1.18s  
  ✓ a clinician sees scheduling capacity but no clinic money                                                     1.02s  
  ✓ named staff leave is withheld from a role without leave view                                                 1.32s  
  ✓ roster capacity and foundation counts refuse a patient in words                                              1.01s  
  ✓ a refusal never masquerades as an empty clinic                                                               0.88s  
  ✓ every seeded role still renders the dashboard                                                                4.71s  

   PASS  Tests\Feature\DemoEnvironmentGuardTest
  ✓ local testing environment is permitted                                                                       0.03s  
  ✓ the guard refuses a shared database connection                                                               0.02s  
  ✓ the guard refuses a production environment                                                                   0.02s  
  ✓ the guard refuses a production url                                                                           0.02s  
  ✓ the guard throws when used assertively                                                                       0.02s  
  ✓ seed command is registered                                                                                   0.08s  
  ✓ sync modules command is registered                                                                           0.04s  

   PASS  Tests\Feature\DemoSeedingRendersTest
  ✓ the patient profile tabs render the seeded care record                                                       1.45s  
  ✓ the drug administration list shows both a given and an outstanding dose                                      1.05s  
  ✓ the ward register shows a matron and a location                                                              0.93s  
  ✓ the product catalogue is populated for the invoice picker                                                    1.10s  
  ✓ the invoice form offers the catalogue items for selection                                                    0.90s  
  ✓ the demo seeder can be run twice without error                                                               0.79s  

   PASS  Tests\Feature\DrugAdministrationWorkflowTest
  ✓ a scheduled dose is recorded as administered                                                                 0.76s  
  ✓ a dose cannot be attributed to another clinician via the form                                                0.79s  
  ✓ a dose already given cannot be given twice                                                                   0.78s  
  ✓ a dose already given cannot be relabelled as missed                                                          0.75s  
  ✓ a dose already given cannot be relabelled as withheld                                                        0.77s  
  ✓ a dose already given cannot be cancelled                                                                     0.75s  
  ✓ a dose already given cannot have its details rewritten                                                       0.78s  
  ✓ a withheld dose records a reason                                                                             0.77s  
  ✓ an outstanding dose can be marked missed                                                                     0.76s  
  ✓ cancelling a dose retains the row for audit                                                                  0.78s  
  ✓ a patient cannot record any drug action                                                                      1.03s  
  ✓ another clinic drug action is not reachable at all                                                           0.74s  

   PASS  Tests\Feature\ExampleTest
  ✓ the root redirects to the dashboard                                                                          0.03s  
  ✓ guests are sent to sign in when they reach the dashboard                                                     0.02s  
  ✓ the sign in screen renders for guests                                                                        0.03s  

   PASS  Tests\Feature\GrantManagementTest
  ✓ a role can be granted and takes effect immediately                                                           0.65s  
  ✓ a grant can be narrowed to a facility                                                                        0.63s  
  ✓ a grant can be narrowed to a department                                                                      0.64s  
  ✓ a grant can be time limited                                                                                  0.66s  
  ✓ a future start does not grant yet                                                                            0.64s  
  ✓ a grant never crosses a tenant                                                                               0.64s  
  ✓ an account from another tenant cannot be granted to                                                          0.63s  
  ✓ a facility from another tenant cannot be used as a scope                                                     0.63s  
  ✓ the identity administrator may delegate roles they do not hold                                               0.64s  
  ✓ a narrower access administrator cannot delegate beyond their reach                                           0.68s  
  ✓ a disabled account cannot be granted to                                                                      0.64s  
  ✓ the same role cannot be granted twice with the same scope                                                    0.66s  
  ✓ the same role at a different scope is a second grant                                                         0.65s  
  ✓ an expiry in the past is refused                                                                             0.61s  
  ✓ an expiry before the start is refused                                                                        0.64s  
  ✓ someone without roles manage cannot grant                                                                    0.61s  
  ✓ revoking ends access immediately and keeps the record                                                        0.63s  
  ✓ revoking without a reason is refused                                                                         0.60s  
  ✓ you cannot revoke your own access                                                                            0.66s  
  ✓ an already revoked grant cannot be revoked again                                                             0.60s  
  ✓ someone without roles manage cannot revoke                                                                   0.63s  
  ✓ the grant screen lists the accounts grants                                                                   0.77s  
  ✓ the grant screen is closed to someone who cannot manage                                                      0.73s  
  ✓ granting over http works                                                                                     0.65s  
  ✓ an account from another tenant is not reachable over http                                                    0.63s  
  ✓ revoking over http works                                                                                     0.60s  
  ✓ revoking over http requires a reason                                                                         0.67s  
  ✓ a permission marked not granted on a role is not honoured                                                    0.63s  

   PASS  Tests\Feature\GuardianProxyTest
  ✓ a guardian starts pending and grants nothing                                                                 0.64s  
  ✓ a verified guardian holds only its scopes                                                                    0.63s  
  ✓ an expired guardian loses access                                                                             0.61s  
  ✓ a revoked guardian loses access immediately                                                                  0.64s  
  ✓ revocation is recorded not erased                                                                            0.61s  
  ✓ a family relationship alone is not authority                                                                 0.61s  
  ✓ multiple guardians can hold different scopes                                                                 0.69s  
  ✓ guardian pages are permission gated                                                                          0.69s  
  ✓ guardian management is permission gated                                                                      0.72s  
  ✓ guardian data is not visible across tenants                                                                  0.62s  

   PASS  Tests\Feature\InvoiceApprovalTest
  ✓ the three finance people hold deliberately different invoice rights                                          0.76s  
  ✓ the supervisor cannot reach the propose edit door                                                            0.86s  
  ✓ the supervisor can reach the approval door                                                                   0.95s  
  ✓ a proposed edit is not applied until it is fully approved                                                    0.81s  
  ✓ a full double approval applies the change                                                                    0.82s  
  ✓ the initiator cannot give the first approval                                                                 0.73s  
  ✓ the initiator cannot give the second approval                                                                0.75s  
  ✓ the manager cannot be the same person as the supervisor                                                      0.74s  
  ✓ the manager step cannot run before the supervisor step                                                       0.72s  
  ✓ a rejection leaves the invoice unchanged                                                                     0.80s  
  ✓ a rejected request may be submitted again                                                                    0.73s  
  ✓ a second open request is refused for the same invoice                                                        0.75s  
  ✓ a rejection requires a reason                                                                                0.72s  
  ✓ an issued invoice cannot be edited                                                                           0.72s  
  ✓ a manager may propose an edit over http                                                                      0.74s  
  ✓ a non manager cannot propose an edit over http                                                               0.95s  
  ✓ a proposed amount below what is already paid is refused                                                      0.77s  
  ✓ the whole double approval runs over http                                                                     0.77s  

   PASS  Tests\Feature\InvoiceLifecycleTest
  ✓ the administrator can create a draft invoice                                                                 0.75s  
  ✓ a duplicate draft reference is rejected                                                                      0.72s  
  ✓ an issued invoice can be part paid then paid in full                                                         0.75s  
  ✓ a payment can never exceed the outstanding balance                                                           0.75s  
  ✓ a payment cannot be recorded against a draft                                                                 0.75s  
  ✓ a paid invoice can be voided and retains its history                                                         0.77s  
  ✓ a user without the invoice permission is denied                                                              0.89s  
  ✓ an issued invoice cannot be edited back into a draft                                                         0.73s  

   PASS  Tests\Feature\LabOrderCreateTest
  ✓ the lab order form renders for a doctor                                                                      0.88s  
  ✓ the lab order form offers the seeded laboratory tariffs                                                      0.90s  
  ✓ it offers only laboratory tariffs and not other groups                                                       0.97s  
  ✓ a doctor can reach the form but an unprivileged user cannot                                                  1.21s  
  ✓ it does not offer a tariff that is not yet effective                                                         0.95s  
  ✓ ordering a test links the tariff so the order is priced                                                      0.75s  
  ✓ a test cannot be ordered without choosing from the catalogue                                                 0.73s  
  ✓ a clinician cannot order a test from another tenants catalogue                                               0.74s  
  ✓ a test outside the laboratory group cannot be ordered here                                                   0.76s  

   PASS  Tests\Feature\LabReportAuthorisationTest
  ✓ a preliminary report is signed off as final                                                                  0.75s  
  ✓ an authorised report cannot be authorised twice                                                              0.75s  
  ✓ a front desk account reaching the route is refused by the service                                            0.77s  
  ✓ amending a final report leaves the signed original untouched                                                 0.79s  
  ✓ a preliminary report cannot be amended                                                                       0.73s  
  ✓ amending without a reason is refused                                                                         0.79s  
  ✓ a blank reason is refused even when the field is present                                                     0.83s  
  ✓ a doctor without authorise cannot sign off or amend                                                          0.79s  
  ✓ another clinics report is not reachable                                                                      0.78s  
  ✓ an amendment arrives unsigned and cannot be signed off                                                       0.79s  
  ✓ the amended row is the current result                                                                        1.34s  
  ✓ a superseded report cannot be amended again                                                                  0.81s  
  ✓ a correction can be corrected in turn                                                                        0.77s  
  ✓ the review worklist carries the authorised value                                                             0.92s  
  ✓ an amendment reaches the review worklist                                                                     0.80s  
  ✓ the authorise control is rendered for the account the service accepts                                        0.94s  
  ✓ the authorise control is withheld from the account the service refuses                                       0.97s  
  ✓ the amend form is offered only once the report is signed                                                     1.00s  
  ✓ each worklist tab labels the list it is showing                                                              1.13s  

   PASS  Tests\Feature\LoginTest
  ✓ admin can sign in and reach the dashboard                                                                    0.92s  
  ✓ a self service account signs in without a second factor                                                      0.64s  
  ✓ wrong password does not reveal account existence                                                             0.61s  
  ✓ unknown address gets the same message                                                                        0.64s  
  ✓ disabled account cannot sign in                                                                              0.63s  
  ✓ suspended tenant blocks sign in                                                                              0.62s  
  ✓ successful sign in is audited                                                                                0.60s  
  ✓ a completed second factor is audited                                                                         0.63s  

   PASS  Tests\Feature\MfaFlowTest
  ✓ the generated secret is base32 and of sufficient entropy                                                     0.62s  
  ✓ the provisioning uri is machine readable                                                                     0.62s  
  ✓ a valid code passes and an invalid one fails                                                                 0.65s  
  ✓ enrolment stores the secret encrypted                                                                        0.63s  
  ✓ recovery codes are generated hashed and single use                                                           0.70s  
  ✓ the password alone does not sign in an mfa account                                                           0.62s  
  ✓ a valid code completes sign in                                                                               0.85s  
  ✓ a recovery code completes sign in and is consumed                                                            0.73s  
  ✓ an invalid code does not sign in and is audited                                                              0.77s  
  ✓ repeated bad codes lock the challenge                                                                        0.72s  
  ✓ an unenrolled privileged account is blocked until it enrols                                                  0.63s  
  ✓ enrolment requires a correct code before it activates                                                        0.81s  
  ✓ enrolment completes and reveals recovery codes once                                                          0.88s  
  ✓ self service accounts are exempt from mfa                                                                    0.76s  
  ✓ administrator can reset another accounts mfa                                                                 0.84s  
  ✓ a role without permission cannot reset mfa                                                                   0.72s  
  ✓ an account cannot reset its own mfa through the admin route                                                  0.63s  
  ✓ the challenge page reveals nothing about the record                                                          0.89s  
  ✓ signing out clears the second factor session                                                                 0.70s  
  ✓ the users page reports the real mfa posture                                                                  0.80s  
  ✓ the demo code endpoint is unavailable outside the demo environment                                           0.66s  

   PASS  Tests\Feature\MigrationForeignKeyTest
  ✓ no foreign key references a table that does not exist                                                        0.04s  
  ✓ the only out of order foreign keys are the known ones                                                        0.03s  
  ✓ no bare constrained resolves to a table that does not exist                                                  0.03s  
  ✓ the polymorphic allocation column has no foreign key                                                         0.02s  

   PASS  Tests\Feature\ModuleRegistryTest
  ✓ all declared modules are registered                                                                          0.62s  
  ✓ a module with an undelivered dependency cannot be enabled                                                    0.65s  
  ✓ require resolvable rejects an undelivered module                                                             0.63s  
  ✓ require resolvable rejects a missing dependency                                                              0.64s  
  ✓ core modules are always enabled                                                                              0.65s  
  ✓ pharmacy edition does not receive clinical modules                                                           0.65s  
  ✓ disabling a module removes it from the tenant                                                                0.62s  
  ✓ a disabled module cannot be used through a direct route                                                      0.83s  
  ✓ edition bundle is applied once                                                                               0.63s  
  ✓ module declarations carry traceable requirement ids                                                          0.60s  

   PASS  Tests\Feature\NutritionWorkspaceTest
  ✓ the nutrition professional can open the department workspace                                                 0.78s  
  ✓ the workspace shows the configured department                                                                0.74s  
  ✓ the work queue is honest about what is not delivered                                                         0.75s  
  ✓ a cashier cannot reach the nutrition workspace                                                               0.70s  
  ✓ a patient cannot reach the nutrition workspace                                                               0.70s  
  ✓ an unenrolled privileged account is sent to setup before any other page                                      0.61s  
  ✓ the pharmacy edition enables the nutrition department                                                        0.62s  
  ✓ nutrition workspace access is moduled as well as permissioned                                                0.77s  

   PASS  Tests\Feature\PatientIndexTest
  ✓ record numbers are tenant scoped and sequential                                                              0.66s  
  ✓ unknown facts are never defaulted                                                                            0.61s  
  ✓ partial dates of birth are labelled not invented                                                             0.66s  
  ✓ a merged record is not found by search                                                                       0.66s  
  ✓ a search finds a patient by name                                                                             0.64s  
  ✓ a search finds a patient by phone and record number                                                          0.64s  
  ✓ a search finds a patient by a recorded identifier                                                            0.62s  
  ✓ a search never reaches another tenant                                                                        0.60s  
  ✓ an empty search returns nothing                                                                              0.66s  
  ✓ a search is audited                                                                                          0.67s  
  ✓ duplicate detection proposes but never merges                                                                0.60s  
  ✓ a weak similarity is not reported as a duplicate                                                             0.62s  
  ✓ registering a patient creates a reviewable candidate                                                         0.61s  
  ✓ registering the same patient twice does not duplicate the review                                             0.61s  
  ✓ a merge is attributed audited and reversible                                                                 0.63s  
  ✓ a merge requires a reason                                                                                    0.64s  
  ✓ a record cannot be merged into itself                                                                        0.61s  
  ✓ an already merged record cannot be merged again                                                              0.62s  
  ✓ an unmerge requires a reason and a merged record                                                             0.64s  
  ✓ an unknown emergency patient is a temporary identity                                                         0.63s  
  ✓ a merged record keeps its history                                                                            0.62s  
  ✓ patient pages are permission gated                                                                           0.83s  
  ✓ patient pages are tenant gated                                                                               0.79s  

   PASS  Tests\Feature\PatientPortalIsolationTest
  ✓ the demo tenant portal is not an edition change                                                              0.64s  
  ✓ the second tenant patient sees her own record and nobody elses                                               0.75s  
  ✓ the same display name in both tenants never crosses                                                          0.64s  
  ✓ the second tenant patient books with her own clinician                                                       0.72s  

   PASS  Tests\Feature\PatientUserLinkTest
  ✓ an email match alone binds nothing                                                                           0.63s  
  ✓ an mrn lookup alone binds nothing                                                                            0.62s  
  ✓ a pending request grants nothing                                                                             0.63s  
  ✓ confirmation must come from a second person                                                                  0.64s  
  ✓ the requester cannot confirm their own request                                                               0.68s  
  ✓ the account under review cannot confirm its own binding                                                      0.64s  
  ✓ revocation ends access and keeps the record                                                                  0.63s  
  ✓ expiry stops resolution without any sweep                                                                    0.62s  
  ✓ an expired binding can be replaced by a new one                                                              0.62s  
  ✓ an account cannot be bound to two patients at once                                                           0.60s  
  ✓ a login cannot be bound across clinics                                                                       0.62s  
  ✓ a staff login cannot be bound to a record                                                                    0.64s  
  ✓ binding and revoking are both audited                                                                        0.65s  
  ✓ the seeded demo binding is created by two people                                                             0.70s  
  ✓ the screen creates only a pending request                                                                    0.63s  
  ✓ the requester is refused as confirmer on screen too                                                          0.62s  
  ✓ a login without the amend permission cannot touch bindings                                                   0.87s  
  ✓ a link of another patient is not reachable through this record                                               0.64s  
  ✓ revoking from the screen keeps the row with who did it                                                       0.64s  

   PASS  Tests\Feature\PatientWalletAccessTest
  ✓ a bound login reaches the patient wallet it is bound to                                                      1.04s  
  ✓ an unbound login reaches no wallet at all                                                                    1.07s  
  ✓ a bound login cannot open another patients wallet                                                            0.86s  
  ✓ revoking the binding closes the wallet on the next request                                                   0.97s  
  ✓ the till still reads and the ward still cannot                                                               0.91s  
  ✓ a bound login raises a qr against its own outstanding invoice                                                0.80s  
  ✓ a binding cannot reach another clinics wallet                                                                0.79s  
  ✓ the pharmacy demo tenant keeps the wallet module closed                                                      0.80s  

   PASS  Tests\Feature\PaymentAdapterTest
  ✓ the administrator can register a sandbox adapter                                                             0.72s  
  ✓ a gateway can only be configured once per mode and tenant                                                    0.74s  
  ✓ the adapter show page never renders the secret key                                                           0.88s  
  ✓ a user without the payment adapter permission is denied                                                      0.92s  

   PASS  Tests\Feature\PaymentCollectionTest
  ✓ an account number is ten digits and unique within the tenant                                                 0.73s  
  ✓ the same patient never gets a second account                                                                 0.72s  
  ✓ a staff wallet is also given an account number                                                               0.72s  
  ✓ a card can be issued against a patient account                                                               0.75s  
  ✓ an account number from another tenant resolves to nothing                                                    0.76s  
  ✓ an invoice number resolves to that invoices payer                                                            0.79s  
  ✓ a patient number resolves to that patients invoices                                                          0.77s  
  ✓ a ten digit account number resolves to the same payer                                                        0.76s  
  ✓ an unknown number resolves to nothing                                                                        0.73s  
  ✓ a patient number from another tenant resolves to nothing                                                     0.72s  
  ✓ an invoice reference is matched exactly and not by prefix                                                    0.73s  
  ✓ one collection settles several invoices and writes one row each                                              0.72s  
  ✓ paying everything in full marks each invoice paid                                                            0.76s  
  ✓ more than an invoice owes is refused and nothing is written                                                  0.77s  
  ✓ a refused line rolls back the whole collection                                                               0.73s  
  ✓ a line cannot name an invoice owed by someone else                                                           0.72s  
  ✓ an invoice from another tenant cannot be named at all                                                        0.72s  
  ✓ collecting from the payers account debits it once                                                            0.75s  
  ✓ an account cannot be collected past its balance                                                              0.75s  
  ✓ a payment point that does not accept the method refuses it                                                   0.77s  
  ✓ an inactive payment point refuses to collect                                                                 0.72s  
  ✓ an account may not be empty                                                                                  0.74s  
  ✓ a wallet funded collection records a valid invoice payment channel                                           0.73s  
  ✓ the same invoice cannot be listed twice in one collection                                                    0.76s  
  ✓ the till screen lists a payers invoices for an authenticated cashier                                         0.82s  
  ✓ the till screen offers the settled and draft invoices nothing                                                0.89s  
  ✓ the till screen reports an unknown number without disclosing anything                                        0.84s  
  ✓ collecting over http settles the invoice and shows a receipt                                                 0.86s  
  ✓ a receipt can be reopened by its reference                                                                   0.84s  
  ✓ another clinics receipt reference reopens nothing                                                            0.75s  
  ✓ only the finance roles can open the till                                                                     1.80s  
  ✓ a user without collect rights cannot open the till                                                           0.92s  
  ✓ a user without collect rights cannot post a collection                                                       0.94s  
  ✓ the legacy payment point collect door is gated too                                                           0.88s  
  ✓ a cashier cannot point the till at another clinics patient                                                   0.77s  

   WARN  Tests\Feature\QrPaymentTest
  ✓ creating an invoice auto issues a qr code                                                                    0.75s  
  ✓ an invoice that becomes payable gets a qr code                                                               0.87s  
  ✓ transitioning a draft to issued issues a qr code                                                             0.80s  
  ✓ a draft invoice is not issued a qr code                                                                      0.76s  
  ✓ every payable invoice in the demo data has a qr code                                                         0.79s  
  ✓ voiding an invoice retires its active qr code                                                                0.80s  
  ✓ a settled invoice is not issued a qr code                                                                    0.77s  
  ✓ a qr code can be scanned at a payment point                                                                  0.78s  
  ✓ a qr code cannot be used twice                                                                               0.78s  
  ✓ an expired qr code is refused and marked expired                                                             0.76s  
  ✓ the qr screen renders a real qr image                                                                        0.84s  
  ✓ the wallet screen links to qr creation                                                                       0.82s  
  ✓ the qr create screen offers the outstanding invoices                                                         0.84s  
  ✓ a qr code can be created for an outstanding invoice                                                          0.73s  
  ✓ a qr code can be created for a specific amount                                                               0.76s  
  - a qr code cannot be raised against another patients invoice → Fixture needs a second patient with a payable… 0.75s  
  ✓ a qr code cannot be raised against a settled invoice                                                         0.75s  
  ✓ a qr code requires an amount or an invoice                                                                   0.73s  
  ✓ a qr code from another clinic does not resolve across tenants                                                0.73s  

   PASS  Tests\Feature\QueueJourneyTest
  ✓ check in from appointment creates a waiting queue entry                                                      0.61s  
  ✓ double check in is rejected                                                                                  0.61s  
  ✓ check in of a cancelled appointment is rejected                                                              0.70s  
  ✓ walk in enters the waiting stage without an appointment                                                      0.67s  
  ✓ emergency walk in bypasses the waiting stage                                                                 0.65s  
  ✓ queue numbers are sequential per day                                                                         0.60s  
  ✓ call next moves from waiting to with clinician                                                               0.62s  
  ✓ call next rejects a non waiting entry                                                                        0.62s  
  ✓ complete finishes the entry and the linked appointment                                                       0.66s  
  ✓ complete rejects a waiting entry                                                                             0.60s  
  ✓ no show finishes a waiting entry and the appointment                                                         0.69s  
  ✓ cancel requires a reason and frees the appointment                                                           0.63s  
  ✓ stage transitions are audited                                                                                0.63s  
  ✓ queue view requires view permission                                                                          0.70s  
  ✓ queue index renders for reception                                                                            0.72s  
  ✓ queue board shows token and initials                                                                         0.70s  
  ✓ tenant isolation on queue entries                                                                            0.83s  
  ✓ walk in requires manage permission                                                                           0.77s  

   PASS  Tests\Feature\ReferralCoordinationTest
  ✓ requesting an external referral records consent owner and timeline                                           0.65s  
  ✓ request requires patient consent                                                                             0.63s  
  ✓ legally permitted exception requires a reason                                                                0.64s  
  ✓ external referral must name the provider                                                                     0.60s  
  ✓ internal referral must target a known department                                                             0.63s  
  ✓ only the patient s own records can be disclosed                                                              0.60s  
  ✓ attachment labels are frozen at request time                                                                 0.61s  
  ✓ internal referral appears incoming and can be accepted by the department                                     0.65s  
  ✓ the requester cannot accept their own referral                                                               0.62s  
  ✓ a role without department permission cannot accept                                                           0.61s  
  ✓ an external referral is not accepted in app                                                                  0.61s  
  ✓ schedule requires an accepted referral                                                                       0.63s  
  ✓ scheduling records the slot                                                                                  0.63s  
  ✓ complete records an outcome and closes the referral                                                          0.63s  
  ✓ complete requires a recorded outcome                                                                         0.66s  
  ✓ decline requires a reason and is terminal                                                                    0.69s  
  ✓ return sends an accepted referral back with its reason                                                       0.70s  
  ✓ a closed referral is immutable                                                                               0.63s  
  ✓ an overdue chase is materialised once and surfaces                                                           0.63s  
  ✓ external requests reach the sandbox outbox and internal ones do not                                          0.62s  
  ✓ receptionist is denied the referrals worklist                                                                0.72s  
  ✓ doctor opens the worklist and the patient record form                                                        0.94s  
  ✓ http requesting a referral lands and redirects                                                               0.81s  
  ✓ results of one tenant are invisible to another                                                               0.61s  
  ✓ lifecycle actions are audited                                                                                0.64s  
  ✓ seed sample covers the whole lifecycle                                                                       0.64s  
  ✓ seeded overdue chase surfaces on the worklist                                                                0.78s  
  ✓ attachments are locked once the referral is closed                                                           0.62s  
  ✓ stranger roles cannot manage referrals                                                                       0.66s  
  ✓ reference is unique per tenant                                                                               0.66s  

   PASS  Tests\Feature\SandboxPaymentPolicyTest
  ✓ the application makes no outbound http calls                                                                 0.08s  
  ✓ the cards table cannot hold a full card number or cvv                                                        0.03s  
  ✓ issuing a card persists only a mask and a uid                                                                0.74s  
  ✓ the demo login harness is disabled outside a demo environment                                                0.02s  
  ✓ sandbox status does not relax the overdraft guard                                                            0.76s  

   PASS  Tests\Feature\ServiceTariffCatalogueTest
  ✓ the catalogue lists published tariffs with currency                                                          0.93s  
  ✓ the catalogue filters by group                                                                               0.95s  
  ✓ the invoice form offers effective tariffs                                                                    0.90s  
  ✓ every seeded tariff is versioned and published                                                               0.74s  

   PASS  Tests\Feature\SpecimenLifecycleTest
  ✓ registration allocates a barcode and binds the patient                                                       0.66s  
  ✓ registration accepts a patient supplied barcode but refuses a duplicate                                      0.62s  
  ✓ registration refuses a specimen type outside the known list                                                  0.65s  
  ✓ registration refuses an order belonging to another patient                                                   0.65s  
  ✓ registration refuses a terminal order                                                                        0.62s  
  ✓ collection starts the linked order                                                                           0.63s  
  ✓ collecting twice is refused                                                                                  0.61s  
  ✓ a future collection time is refused                                                                          0.66s  
  ✓ receipt requires a collected specimen and happens once                                                       0.65s  
  ✓ a specimen cannot be received twice                                                                          0.67s  
  ✓ storage requires a location and a received specimen                                                          0.63s  
  ✓ storage records the location and retention date                                                              0.62s  
  ✓ transport annotates the chain without changing custody status                                                0.63s  
  ✓ transport requires a destination                                                                             0.66s  
  ✓ rejection requires a reason code and detail and retains the row                                              0.63s  
  ✓ rejection without detail is refused                                                                          0.65s  
  ✓ recollection creates a new specimen and leaves the rejected one intact                                       0.64s  
  ✓ only a rejected specimen can be recollected                                                                  0.62s  
  ✓ a rejected specimen is recollected only once                                                                 0.63s  
  ✓ an aliquot inherits the patient and collection time                                                          0.62s  
  ✓ an aliquot cannot be taken before the material reaches the laboratory                                        0.62s  
  ✓ an aliquot volume must be positive                                                                           0.66s  
  ✓ disposal is terminal and attributed                                                                          0.63s  
  ✓ disposal requires a method and a reason                                                                      0.68s  
  ✓ a specimen with an outstanding aliquot cannot be disposed                                                    0.65s  
  ✓ a collected but unreceived specimen cannot be disposed                                                       0.62s  
  ✓ a rejected specimen refuses every further transition                                                         0.65s  
  ✓ a terminal specimen cannot be edited through the model                                                       0.62s  
  ✓ the custody trail is ordered and attributed                                                                  0.65s  
  ✓ every movement is audited                                                                                    0.62s  
  ✓ a clinician without the collection verb cannot register                                                      0.64s  
  ✓ the nurse can collect but not work the bench                                                                 0.65s  
  ✓ specimens of one tenant are invisible to another                                                             0.61s  
  ✓ the laboratory worklist opens and renders the custody record                                                 0.84s  
  ✓ a role without the view permission is denied the worklist                                                    0.78s  
  ✓ the laboratory scientist is offered the bench actions                                                        0.77s  
  ✓ the nurse sees only the collection action                                                                    0.73s  
  ✓ a viewer without the process verb is told they cannot act                                                    0.79s  
  ✓ http registration and the full reception flow                                                                0.83s  
  ✓ an acting clinician without the verb is refused at the route                                                 0.64s  
  ✓ a user with patient access but no diagnostics verb is refused the bench                                      0.70s  
  ✓ a user of another tenant cannot reach the bench                                                              0.67s  
  ✓ a specimen outside the active tenant context is unbindable                                                   0.61s  

   PASS  Tests\Feature\TenantIsolationTest
  ✓ tenant a context sees only tenant a users                                                                    0.65s  
  ✓ tenant b context sees only tenant b users                                                                    0.63s  
  ✓ same display name in two tenants does not leak                                                               0.68s  
  ✓ unresolved context denies every row                                                                          0.60s  
  ✓ finding a foreign record by key is denied                                                                    0.60s  
  ✓ relations stay inside the tenant                                                                             0.61s  
  ✓ platform accounts are invisible to a tenant context                                                          0.64s  
  ✓ dashboard of one tenant does not show the other tenants records                                              0.83s  
  ✓ users listing of one tenant excludes the other tenant                                                        0.80s  
  ✓ audit reads are scoped to the requesting tenant                                                              0.66s  

   PASS  Tests\Feature\UngatedRouteGuardTest
  ✓ a patient cannot reach with data set "payment points index"                                                  0.89s  
  ✓ a patient cannot reach with data set "payment points create form"                                            0.85s  
  ✓ a patient cannot reach with data set "payment points edit"                                                   0.85s  
  ✓ a patient cannot reach with data set "wards index"                                                           0.84s  
  ✓ a patient cannot reach with data set "wards create form"                                                     0.83s  
  ✓ a patient cannot reach with data set "wards edit"                                                            0.87s  
  ✓ a patient cannot reach with data set "tariffs index"                                                         0.81s  
  ✓ a patient cannot reach with data set "tariffs create form"                                                   0.83s  
  ✓ a patient cannot reach with data set "tariffs edit"                                                          0.83s  
  ✓ a patient cannot reach with data set "product catalogue index"                                               0.81s  
  ✓ a patient cannot reach with data set "product catalogue create form"                                         0.81s  
  ✓ a patient cannot reach with data set "product catalogue edit"                                                0.85s  
  ✓ a patient cannot reach with data set "drug administrations index"                                            0.92s  
  ✓ a patient cannot reach with data set "drug administrations create form"                                      0.82s  
  ✓ a patient cannot reach with data set "drug administrations edit"                                             0.82s  
  ✓ a patient cannot reach with data set "another patients wallet"                                               0.74s  
  ✓ a patient cannot reach with data set "another patients wallet edit"                                          0.73s  
  ✓ a patient cannot reach with data set "another patients q r codes"                                            0.79s  
  ✓ a patient cannot reach with data set "another patients q r create form"                                      0.76s  
  ✓ a patient cannot reach with data set "another accounts card"                                                 0.77s  
  ✓ a patient cannot reach with data set "another accounts card edit"                                            0.72s  
  ✓ a patient cannot write to the product catalogue                                                              0.82s  
  ✓ a patient cannot rename a ward                                                                               0.87s  
  ✓ the patient keeps their own wallet and card door                                                             1.12s  
  ✓ a patient cannot read a qr code issued to someone else                                                       0.79s  
  ✓ the administrator still administers                                                                          1.49s  
  ✓ the till operator sees prices but cannot change them                                                         1.40s  
  ✓ the clinician reaches the clinical screens the administrator cannot                                          1.03s  
  ✓ a foreign clinic cannot read a ward even holding the permission                                              0.74s  

   PASS  Tests\Feature\VitalsEditRoundTripTest
  ✓ a doctor can open the vitals edit form                                                                       0.94s  
  ✓ a doctor can save a vitals change                                                                            0.74s  
  ✓ a nurse can save a vitals change                                                                             0.75s  
  ✓ an amendment cannot reassign who recorded the reading                                                        0.74s  
  ✓ a front desk account cannot read or change a vital                                                           0.99s  
  ✓ a patient cannot amend a chart even their own                                                                0.92s  
  ✓ another clinics vital is not editable                                                                        0.76s  
  ✓ a vital cannot be amended through a different patients url                                                   0.75s  
  ✓ an impossible reading is refused and does not overwrite the chart                                            0.73s  

   PASS  Tests\Feature\WalletPaymentTest
  ✓ a wallet is created on first access and starts empty                                                         0.73s  
  ✓ a credit increases the balance and is recorded                                                               0.74s  
  ✓ a debit reduces the balance                                                                                  0.81s  
  ✓ a credit of zero or less is refused                                                                          0.77s  
  ✓ a debit of zero or less is refused                                                                           0.81s  
  ✓ a wallet cannot be overdrawn                                                                                 0.79s  
  ✓ an inactive wallet cannot be spent from                                                                      0.78s  
  ✓ an issued card is masked and carries no full pan                                                             0.77s  
  ✓ tap to pay debits the card wallet at the payment point                                                       0.78s  
  ✓ a frozen card cannot be used for tap to pay                                                                  0.79s  
  ✓ a qr scan deducts from the wallet                                                                            0.82s  
  ✓ a qr code cannot be reused                                                                                   0.76s  
  ✓ an expired qr code is refused and marked expired                                                             0.73s  
  ✓ cash collection records against the invoice without touching a wallet                                        0.72s  
  ✓ an unknown payment method is refused                                                                         0.75s  
  ✓ a payment point cannot collect a non positive amount                                                         0.77s  
  ✓ wallet transactions are not reachable from another tenant                                                    0.73s  
  ✓ a card is not reachable from another tenant                                                                  0.72s  
  ✓ a qr code is not reachable from another tenant                                                               0.76s  

   PASS  Tests\Feature\WardAndPatientStatusTest
  ✓ a ward can be created with a matron and location                                                             0.76s  
  ✓ a ward can be amended                                                                                        0.74s  
  ✓ a ward cannot name another clinics staff member as matron                                                    0.74s  
  ✓ a ward cannot be reassigned to a foreign matron by amendment                                                 0.76s  
  ✓ a ward from another clinic is not readable                                                                   0.75s  
  ✓ the ward index renders with the seeded wards                                                                 0.93s  
  ✓ emergency contact and health status round trip                                                               0.74s  
  ✓ emergency contact can be cleared                                                                             0.72s  
  ✓ another clinics patient is not editable                                                                      0.70s  
  ✓ the patient record shows the seeded emergency contact                                                        0.99s  
  ✓ the patient edit form offers the emergency contact and status fields                                         0.85s  
  ✓ the registration form carries the emergency contact and store persists them                                  0.88s  
  ✓ a patient can be edited with the date of birth left blank                                                    0.80s  

  Tests:    1 skipped, 702 passed (2951 assertions)
  Duration: 536.11s

