# oussoudiop05-ui/hospiquery architecture

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

- Interactive diagram: https://gitdiagram.com/oussoudiop05-ui/hospiquery
- Repository: https://github.com/oussoudiop05-ui/hospiquery

## Overview

HQ is a browser-based workbench for designing French PMSI/CORA database extractions and generating an R script. Users start from a request or template, refine a table-and-join schema (including columns, filters and derived fields), review the final output, and obtain generated R code; an AI discussion can propose schema patches. The graph includes major documented UI capabilities from the tree and excerpts. The README is empty, and unsampled modules are represented at directory level where their exact internal behavior is not evidenced.

Main entry points: [`js/app.js`](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/app.js) (Workbench shell), [`js/store.js`](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/store.js) (Extraction state), [`js/render-chat.js`](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-chat.js) (AI discussion), [`js/render-joins.js`](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-joins.js) (Join editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_design["Extraction design"]
  node_schema["Schema editor<br/>[render-schema.js]"]
  node_joinsview["Join editor<br/>[render-joins.js]"]
  node_joins["Join logic<br/>[joins.js]"]
  node_dictionary["Data dictionary<br/>[dictionary.js]"]
  node_seed["I50 example<br/>[seed-i50.js]"]
end

subgraph group_assistant["AI assistance"]
  node_prompt["Prompt and parsing<br/>[prompt.js]"]
  node_chat["AI discussion<br/>[render-chat.js]"]
  node_api["Model client<br/>[api.js]"]
end

subgraph group_output["Script and review"]
  node_final["Final table review<br/>[render-final.js]"]
  node_generator["R script generator<br/>[generator.js]"]
end

subgraph group_state["State and references"]
  node_store[("Extraction state<br/>[store.js]")]
  node_dom["DOM utilities<br/>[dom.js]"]
end

subgraph group_interface["Workbench interface"]
  node_app["Workbench shell<br/>[app.js]"]
  node_settings["API settings<br/>[ui-settings.js]"]
  node_templates["Templates and history<br/>[ui-templates.js]"]
  node_fileui["File management<br/>[ui-files.js]"]
  node_claudemd["Project guidance<br/>[ui-claudemd.js]"]
  node_warnings["Warnings UI<br/>[ui-warnings.js]"]
  node_dictionaryui["Dictionary UI<br/>[ui-dictionary.js]"]
end

node_user(("Analyst"))
node_anthropic{{"Anthropic service"}}

node_user -->|"uses"| node_app
node_app -->|"wires"| node_templates
node_app -->|"wires"| node_claudemd
node_app -->|"updates"| node_store
node_templates -->|"loads state"| node_store
node_app -->|"wires"| node_settings
node_settings -->|"configures"| node_api
node_app -->|"wires"| node_fileui
node_app -->|"wires"| node_warnings
node_app -->|"wires"| node_dictionaryui
node_app -->|"hosts"| node_schema
node_app -->|"hosts"| node_joinsview
node_schema -->|"edits"| node_store
node_joinsview -->|"edits"| node_store
node_joinsview -->|"uses"| node_joins
node_joins -->|"reads connections"| node_store
node_store -->|"initializes from"| node_seed
node_prompt -->|"looks up tables"| node_dictionary
node_chat -->|"parses patches"| node_prompt
node_chat -.->|"requests responses"| node_api
node_api -->|"sends requests"| node_anthropic
node_chat -->|"applies patches"| node_store
node_final -->|"gets final columns"| node_generator
node_final -->|"saves order"| node_store
node_generator -.->|"reads extraction"| node_store
node_user -.->|"reviews"| node_final
node_user -.->|"requests script"| node_generator
node_app -->|"uses"| node_dom

click node_app "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/app.js"
click node_settings "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-settings.js"
click node_templates "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-templates.js"
click node_fileui "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-files.js"
click node_claudemd "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-claudemd.js"
click node_warnings "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-warnings.js"
click node_dictionaryui "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-dictionary.js"
click node_schema "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-schema.js"
click node_joinsview "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-joins.js"
click node_joins "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/joins.js"
click node_dictionary "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/dictionary.js"
click node_seed "https://github.com/oussoudiop05-ui/hospiquery/blob/main/data/seed-i50.js"
click node_prompt "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/prompt.js"
click node_chat "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-chat.js"
click node_api "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/api.js"
click node_final "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-final.js"
click node_generator "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/generator.js"
click node_store "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/store.js"
click node_dom "https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/dom.js"

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_schema,node_joinsview,node_joins,node_dictionary,node_seed toneBlue
class node_prompt,node_chat,node_api toneAmber
class node_final,node_generator toneMint
class node_store,node_dom toneRose
class node_app,node_settings,node_templates,node_fileui,node_claudemd,node_warnings,node_dictionaryui,node_user,node_anthropic toneIndigo
```

## Components

### Extraction design

- [Schema editor](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-schema.js): `js/render-schema.js`
- [Join editor](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-joins.js): `js/render-joins.js`
- [Join logic](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/joins.js): `js/joins.js`
- [Data dictionary](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/dictionary.js): `js/dictionary.js`
- [I50 example](https://github.com/oussoudiop05-ui/hospiquery/blob/main/data/seed-i50.js): `data/seed-i50.js`

### AI assistance

- [Prompt and parsing](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/prompt.js): `js/prompt.js`
- [AI discussion](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-chat.js): `js/render-chat.js`
- [Model client](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/api.js): `js/api.js`

### Script and review

- [Final table review](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/render-final.js): `js/render-final.js`
- [R script generator](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/generator.js): `js/generator.js`

### State and references

- [Extraction state](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/store.js): `js/store.js`
- [DOM utilities](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/dom.js): `js/dom.js`

### Workbench interface

- [Workbench shell](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/app.js): `js/app.js`
- [API settings](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-settings.js): `js/ui-settings.js`
- [Templates and history](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-templates.js): `js/ui-templates.js`
- [File management](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-files.js): `js/ui-files.js`
- [Project guidance](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-claudemd.js): `js/ui-claudemd.js`
- [Warnings UI](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-warnings.js): `js/ui-warnings.js`
- [Dictionary UI](https://github.com/oussoudiop05-ui/hospiquery/blob/main/js/ui-dictionary.js): `js/ui-dictionary.js`

### Other components

- **Analyst**
- **Anthropic service**

## Connections

- Analyst → Workbench shell: uses
- Workbench shell → Templates and history: wires (evidence: `js/app.js`)
- Workbench shell → Project guidance: wires (evidence: `js/app.js`)
- Workbench shell → Extraction state: updates (evidence: `js/app.js`)
- Templates and history → Extraction state: loads state (evidence: `js/ui-templates.js`)
- Workbench shell → API settings: wires (evidence: `js/app.js`)
- API settings → Model client: configures (evidence: `js/ui-settings.js`)
- Workbench shell → File management: wires
- Workbench shell → Warnings UI: wires
- Workbench shell → Dictionary UI: wires
- Workbench shell → Schema editor: hosts
- Workbench shell → Join editor: hosts
- Schema editor → Extraction state: edits
- Join editor → Extraction state: edits (evidence: `js/render-joins.js`)
- Join editor → Join logic: uses (evidence: `js/render-joins.js`)
- Join logic → Extraction state: reads connections (evidence: `js/joins.js`)
- Extraction state → I50 example: initializes from (evidence: `js/store.js`)
- Prompt and parsing → Data dictionary: looks up tables (evidence: `js/prompt.js`)
- AI discussion → Prompt and parsing: parses patches (evidence: `js/render-chat.js`)
- AI discussion → Model client: requests responses
- Model client → Anthropic service: sends requests (evidence: `js/api.js`)
- AI discussion → Extraction state: applies patches (evidence: `js/render-chat.js`)
- Final table review → R script generator: gets final columns (evidence: `js/render-final.js`)
- Final table review → Extraction state: saves order (evidence: `js/render-final.js`)
- R script generator → Extraction state: reads extraction
- Analyst → Final table review: reviews
- Analyst → R script generator: requests script
- Workbench shell → DOM utilities: uses (evidence: `js/app.js`)
