Adicionado envio automático para o Telegram
Novo fluxo completo:
1. Coleta dados do Supabase
2. Gera report.json
3. Push para GitHub
4. Dashboard atualiza automaticamente
5. Envia resumo para o Telegram ✨
Script: gerar_relatorio_supabase_com_telegram.sh
- Coleta dados via RPC get_gastos_dia_anterior
- Gera report.json
- Faz push para GitHub
- Envia TOP 5 hotéis para o Telegram
Crontab atualizado para usar o novo script
Teste realizado com sucesso:
- 39 transações coletadas
- Report.json gerado
- Push realizado
- Telegram enviado (Message ID: 91)
This commit is contained in:
parent
4150d1b020
commit
9336119b03
140
fluxo_completo.md
Normal file
140
fluxo_completo.md
Normal file
@ -0,0 +1,140 @@
|
||||
# Fluxo Completo Automatizado com Telegram
|
||||
|
||||
## Novo Fluxo (CORRIGIDO E COMPLETO)
|
||||
|
||||
```
|
||||
📅 07:00 BRT (10:00 UTC)
|
||||
↓
|
||||
🔍 Coleta dados do Supabase (dia anterior)
|
||||
↓
|
||||
💾 Gera gastos-YYYY-MM-DD.json
|
||||
↓
|
||||
📊 Gera report.json
|
||||
↓
|
||||
📤 Push para GitHub
|
||||
↓
|
||||
✅ Dashboard atualiza automaticamente
|
||||
↓
|
||||
📱 Envia resumo para o Telegram ✨ NOVO!
|
||||
```
|
||||
|
||||
## Passos Detalhados
|
||||
|
||||
### 1. Coleta de Dados do Supabase
|
||||
```bash
|
||||
curl -X POST "${SUPABASE_URL}/rest/v1/rpc/get_gastos_dia_anterior"
|
||||
```
|
||||
- Conecta ao Supabase via RPC
|
||||
- Coleta as transações do dia anterior
|
||||
- Salva como JSON: `/root/mission-control/financeiro/memory/daily/gastos-YYYY-MM-DD.json`
|
||||
|
||||
### 2. Geração do Report
|
||||
```bash
|
||||
python3 gerar_report_json.py
|
||||
```
|
||||
- Lê o JSON coletado
|
||||
- Agrupa por hotel
|
||||
- Calcula totais
|
||||
- Gera `report.json`
|
||||
|
||||
### 3. Commit no Git
|
||||
```bash
|
||||
git add report.json
|
||||
git commit -m "Update: Relatório diário..."
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### 4. Dashboard Atualiza Automaticamente
|
||||
- GitHub Pages publica os arquivos
|
||||
- JavaScript no `index.html` carrega `report.json` via `fetch()`
|
||||
- Dados são exibidos automaticamente
|
||||
|
||||
### 5. Resumo para o Telegram ✨
|
||||
```python
|
||||
requests.post(
|
||||
f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
|
||||
json={
|
||||
"chat_id": CHAT_ID,
|
||||
"text": resumo,
|
||||
"parse_mode": "Markdown"
|
||||
}
|
||||
)
|
||||
```
|
||||
- Gera resumo compacto (TOP 5 hotéis)
|
||||
- Envia automaticamente para o Telegram
|
||||
- Bot: financeiro_grupo_inova_bot
|
||||
- Chat ID: 661151076
|
||||
|
||||
## Credenciais do Telegram
|
||||
|
||||
```python
|
||||
BOT_TOKEN = "8281825181:AAHUoYGdg7iUKtQoPzFxlsjpqIKGv_bQu28"
|
||||
CHAT_ID = "661151076"
|
||||
```
|
||||
|
||||
## Mensagem Enviada para o Telegram
|
||||
|
||||
```
|
||||
📊 RELATÓRIO FINANCEIRO - 2026-02-11
|
||||
|
||||
💰 TOTAL: R$ 38,390.60
|
||||
📝 TRANSAÇÕES: 39
|
||||
🏨 HOTÉIS: 7
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
TOP HOTÉIS:
|
||||
|
||||
1. Dolce Amore - R$ 22,722.26 (4 transações)
|
||||
2. Prime AL - R$ 5,278.01 (16 transações)
|
||||
3. Prime VL - R$ 3,153.58 (5 transações)
|
||||
4. 1001 Express - R$ 2,830.80 (5 transações)
|
||||
5. Padova - R$ 2,470.55 (1 transações)
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📱 DASHBOARD: https://rodribm10.github.io/financeiro-dashboard/
|
||||
|
||||
🤖 Enviado automaticamente pelo Squad Financeiro
|
||||
📅 Data do relatório: 2026-02-11
|
||||
```
|
||||
|
||||
## Crontab Atualizado
|
||||
|
||||
```bash
|
||||
# Squad Financeiro - Diário (10:00 UTC / 07:00 BRT)
|
||||
0 10 * * * /root/clawd/financeiro-dashboard/gerar_relatorio_supabase_com_telegram.sh
|
||||
```
|
||||
|
||||
## Arquivos Envolvidos
|
||||
|
||||
```
|
||||
/root/clawd/financeiro-dashboard/
|
||||
├── gerar_relatorio_supabase_com_telegram.sh # Script completo com Telegram
|
||||
├── index.html # Dashboard dinâmico
|
||||
├── report.json # Dados gerados
|
||||
└── fluxo_completo.md # Esta documentação
|
||||
|
||||
/root/mission-control/financeiro/
|
||||
└── memory/daily/
|
||||
└── gastos-YYYY-MM-DD.json # Dados brutos do Supabase
|
||||
```
|
||||
|
||||
## Teste Realizado
|
||||
|
||||
✅ **14:52 UTC - Teste executado com sucesso**
|
||||
- Coletou 39 transações do Supabase
|
||||
- Gerou report.json
|
||||
- Fez push para GitHub
|
||||
- **Enviou resumo para o Telegram (Message ID: 91)**
|
||||
|
||||
## Próxima Execução Automática
|
||||
|
||||
**Amanhã (13/02) às 07:00 BRT**, o fluxo vai:
|
||||
1. Coletar dados de 12/02 do Supabase
|
||||
2. Gerar report.json
|
||||
3. Fazer push para GitHub
|
||||
4. Atualizar dashboard automaticamente
|
||||
5. **Enviar resumo para o Telegram** ✨
|
||||
|
||||
**Nenhuma intervenção manual necessária!**
|
||||
232
gerar_relatorio_supabase_com_telegram.sh
Executable file
232
gerar_relatorio_supabase_com_telegram.sh
Executable file
@ -0,0 +1,232 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# gerar_relatorio_supabase_com_telegram.sh
|
||||
# Coleta dados do Supabase, gera o dashboard e envia para o Telegram
|
||||
# Executado pelo Crontab às 10:00 (UTC) -> 13:00 (BRT)
|
||||
#
|
||||
|
||||
echo "============================================================================="
|
||||
echo "📊 GERANDO RELATÓRIO FINANCEIRO (SUPABASE → DASHBOARD → TELEGRAM)"
|
||||
echo "============================================================================="
|
||||
echo "Horário: $(date '+%d/%m/%Y %H:%M:%S UTC')"
|
||||
echo "============================================================================="
|
||||
|
||||
# 1. Configuração
|
||||
source ~/mission-control/financeiro/config/supabase.env
|
||||
|
||||
DATA_ANTERIOR=$(date -d "1 day ago" +%Y-%m-%d)
|
||||
DATA_ATUAL=$(date +%Y-%m-%d)
|
||||
|
||||
ARQUIVO_DADOS="/root/mission-control/financeiro/memory/daily/gastos-${DATA_ANTERIOR}.json"
|
||||
REPO_DIR="/root/clawd/financeiro-dashboard"
|
||||
|
||||
echo "📅 Data de Referência: $DATA_ANTERIOR"
|
||||
echo "📁 Arquivo de saída: $ARQUIVO_DADOS"
|
||||
echo ""
|
||||
|
||||
# 2. Coletar dados do Supabase
|
||||
echo "🔍 [1/5] Coletando dados do Supabase..."
|
||||
RESPONSE=$(curl -s -X POST "${SUPABASE_URL}/rest/v1/rpc/get_gastos_dia_anterior" \
|
||||
-H "apikey: ${SUPABASE_SERVICE_KEY}" \
|
||||
-H "Authorization: Bearer ${SUPABASE_SERVICE_KEY}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"org_id\": \"${ORGANIZATION_ID}\"}")
|
||||
|
||||
# Verificar se retornou dados
|
||||
if [ -z "$RESPONSE" ]; then
|
||||
echo "❌ ERRO: Resposta vazia do Supabase"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validar JSON
|
||||
if ! echo "$RESPONSE" | python3 -m json.tool > /dev/null 2>&1; then
|
||||
echo "❌ ERRO: Resposta inválida do Supabase"
|
||||
echo "$RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verificar se tem transações
|
||||
NUM_TRANSACOES=$(echo "$RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(len(data))")
|
||||
echo "✅ $NUM_TRANSACOES transações encontradas"
|
||||
|
||||
if [ "$NUM_TRANSACOES" -eq 0 ]; then
|
||||
echo "⚠️ AVISO: Nenhuma transação encontrada para $DATA_ANTERIOR"
|
||||
echo "💡 O relatório não será gerado"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 3. Salvar arquivo JSON
|
||||
echo ""
|
||||
echo "💾 [2/5] Salvando arquivo JSON..."
|
||||
echo "$RESPONSE" > "$ARQUIVO_DADOS"
|
||||
echo "✅ Arquivo salvo: $ARQUIVO_DADOS"
|
||||
|
||||
# 4. Atualizar script gerar_report_json.py para usar o arquivo correto
|
||||
echo ""
|
||||
echo "🔨 [3/5] Preparando para gerar dashboard..."
|
||||
|
||||
# 5. Executar script Python para gerar report.json
|
||||
echo ""
|
||||
echo "📊 [4/5] Gerando report.json..."
|
||||
cd "$REPO_DIR" || { echo "❌ Erro ao entrar no repositório"; exit 1; }
|
||||
|
||||
python3 gerar_report_json.py
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ ERRO ao gerar report.json"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ report.json gerado com sucesso"
|
||||
|
||||
# 6. Fazer commit e push no Git
|
||||
echo ""
|
||||
echo "📤 [5/6] Enviando para o GitHub..."
|
||||
|
||||
git add report.json > /dev/null 2>&1
|
||||
|
||||
# Verificar se há mudanças
|
||||
git_status=$(git status --porcelain report.json)
|
||||
|
||||
if [ -z "$git_status" ]; then
|
||||
echo "⚠️ Nenhuma alteração em report.json (mesmo que o dia anterior)"
|
||||
else
|
||||
# Commit
|
||||
MENSAGEM="Update: Relatório diário do dia $DATA_ANTERIOR (via Supabase)
|
||||
|
||||
- Dados coletados via RPC get_gastos_dia_anterior
|
||||
- $NUM_TRANSACOES transações
|
||||
- Data do relatório: $DATA_ANTERIOR
|
||||
- Gerado automaticamente às 10:00 UTC (13:00 BRT)"
|
||||
|
||||
git commit -m "$MENSAGEM" --quiet > /dev/null 2>&1
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ ERRO ao fazer commit"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Push
|
||||
git push origin main --quiet > /dev/null 2>&1
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ ERRO ao fazer push para o GitHub"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Push realizado com sucesso"
|
||||
fi
|
||||
|
||||
# 7. Enviar resumo para o Telegram
|
||||
echo ""
|
||||
echo "📱 [6/6] Enviando resumo para o Telegram..."
|
||||
|
||||
# Gerar e enviar resumo compacto
|
||||
export DATA_RELATORIO=$DATA_ANTERIOR
|
||||
python3 << 'PYEOF'
|
||||
import json
|
||||
from collections import defaultdict
|
||||
from datetime import datetime
|
||||
import requests
|
||||
import os
|
||||
|
||||
# Credenciais do Telegram
|
||||
BOT_TOKEN = "8281825181:AAHUoYGdg7iUKtQoPzFxlsjpqIKGv_bQu28"
|
||||
CHAT_ID = "661151076"
|
||||
|
||||
# Obter data do relatório da variável de ambiente
|
||||
data_ontem = os.environ.get('DATA_RELATORIO', datetime.now().strftime('%Y-%m-%d'))
|
||||
arquivo_json = '/root/mission-control/financeiro/memory/daily/gastos-{}.json'.format(data_ontem)
|
||||
|
||||
with open(arquivo_json, 'r') as f:
|
||||
transacoes = json.load(f)
|
||||
|
||||
# Agrupar por hotel
|
||||
por_unidade = defaultdict(list)
|
||||
for t in transacoes:
|
||||
por_unidade[t['unidade']].append(t)
|
||||
|
||||
total_geral = sum(g['valor'] for g in transacoes)
|
||||
num_transacoes = len(transacoes)
|
||||
|
||||
# Top hotéis por gasto
|
||||
top_hoteis = sorted(por_unidade.items(), key=lambda x: sum(g['valor'] for g in x[1]), reverse=True)[:5]
|
||||
|
||||
# Gerar resumo
|
||||
resumo = """📊 RELATÓRIO FINANCEIRO - {}
|
||||
|
||||
💰 TOTAL: R$ {:,.2f}
|
||||
📝 TRANSAÇÕES: {}
|
||||
🏨 HOTÉIS: {}
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
TOP HOTÉIS:
|
||||
""".format(data_ontem, total_geral, num_transacoes, len(por_unidade))
|
||||
|
||||
for i, (unidade, gastos) in enumerate(top_hoteis, 1):
|
||||
total_unidade = sum(g['valor'] for g in gastos)
|
||||
num_items = len(gastos)
|
||||
resumo += "\n{}. {} - R$ {:,.2f} ({} transações)".format(i, unidade, total_unidade, num_items)
|
||||
|
||||
resumo += """
|
||||
━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📱 DASHBOARD: https://rodribm10.github.io/financeiro-dashboard/
|
||||
|
||||
🤖 Enviado automaticamente pelo Squad Financeiro
|
||||
📅 Data do relatório: {}
|
||||
""".format(data_ontem)
|
||||
|
||||
# Enviar para o Telegram
|
||||
url = "https://api.telegram.org/bot{}/sendMessage".format(BOT_TOKEN)
|
||||
payload = {
|
||||
"chat_id": CHAT_ID,
|
||||
"text": resumo,
|
||||
"parse_mode": "Markdown"
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.post(url, json=payload, timeout=10)
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
if data.get('ok'):
|
||||
print("✅ Relatório enviado para o Telegram com sucesso!")
|
||||
print("📋 Message ID: {}".format(data.get('result', {}).get('message_id', 'N/A')))
|
||||
else:
|
||||
print("❌ Erro na API do Telegram: {}".format(data.get('description', 'Erro desconhecido')))
|
||||
else:
|
||||
print("❌ Erro HTTP {}: {}".format(response.status_code, response.text))
|
||||
except Exception as e:
|
||||
print("❌ Erro ao enviar para o Telegram: {}".format(str(e)))
|
||||
|
||||
PYEOF
|
||||
|
||||
echo ""
|
||||
|
||||
# 8. Exibir resumo final
|
||||
echo "============================================================================="
|
||||
echo "🎉 RELATÓRIO FINANCEIRO GERADO COM SUCESSO!"
|
||||
echo "============================================================================="
|
||||
echo ""
|
||||
echo "📅 Data de Referência: $DATA_ANTERIOR"
|
||||
echo "📊 Total de Transações: $NUM_TRANSACOES"
|
||||
echo ""
|
||||
|
||||
# Calcular total
|
||||
TOTAL=$(echo "$RESPONSE" | python3 -c "
|
||||
import sys, json
|
||||
data = json.load(sys.stdin)
|
||||
total = sum(item['valor'] for item in data)
|
||||
print('R\$ {:,.2f}'.format(total))
|
||||
")
|
||||
|
||||
echo "💰 Valor Total: $TOTAL"
|
||||
echo ""
|
||||
echo "============================================================================="
|
||||
echo "✅ PROCESSO CONCLUÍDO!"
|
||||
echo "============================================================================="
|
||||
echo ""
|
||||
echo "📤 Resumo enviado automaticamente para o Telegram"
|
||||
echo "📱 Dashboard atualizado: https://rodribm10.github.io/financeiro-dashboard/"
|
||||
Loading…
Reference in New Issue
Block a user