Pular para o conteúdo

Visão Geral do Sistema

O CalibraFácil é estruturado como um monorepo utilizando Turborepo e pnpm workspaces. Cada componente é um pacote independente com responsabilidades bem definidas.

AplicaçãoDescriçãoPlataforma
APIBackend REST (Hono) — autenticação, CRUD, lógica de negóciosCloudflare Workers
WebDashboard principal para o laboratório — ordens de serviço, calibrações, relatóriosCloudflare Pages
PortalPortal do cliente — acompanhamento de serviços e download de certificadosCloudflare Pages
WorkerProcessamento em segundo plano — geração de PDFs, assinatura digital, verificações de conformidadeCloudflare Workers
DocsDocumentação técnica (este site)Cloudflare Pages
PacotePropósito
@calibra-facil/math-engineCálculos de incerteza conforme GUM (detalhado em Motor Matemático)
@calibra-facil/dbCamada de acesso a dados (Drizzle ORM + Neon PostgreSQL)
@calibra-facil/authAutenticação e controle de acesso (Better-Auth)
@calibra-facil/schemasEsquemas de validação compartilhados (Zod)
@calibra-facil/documentsGeração de HTML para certificados de calibração
@calibra-facil/signingAssinatura digital ICP-Brasil para PDFs
@calibra-facil/notificationsServiço de notificações (NC, CAPA, lembretes)
@calibra-facil/emailTemplates de e-mail (React Email)
@calibra-facil/sharedPlanos, configurações e tipos compartilhados
CamadaTecnologia
FrontendReact 19, TanStack Router/Query, TailwindCSS 4
BackendHono (Cloudflare Workers)
Banco de DadosDrizzle ORM → Neon PostgreSQL (via Hyperdrive)
AutenticaçãoBetter-Auth
ArmazenamentoCloudflare R2 (compatível S3)
FilasCloudflare Queue
PDFPuppeteer (Cloudflare Browser API)
TestesVitest
Motor Matemáticomathjs (BigNumber) + GUM nativo
┌─────────────┐ ┌──────────────┐ ┌───────────────────┐ ┌────────────┐
│ Leituras │────▶│ Achatamento │────▶│ Math Engine │────▶│ Resultado │
│ (entrada) │ │ (flatten) │ │ (GUM + fórmulas) │ │ + metadados│
└─────────────┘ └──────────────┘ └───────────────────┘ └────────────┘
┌────────────┐
│ Certificado│
│ (PDF) │
└────────────┘
  1. Entrada: Leituras de calibração, especificações do instrumento e dados ambientais são inseridos pelo técnico.
  2. Achatamento: O módulo flatten normaliza os dados — converte unidades para SI, achata objetos aninhados em escopo plano.
  3. Motor Matemático: Executa avaliações Tipo A e Tipo B, calcula incerteza combinada (Welch-Satterthwaite) e expandida.
  4. Resultado: Retorna o cálculo completo com metadados de rastreabilidade (engineVersion, timestamp, inputsUsed).
  5. Certificado: O Worker gera o PDF do certificado com assinatura digital ICP-Brasil e armazena no R2.

Todos os métodos do motor matemático retornam uma união discriminada (discriminated union) para tratamento seguro de erros:

// Sucesso
{ success: true, data: { /* resultado do cálculo */ } }
// Erro
{ success: false, error: { code: "INVALID_INPUT", message: "..." } }

Cada cálculo realizado pelo motor gera metadados que permitem a reconstrução completa do resultado:

meta: {
engineVersion: "1.0.0", // Versão exata do motor
timestamp: "2026-02-06T...", // Momento do cálculo (ISO 8601)
inputsUsed: ["leituras_0", "leituras_1", "env_temperature", "inst_resolution"]
}

Opcionalmente, o modo verbose gera um rastro detalhado de cada etapa do cálculo (trace), útil para auditorias e depuração.