[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81203":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":14,"starSnapshotCount":14,"syncStatus":16,"lastSyncTime":25,"discoverSource":26},81203,"nfse_manager","cleitonleonel\u002Fnfse_manager","cleitonleonel","Sistema de gestão de NFSe em Python (FastAPI + SQLAlchemy + SQLite), com dashboard, downloads XML\u002FPDF, analytics e relatórios JSON\u002FCSV\u002FXLSX.",null,"Python",28,14,4,0,1,2,41.23,false,"master",true,[],"2026-06-12 04:01:32","# 🚀 NFSe Manager\n\nAplicação para gerenciamento de NFSe com **backend FastAPI**, **frontend web estático** e **empacotamento desktop com Tauri**.\n\nO projeto armazena clientes e notas em um banco SQLite local, sincroniza dados com o portal de NFSe, baixa XML\u002FPDF, gera relatórios e exibe indicadores no dashboard.\n\n## Visão geral\n\n- **Web app** servido pelo próprio FastAPI em `backend\u002Fmain.py`.\n- **Frontend SPA** em `frontend\u002F`, com páginas carregadas dinamicamente.\n- **Desktop app** em `ui\u002F`, usando Tauri como shell nativo.\n- **Banco local**: `nfse.db`.\n\n## O que o sistema faz\n\n- Cadastro, edição e remoção de clientes.\n- Sincronização de notas emitidas e recebidas por período.\n- Download de XML e PDF.\n- Recuperação de arquivos ausentes usando as URLs salvas no banco.\n- Exportação de relatórios em JSON, CSV e XLSX.\n- Dashboard com estatísticas, gráfico temporal e ranking.\n- Verificação de atualização do sistema via GitHub Releases.\n- Navegação de pastas para seleção de diretórios de saída.\n\n## Tecnologias usadas\n\n- Python 3.12+\n- FastAPI\n- SQLAlchemy\n- SQLite\n- Pydantic\n- Uvicorn\n- OpenPyXL\n- HTTPX\n- Frontend em HTML\u002FCSS\u002FJavaScript puro\n- Tauri para desktop\n\n## 🧱 Estrutura principal\n\n```text\nnfse_manager\u002F\n├── 📁 backend\u002F                # API, modelos, schemas e rotas\n├── 🎨 frontend\u002F               # UI web servida pelo FastAPI\n├── 🖥️ ui\u002F                     # Shell desktop com Tauri\n├── 📚 docs\u002F                   # Documentação do projeto\n├── 🗃️ nfse.db                 # Banco SQLite local\n├── 🧩 pyproject.toml          # Dependências e configuração do Poetry\n├── ▶️ run_web.sh              # Inicializa a versão web\n└── 🚀 run_ui.sh               # Inicializa a versão desktop\n```\n\n## Documentação técnica\n\nLeia também:\n\n- `docs\u002Farquitetura-e-uso.md`\n\n## Exemplos práticos de uso\n\nOs exemplos abaixo foram condensados do `USAGE_EXAMPLES.md` para facilitar o uso direto pelo `README`.\n\n### Iniciando a aplicação\n\n#### Opção recomendada: Uvicorn\n\n```bash\npython -m uvicorn backend.main:app --host 0.0.0.0 --port 8000 --reload\n```\n\n#### Via Python\n\n```python\nimport uvicorn\nfrom backend.main import app\n\nif __name__ == \"__main__\":\n\tuvicorn.run(app, host=\"0.0.0.0\", port=8000)\n```\n\n#### Execução direta\n\n```bash\npython -c \"from backend.main import app; import uvicorn; uvicorn.run(app, port=8000)\"\n```\n\n### Importações corretas\n\nUse sempre os caminhos do pacote `backend`:\n\n```python\nfrom backend.models import Client, Note\nfrom backend.schemas import ClientResponse, SyncRequest, DashboardStats\nfrom backend.database import get_db, SessionLocal\nfrom backend.main import app\nfrom backend.api.deps import get_nfse_client\nfrom backend.api.state import tasks_status\n```\n\n### Criar cliente\n\n```bash\ncurl -X POST \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fclients\" \\\n  -F \"cnpj=19.495.981\u002F0001-13\" \\\n  -F \"razao_social=Minha Empresa\" \\\n  -F \"username=usuario\" \\\n  -F \"password=senha123\" \\\n  -F \"description=Cliente de teste\"\n```\n\nCom certificado:\n\n```bash\ncurl -X POST \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fclients\" \\\n  -F \"cnpj=19.495.981\u002F0001-13\" \\\n  -F \"razao_social=Minha Empresa\" \\\n  -F \"username=usuario\" \\\n  -F \"password=senha123\" \\\n  -F \"cert_file=@certificado.pfx\"\n```\n\n### Listar clientes\n\n```bash\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fclients\"\n```\n\n### Iniciar sincronização\n\n```bash\ncurl -X POST \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fsync\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n\t\"client_id\": 1,\n\t\"data_inicio\": \"01\u002F01\u002F2026\",\n\t\"data_fim\": \"31\u002F05\u002F2026\",\n\t\"tipo\": \"emitidas\"\n  }'\n```\n\n### Consultar status da tarefa\n\n```bash\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Ftasks\u002F{task_id}\"\n```\n\n### Consultar estatísticas\n\n```bash\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fanalytics\u002Fstats?client_id=1\"\n```\n\n### Exportar relatório\n\n```bash\n# JSON\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Freports\u002Fexport?format=json&period=30d\" > relatorio.json\n\n# CSV\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Freports\u002Fexport?format=csv&period=30d\" > relatorio.csv\n\n# XLSX\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fapi\u002Freports\u002Fexport?format=xlsx&period=30d\" > relatorio.xlsx\n```\n\n### Acessar a documentação automática\n\n- Swagger UI: `http:\u002F\u002Flocalhost:8000\u002Fdocs`\n- ReDoc: `http:\u002F\u002Flocalhost:8000\u002Fredoc`\n\n## Desenvolvendo novos routers\n\nPara adicionar um novo domínio de negócio:\n\n1. criar o arquivo em `backend\u002Fapi\u002Frouters\u002F`;\n2. declarar um `APIRouter` com prefixo próprio;\n3. importar e registrar o router em `backend\u002Fmain.py`.\n\nExemplo mínimo:\n\n```python\nfrom fastapi import APIRouter, Depends\nfrom sqlalchemy.orm import Session\n\nfrom backend.database import get_db\n\nrouter = APIRouter(prefix=\"\u002Fapi\u002Fnovo_dominio\", tags=[\"novo_dominio\"])\n\n\n@router.get(\"\u002Frota-1\")\ndef exemplo(db: Session = Depends(get_db)):\n\treturn {\"status\": \"ok\"}\n```\n\n## Testando tudo\n\n```bash\npython -c \"from backend.main import app; print('✓ OK')\"\ncurl \"http:\u002F\u002Flocalhost:8000\u002Fopenapi.json\" | python -m json.tool\npytest tests\u002F -v\n```\n\n## Instalação\n\n### Com Poetry\n\n```bash\npoetry install --with dev\n```\n\n### Observação\n\nO projeto não usa `requirements.txt`; a referência oficial de dependências é o `pyproject.toml`.\n\n## Como executar\n\n### Modo web\n\n```bash\nchmod +x run_web.sh\n.\u002Frun_web.sh\n```\n\nOu, manualmente:\n\n```bash\npoetry run python -m uvicorn backend.main:app --host 0.0.0.0 --port 8000 --reload\n```\n\nA aplicação ficará disponível em:\n\n- `http:\u002F\u002Flocalhost:8000`\n- documentação automática da API em `http:\u002F\u002Flocalhost:8000\u002Fdocs`\n- alternativa em `http:\u002F\u002Flocalhost:8000\u002Fredoc`\n\n### Modo desktop\n\n```bash\nchmod +x run_ui.sh\n.\u002Frun_ui.sh\n```\n\nO script entra na pasta `ui\u002F` e chama o fluxo de desenvolvimento do Tauri.\n\n## Backend\n\nO backend principal está em `backend\u002Fmain.py` e:\n\n1. inicializa o banco com `init_db()`;\n2. registra os routers da API;\n3. monta a pasta `frontend\u002F` na raiz da aplicação;\n4. aplica CORS liberado para facilitar o uso local.\n\n### Routers disponíveis\n\n- `backend\u002Fapi\u002Frouters\u002Fclients.py` — CRUD de clientes.\n- `backend\u002Fapi\u002Frouters\u002Fnotes.py` — sincronização e listagem de notas.\n- `backend\u002Fapi\u002Frouters\u002Fdownloads.py` — download de arquivos e lote ZIP.\n- `backend\u002Fapi\u002Frouters\u002Fanalytics.py` — estatísticas e gráficos.\n- `backend\u002Fapi\u002Frouters\u002Freports.py` — exportação de relatórios.\n- `backend\u002Fapi\u002Frouters\u002Fsystem.py` — suporte, update check e navegação de pastas.\n\n## Principais endpoints\n\n### Clientes\n\n- `GET \u002Fapi\u002Fclients`\n- `POST \u002Fapi\u002Fclients`\n- `PUT \u002Fapi\u002Fclients\u002F{client_id}`\n- `DELETE \u002Fapi\u002Fclients\u002F{client_id}`\n\n### Notas e sincronização\n\n- `POST \u002Fapi\u002Fsync`\n- `GET \u002Fapi\u002Ftasks\u002F{task_id}`\n- `GET \u002Fapi\u002Fnotes`\n\n### Downloads\n\n- `POST \u002Fapi\u002Fdownload\u002Fsync-portal`\n- `GET \u002Fapi\u002Fdownload\u002Ffile?path=...`\n- `POST \u002Fapi\u002Fdownload\u002Fbatch`\n\n### Analytics\n\n- `GET \u002Fapi\u002Fanalytics\u002Fstats`\n- `GET \u002Fapi\u002Fanalytics\u002Fchart`\n- `POST \u002Fapi\u002Fanalytics\u002Fenrich-xml`\n- `GET \u002Fapi\u002Fanalytics\u002Franking`\n\n### Relatórios\n\n- `GET \u002Fapi\u002Freports\u002Fexport?format=json|csv|xlsx`\n\n### Sistema e suporte\n\n- `POST \u002Fapi\u002Fsupport\u002Fmessage`\n- `GET \u002Fapi\u002Fsystem\u002Fcheck-update`\n- `GET \u002Fapi\u002Fsystem\u002Flist-folders`\n\n## Modelo de dados\n\n### `clients`\n\nGuarda credenciais e configuração de cada cliente:\n\n- CNPJ\n- razão social\n- usuário\u002Fsenha do portal\n- certificado A1 opcional\n- caminho base de salvamento\n- estrutura personalizada de diretórios\n\n### `notes`\n\nGuarda as notas sincronizadas:\n\n- identificador interno\n- cliente vinculado\n- chave da nota\n- número\n- status\n- tipo (`emitidas` \u002F `recebidas`)\n- valor\n- caminhos do XML e PDF\n- URLs de download do portal\n\n## Fluxo de uso sugerido\n\n1. Abrir a aplicação web ou desktop.\n2. Cadastrar um cliente na área de clientes.\n3. Sincronizar notas por período.\n4. Baixar XML\u002FPDF quando necessário.\n5. Gerar relatórios ou acompanhar o dashboard.\n\n## Configurações importantes\n\n- Datas de filtro e sincronização usam o formato `DD\u002FMM\u002FAAAA`.\n- O progresso das tarefas é guardado em memória; reiniciar o processo limpa o status.\n- O sistema depende da estrutura atual do portal de NFSe; mudanças no HTML podem exigir ajustes.\n- Os arquivos baixados seguem a estrutura configurada por cliente.\n\n## Troubleshooting rápido\n\n- `ModuleNotFoundError: No module named 'backend'`: execute os comandos a partir da raiz do projeto.\n- Porta já em uso: altere a porta no comando do Uvicorn.\n- Banco não encontrado: o arquivo `nfse.db` é criado automaticamente ao inicializar a aplicação.\n- Se estiver importando módulos antigos, troque por `backend.models`, `backend.schemas` e `backend.database`.\n\n## 🛠️ Scripts úteis\n\n```bash\n.\u002Frun_web.sh   # sobe a API + frontend\n.\u002Frun_ui.sh    # inicia o desktop Tauri\n```\n\n## ⚡ Referência rápida da estrutura do backend\n\n```text\nbackend\u002F\n├── 🚪 main.py               # inicia a API e serve o frontend\n├── 🗄️ database.py           # engine, sessão e get_db()\n├── 🧱 models.py              # Client, Note e init_db()\n├── 🧾 schemas.py             # modelos Pydantic\n└── api\u002F\n    ├── 🔌 deps.py            # cliente NFSe a partir do banco\n    ├── 🧠 state.py           # status de tarefas em memória\n    └── routers\u002F\n        ├── 👥 clients.py\n        ├── 📝 notes.py\n        ├── ⬇️ downloads.py\n        ├── 📊 analytics.py\n        ├── 📤 reports.py\n        └── ⚙️ system.py\n```\n\n### 📌 Resumo rápido\n\n| Área | Arquivo | Função |\n|------|---------|--------|\n| API principal | `backend\u002Fmain.py` | Sobe o FastAPI e monta o frontend |\n| Banco | `backend\u002Fdatabase.py` | Conexão SQLite e sessão SQLAlchemy |\n| Modelos | `backend\u002Fmodels.py` | Tabelas `Client` e `Note` |\n| Schemas | `backend\u002Fschemas.py` | Validação de dados |\n| Clientes | `backend\u002Fapi\u002Frouters\u002Fclients.py` | CRUD de clientes |\n| Notas | `backend\u002Fapi\u002Frouters\u002Fnotes.py` | Sincronização e listagem |\n| Downloads | `backend\u002Fapi\u002Frouters\u002Fdownloads.py` | Baixa arquivos e gera ZIP |\n| Analytics | `backend\u002Fapi\u002Frouters\u002Fanalytics.py` | Estatísticas e ranking |\n| Relatórios | `backend\u002Fapi\u002Frouters\u002Freports.py` | Exportação JSON\u002FCSV\u002FXLSX |\n| Sistema | `backend\u002Fapi\u002Frouters\u002Fsystem.py` | Update, suporte e pastas |\n\n## Contribuição\n\nContribuições, melhorias e correções são bem-vindas.\n\n## Autor\n\nCleiton Leonel Creton — cleiton.leonel@gmail.com\n","NFSe Manager 是一个基于Python的增值税电子发票管理系统，集成了FastAPI后端、SQLAlchemy ORM和SQLite数据库。该项目提供了一个静态前端网页以及通过Tauri封装的桌面应用版本，支持客户管理、发票同步与下载（XML\u002FPDF格式）、缺失文件恢复及多种格式（JSON\u002FCSV\u002FXLSX）的数据导出功能，并在仪表盘上展示统计信息如时间序列图和排名等。适用于需要高效管理和分析增值税电子发票的小型企业或个体经营者使用。","2026-06-11 04:03:52","CREATED_QUERY"]