Arquitetura
O PHPB Lab usa uma arquitetura cliente-servidor. O frontend mantém o estado operacional do projeto e chama a API para operações de NLP, classificação, modelagem e relatório.
Componentes principais
flowchart LR
U["Usuário"] --> F["Frontend React/Vite"]
F --> S["Estado local: IndexedDB/localStorage"]
F --> A["API FastAPI"]
A --> N["spaCy pt_core_news_lg"]
A --> O["OpenAI"]
A --> M["Casos de uso de domínio"]
M --> R["Schemas e entidades"]
Separação no backend
O backend segue a separação interfaces -> application -> domain <- infrastructure.
| Camada | Responsabilidade |
|---|---|
interfaces | Routers HTTP e schemas de request/response. |
application/use_cases | Orquestração dos fluxos de análise, sanitização, classificação, modelagem e relatório. |
domain | Entidades, value objects e regras centrais. |
infrastructure | Adaptadores spaCy e OpenAI. |
Sequência de upload até visualização
sequenceDiagram
participant User as "Usuário"
participant UI as "Frontend"
participant Store as "IndexedDB"
participant API as "FastAPI"
participant NLP as "spaCy"
participant LLM as "OpenAI"
User->>UI: Importa arquivos .txt
UI->>Store: Salva snapshot do projeto
User->>UI: Prepara sentenças
User->>UI: Solicita etiquetagem
UI->>API: POST /api/analyze
API->>NLP: Processa sentenças
NLP-->>API: POS, dependências, entidades
API-->>UI: AnalyzeResponse
User->>UI: Filtra e classifica clíticos
UI->>API: POST /api/classify-clitics
API-->>UI: Ocorrências candidatas
User->>UI: Triagem, configuração e codificação
UI->>API: POST /api/model/run
API-->>UI: ModelResults
User->>UI: Compila relatório
UI->>API: POST /api/report/compile
API->>LLM: Geração assistida
LLM-->>API: Rascunho estruturado
API-->>UI: ReportDraft
Persistência
O snapshot de produção guarda:
- dados do projeto;
- documentos e metadados;
- segmentos preparados;
- requisição e resultado de etiquetagem;
- resultado da filtragem e classificação;
- ocorrências triadas;
- variáveis analíticas;
- linhas codificadas;
- matriz;
- modelo selecionado e resultados.
O autosave é local. Para mover um projeto entre máquinas ou navegadores, use Exportar projeto em JSON e Importar projeto de JSON.
Privacidade do relatório
O compilador de relatórios não envia o corpus integral ao backend. O frontend monta um contexto sanitizado com contagens, agregações, amostras, exemplos truncados e resultados já calculados.