The patient-list-app is the operations console for the Configurable Patient Visit List. It lets users kick off background jobs that affect lists (refresh, recompute membership, export), observe job status, and open the Visit List UI directly with a given list context. It is not the renderer itself; instead, it drives/coordinates the Backbone VisitList screen by sending users to the route with the correct listId and by emitting audit and metrics events.

graph TD; WAR[patient-list-war\ Backbone/Handlebars UI] --> REST[patient-list-rest\ Spring Controllers]; REST --> API[patient-list-api\ Facade + DTOs]; API <--implements--> SRV[patient-list-services\ Business Logic, Mapping, Validation]; SRV --> DAO[patient-list-dao\ Repositories/Queries]; DAO --> DB[(Database)]; WAR -. static assets .-> ASSETS[Templates JS CSS];
graph TD;
subgraph UI (patient-list-war)
Router[VisitRouter]
State[VisitListState]
Coll[VisitCollection]
ListView[VisitListView]
ItemView[VisitItemView]
Toolbar[ToolbarView]
Pager[PaginationView]
Wizard[WizardView]
TList[visit-list.hbs]
TRow[visit-row.hbs]
end
subgraph REST/API
EP[/GET /api/v1/visits/]
EPlist[/GET /api/v1/visitLists/{id}/visits/]
DTO[VisitDto]
end
subgraph Server
Ctl[VisitController]
Fac[VisitFacade]
Svc[VisitServiceImpl]
Map[VisitMapper]
Repo[VisitRepository]
DB[(DB)]
end
Router --> ListView
Router --> State
ListView --> Toolbar
ListView --> Pager
ListView --> Coll
Coll -->|reset/sync| ListView
ListView -->|each model| ItemView
ListView --> TList
ItemView --> TRow
Toolbar -->|filter:changed| State
Pager -->|page:changed| State
State -->|toQuery()| Coll
Coll -->|fetch| EP
EP --> Ctl --> Fac --> Svc --> Repo --> DB
Repo --> Svc --> Map --> DTO --> Ctl --> EP --> Coll
Wizard -->|save list| CtlsequenceDiagram
participant U as User
participant R as VisitRouter
participant V as VisitListView
participant S as VisitListState
participant C as VisitCollection
participant T as ToolbarView
participant H as Handlebars Templates
participant REST as /api/v1/visits
participant CTR as VisitController
participant FAC as VisitFacade(Service)
participant DAO as VisitRepository
participant DB as Database
U->>R: Navigate #/visits?listId=123&page=1
R->>S: create from query (listId,page,sort,filters)
R->>V: new VisitListView({state:S, collection:C})
V->>C: fetch({data: S.toQuery()})
C->>REST: GET /api/v1/visits?listId=123&page=1&sort=...
REST->>CTR: Dispatch controller
CTR->>FAC: findVisits(listId,paging,filters)
FAC->>DAO: query(listId,paging,filters)
DAO->>DB: Execute SQL
DB-->>DAO: rows
DAO-->>FAC: entities
FAC-->>CTR: List<VisitDto> + paging
CTR-->>C: 200 JSON {items:[], paging:{}}
C-->>V: reset/sync events
V->>H: Render visit-list.hbs + visit-row.hbs
H-->>V: HTML table
V-->>U: Patient visit list displayed
U->>T: Change filter/search
T-->>S: event filter:changed
S-->>V: change:*
V->>C: fetch() (debounced) with new query
C->>REST: GET /api/v1/visits?... (repeat)