Documentação técnica

Stack, runtime, modelo de dados, segurança, observabilidade.

Stack

CamadaTecnologiaObservações
FrontendVite 5 + React 18 + TypeScript + TailwindPWA com service worker (Workbox), instalável em tablet.
Roteamentoreact-router 6 (BrowserRouter)Sem hash routes.
Estado de servidorTanStack Query 5Cache + revalidação por foco / intervalo.
Íconeslucide-reactStroke uniforme; sem emojis.
TemaFluent light + dark opcionalClasse dark aplicada no <html> antes do React montar (sem flicker).
APICloudflare Workers + Hono 4Edge global. Frio típico < 50 ms.
BancoCloudflare D1 (SQLite serverless)Schema v3.1 com 32 tabelas + 7 views. Multi-tenant por org_id.
Object storageCloudflare R2Fotos de kit, manuais PDF, laudos.
FilasCloudflare QueuesJobs assíncronos: relatórios, manutenção, recall, webhooks ERP.
CacheCloudflare KVRate-limit, telemetria leve.
CronsWorkers TriggersBowie-Dick diário, BI 6h, manutenção 6h.
ValidaçãoZod (shared)Schemas únicos worker ↔ web em packages/shared.
AuthJWT HS256 (WebCrypto) + PBKDF2-SHA256 100kSem dependência externa. RFID e biometria (WebAuthn placeholder).

Modelo de dados (resumo)

D1 (SQLite serverless). Prefixo ict_. Toda tabela operacional carrega org_id; isolamento garantido por middleware tenantScope.

Tenancy & identidade
  • ict_organizations — matriz/filial (org_type, parent_org_id)
  • ict_users — RBAC, lockout por falhas
  • ict_user_credentials — RFID hex / biometria (separado por sensibilidade)
  • ict_user_org_access — acesso cruzado a filiais
  • ict_sectors / ict_locations
Catálogo
  • ict_specialties / ict_packaging_types
  • ict_item_models — modelo (catálogo)
  • ict_items — instância individual (barcode)
  • ict_kit_templates / ict_kit_template_items
  • ict_kit_instances
  • ict_equipments / ict_equipment_programs
Operação
  • ict_lifecycle_events — fonte da verdade da FSM
  • ict_batches — ciclos de esterilização
  • ict_batch_items — M:N batch ↔ kit/item
  • ict_quality_tests — BD, QI, integradores 5/6
  • ict_biological_indicators — incubação separada
  • ict_quarantine_events / ict_recall_events
  • ict_surgery_links / ict_consumables_balance
Integrações & logs
  • ict_audit_log — toda ação sensível
  • ict_erp_webhook_log — outbox + retry
  • ict_label_templates — ZPL configurável por org
  • ict_rate_limit — janelas de contagem por IP
  • Views: v_current_item_status, v_kit_inventory_fifo, v_ict_bi_ready_to_read, v_ict_items_due_preventive

Segurança

Observabilidade

Multi-tenant

Uma única database D1, todas as tabelas com org_id. Middleware requireAuth injeta user.org_id em c.var; helpers orgId(c) garantem que toda query carrega WHERE org_id = ?. A hierarquia matriz/filial usa parent_org_id em ict_organizations:

Pipeline de deploy