70 lines
2.3 KiB
Markdown
70 lines
2.3 KiB
Markdown
# Lernotafiscal
|
|
|
|
Aplicativo web para importar notas e cupons fiscais (PDF/imagem), revisar a
|
|
extração e acompanhar despesas confirmadas. A leitura dos documentos usa
|
|
**OpenAI Vision** quando há chave configurada, com **fallback** para OCR/heurística
|
|
local. Feito para rodar numa VPS.
|
|
|
|
## Recursos
|
|
|
|
- Login simples (usuário/senha, hash bcrypt, sessão por cookie assinado).
|
|
- Upload de PDF/JPG/PNG com **confirmação em lote** antes de gravar: mostra o
|
|
número de documentos e o valor total, e destaca itens ilegíveis para correção.
|
|
- Data ilegível/ausente → **1º dia do mês corrente** (regra única compartilhada
|
|
por IA e cadastro manual).
|
|
- **CRUD** completo de documentos (criar, editar, excluir, listar/filtrar).
|
|
- Dashboard com KPIs, gastos por mês e por fornecedor.
|
|
- Tema claro/escuro (persistido no navegador).
|
|
- Banco **SQLite** (WAL), sem serviço externo.
|
|
|
|
## Stack
|
|
|
|
FastAPI + Uvicorn · Jinja2 (server-rendered) · SQLite · OpenAI (Vision) com
|
|
fallback OCR (PyMuPDF + Tesseract) · bcrypt.
|
|
|
|
## Rodar localmente
|
|
|
|
```bash
|
|
python -m venv .venv
|
|
.venv/Scripts/activate # Windows; no Linux/Mac: source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
cp .env.example .env # defina ADMIN_PASSWORD e SECRET_KEY
|
|
python app.py # http://127.0.0.1:8000
|
|
```
|
|
|
|
Sem `OPENAI_API_KEY` o app usa OCR/heurística local (o Tesseract precisa estar
|
|
instalado no sistema para OCR de imagens). Com a chave, a extração usa a IA.
|
|
|
|
### Migrar histórico (opcional)
|
|
|
|
```bash
|
|
python scripts/migrate_notas.py # importa Skill/dados/lernotafiscal.db -> app
|
|
```
|
|
|
|
## Testes
|
|
|
|
```bash
|
|
python -m unittest
|
|
```
|
|
|
|
## Deploy em VPS
|
|
|
|
Guia completo (Ubuntu + systemd + Nginx + HTTPS) em [DEPLOY.md](DEPLOY.md).
|
|
|
|
## Estrutura
|
|
|
|
```
|
|
app/ aplicação FastAPI (config, database, auth, rotas, templates)
|
|
app/ai_extraction extração via OpenAI Vision
|
|
app/ingestion orquestra IA -> fallback OCR local
|
|
lernotafiscal/ motor de extração heurística/OCR reutilizado no fallback
|
|
scripts/ utilitários (migrate_notas.py)
|
|
deploy/ unit systemd + config nginx
|
|
```
|
|
|
|
## Variáveis de ambiente
|
|
|
|
Veja [.env.example](.env.example). Principais: `SECRET_KEY`, `ADMIN_USERNAME`,
|
|
`ADMIN_PASSWORD`, `OPENAI_API_KEY`, `OPENAI_MODEL`, `DB_PATH`, `MAX_UPLOAD_BYTES`,
|
|
`SESSION_HTTPS_ONLY`.
|