# 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. - **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.ts` para converter dados de/para Prisma, evitando divergências.