# adriano1976/prontuario-facil architecture

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

- Interactive diagram: https://gitdiagram.com/adriano1976/prontuario-facil
- Repository: https://github.com/adriano1976/prontuario-facil

## Overview

Prontuário Fácil é uma SPA clínica para profissionais de saúde: autenticam-se, gerem pacientes e agenda, registam consultas e produzem receitas, exames e documentos. O README também identifica dashboard, templates e auditoria LGPD como capacidades principais. A aplicação encaminha páginas sob providers de sessão e cache para uma camada de dados tipada, escolhendo Base44 ou armazenamento local offline. Ligações específicas entre páginas e vários módulos não foram amostradas; o grafo limita essas relações e usa a documentação para as capacidades não inspecionadas.

Main entry points: [`src/api/base44Client.ts`](https://github.com/adriano1976/prontuario-facil/blob/main/src/api/base44Client.ts) (Cliente de dados tipado), [`src/pages/Consultation.tsx`](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Consultation.tsx) (Consulta clínica), [`src/Layout.tsx`](https://github.com/adriano1976/prontuario-facil/blob/main/src/Layout.tsx) (Layout e navegação), [`src/App.tsx`](https://github.com/adriano1976/prontuario-facil/blob/main/src/App.tsx) (Aplicação React)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Aplicação"]
  node_app["Aplicação React<br/>[App.tsx]"]
  node_layout["Layout e navegação<br/>[Layout.tsx]"]
end

subgraph group_patient["Pacientes"]
  node_patients["Pacientes<br/>[Patients.tsx]"]
  node_patient_detail["Ficha do paciente<br/>[PatientDetail.tsx]"]
  node_patient_form["Cadastro paciente<br/>[PatientForm.tsx]"]
  node_patient_search["Busca de pacientes<br/>[PatientSearch.tsx]"]
end

subgraph group_care["Atendimento"]
  node_appointments["Agendamentos<br/>[Appointments.tsx]"]
  node_new_appointment["Novo agendamento<br/>[NewAppointment.tsx]"]
  node_calendar["Calendário e horários"]
  node_consultations["Consultas<br/>[Consultations.tsx]"]
  node_consultation["Consulta clínica<br/>[Consultation.tsx]"]
  node_new_consultation["Registrar consulta"]
  node_timeline["Timeline clínica"]
  node_vitals["Sinais vitais<br/>[VitalSignsForm.tsx]"]
end

subgraph group_operations["Operação clínica"]
  node_prescriptions["Prescrições"]
  node_exams["Exames<br/>[ExamUploader.tsx]"]
  node_templates["Templates documentais<br/>[Templates.tsx]"]
  node_dashboard["Dashboard e métricas<br/>[Dashboard.tsx]"]
  node_access_page["Logs de acesso<br/>[AccessLogs.tsx]"]
  node_access_logger["Auditoria de acesso<br/>[AccessLogger.ts]"]
end

subgraph group_data["Dados e sessão"]
  node_auth["Autenticação e sessão<br/>[AuthContext.tsx]"]
  node_current_user["Usuário atual<br/>[useCurrentUser.ts]"]
  node_scope["Escopo de sessão<br/>[sessionScope.ts]"]
  node_data_api["Cliente de dados tipado<br/>[base44Client.ts]"]
  node_mock[("Persistência local<br/>[mockClient.ts]")]
end

node_professional(("Profissional de saúde"))
node_base44[("Base44 BaaS")]
node_email["Serviço de e-mail"]

node_professional -->|"usa"| node_app
node_app -->|"renderiza"| node_layout
node_app -->|"inicializa"| node_auth
node_app -->|"protege rota"| node_current_user
node_layout -->|"navega"| node_patients
node_layout -->|"navega"| node_appointments
node_layout -->|"navega"| node_consultations
node_layout -->|"navega"| node_dashboard
node_patients -->|"abre cadastro"| node_patient_form
node_patients -->|"usa busca"| node_patient_search
node_patient_search -->|"abre ficha"| node_patient_detail
node_patient_detail -->|"consulta dados"| node_data_api
node_patient_form -->|"grava paciente"| node_data_api
node_appointments -->|"apresenta agenda"| node_calendar
node_appointments -->|"abre cadastro"| node_new_appointment
node_new_appointment -->|"grava agendamento"| node_data_api
node_consultations -->|"abre consulta"| node_consultation
node_consultation -->|"lê consulta"| node_data_api
node_consultation -->|"resolve escopo"| node_scope
node_consultation -->|"abre edição"| node_new_consultation
node_consultation -->|"abre editor"| node_prescriptions
node_consultation -->|"abre envio"| node_exams
node_new_consultation -->|"registra sinais"| node_vitals
node_consultation -->|"exibe histórico"| node_timeline
node_dashboard -->|"consulta métricas"| node_data_api
node_templates -->|"acessa modelos"| node_data_api
node_access_page -->|"consulta logs"| node_data_api
node_access_logger -->|"registra acesso"| node_data_api
node_current_user -->|"consulta sessão"| node_data_api
node_auth -->|"usa autenticação"| node_data_api
node_data_api -->|"envia operações"| node_base44
node_data_api -.->|"seleciona offline"| node_mock
node_new_appointment -.->|"envia lembrete"| node_email

click node_app "https://github.com/adriano1976/prontuario-facil/blob/main/src/App.tsx"
click node_layout "https://github.com/adriano1976/prontuario-facil/blob/main/src/Layout.tsx"
click node_patients "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Patients.tsx"
click node_patient_detail "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/PatientDetail.tsx"
click node_patient_form "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/PatientForm.tsx"
click node_patient_search "https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/PatientSearch.tsx"
click node_appointments "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Appointments.tsx"
click node_new_appointment "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/NewAppointment.tsx"
click node_calendar "https://github.com/adriano1976/prontuario-facil/blob/main/src/components/appointments/AppointmentCalendar.tsx"
click node_consultations "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Consultations.tsx"
click node_consultation "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Consultation.tsx"
click node_new_consultation "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/NewConsultation.tsx"
click node_timeline "https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/ConsultationTimeline.tsx"
click node_vitals "https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/VitalSignsForm.tsx"
click node_prescriptions "https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/PrescriptionEditor.tsx"
click node_exams "https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/ExamUploader.tsx"
click node_templates "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Templates.tsx"
click node_dashboard "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Dashboard.tsx"
click node_access_page "https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/AccessLogs.tsx"
click node_access_logger "https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/AccessLogger.ts"
click node_auth "https://github.com/adriano1976/prontuario-facil/blob/main/src/lib/AuthContext.tsx"
click node_current_user "https://github.com/adriano1976/prontuario-facil/blob/main/src/lib/useCurrentUser.ts"
click node_scope "https://github.com/adriano1976/prontuario-facil/blob/main/src/api/sessionScope.ts"
click node_data_api "https://github.com/adriano1976/prontuario-facil/blob/main/src/api/base44Client.ts"
click node_mock "https://github.com/adriano1976/prontuario-facil/blob/main/src/api/mockClient.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_app,node_layout toneBlue
class node_patients,node_patient_detail,node_patient_form,node_patient_search,node_base44 toneAmber
class node_appointments,node_new_appointment,node_calendar,node_consultations,node_consultation,node_new_consultation,node_timeline,node_vitals toneMint
class node_prescriptions,node_exams,node_templates,node_dashboard,node_access_page,node_access_logger toneRose
class node_auth,node_current_user,node_scope,node_data_api,node_mock,node_professional,node_email toneIndigo
```

## Components

### Aplicação

- [Aplicação React](https://github.com/adriano1976/prontuario-facil/blob/main/src/App.tsx): `src/App.tsx`
- [Layout e navegação](https://github.com/adriano1976/prontuario-facil/blob/main/src/Layout.tsx): `src/Layout.tsx`

### Pacientes

- [Pacientes](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Patients.tsx): `src/pages/Patients.tsx`
- [Ficha do paciente](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/PatientDetail.tsx): `src/pages/PatientDetail.tsx`
- [Cadastro paciente](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/PatientForm.tsx): `src/pages/PatientForm.tsx`
- [Busca de pacientes](https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/PatientSearch.tsx): `src/components/medical/PatientSearch.tsx`

### Atendimento

- [Agendamentos](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Appointments.tsx): `src/pages/Appointments.tsx`
- [Novo agendamento](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/NewAppointment.tsx): `src/pages/NewAppointment.tsx`
- [Calendário e horários](https://github.com/adriano1976/prontuario-facil/blob/main/src/components/appointments/AppointmentCalendar.tsx): `src/components/appointments/AppointmentCalendar.tsx`
- [Consultas](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Consultations.tsx): `src/pages/Consultations.tsx`
- [Consulta clínica](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Consultation.tsx): `src/pages/Consultation.tsx`
- [Registrar consulta](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/NewConsultation.tsx): `src/pages/NewConsultation.tsx`
- [Timeline clínica](https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/ConsultationTimeline.tsx): `src/components/medical/ConsultationTimeline.tsx`
- [Sinais vitais](https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/VitalSignsForm.tsx): `src/components/medical/VitalSignsForm.tsx`

### Operação clínica

- [Prescrições](https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/PrescriptionEditor.tsx): `src/components/medical/PrescriptionEditor.tsx`
- [Exames](https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/ExamUploader.tsx): `src/components/medical/ExamUploader.tsx`
- [Templates documentais](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Templates.tsx): `src/pages/Templates.tsx`
- [Dashboard e métricas](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/Dashboard.tsx): `src/pages/Dashboard.tsx`
- [Logs de acesso](https://github.com/adriano1976/prontuario-facil/blob/main/src/pages/AccessLogs.tsx): `src/pages/AccessLogs.tsx`
- [Auditoria de acesso](https://github.com/adriano1976/prontuario-facil/blob/main/src/components/medical/AccessLogger.ts): `src/components/medical/AccessLogger.ts`

### Dados e sessão

- [Autenticação e sessão](https://github.com/adriano1976/prontuario-facil/blob/main/src/lib/AuthContext.tsx): `src/lib/AuthContext.tsx`
- [Usuário atual](https://github.com/adriano1976/prontuario-facil/blob/main/src/lib/useCurrentUser.ts): `src/lib/useCurrentUser.ts`
- [Escopo de sessão](https://github.com/adriano1976/prontuario-facil/blob/main/src/api/sessionScope.ts): `src/api/sessionScope.ts`
- [Cliente de dados tipado](https://github.com/adriano1976/prontuario-facil/blob/main/src/api/base44Client.ts): `src/api/base44Client.ts`
- [Persistência local](https://github.com/adriano1976/prontuario-facil/blob/main/src/api/mockClient.ts): `src/api/mockClient.ts`

### Other components

- **Profissional de saúde**
- **Base44 BaaS**
- **Serviço de e-mail**

## Connections

- Profissional de saúde → Aplicação React: usa
- Aplicação React → Layout e navegação: renderiza
- Aplicação React → Autenticação e sessão: inicializa
- Aplicação React → Usuário atual: protege rota
- Layout e navegação → Pacientes: navega
- Layout e navegação → Agendamentos: navega
- Layout e navegação → Consultas: navega
- Layout e navegação → Dashboard e métricas: navega
- Pacientes → Cadastro paciente: abre cadastro
- Pacientes → Busca de pacientes: usa busca
- Busca de pacientes → Ficha do paciente: abre ficha
- Ficha do paciente → Cliente de dados tipado: consulta dados
- Cadastro paciente → Cliente de dados tipado: grava paciente
- Agendamentos → Calendário e horários: apresenta agenda
- Agendamentos → Novo agendamento: abre cadastro
- Novo agendamento → Cliente de dados tipado: grava agendamento
- Consultas → Consulta clínica: abre consulta
- Consulta clínica → Cliente de dados tipado: lê consulta
- Consulta clínica → Escopo de sessão: resolve escopo
- Consulta clínica → Registrar consulta: abre edição
- Consulta clínica → Prescrições: abre editor
- Consulta clínica → Exames: abre envio
- Registrar consulta → Sinais vitais: registra sinais
- Consulta clínica → Timeline clínica: exibe histórico
- Dashboard e métricas → Cliente de dados tipado: consulta métricas
- Templates documentais → Cliente de dados tipado: acessa modelos
- Logs de acesso → Cliente de dados tipado: consulta logs
- Auditoria de acesso → Cliente de dados tipado: registra acesso
- Usuário atual → Cliente de dados tipado: consulta sessão
- Autenticação e sessão → Cliente de dados tipado: usa autenticação
- Cliente de dados tipado → Base44 BaaS: envia operações
- Cliente de dados tipado → Persistência local: seleciona offline
- Novo agendamento → Serviço de e-mail: envia lembrete
