sistema-de-chamados/docs/admin/companies-expanded-profile.md

3.4 KiB

Admin ▸ Empresas — Perfil Ampliado

Este documento resume a ampliação do cadastro de empresas (dados fiscais, contratos, SLA, canais de comunicação) e registra o que ainda falta concluir na camada de apresentação.

Base de dados e backend

  • prisma/schema.prisma: modelo Company agora inclui razão social, inscrição estadual/tipo, CNAE, canais de comunicação consolidados, endereço fiscal, contatos, localizações, contratos, SLA, campos personalizados e observações. Foi criado o enum CompanyStateRegistrationType.
  • prisma/migrations/20251022120000_extend_company_profile/: migração que adiciona todas as novas colunas ao banco (SQLite/Postgres).
  • scripts/apply-company-migration.mjs: script idempotente para aplicar os ALTER TABLE diretamente em ambientes SQLite já existentes.
  • convex/schema.ts e convex/companies.ts: schema do Convex espelha os campos adicionais e as mutations ensureProvisioned/removeBySlug passaram a sincronizar os metadados estendidos.
  • src/lib/schemas/company.ts: novo módulo de validação/normalização (React Hook Form + zod) com tipos ricos (CompanyFormValues, contatos, contratos, SLA, horários, etc.).
  • src/server/company-service.ts: serviço único que sanitiza input (sanitizeCompanyInput), gera payload para Prisma (buildCompanyData) e normaliza registros (normalizeCompany / NormalizedCompany).
  • src/server/companies-sync.ts: reutilizado para garantir que Convex receba os campos novos quando houver provisionamento/remoção.

APIs e página server-side

  • src/app/api/admin/companies/route.ts: GET devolve NormalizedCompany; POST aplica validação zod, normaliza, cria a empresa no Prisma e sincroniza com Convex.
  • src/app/api/admin/companies/[id]/route.ts: PATCH faz merge seguro do payload parcial, reaproveita o serviço de normalização, trata erros de unicidade e replica as alterações para o Convex; DELETE desvincula usuários/tickets antes de remover e garante remoção no Convex.
  • src/app/api/admin/companies/last-alerts/route.ts: continua servindo a UI atual, sem mudanças funcionais.
  • src/app/admin/companies/page.tsx: carrega empresas via Prisma server-side e entrega NormalizedCompany para o front (a tela ainda usa o componente legado AdminCompaniesManager).

Componentes utilitários

  • src/components/ui/accordion.tsx e src/components/ui/multi-value-input.tsx: helpers (Radix + badges/input) que darão suporte ao novo formulário seccional.

O que falta implementar

  • Nova UI de Empresas (AdminCompaniesManager): substituir pelo layout com listagem filtrável (lista + quadro) e formulário seccional ligado a companyFormSchema / sanitizeCompanyInput.
  • Form dinâmico: montar o formulário com React Hook Form + zod resolver usando os schemas/validações já prontos no backend.
  • Área de Clientes → Usuários: renomear a seção, carregar os novos campos (contatos, localizações, contratos) e reaproveitar as transformações do serviço.
  • Dispositivos: expor o novo identificador de acesso remoto previsto no schema Convex/Prisma.
  • Qualidade: ajustar lint/testes após a nova UI e cobrir o fluxo de criação/edição com testes de integração.

Até que a nova interface seja publicada, a API já aceita todos os campos e qualquer cliente (front, automação, seed) deve usar company-service.ts para converter dados de/para Prisma, evitando divergências.