# /expense - Processamento de Despesas de Tickets ## Regras 1. Processar tickets UM A UM com confirmacao do utilizador (ou em lote se solicitado) 2. Verificar SEMPRE se despesa ja foi lancada (prevenir duplicados) 3. NAO adicionar respostas aos tickets - apenas criar despesa e anexos 4. Manter valor original na moeda do documento (EUR=3, USD=2) 5. Saltar tickets que sao apenas recibos de pagamento (nao sao facturas) --- ## Protocolo Ticket a Ticket ``` 1. Obter ticket: get_ticket(ticket_id) 2. Verificar anexos: SELECT * FROM tblticket_attachments WHERE ticketid = X 3. SE nao tem PDFs: SALTAR ticket (apenas notificacao) 4. VERIFICAR DUPLICADOS (OBRIGATORIO): SELECT id, amount, date, note FROM tblexpenses WHERE reference_no LIKE '%{receipt_number}%' OR note LIKE '%ticket #{ticket_id}%' SE encontrar: PARAR e informar "Despesa ja existe: #ID" 5. Extrair dados: - Do HTML do ticket (valor, data, referencia) - OU usar script Python: python3 /home/ealmeida/scripts/extract_invoice_data.py {pdf_path} 6. APRESENTAR resumo ao utilizador e AGUARDAR confirmacao 7. Apos confirmacao: a. SQL: INSERT INTO tblexpenses (..., send_invoice_to_customer, ...) VALUES (..., 0, ...) OU create_expense via MCP (se disponivel) b. UPDATE tblexpenses SET expense_name = '{Fornecedor}' WHERE id = {id} c. mcp__ssh-unified__ssh_execute: mkdir -p uploads/expenses/{expenseid} d. mcp__ssh-unified__sftp_upload: PDF para uploads/expenses/{expenseid}/ e. mcp__ssh-unified__ssh_execute: chown -R ealmeida:ealmeida uploads/expenses/{expenseid} f. SQL: INSERT INTO tblfiles (rel_id, rel_type, file_name, filetype, visible_to_customer, staffid, contact_id, dateadded) VALUES ({id}, 'expense', '{file}', 'application/pdf', 0, 1, 0, NOW()) g. Mover PDF para arquivo mensal: Contabilidade/YYYY/NN-NomeMes/ 8. Confirmar ao utilizador e passar ao proximo ``` --- ## Processamento em Lote Se utilizador pedir "criar todas" ou "processar em lote": 1. Obter todos os tickets pendentes em paralelo 2. Identificar duplicados e tickets a saltar 3. Criar despesas em paralelo via `create_expense` 4. Actualizar `expense_name` e `reference_no` em batch via SQL 5. Copiar PDFs em batch 6. Registar ficheiros em batch via SQL INSERT multiplo --- ## Tickets a Saltar | Tipo | Descricao | Accao | |------|-----------|-------| | Payment Receipt | Recibo de pagamento (nao e fatura) | SALTAR | | Duplicado | Mesmo numero fatura ja processado | SALTAR | | Sem anexo PDF | Apenas notificacao por email | SALTAR | Exemplos: - "Invoice Payment Confirmation" (e recibo, nao fatura) - Ticket com mesmo invoice_number de outro ja processado --- ## Credenciais Base de Dados Localizacao: `/home/ealmeida/desk.descomplicar.pt/application/config/app-config.php` ```bash grep -E "APP_DB" /home/ealmeida/desk.descomplicar.pt/application/config/app-config.php ```