# juliosilva2854/odonto-crm architecture

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

- Interactive diagram: https://gitdiagram.com/juliosilva2854/odonto-crm
- Repository: https://github.com/juliosilva2854/odonto-crm

## Overview

Dental CRM is a multi-tenant dental-practice SaaS. Clinic staff use the React app to manage patients, appointments, clinical records and treatment plans; the frontend services call a FastAPI modular monolith that enforces domain rules and persists clinic data. Quotes can be approved item-by-item and linked to odontogram procedures; billing integrates with Stripe. The README documents these capabilities, while sampled backend entry-point and service code confirms selected routes and domain calls. Several frontend-to-backend links are documented at the feature level, not traced through every handler.

Main entry points: [`backend/src/main.py`](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/main.py) (FastAPI application), [`backend/src/modules/finance/quotes/service.py`](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/finance/quotes/service.py) (Quotes and approvals), [`frontend/src/App.tsx`](https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/App.tsx) (React application), [`frontend/src/lib/api.ts`](https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/lib/api.ts) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Clinic application"]
  node_webapp["React application<br/>[App.tsx]"]
  node_patient_ui["Patient workspace"]
  node_agenda_ui["Agenda interface<br/>[AgendaPage.tsx]"]
  node_finance_ui["Finance pages"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_identity["Identity and tenancy"]
  node_auth_service["Authentication<br/>[service.py]"]
  node_tenancy["Clinic tenancy<br/>[service.py]"]
end

subgraph group_clinical["Patient and clinical care"]
  node_patients["Patient management<br/>[service.py]"]
  node_anamnesis["Patient anamnesis<br/>[service.py]"]
  node_catalog["Procedure catalog<br/>[service.py]"]
  node_records["Clinical records<br/>[service.py]"]
  node_odontogram["Odontogram<br/>[service.py]"]
end

subgraph group_operations["Practice operations"]
  node_agenda["Appointments<br/>[service.py]"]
  node_quotes["Quotes and approvals<br/>[service.py]"]
  node_cash["Cash management<br/>[service.py]"]
  node_dashboard["Clinic dashboard<br/>[service.py]"]
  node_billing["Subscription billing<br/>[service.py]"]
end

subgraph group_platform["Platform services"]
  node_stripe["Stripe gateway<br/>[stripe_client.py]"]
  node_api["FastAPI application<br/>[main.py]"]
  node_database[("PostgreSQL data<br/>[database.py]")]
  node_events["Event bus<br/>[bus.py]"]
end

node_staff(("Clinic staff"))

node_staff -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_patient_ui
node_webapp -->|"routes to"| node_agenda_ui
node_webapp -->|"routes to"| node_finance_ui
node_patient_ui -.->|"requests data"| node_api_client
node_agenda_ui -.->|"requests data"| node_api_client
node_finance_ui -.->|"requests data"| node_api_client
node_api_client -.->|"calls API"| node_api
node_api -->|"registers router"| node_auth_service
node_api -->|"registers router"| node_tenancy
node_api -->|"registers router"| node_patients
node_api -->|"registers router"| node_anamnesis
node_api -->|"registers router"| node_catalog
node_api -->|"registers router"| node_agenda
node_api -->|"registers router"| node_quotes
node_api -->|"registers router"| node_cash
node_api -->|"registers router"| node_dashboard
node_api -->|"registers router"| node_billing
node_quotes -->|"reads procedures"| node_catalog
node_quotes -->|"reads tooth procedure"| node_odontogram
node_quotes -->|"publishes approval"| node_events
node_odontogram -->|"reads catalog"| node_catalog
node_billing -->|"uses gateway"| node_stripe
node_billing -->|"checks subscription"| node_tenancy
node_dashboard -->|"queries data"| node_database
node_patients -->|"publishes events"| node_events
node_agenda -->|"publishes events"| node_events
node_records -.->|"persists records"| node_database
node_agenda -.->|"persists appointments"| node_database
node_quotes -.->|"persists quotes"| node_database

click node_webapp "https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/App.tsx"
click node_patient_ui "https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/pages/PatientRecordPage.tsx"
click node_agenda_ui "https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/pages/AgendaPage.tsx"
click node_finance_ui "https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/pages/FinanceQuotesPage.tsx"
click node_api_client "https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/lib/api.ts"
click node_auth_service "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/auth/service.py"
click node_tenancy "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/tenancy/service.py"
click node_patients "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/patients/service.py"
click node_anamnesis "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/patients/anamnesis/service.py"
click node_catalog "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/clinical/catalog/service.py"
click node_records "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/clinical/records/service.py"
click node_odontogram "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/clinical/odontogram/service.py"
click node_agenda "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/agenda/service.py"
click node_quotes "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/finance/quotes/service.py"
click node_cash "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/finance/cash/service.py"
click node_dashboard "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/dashboard/service.py"
click node_billing "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/billing/service.py"
click node_stripe "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/core/stripe_client.py"
click node_api "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/main.py"
click node_database "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/core/database.py"
click node_events "https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/core/events/bus.py"

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_webapp,node_patient_ui,node_agenda_ui,node_finance_ui,node_api_client toneBlue
class node_auth_service,node_tenancy toneAmber
class node_patients,node_anamnesis,node_catalog,node_records,node_odontogram toneMint
class node_agenda,node_quotes,node_cash,node_dashboard,node_billing toneRose
class node_stripe,node_api,node_database,node_events,node_staff toneIndigo
```

## Components

### Clinic application

- [React application](https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Patient workspace](https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/pages/PatientRecordPage.tsx): `frontend/src/pages/PatientRecordPage.tsx`
- [Agenda interface](https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/pages/AgendaPage.tsx): `frontend/src/pages/AgendaPage.tsx`
- [Finance pages](https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/pages/FinanceQuotesPage.tsx): `frontend/src/pages/FinanceQuotesPage.tsx`
- [API client](https://github.com/juliosilva2854/odonto-crm/blob/main/frontend/src/lib/api.ts): `frontend/src/lib/api.ts`

### Identity and tenancy

- [Authentication](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/auth/service.py): `backend/src/modules/auth/service.py`
- [Clinic tenancy](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/tenancy/service.py): `backend/src/modules/tenancy/service.py`

### Patient and clinical care

- [Patient management](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/patients/service.py): `backend/src/modules/patients/service.py`
- [Patient anamnesis](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/patients/anamnesis/service.py): `backend/src/modules/patients/anamnesis/service.py`
- [Procedure catalog](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/clinical/catalog/service.py): `backend/src/modules/clinical/catalog/service.py`
- [Clinical records](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/clinical/records/service.py): `backend/src/modules/clinical/records/service.py`
- [Odontogram](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/clinical/odontogram/service.py): `backend/src/modules/clinical/odontogram/service.py`

### Practice operations

- [Appointments](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/agenda/service.py): `backend/src/modules/agenda/service.py`
- [Quotes and approvals](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/finance/quotes/service.py): `backend/src/modules/finance/quotes/service.py`
- [Cash management](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/finance/cash/service.py): `backend/src/modules/finance/cash/service.py`
- [Clinic dashboard](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/dashboard/service.py): `backend/src/modules/dashboard/service.py`
- [Subscription billing](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/modules/billing/service.py): `backend/src/modules/billing/service.py`

### Platform services

- [Stripe gateway](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/core/stripe_client.py): `backend/src/core/stripe_client.py`
- [FastAPI application](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/main.py): `backend/src/main.py`
- [PostgreSQL data](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/core/database.py): `backend/src/core/database.py`
- [Event bus](https://github.com/juliosilva2854/odonto-crm/blob/main/backend/src/core/events/bus.py): `backend/src/core/events/bus.py`

### Other components

- **Clinic staff**

## Connections

- Clinic staff → React application: uses (evidence: `README.md`)
- React application → Patient workspace: routes to (evidence: `README.md`)
- React application → Agenda interface: routes to (evidence: `README.md`)
- React application → Finance pages: routes to (evidence: `README.md`)
- Patient workspace → API client: requests data
- Agenda interface → API client: requests data
- Finance pages → API client: requests data
- API client → FastAPI application: calls API
- FastAPI application → Authentication: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Clinic tenancy: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Patient management: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Patient anamnesis: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Procedure catalog: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Appointments: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Quotes and approvals: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Cash management: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Clinic dashboard: registers router (evidence: `backend/src/main.py`)
- FastAPI application → Subscription billing: registers router (evidence: `backend/src/main.py`)
- Quotes and approvals → Procedure catalog: reads procedures (evidence: `backend/src/modules/finance/quotes/service.py`)
- Quotes and approvals → Odontogram: reads tooth procedure (evidence: `backend/src/modules/finance/quotes/service.py`)
- Quotes and approvals → Event bus: publishes approval (evidence: `backend/src/modules/finance/quotes/service.py`)
- Odontogram → Procedure catalog: reads catalog (evidence: `backend/src/modules/clinical/odontogram/service.py`)
- Subscription billing → Stripe gateway: uses gateway (evidence: `backend/src/modules/billing/service.py`)
- Subscription billing → Clinic tenancy: checks subscription (evidence: `backend/src/modules/billing/service.py`)
- Clinic dashboard → PostgreSQL data: queries data
- Patient management → Event bus: publishes events (evidence: `backend/src/modules/patients/service.py`)
- Appointments → Event bus: publishes events (evidence: `backend/src/modules/agenda/service.py`)
- Clinical records → PostgreSQL data: persists records
- Appointments → PostgreSQL data: persists appointments
- Quotes and approvals → PostgreSQL data: persists quotes
