3.4 KiB
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: modeloCompanyagora 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 enumCompanyStateRegistrationType.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 osALTER TABLEdiretamente em ambientes SQLite já existentes.convex/schema.tseconvex/companies.ts: schema do Convex espelha os campos adicionais e as mutationsensureProvisioned/removeBySlugpassaram 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:GETdevolveNormalizedCompany;POSTaplica validação zod, normaliza, cria a empresa no Prisma e sincroniza com Convex.src/app/api/admin/companies/[id]/route.ts:PATCHfaz merge seguro do payload parcial, reaproveita o serviço de normalização, trata erros de unicidade e replica as alterações para o Convex;DELETEdesvincula 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 entregaNormalizedCompanypara o front (a tela ainda usa o componente legadoAdminCompaniesManager).
Componentes utilitários
src/components/ui/accordion.tsxesrc/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 acompanyFormSchema/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.
- Máquinas: 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.tspara converter dados de/para Prisma, evitando divergências.