Modelo de produto
Utilizador (GESTOR / sensor_admin)
- Menu Faturação (
GET /billingvia Gateway) - Vê apenas medidores atribuídos
- Um bloco por sensor: linhas de compra/venda, totais do mês, estado
OPENouCLOSED - Botão para descarregar o PDF da fatura do período
Administrador (ADMIN)
- Auditoria de faturação (
GET /admin/billing/statements) - Download do PDF de qualquer sensor
- Exportação CSV do período
PDF da fatura
O Market gera o PDF a partir doSensorStatement. Statements CLOSED produzem um PDF estável (mesmos totais do snapshot). Statements OPEN avisam que os valores ainda podem alterar.
Conteúdo mínimo:
Validação pública
Qualquer pessoa com o QR (ou o link) pode abrir a página pública sem autenticação:- Integridade do documento (hash SHA-256)
- Estado da fatura e totais
- Prova on-chain (
tx_hash+ explorer) quando o registo já ocorreu - Preview / download do PDF
Fecho mensal e registo on-chain
No 1.º dia de cada mês (00:05 UTC), o Market fecha o extrato do mês anterior:- Estado passa a
CLOSED(snapshot imutável em MongoDB) - Calcula o hash estável do documento
- Dispara o registo no contrato
InvoiceRegistryvia Transactions Service
sensorId (slug / device_id) + ano/mês ao hash, ao invoice_id e à carteira já registada no SensorRegistry. O sensor tem de existir e estar activo on-chain.
Contrato na Besu develop: 0xA316dFc175C9B5f2A964671f5F503BeF9EFb3189Explorer: InvoiceRegistry
APIs envolvidas
On-chain (book-only + fatura)
- EnergySettlement.settle() — registo auditável sem movimento EUR
- EnergyMarket.bookPurchase() — marca oferta como vendida sem
transferFrom - InvoiceRegistry.registerInvoice() — prova pública do hash da fatura
- Ver Contratos book-only
Issues de referência
- Market #75 — épico PDF + hash + orquestração no fecho
- Meters #62 — Company / Plant e vínculo ao sensor
- Gateway #100 — proxy PDF e validação pública
- Contracts #10 —
InvoiceRegistry - Transactions #55 — submissão da tx
- Frontend #65 — download e página
/v/{token} - Docs #16 — esta página
