Imported from Caiolinooo/EmployeeHub (
src/app/department/dp/AGENTS.md). Install upstream withnpx skills add Caiolinooo/EmployeeHub --skill dp. Copyright stays with the author.
Departamento Pessoal (DP) — DOX
Purpose
UI de /department/dp para o DP operar cadastro de colaboradores, fechamento de escala/folha, vencimentos de ASO e atalho ao e-Social. Lê só gt_* via APIs de Gestão de Tripulantes.
Ownership
- Page/layout:
src/app/department/dp/ - APIs:
GET /api/gestao-tripulantes/colaboradores,GET|POST /api/gestao-tripulantes/aso/notificar-vencimentos,GET|POST /api/gestao-tripulantes/aso/agendamentos,GET|POST /api/gestao-tripulantes/aso/agendamentos/sugestoes,GET /api/gestao-tripulantes/relatorio-mensal,POST /api/gestao-tripulantes/relatorio-mensal/aprovar,POST /api/e-social/consolidar - Lib:
src/lib/gestao-tripulantes/aso-vencimentos.ts,aso-agendamento-*.ts,LIST_SELECTemcolaborador-get.ts
Local Contracts
- Sempre wrap com
MainLayout(layout.tsx) — o menu lateral vem daí, como GT / e-Social / Man Schedule. - Lista de colaboradores usa campos achatados da API:
cargo_nome,empresa_nome,embarcacao_nome,centro_custo_nome,centro_custo_codigo,ativo,regime_trabalho,escala_embarque,escala_folga,status_embarque(célula de hoje, não a coluna stale). Nuncacargo.nome/empresa.nome(o flatten remove os nested). Coluna Escala:formatRegimeDisplay—sem_escala/administrativo/onshore(não 14x14). - Coluna Status: Ativo/Inativo e pílula de embarque viva (Embarcado/StandBy/Folga/Afastado) da mesma API.
- Aba ASO lê
GET /api/gestao-tripulantes/aso/notificar-vencimentos(tipo_documento=aso+ join colaborador) eGET /aso/agendamentos. Não usar o bucket genérico de/auditoria. - Janela vencendo = antecedência admin (padrão 60 dias), não hardcoded 30.
- DP escolhe data sugerida (escala STB preferida) e assina (
useSignature); criasolicitadopara a logística. Statusmarcado/reprovado(com motivo) aparecem na mesma aba. - Status VENCIDO/VENCENDO vem de
alertacalculado por data civil local (YYYY-MM-DD), não denew Date(iso)UTC. - Fechamento: preview de totais via
relatorio-mensal(ON, DBA, FI, Folga, STB, TRE/FER, alertas NxN +calculosFolha); aprovação emModalAprovacaoFechamentocomuseSignature().requestSignature(modal global) e ator viauseSupabaseAuth(nãoAuthContextlegado). Lista nominada = exatamente essas pessoas, qualquer role; sem nomes, um ADMIN/MANAGER assina e conclui. Números vêm defechamento-calculo.ts(dt início/dt fim, sem inventar janela). - Header: pills compactas (não grid de KPI). Colaboradores =
filteredColabs.lengthvisíveis + ativos na folha + carregados na consulta (não o total bruto como se fosse a tabela). ASO = vencidos + janela de antecedência. Sem cards decorativos “Escalas & Fechamento” / “e-Social Integrado”. - Lista:
GET /colaboradores?limit=5000; sepagination.total> linhas carregadas, pill “Lista incompleta” +console.warn. Filtros Empresa/Embarcação/Cargo (SearchableCreatableSelect): Enter com texto seleciona o primeiro resultado real, não “Todas…”. Enter com campo vazio continua limpando o filtro. Busca por CPF ignora pontuação-só (não casa todos os CPFs).
Work Guidance
- Novos campos da tabela DP devem existir em
LIST_SELECT+ flatten. - Clique na linha de ASO ou na lista de colaboradores abre o
CollaboratorModaldo colaborador. - Cadastro do zero: botão Novo colaborador no header →
/department/dp/novo(ColaboradorCadastroForm+POST /colaboradores). Mesma tabelagt_colaboradores. GT reusa o form em/department/gestao-tripulantes/novo. - Editar qualquer dado: linha/Editar abre o modal; aba Dados Pessoais → Editar monta o form completo (pessoais, docs, banco, vínculo, e-Social) via
PUT /colaboradores/[id]. - Desligamento: não há ação na lista. Abrir o modal → botão/aba Desligamento (
DesligamentoModal). APIGET|POST /colaboradores/[id]/desligamento. Colaborador já inativo comgt_desligamentosmostra histórico (não desliga de novo). - Viewport:
GtPageShellpreenche o<main>do MainLayout (flex-1 min-h-0 min-w-0). Header (título + pills de métricas), abas e filtrosshrink-0; lista de colaboradores e painel ASOflex-1 min-h-0 min-w-0 overflow-auto(GT_PAGE_SCROLLPORT_CLASS). Tabela da listamin-w-[850px]; ASOmin-w-[860px]— scroll horizontal no pane, não na página. Sem faixa de KPI cards em todas as abas. Sem scroll duplo da página.
Verification
/department/dpmostra sidebar do portal (não tela full-bleed). Sem grid de 4 KPI cards no topo; pills no header (visíveis = linhas da tabela).- Lista DP: filtros visíveis; a tabela rola no pane restante (documento não vira o scroll principal). Em viewport estreita, a lista/ASO rola no eixo X dentro do pane (
min-w-[850px]/min-w-[860px]). - Colunas Cargo, Centro de Custo, Empresa e Escala preenchidas quando o cadastro tem FK.
- Coluna Status mostra Ativo/Inativo e a pílula de embarque da célula de hoje (ON → Embarcado).
- Aba ASO lista nome/CPF/cargo (não
N/Aem massa); validade emdd/mm/aaaa; vencido só se a data local já passou; permite Agendar → logística; marcado após aprovação. - Aba Fechamento mostra totais ON/DBA/FI/Folga/STB/TRE/FER e alertas NxN do mês selecionado. Assinar abre o SignatureModal global; cancelar não quebra; sem assinatura cadastrada o cadastro no próprio modal precede o POST.
- Clique na linha do colaborador →
CollaboratorModal→ Desligar / aba Desligamento. A lista DP não tem botão próprio de rescisão. - Header DP tem Novo colaborador →
/department/dp/novo. Salvar volta para/department/dp. Editar no modal cobre banco/PIS/CTPS/salário/contrato, não só identidade.
Child DOX Index
(none)