# ustaxcourt/ef-cms architecture

> Architecture diagram of the GitHub repository ustaxcourt/ef-cms, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ustaxcourt/ef-cms
- Repository: https://github.com/ustaxcourt/ef-cms

## Overview

DAWSON is the U.S. Tax Court’s electronic-filing and case-management system. Its product spans public case access, authenticated court workflows, document filing and service, trial-session administration, and search. The tree shows a web client, an Express API with Lambda-style handlers, shared business logic, and persistence integrations. The README identifies the product but does not describe a detailed user journey; the sampled API excerpt does show routing for paper filings, while the trial-session interactor shows PDF assembly and notifications. Unshown subsystem links are omitted or marked unverified.

Main entry points: [`web-api/src/lambdas`](https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/lambdas) (Request handlers), [`web-api/src/app.ts`](https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/app.ts) (HTTP API), [`web-api/src/business/useCases/trialSessions/generateTrialSessionPaperServicePdfInteractor.ts`](https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/business/useCases/trialSessions/generateTrialSessionPaperServicePdfInteractor.ts) (Trial service PDF), [`web-client/src/app.tsx`](https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/app.tsx) (Web application)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_client_app["Web application<br/>[app.tsx]"]
  node_client_routing["Client routing<br/>[router.ts]"]
  node_client_presenter["Presenter workflows<br/>[presenter.ts]"]
  node_public_case_view["Public case view"]
  node_work_queue["Work queue views"]
end

subgraph group_api["API and workflows"]
  node_api_router["HTTP API<br/>[app.ts]"]
  node_api_handlers["Request handlers"]
  node_filing_workflow["Filing workflows"]
  node_trial_pdf["Trial service PDF"]
end

subgraph group_domain["Shared domain"]
  node_auth_service["Authorization"]
  node_case_domain["Case and docket domain"]
  node_date_rules["Date utilities<br/>[DateHandler.ts]"]
end

subgraph group_data["Persistence and search"]
  node_postgres[("PostgreSQL")]
  node_document_storage[("Document storage")]
  node_search_service["Search client<br/>[searchClient.ts]"]
end

subgraph group_external["External services"]
  node_search_cluster[("OpenSearch<br/>[client.ts]")]
  node_notifications["User notifications"]
end

node_court_user(("Court user"))
node_public_user(("Public user"))

node_court_user -.->|"uses"| node_client_app
node_public_user -.->|"uses"| node_client_app
node_client_app -.->|"routes through"| node_client_routing
node_client_routing -.->|"dispatches workflows"| node_client_presenter
node_client_presenter -.->|"requests data"| node_api_router
node_api_router -->|"routes paper filing"| node_filing_workflow
node_api_router -->|"routes requests"| node_api_handlers
node_api_handlers -.->|"checks access"| node_auth_service
node_api_handlers -.->|"applies domain rules"| node_case_domain
node_api_handlers -.->|"reads and writes"| node_postgres
node_api_handlers -.->|"searches records"| node_search_service
node_search_service -->|"queries"| node_search_cluster
node_public_case_view -.->|"loads public case"| node_api_router
node_work_queue -.->|"loads work items"| node_api_router
node_trial_pdf -.->|"reads source PDFs"| node_document_storage
node_trial_pdf -->|"sends progress updates"| node_notifications
node_trial_pdf -->|"loads and updates session"| node_postgres
node_trial_pdf -.->|"saves assembled PDF"| node_document_storage

click node_client_app "https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/app.tsx"
click node_client_routing "https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/router.ts"
click node_client_presenter "https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/presenter/presenter.ts"
click node_public_case_view "https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/presenter/computeds/Public/publicCaseDetailHelper.ts"
click node_work_queue "https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/presenter/computeds/formattedWorkQueue.ts"
click node_api_router "https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/app.ts"
click node_api_handlers "https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/lambdas"
click node_filing_workflow "https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/lambdas/documents"
click node_trial_pdf "https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/business/useCases/trialSessions/generateTrialSessionPaperServicePdfInteractor.ts"
click node_auth_service "https://github.com/ustaxcourt/ef-cms/blob/staging/shared/src/authorization/authorizationClientService.ts"
click node_case_domain "https://github.com/ustaxcourt/ef-cms/tree/staging/shared/src/business/entities"
click node_date_rules "https://github.com/ustaxcourt/ef-cms/blob/staging/shared/src/business/utilities/DateHandler.ts"
click node_postgres "https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/persistence/postgres"
click node_document_storage "https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/persistence/s3"
click node_search_service "https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/persistence/elasticsearch/searchClient.ts"
click node_search_cluster "https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/elasticsearch/client.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client_app,node_client_routing,node_client_presenter,node_public_case_view,node_work_queue,node_court_user,node_public_user toneBlue
class node_api_router,node_api_handlers,node_filing_workflow,node_trial_pdf toneAmber
class node_auth_service,node_case_domain,node_date_rules toneMint
class node_postgres,node_document_storage,node_search_service toneRose
class node_search_cluster,node_notifications toneIndigo
```

## Components

### Web client

- [Web application](https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/app.tsx): `web-client/src/app.tsx`
- [Client routing](https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/router.ts): `web-client/src/router.ts`
- [Presenter workflows](https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/presenter/presenter.ts): `web-client/src/presenter/presenter.ts`
- [Public case view](https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/presenter/computeds/Public/publicCaseDetailHelper.ts): `web-client/src/presenter/computeds/Public/publicCaseDetailHelper.ts`
- [Work queue views](https://github.com/ustaxcourt/ef-cms/blob/staging/web-client/src/presenter/computeds/formattedWorkQueue.ts): `web-client/src/presenter/computeds/formattedWorkQueue.ts`

### API and workflows

- [HTTP API](https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/app.ts): `web-api/src/app.ts`
- [Request handlers](https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/lambdas): `web-api/src/lambdas`
- [Filing workflows](https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/lambdas/documents): `web-api/src/lambdas/documents`
- [Trial service PDF](https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/business/useCases/trialSessions/generateTrialSessionPaperServicePdfInteractor.ts): `web-api/src/business/useCases/trialSessions/generateTrialSessionPaperServicePdfInteractor.ts`

### Shared domain

- [Authorization](https://github.com/ustaxcourt/ef-cms/blob/staging/shared/src/authorization/authorizationClientService.ts): `shared/src/authorization/authorizationClientService.ts`
- [Case and docket domain](https://github.com/ustaxcourt/ef-cms/tree/staging/shared/src/business/entities): `shared/src/business/entities`
- [Date utilities](https://github.com/ustaxcourt/ef-cms/blob/staging/shared/src/business/utilities/DateHandler.ts): `shared/src/business/utilities/DateHandler.ts`

### Persistence and search

- [PostgreSQL](https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/persistence/postgres): `web-api/src/persistence/postgres`
- [Document storage](https://github.com/ustaxcourt/ef-cms/tree/staging/web-api/src/persistence/s3): `web-api/src/persistence/s3`
- [Search client](https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/src/persistence/elasticsearch/searchClient.ts): `web-api/src/persistence/elasticsearch/searchClient.ts`

### External services

- [OpenSearch](https://github.com/ustaxcourt/ef-cms/blob/staging/web-api/elasticsearch/client.ts): `web-api/elasticsearch/client.ts`
- **User notifications**

### Other components

- **Court user**
- **Public user**

## Connections

- Court user → Web application: uses
- Public user → Web application: uses
- Web application → Client routing: routes through
- Client routing → Presenter workflows: dispatches workflows
- Presenter workflows → HTTP API: requests data
- HTTP API → Filing workflows: routes paper filing (evidence: `web-api/src/app.ts`)
- HTTP API → Request handlers: routes requests (evidence: `web-api/src/app.ts`)
- Request handlers → Authorization: checks access
- Request handlers → Case and docket domain: applies domain rules
- Request handlers → PostgreSQL: reads and writes
- Request handlers → Search client: searches records
- Search client → OpenSearch: queries (evidence: `web-api/src/persistence/elasticsearch/searchClient.ts`)
- Public case view → HTTP API: loads public case
- Work queue views → HTTP API: loads work items
- Trial service PDF → Document storage: reads source PDFs
- Trial service PDF → User notifications: sends progress updates (evidence: `web-api/src/business/useCases/trialSessions/generateTrialSessionPaperServicePdfInteractor.ts`)
- Trial service PDF → PostgreSQL: loads and updates session (evidence: `web-api/src/business/useCases/trialSessions/generateTrialSessionPaperServicePdfInteractor.ts`)
- Trial service PDF → Document storage: saves assembled PDF
