Files

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`.