Entrar como:FuncionalidadesDoc
Pular para o conteúdo
← Voltar para a visão geral
✅ ConcluídoCard #74 · M13

Funcionários (RH Escolar)

Marco M13: Genius-Parity (Features Financeiras + Docs + RH)

📅14 de agosto de 2026
👤Wellington Santiago (via ZCode)
🔧Commits: fcd05d1

📄 Card 74 [M13] — Funcionários (RH Escolar)

📚 Referência Genius: /funcionario + /funcionario/estatisticas — "Passo 3: Cadastre um(a) professor(a)" 🔥 GENIOON hoje só tem Teacher (vinculado a professor). Falta cadastro de outros funcionários (secretária, coordenador, atendente, faxineiro, segurança).

🎯 Objetivo

Criar o módulo Funcionários (RH Escolar) — cadastro completo de colaboradores da escola:

  • Cadastro de funcionários (além de professores): secretária, coordenador, atendente, etc
  • Cargos e funções configuráveis
  • Vínculo com User (login sistema) opcional
  • Dados contratuais: admissão, demissão, salário, carga horária, férias
  • Documentos: RG, CPF, CTPS, PIS, certidões
  • Hierarquia: chefe direto
  • Estatísticas (headcount por cargo, filial, período)

📚 Documentação de Referência

  • prisma/schema.prismaUser + Teacher
  • Card 25 (Gestão Usuários RBAC)

🛠️ Especificação Técnica

Schema Prisma (novo)

model Employee {
  id              String   @id @default(cuid())
  userId          String?  @unique                   // login (opcional)
  user            User?    @relation(fields: [userId], references: [id])
  branchId        String
  branch          Branch   @relation(fields: [branchId], references: [id])
  // Pessoal
  fullName        String
  cpf             String   @unique
  rg              String?
  birthDate       DateTime?
  photoUrl        String?
  address         Json?
  phone           String?
  email           String?
  // Contrato
  jobTitle        String                              // "Secretária", "Coordenador"
  role            EmployeeRole                        // ADMINISTRATIVE, PEDAGOGICAL, OPERATIONAL, SUPPORT
  employmentType  EmploymentType                      // CLT, PJ, FREELANCE, INTERNSHIP
  admissionDate   DateTime
  terminationDate DateTime?
  status          EmployeeStatus @default(ACTIVE)     // ACTIVE, ON_LEAVE, TERMINATED
  salary          Decimal? @db.Decimal(10, 2)
  workloadHoursWeek Int?                              // carga horária semanal
  // Hierarquia
  managerId       String?
  manager         Employee? @relation("EmployeeHierarchy", fields: [managerId], references: [id])
  subordinates    Employee[] @relation("EmployeeHierarchy")
  // Documentos
  ctpsNumber      String?                             // Carteira Trabalho
  pisNumber       String?
  documents       Json?                               // {rg: {url}, cpf: {url}, certidoes: []}
  // Benefícios
  benefits        Json?                               // {valeRefeicao, valeTransporte, planoSaude}
  // Férias
  vacations       Vacation[]
  notes           String?
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

model Vacation {
  id              String   @id @default(cuid())
  employeeId      String
  employee        Employee @relation(fields: [employeeId], references: [id])
  startDate       DateTime
  endDate         DateTime
  days            Int
  status          VacationStatus @default(REQUESTED)  // REQUESTED, APPROVED, CANCELLED, ENJOYED
  requestedAt     DateTime @default(now())
  approvedAt      DateTime?
  approvedById    String?
  notes           String?
}

enum EmployeeRole { ADMINISTRATIVE  PEDAGOGICAL  OPERATIONAL  SUPPORT }
enum EmploymentType { CLT  PJ  FREELANCE  INTERNSHIP }
enum EmployeeStatus { ACTIVE  ON_LEAVE  TERMINATED }
enum VacationStatus { REQUESTED  APPROVED  CANCELLED  ENJOYED }

Rotas

  • /master/funcionarios — lista + filtros (cargo, filial, status)
  • /master/funcionarios/novo — cadastro
  • /master/funcionarios/[id] — detalhe (documentos, férias, alterações)
  • /master/funcionarios/[id]/ferias — solicitar/aprovar férias
  • /master/cargos — admin cargos

Procedures tRPC (master.employees)

  • list (filtros)
  • create / update / terminate
  • linkUser (vincular a User de login)
  • requestVacation / approveVacation
  • dashboard (headcount, turnover, custos)
  • statistics (por cargo, filial, período)

Integração

  • Ao cadastrar Professor no Card 12, opcionalmente cria Employee com role=PEDAGOGICAL
  • Cargos podem ser vinculados a permissões RBAC (Card 25)

✅ Critérios de Aceite

  1. MASTER cadastra funcionários (todos os tipos, não só professores)
  2. Vínculo opcional com User (login sistema)
  3. Dados contratuais (admissão, salário, carga horária)
  4. Documentos anexáveis (RG, CPF, CTPS, PIS)
  5. Hierarquia (chefe direto)
  6. Solicitação/aprovação de férias
  7. Estatísticas (headcount, turnover, custo total)
  8. Build passa + lint OK

🔌 Handoff

  • Integração Card 25 (User) e Card 12 (Professor)
  • Cargos configuráveis (não hardcoded)

🎯 Próximo

Card 75: Novo AdminShell (M14 - Redesign Visual)


EXECUCAO — 2026-08-15

1. O que foi implementado

Employee (CLT/PJ/FREELANCE/INTERNSHIP, hierarquia chefe, documentos CTPS/PIS Json, benefícios) + Vacation (solicitar/aprovar). /master/funcionarios: CRUD completo, vínculo com User, demissão, férias em modal, dashboard (headcount por cargo/filial, turnover, custo salarial).

Commit: fcd05d1 (router src/server/trpc/routers/ + páginas src/app/ + CSS modules src/styles/).

2. Critérios de aceite

Validados via typecheck/lint/build (0 erros) + deploy DEV (CI verde) + smoke HTTP 200 das rotas.

3. Deploy DEV

  • https://sistemaescolar.wellka.com.br — migration 20260815180000_m10_m13_foundation (60 tabelas) aplicada via CI
  • Routers registrados no root: m10, m11, m12, m13, m13b (+ shell do M14)
  • Navegação e i18n (pt-BR/en-US/es-ES) atualizados para todas as roles

4. Próximo card

Após M13 (65-74): M7 Go-Live (cards 32-37) — marco final.

← Voltar para a visão geral