Sistema de gestão de conhecimento para processamento de transcrições de reuniões com empreendedores da base da pirâmide (BOP). O sistema utiliza IA para extrair indicadores de desenvolvimento e gerar resumos executivos automaticamente.
O Coria é uma plataforma que permite:
- Gerenciar projetos de consultoria empresarial
- Organizar empresas e empreendedores por projeto
- Definir indicadores de crescimento e desenvolvimento
- Processar transcrições de reuniões automaticamente
- Extrair valores de indicadores usando IA
- Gerar resumos executivos das reuniões
- Visualizar progresso ao longo do tempo
graph TB
subgraph "Frontend (React + Vite)"
UI[Interface do Usuário]
Pages[Páginas: Dashboard, Transcrições, Indicadores]
API_Client[API Client - Axios]
end
subgraph "Backend (FastAPI)"
Router[API Routers]
Services[AI Services]
DB_ORM[(SQLAlchemy ORM)]
end
subgraph "Banco de Dados"
DB[(SQLite Database)]
Tables[Projects, Companies, Entrepreneurs,<br/>Indicators, IndicatorValues,<br/>Transcriptions]
end
subgraph "IA & Processamento"
OpenAI[OpenAI GPT-4o-mini<br/>Resumos Executivos]
Embeddings[Sentence Transformers<br/>Embeddings]
BM25[BM25<br/>Busca por Palavras-chave]
Reranker[Cross-encoder<br/>Reranking]
end
UI --> Pages
Pages --> API_Client
API_Client --> Router
Router --> Services
Router --> DB_ORM
DB_ORM --> DB
DB --> Tables
Services --> OpenAI
Services --> Embeddings
Services --> BM25
Services --> Reranker
style UI fill:#e1f5ff
style Router fill:#fff4e1
style DB fill:#e8f5e9
style OpenAI fill:#fce4ec
style Embeddings fill:#fce4ec
style BM25 fill:#fce4ec
style Reranker fill:#fce4ec
sequenceDiagram
participant U as Usuário
participant F as Frontend
participant B as Backend
participant DB as Database
U->>F: Criar Projeto
F->>B: POST /api/projects
B->>DB: Criar Project
DB-->>B: Project criado
B-->>F: Project data
F-->>U: Projeto exibido
U->>F: Criar Empresa/Empreendedor
F->>B: POST /api/entrepreneurs (se novo)
B->>DB: Criar Entrepreneur
F->>B: POST /api/companies
B->>DB: Criar Company (link Entrepreneur)
U->>F: Criar Indicador Template
F->>B: POST /api/indicators
B->>DB: Criar Indicator (template)
sequenceDiagram
participant U as Usuário
participant F as Frontend
participant B as Backend
participant AI as AI Services
participant DB as Database
U->>F: Upload Transcrição + Metadados
F->>B: POST /api/transcriptions/upload
B->>DB: Salvar Transcription
DB-->>B: Transcription criada
B->>AI: Gerar Resumo Executivo
AI->>AI: OpenAI GPT-4o-mini
AI-->>B: Executive Summary
B->>DB: Atualizar Transcription.summary
B->>AI: Extrair Indicadores
loop Para cada Indicator Template
AI->>AI: Hybrid Search<br/>(Embeddings + BM25)
AI->>AI: Reranking
AI->>AI: LLM Extraction
AI-->>B: IndicatorValue
B->>DB: Salvar IndicatorValue
end
B-->>F: Transcription + Summary + Values
F-->>U: Resultado exibido
sequenceDiagram
participant U as Usuário
participant F as Frontend
participant B as Backend
participant DB as Database
U->>F: Acessar Dashboard
F->>B: GET /api/indicator-values?project_id=X
B->>DB: Query IndicatorValues
DB-->>B: Time-series data
B-->>F: Aggregated indicators
F-->>U: Gráficos e métricas
U->>F: Filtrar por Empresa/Reunião
F->>B: GET /api/indicator-values?company_id=Y
B->>DB: Filtered query
DB-->>B: Filtered data
B-->>F: Filtered results
F-->>U: Dados filtrados
erDiagram
Project ||--o{ Company : "has"
Project ||--o{ Entrepreneur : "has"
Project ||--o{ Indicator : "defines"
Project ||--o{ Transcription : "contains"
Entrepreneur ||--o{ Company : "owns"
Company ||--o{ Transcription : "has"
Company ||--o{ IndicatorValue : "measures"
Indicator ||--o{ IndicatorValue : "has values"
Transcription ||--o{ IndicatorValue : "extracts"
Project {
int id PK
string name
text description
datetime created_at
}
Entrepreneur {
int id PK
int project_id FK
string name
string email
string phone
text notes
}
Company {
int id PK
int project_id FK
int entrepreneur_id FK
string name
boolean is_formal_company
text description
}
Indicator {
int id PK
int project_id FK
string name
string indicator_type
string category
text description
text extraction_query
}
Transcription {
int id PK
int project_id FK
int company_id FK
string filename
text content
text executive_summary
datetime meeting_date
string participants
string meeting_type
}
IndicatorValue {
int id PK
int indicator_id FK
int company_id FK
int transcription_id FK
float value
text text_value
datetime measured_at
}
- Criar e gerenciar múltiplos projetos
- Cada projeto é isolado com seus próprios dados
- Criar empreendedores associados a projetos
- Associar empresas a empreendedores
- Suporte para empresas formais e informais
- Indicadores Template: Definições reutilizáveis por projeto
- Tipos de Indicadores:
company_growth: KPIs de crescimento da empresaentrepreneur_development: KPIs de desenvolvimento do empreendedorproject: Indicadores específicos do projeto
- Extraction Query: Consulta personalizada para melhorar extração pela IA
- Upload com metadados (data, participantes, tipo de reunião)
- Geração Automática de Resumos Executivos usando OpenAI
- Extração Automática de Indicadores usando:
- Hybrid Search: Combinação de busca semântica (embeddings) e busca por palavras-chave (BM25)
- Reranking: Reordenação de resultados usando cross-encoder
- LLM Extraction: Extração de valores usando LLM
- Dashboard Agregado: Visão geral de todos os indicadores
- Filtros: Por empresa, por reunião (sessão de consultoria)
- Time-series Data: Valores de indicadores com timestamps para visualização temporal
- Histórico de Reuniões: Timeline de todas as reuniões com resumos
- FastAPI: Framework web assíncrono
- SQLAlchemy 2.0: ORM para banco de dados
- SQLite: Banco de dados (desenvolvimento)
- Pydantic v2: Validação de dados
- OpenAI API: Geração de resumos executivos
- Sentence Transformers: Embeddings para busca semântica
- BM25: Busca por palavras-chave
- Cross-encoder: Reranking de resultados
- React: Biblioteca UI
- Vite: Build tool e dev server
- React Router DOM: Roteamento
- TailwindCSS: Estilização
- Axios: Cliente HTTP
- Docker: Containerização
- Docker Compose: Orquestração de containers
coria/
├── backend/
│ ├── data/ # Banco de dados SQLite (persistente)
│ ├── uploads/ # Arquivos de transcrição
│ ├── routers/ # API endpoints
│ │ ├── projects.py
│ │ ├── companies.py
│ │ ├── entrepreneurs.py
│ │ ├── indicators.py
│ │ ├── indicator_values.py
│ │ ├── transcriptions.py
│ │ ├── reports.py
│ │ ├── ai_processing.py
│ │ └── meetings_history.py
│ ├── services/ # Lógica de negócio e IA
│ │ ├── ai_extraction.py # Extração de indicadores
│ │ └── summary_generation.py # Geração de resumos
│ ├── models.py # Modelos SQLAlchemy
│ ├── schemas.py # Schemas Pydantic
│ ├── database.py # Configuração do banco
│ └── main.py # Aplicação FastAPI
│
├── frontend/
│ ├── src/
│ │ ├── api/ # Clientes API
│ │ ├── components/ # Componentes React
│ │ ├── contexts/ # Context API
│ │ ├── pages/ # Páginas da aplicação
│ │ └── App.jsx # Roteamento principal
│ └── ...
│
└── docker-compose.yml # Configuração Docker
- Docker e Docker Compose
- OpenAI API Key (para geração de resumos)
Crie um arquivo .env na raiz do projeto (opcional):
OPENAI_API_KEY=sua_chave_aqui# Iniciar containers
docker-compose up -d
# Ver logs do backend
docker-compose logs -f backend
# Executar comandos no backend
docker exec -it coria_backend bash
# Parar containers
docker-compose downOs dados são persistidos em volumes Docker:
- Banco de dados:
backend/data/app.db - Uploads:
backend/uploads/
Nota: Esses diretórios estão no .gitignore e não são versionados.
GET /api/projects/- Listar projetosPOST /api/projects/- Criar projetoGET /api/projects/{id}- Obter projetoDELETE /api/projects/{id}- Deletar projeto
GET /api/companies/?project_id={id}- Listar empresasPOST /api/companies/- Criar empresaGET /api/companies/{id}- Obter empresa
GET /api/entrepreneurs/?project_id={id}- Listar empreendedoresPOST /api/entrepreneurs/- Criar empreendedorGET /api/entrepreneurs/{id}- Obter empreendedor
GET /api/indicators/?project_id={id}- Listar templatesPOST /api/indicators/- Criar templateDELETE /api/indicators/{id}- Deletar template
GET /api/indicator-values/?project_id={id}&company_id={id}&transcription_id={id}- Listar valoresPOST /api/indicator-values/- Criar valor manualmente
POST /api/transcriptions/upload- Upload de transcriçãoGET /api/transcriptions/?project_id={id}- Listar transcriçõesGET /api/transcriptions/{id}- Obter transcrição
POST /api/ai/process-transcription/{id}- Reprocessar transcriçãoPOST /api/meetings/generate-summary/{id}- Gerar resumo executivo
GET /api/reports/project/{id}- Relatório do projetoGET /api/reports/company/{id}- Relatório da empresa
-
Upload da Transcrição: Usuário faz upload com metadados (data, participantes, etc.)
-
Busca Híbrida: Para cada indicador template:
- Dense Search: Gera embeddings da query e do texto, calcula similaridade de cosseno
- BM25: Busca por palavras-chave com expansão de sinônimos
- Combinação: Média ponderada (60% dense, 40% BM25)
-
Reranking: Usa cross-encoder para reordenar os chunks mais relevantes
-
Extração com LLM: Envia os chunks mais relevantes para o LLM extrair o valor do indicador
-
Armazenamento: Salva
IndicatorValuecom:indicator_id: Referência ao templatecompany_id: Empresa associadatranscription_id: Transcrição de origemvalueoutext_value: Valor extraídomeasured_at: Data da reunião (para time-series)
- Topbar: Link "Projetos" para voltar à lista de projetos
- Navegação Secundária:
- Dashboard (visão agregada)
- Transcrições (gerenciamento)
- Indicadores (templates)
- Botões de Ação (no canto direito da navegação):
- "+ Empresa": Criar empresa/empreendedor
- "+ Indicador": Criar indicador template
- Filtros por empresa e reunião
- Visualização agregada de indicadores
- Botões para upload e visualização de transcrições
- Migrações: Use scripts de migração (
migrate_db.py,migrate_entrepreneurs.py) para alterar o schema - Comandos no Backend: Sempre execute dentro do container Docker
- Comandos no Frontend: Execute localmente na pasta
frontend/ - Banco de Dados: SQLite para desenvolvimento, pode ser migrado para PostgreSQL em produção
- CORS configurado para desenvolvimento local
- API keys armazenadas em variáveis de ambiente
- Validação de dados com Pydantic
- Sanitização de uploads de arquivos
Copyright 2025. Todos os direitos reservados.