Saltar para o conteúdo principal

Visão geral do Aedifica

O que é​

O Aedifica é uma plataforma web de gestão para empresas de construção e remodelação (empreiteiros gerais, instaladores, pequenas e médias equipas de obra). Junta num só sítio o que normalmente está espalhado entre folhas de cálculo, Word e WhatsApp: contactos, orçamentos, obras, planeamento de equipas, registo de horas, relatórios de obra e faturação.

A interface está em português (pt-PT por omissão) com espanhol, inglês e francês. Os dados de cada empresa vivem numa organização isolada (organizations/{orgId} no Firestore).

Para quem​

PerfilPapel no sistemaO que faz
Gerência / donoownerTudo, incluindo gerir membros e papéis
AdministraçãoadminDefinições, séries de numeração, modelos, faturação
Escritório / orçamentistaofficeContactos, catálogo, orçamentos, faturas, projetos
Equipa de obraworkerVê projetos e planeamento, regista as suas horas e relatórios

Fluxo principal: do pedido à fatura​

Contacto/lead ──► Orçamento (offer) ──► Aprovação ──► Obra (projeto)
│ │ │
│ catálogo (materiais, planificador (fases,
│ serviços, Datanorm) equipas, membros)
│ │
└──────────────────────────────► horas + relatórios de obra
│
fatura parcial / final ◄──────────┘
│
pagamentos, lembretes, notas de crédito
  1. Lead → contacto. O pedido chega (telefone, email, formulário) e é criado um contacto organisation ou person, com o papel customer.
  2. Projeto (obra). Cria-se um projeto (Folder, ex.: BL-OBR-001) ligado ao cliente (folderRecipient) e à morada da obra (folderAddress).
  3. Orçamento. No projeto cria-se um documento offer. O editor usa blocos: capítulos (block-group), partidas (block-position) vindas do catálogo, textos, imagens, tabelas e subtotais. A calculação (pcCosts) divide material, mão de obra, equipamento, serviços externos e outros.
  4. Finalizar. Ao finalizar, a Cloud Function allocateDocumentNumber atribui o número da série (ex.: P-26-00102) numa transação, e o documento fica published e imutável. Cada gravação gera uma versão em documentVersions ({id}--vN).
  5. Obra e planeamento. O planificador regista fases do projeto (folderAllocation) e alocações de membros (memberAllocation).
  6. Horas e relatórios. A equipa regista horas (times) por projeto e relatórios de obra (reports) com secções de materiais, serviços e horas. As horas de um relatório podem passar para o registo de horas.
  7. Fatura. A partir do orçamento ou do relatório geram-se faturas (invoice, partialInvoice, finalInvoice). Pagamentos ficam em invoicePayments. A função diária paymentReminders cria notificações internas de vencimento. Cancelamentos e notas de crédito (invoiceCancellation, creditNote) usam a série FR.
  8. Controlo. O painel e as estatísticas do projeto comparam orçamentado, faturado, horas e custos (margem).

Arquitetura atual​

ComponenteTecnologia
FrontendReact + Vite (duas SPAs: apps/app, apps/setup), react-router, styled-components + Tailwind v4, Slate/TipTap, Jotai, zod, axios + swr, i18next, pdf-lib/pdf.js
DadosCloud Firestore (default), europe-west1, regras em firestore.rules
FicheirosCloud Storage, organizations/{orgId}/{area}/…, máx. 10 MiB por ficheiro
Lógica de servidorCloud Functions v2, europe-west1; superfícies L1 descritas em docs/plans/l1-api.md, deploy pendente
PesquisaTypesense (coleções projects, documents, contacts, catalog_items)
Alojamento do frontendnginx em Docker, publicado pelo Coolify

Cloud Functions existentes:

FunçãoTipoUso
allocateDocumentNumbercallableFinaliza documento e atribui número
mintSearchKeycallableChave Typesense limitada à organização (55 min)
exportProjectZipcallableZIP dos ficheiros de um projeto (≤500 ficheiros, ≤100 MiB)
syncProjects, syncDocuments, syncContacts, syncCatalogtrigger FirestoreIndexação Typesense
paymentRemindersagendada 08:00 LisboaNotificações de faturas vencidas
expireInvitationsagendada 03:00 LisboaLimpa convites expirados
storageFinalized, storageDeletedtrigger StorageQuotas, miniaturas, metadados

Onde encaixa a API​

A API REST /v1 é uma camada fina por cima do que já existe, não um segundo backend:

Integração / ERP / assistente IA
│ Authorization: Bearer aed_live_…
▼
Gateway REST (proposto: Cloud Function HTTP `api`, europe-west1)
• valida chave (hash SHA-256 em apiKeys) e scopes
• valida corpo com os schemas zod partilhados
• aplica as mesmas regras de papel que firestore.rules
│ Admin SDK
▼
Firestore · Storage · Typesense · funções existentes (numeração, ZIP)

Casos de uso: importar clientes de um CRM, criar orçamentos a partir de um configurador web, exportar faturas para contabilidade, sincronizar horas com processamento salarial, e deixar um assistente de IA preparar rascunhos de orçamentos que um humano revê e finaliza.

Limites atuais conhecidos​

  • Não há emissão fiscal certificada nem comunicação AT/AEAT (Verifactu). A numeração é sequencial por série, sem certificação.
  • O PDF dos documentos é hoje gerado no browser (apps/app/src/document-pdf.ts, pdf-lib). A geração de PDF no servidor para a API é proposta.
  • Ferramentas e equipamentos não existem como entidades (só como tipo de custo equipment). Ver Catálogo.