commit e34e85f382326ab7d760b41a871a1a321a55029a Author: Felipe Araujo Date: Mon Mar 9 15:46:01 2026 -0300 Importa código existente do SGMP_PROD diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b0ef1fd --- /dev/null +++ b/.dockerignore @@ -0,0 +1,56 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +venv/ +env/ +ENV/ +*.egg-info/ +dist/ +build/ + +# Django +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Media files (serão montados como volume) +mediafiles/ + +# Static files (serão coletados no container) +staticfiles/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Git +.git/ +.gitignore + +# Docker +Dockerfile +docker-compose.yaml +.dockerignore + +# Documentação +*.md +README* + +# Testes +.pytest_cache/ +.coverage +htmlcov/ + +# Outros +*.txt +!requirements.txt +test_results.json +colaboradores_rm.txt + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d89e4d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ +# === Python / Django básicos === +__pycache__/ +*.py[cod] +*$py.class + +# Ambientes virtuais +.venv/ +venv/ +env/ +ENV/ + +# Arquivos de log +*.log +*.tmp + +# Banco de dados local (SQLite) +db.sqlite3 + +# Cache / testes +.pytest_cache/ +.coverage +htmlcov/ +.tox/ +.mypy_cache/ +.dmypy.json + +# Arquivos de configuração sensíveis +*.env +.env.* +.envrc + +# === Django estático / mídia (gerados em runtime) === +staticfiles/ +mediafiles/ + +# Arquivos de migração gerados pelo Django NÃO devem ser ignorados +# (migrations/** é intencionalmente mantido versionado) + +# === Docker / Compose === +docker-compose.override.yml +*.pid + +# === Ferramentas / IDE === +.vscode/ +.idea/ +*.iml + +# Arquivos do macOS / sistema +.DS_Store +Thumbs.db + +# === Ferramentas auxiliares do projeto === +# Resultados de testes exportados +test_results.json \ No newline at end of file diff --git a/ARQUITETURA_APROVACAO.md b/ARQUITETURA_APROVACAO.md new file mode 100644 index 0000000..cbce84e --- /dev/null +++ b/ARQUITETURA_APROVACAO.md @@ -0,0 +1,303 @@ +# Arquitetura de Aprovação - SGMP_PROD + +## 📋 Situação Atual + +### Fluxo de Aprovação Atual + +``` +GESTOR cria solicitação + ↓ +Status: RASCUNHO + ↓ +GESTOR envia para aprovação + ↓ +Status: ENVIADA + ↓ +GG analisa e APROVA/REPROVA + ↓ +Se aprovada → Status: APROVADA_GG + ↓ +CONTROLADORIA analisa e APROVA/REPROVA + ↓ +Se aprovada → Status: APROVADA_CONTROLADORIA + ↓ +DIRETORIA analisa e APROVA/REPROVA + ↓ +Se aprovada → Status: FINALIZADA +Se reprovada → Status: REPROVADA +``` + +### Componentes Atuais + +#### 1. Modelos (`models.py`) + +- **`Solicitacao`**: Entidade central + - Método `etapa_atual()`: Retorna a etapa atual baseada no status + - Método `pode_aprovar(usuario)`: Verifica se o perfil do usuário corresponde à etapa atual + +- **`Aprovacao`**: Registra cada decisão (aprovar/reprovar) em cada etapa + - Campos: `solicitacao`, `etapa`, `decisao`, `usuario`, `justificativa`, `decidido_em` + - Unique constraint: `(solicitacao, etapa)` - garante uma aprovação por etapa + +- **`StatusSolicitacao`**: Enum com os status possíveis + - `RASCUNHO`, `ENVIADA`, `APROVADA_GG`, `APROVADA_CONTROLADORIA`, `APROVADA_DIRETORIA`, `FINALIZADA`, `REPROVADA` + +- **`EtapaAprovacao`**: Enum com as etapas + - `GG`, `CONTROLADORIA`, `DIRETORIA` + +#### 2. Services (`services.py`) + +- **`aprovar_reprovar_solicitacao()`**: Função principal que: + 1. Valida se a solicitação está em uma etapa válida + 2. Valida se o perfil do usuário corresponde à etapa atual + 3. Cria registro de `Aprovacao` + 4. Atualiza o status da solicitação conforme a decisão + 5. Se reprovado, finaliza a solicitação + 6. Se aprovado, avança para o próximo status + +#### 3. Views (`views.py`) + +- **`decidir_solicitacao()`**: View que recebe POST com decisão e justificativa + - Decorator: `@requer_perfil(GG, CONTROLADORIA, DIRETORIA)` + - Chama `aprovar_reprovar_solicitacao()` + +- **`solicitacao_detalhe()`**: Exibe detalhes e botões de aprovação + - Calcula `pode_aprovar` usando `solicitacao.pode_aprovar(usuario)` + +- **`dashboard_view()`**: Lista solicitações com informações de `pode_aprovar` + +#### 4. Templates + +- **`dashboard.html`**: Mostra botões "Aprovar" e "Reprovar" se `item.pode_aprovar == True` +- **`solicitacao_detalhe.html`**: Similar, mostra botões de aprovação + +--- + +## 🔄 Nova Arquitetura Proposta + +### Novo Fluxo + +``` +GESTOR cria solicitação + ↓ +Status: RASCUNHO + ↓ +GESTOR envia para aprovação + ↓ +Status: ENVIADA + ↓ +GG registra PARECER (não aprova/reprova) + ↓ +CONTROLADORIA registra PARECER (não aprova/reprova) + ↓ +Status: AGUARDANDO_DIRETORIA (novo status) + ↓ +DIRETORIA analisa pareceres e APROVA/REPROVA + ↓ +Se aprovada → Status: FINALIZADA +Se reprovada → Status: REPROVADA +``` + +### Mudanças Necessárias + +#### 1. Novo Modelo: `Parecer` + +```python +class Parecer(BaseModel): + """ + Representa um parecer técnico emitido por GG ou CONTROLADORIA + sobre uma solicitação. Diferente de Aprovacao, um Parecer não + altera o status da solicitação, apenas fornece análise e dados. + """ + solicitacao = models.ForeignKey(Solicitacao, on_delete=models.CASCADE, related_name="pareceres") + etapa = models.CharField(max_length=20, choices=EtapaAprovacao.choices) # GG ou CONTROLADORIA + usuario = models.ForeignKey(UsuarioSistema, on_delete=models.PROTECT) + texto = models.TextField(help_text="Análise, dados e considerações sobre a solicitação") + criado_em = models.DateTimeField(auto_now_add=True) + + class Meta: + unique_together = ("solicitacao", "etapa") # Um parecer por etapa +``` + +#### 2. Modificar `StatusSolicitacao` + +Adicionar novo status: +- `AGUARDANDO_DIRETORIA = "AGUARDANDO_DIRETORIA", _("Aguardando Diretoria")` + +#### 3. Modificar `Solicitacao.etapa_atual()` + +```python +def etapa_atual(self): + mapa = { + StatusSolicitacao.ENVIADA: None, # GG e CONTROLADORIA podem dar parecer + StatusSolicitacao.AGUARDANDO_DIRETORIA: EtapaAprovacao.DIRETORIA, + } + return mapa.get(self.status) +``` + +#### 4. Modificar `Solicitacao.pode_aprovar()` + +```python +def pode_aprovar(self, usuario=None): + """ + Apenas DIRETORIA pode aprovar/reprovar. + GG e CONTROLADORIA apenas podem dar parecer. + """ + etapa_atual = self.etapa_atual() + if etapa_atual is None: + return False + + # Apenas DIRETORIA pode aprovar + if etapa_atual != EtapaAprovacao.DIRETORIA: + return False + + if usuario: + if usuario.perfil != UsuarioSistema.Perfil.DIRETORIA: + return False + + return True +``` + +#### 5. Novo método: `Solicitacao.pode_dar_parecer()` + +```python +def pode_dar_parecer(self, usuario): + """ + Verifica se o usuário pode dar parecer na solicitação. + GG e CONTROLADORIA podem dar parecer quando status é ENVIADA. + """ + if self.status != StatusSolicitacao.ENVIADA: + return False + + # Verifica se já deu parecer + parecer_existente = self.pareceres.filter(etapa=usuario.perfil).exists() + if parecer_existente: + return False # Já deu parecer + + # GG e CONTROLADORIA podem dar parecer + if usuario.perfil in [UsuarioSistema.Perfil.GG, UsuarioSistema.Perfil.CONTROLADORIA]: + return True + + return False +``` + +#### 6. Novo Service: `registrar_parecer()` + +```python +@transaction.atomic +def registrar_parecer( + solicitacao: Solicitacao, + usuario: UsuarioSistema, + texto: str +) -> Parecer: + """ + Registra um parecer de GG ou CONTROLADORIA. + Não altera o status da solicitação. + """ + if not solicitacao.pode_dar_parecer(usuario): + raise PermissaoError("Usuário não pode dar parecer nesta solicitação.") + + # Mapeia perfil para etapa + mapa_perfil_etapa = { + UsuarioSistema.Perfil.GG: EtapaAprovacao.GG, + UsuarioSistema.Perfil.CONTROLADORIA: EtapaAprovacao.CONTROLADORIA, + } + etapa = mapa_perfil_etapa.get(usuario.perfil) + + parecer = Parecer.objects.create( + solicitacao=solicitacao, + etapa=etapa, + usuario=usuario, + texto=texto + ) + + # Verifica se ambos os pareceres foram dados + parecer_gg = Parecer.objects.filter(solicitacao=solicitacao, etapa=EtapaAprovacao.GG).exists() + parecer_controladoria = Parecer.objects.filter(solicitacao=solicitacao, etapa=EtapaAprovacao.CONTROLADORIA).exists() + + if parecer_gg and parecer_controladoria: + # Ambos os pareceres foram dados, muda status para AGUARDANDO_DIRETORIA + solicitacao.status = StatusSolicitacao.AGUARDANDO_DIRETORIA + solicitacao.save() + + return parecer +``` + +#### 7. Modificar `aprovar_reprovar_solicitacao()` + +Agora apenas DIRETORIA pode usar esta função: + +```python +@transaction.atomic +def aprovar_reprovar_solicitacao( + solicitacao: Solicitacao, + aprovador: UsuarioSistema, + decisao: str, + justificativa: str = "" +) -> Solicitacao: + """ + Apenas DIRETORIA pode aprovar/reprovar. + A solicitação deve estar em AGUARDANDO_DIRETORIA. + """ + if aprovador.perfil != UsuarioSistema.Perfil.DIRETORIA: + raise PermissaoError("Apenas a Diretoria pode aprovar/reprovar solicitações.") + + if solicitacao.status != StatusSolicitacao.AGUARDANDO_DIRETORIA: + raise ValidacaoError("A solicitação não está aguardando aprovação da Diretoria.") + + # ... resto da lógica similar +``` + +#### 8. Nova View: `registrar_parecer_view()` + +```python +@login_required +@requer_perfil(UsuarioSistema.Perfil.GG, UsuarioSistema.Perfil.CONTROLADORIA) +def registrar_parecer_view(request, solicitacao_id): + solicitacao = get_object_or_404(Solicitacao, id=solicitacao_id) + usuario = get_usuario_sistema(request) + + if request.method == "POST": + texto = request.POST.get("texto", "").strip() + if not texto: + messages.error(request, "O parecer não pode estar vazio.") + else: + try: + services.registrar_parecer(solicitacao, usuario, texto) + messages.success(request, "Parecer registrado com sucesso.") + except Exception as e: + messages.error(request, str(e)) + + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) +``` + +#### 9. Modificar Templates + +- **Dashboard**: Mostrar botão "Dar Parecer" para GG/CONTROLADORIA quando `pode_dar_parecer == True` +- **Detalhes**: Mostrar campo de texto para parecer e botão "Registrar Parecer" para GG/CONTROLADORIA +- Mostrar pareceres já registrados na seção de auditoria + +--- + +## 📊 Resumo das Mudanças + +| Componente | Mudança | +|------------|---------| +| **Modelo** | Adicionar `Parecer` | +| **StatusSolicitacao** | Adicionar `AGUARDANDO_DIRETORIA` | +| **Solicitacao.etapa_atual()** | Retornar `None` para `ENVIADA`, `DIRETORIA` para `AGUARDANDO_DIRETORIA` | +| **Solicitacao.pode_aprovar()** | Apenas DIRETORIA pode aprovar | +| **Solicitacao** | Adicionar método `pode_dar_parecer()` | +| **Services** | Novo: `registrar_parecer()`, modificar `aprovar_reprovar_solicitacao()` | +| **Views** | Novo: `registrar_parecer_view()`, modificar `decidir_solicitacao()` | +| **Templates** | Mostrar campos de parecer para GG/CONTROLADORIA, botões de aprovação apenas para DIRETORIA | + +--- + +## ✅ Benefícios da Nova Arquitetura + +1. **Separação de responsabilidades**: GG e CONTROLADORIA fornecem análise, DIRETORIA decide +2. **Flexibilidade**: Pareceres podem ser editados (se necessário) sem afetar o fluxo +3. **Rastreabilidade**: Histórico completo de pareceres e decisão final +4. **Clareza**: Status `AGUARDANDO_DIRETORIA` deixa claro que está aguardando decisão final + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e07c244 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,54 @@ +FROM python:3.9-slim-bookworm + +WORKDIR /app + +# 1. Dependências de sistema (Oracle exige libaio1) +# Adicionei 'libaio1' explicitamente pois é runtime dependency +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + libaio1 \ + libaio-dev \ + curl \ + unzip \ + gcc \ + g++ \ + unixodbc-dev && \ + rm -rf /var/lib/apt/lists/* + +# 2. Oracle Instant Client +# Usando versão 21.13 (Link atualizado e funcional) +RUN mkdir -p /opt/oracle && \ + cd /opt/oracle && \ + curl -f -L -o instantclient.zip \ + https://download.oracle.com/otn_software/linux/instantclient/2113000/instantclient-basic-linux.x64-21.13.0.0.0dbru.zip && \ + unzip instantclient.zip && \ + rm instantclient.zip && \ + # O zip extrai para a pasta instantclient_21_13, ajustamos a config: + echo "/opt/oracle/instantclient_21_13" > /etc/ld.so.conf.d/oracle-instantclient.conf && \ + ldconfig + +# 3. Variáveis de Ambiente +ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_21_13:$LD_LIBRARY_PATH +ENV ORACLE_LIB_DIR=/opt/oracle/instantclient_21_13 + +# 4. Instalação de pacotes Python +COPY requirements.txt . +RUN pip install --no-cache-dir --upgrade pip && \ + pip install --no-cache-dir -r requirements.txt && \ + pip install --no-cache-dir gunicorn + +# 5. Copia o código +COPY . . + +# 6. Tornar o entrypoint executável +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +EXPOSE 8000 + +# Entrypoint que executa migrações e collectstatic antes de iniciar +ENTRYPOINT ["/entrypoint.sh"] + +# Comando padrão +CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3", "--timeout", "120"] + diff --git a/README_PERMISSOES.md b/README_PERMISSOES.md new file mode 100644 index 0000000..58695a3 --- /dev/null +++ b/README_PERMISSOES.md @@ -0,0 +1,321 @@ +# 🔐 Sistema de Login, Senhas e Permissões - SGMP + +Este documento explica como funciona o sistema de autenticação e controle de permissões do SGMP. + +--- + +## 📋 Índice + +1. [Sistema de Login](#sistema-de-login) +2. [Criação de Usuários](#criação-de-usuários) +3. [Perfis e Permissões](#perfis-e-permissões) +4. [Gerenciamento de Permissões](#gerenciamento-de-permissões) +5. [Regras de Acesso](#regras-de-acesso) +6. [Fluxo de Aprovação](#fluxo-de-aprovação) + +--- + +## 🔑 Sistema de Login + +### Autenticação + +O SGMP utiliza autenticação integrada com o sistema **Winthor** (TOTVS): + +- **Login**: Matrícula do funcionário (mesma do sistema Winthor) +- **Senha**: Senha do sistema Winthor +- **Validação**: As credenciais são validadas diretamente no banco Oracle do Winthor + +### Processo de Login + +1. O usuário acessa a página de login +2. Informa sua **matrícula** e **senha** +3. O sistema consulta o Winthor para validar as credenciais +4. Se válido: + - Cria/atualiza o registro `UsuarioSistema` no banco do SGMP + - Cria uma sessão Django para o usuário + - Redireciona para o Dashboard +5. Se inválido: + - Exibe mensagem de erro + - Permanece na página de login + +### Primeiro Acesso + +Quando um usuário faz login pela primeira vez: + +- Um registro `UsuarioSistema` é criado automaticamente +- O perfil padrão é **GESTOR** +- O usuário fica **ativo** por padrão +- O nome é obtido do Winthor + +--- + +## 👥 Criação de Usuários + +### Criação Automática + +Os usuários são criados **automaticamente** no primeiro login: + +- Não é necessário criar usuários manualmente +- O sistema sincroniza com o Winthor +- A matrícula é usada como identificador único + +### Criação Manual (Admin Django) + +Para criar usuários manualmente ou ajustar dados: + +1. Acesse `/admin/` (painel administrativo do Django) +2. Navegue até **Solicitações → Usuários do Sistema** +3. Crie ou edite usuários conforme necessário + +**Campos importantes:** +- **Matrícula**: Deve corresponder à matrícula do Winthor +- **Nome**: Nome completo do usuário +- **Perfil**: Define as permissões (veja seção de Perfis) +- **Ativo**: Se desmarcado, o usuário não consegue fazer login + +--- + +## 🎭 Perfis e Permissões + +O sistema possui **4 perfis** com diferentes níveis de acesso: + +### 1. GESTOR (Gestor) + +**Permissões:** +- ✅ Criar solicitações (desligamento, admissão, movimentação) +- ✅ Visualizar suas próprias solicitações +- ✅ Editar solicitações em status "Rascunho" +- ✅ Enviar solicitações para aprovação +- ✅ Gerenciar permissões de todos os usuários +- ❌ Não pode aprovar/reprovar solicitações + +**Uso:** Gestores de equipe que iniciam processos de RH. + +--- + +### 2. GG (Gente e Gestão) + +**Permissões:** +- ✅ Visualizar solicitações com status "ENVIADA" +- ✅ Aprovar/reprovar solicitações na etapa GG +- ✅ Visualizar detalhes completos das solicitações +- ✅ Gerenciar permissões de todos os usuários +- ❌ Não pode criar novas solicitações + +**Uso:** Primeira etapa de aprovação no fluxo. + +--- + +### 3. CONTROLADORIA + +**Permissões:** +- ✅ Visualizar solicitações aprovadas pela GG (status "APROVADA_GG") +- ✅ Aprovar/reprovar solicitações na etapa Controladoria +- ✅ Visualizar detalhes completos das solicitações +- ✅ Gerenciar permissões de todos os usuários +- ❌ Não pode criar novas solicitações + +**Uso:** Segunda etapa de aprovação (análise financeira/orçamentária). + +--- + +### 4. DIRETORIA + +**Permissões:** +- ✅ Visualizar solicitações aprovadas pela Controladoria (status "APROVADA_CONTROLADORIA") +- ✅ Aprovar/reprovar solicitações na etapa Diretoria (aprovação final) +- ✅ Visualizar detalhes completos das solicitações +- ✅ Gerenciar permissões de todos os usuários +- ❌ Não pode criar novas solicitações + +**Uso:** Aprovação final e decisão executiva. + +--- + +## ⚙️ Gerenciamento de Permissões + +### Acessando a Página de Permissões + +1. Faça login no sistema +2. No menu lateral, clique em **"Administração"** (ícone ⚙️) +3. Você será redirecionado para a página de gerenciamento de permissões + +### Funcionalidades + +A página de permissões permite: + +- **Visualizar todos os usuários** do sistema +- **Buscar usuários** por nome ou matrícula +- **Alterar o perfil** de qualquer usuário (incluindo o seu próprio) +- **Ver o status** (ativo/inativo) de cada usuário +- **Identificar seu próprio perfil** (marcado como "Você") + +### Como Alterar um Perfil + +1. Na tabela de usuários, localize o usuário desejado +2. Na coluna "Alterar Perfil", selecione o novo perfil no dropdown +3. Clique em **"Atualizar"** +4. Uma mensagem de confirmação será exibida + +### Regras Importantes + +- ✅ Qualquer usuário autenticado pode alterar permissões +- ✅ Você pode alterar seu próprio perfil +- ✅ Você pode alterar o perfil de outros usuários +- ⚠️ Alterar seu próprio perfil pode afetar suas permissões imediatamente + +--- + +## 🔒 Regras de Acesso + +### Dashboard + +O dashboard exibe diferentes informações conforme o perfil: + +#### GESTOR +- Vê apenas suas próprias solicitações +- Pode filtrar por status (Total, Pendentes, Aprovadas, Reprovadas) +- Vê solicitações em todos os status (incluindo "Rascunho") + +#### GG, CONTROLADORIA, DIRETORIA +- Vê apenas solicitações pendentes na sua etapa +- Não vê solicitações em "Rascunho" +- Não vê solicitações já finalizadas ou reprovadas + +### Criação de Solicitações + +- **Apenas GESTOR** pode criar solicitações +- Outros perfis verão mensagem de erro se tentarem acessar formulários de criação + +### Visualização de Detalhes + +- Todos os perfis podem visualizar detalhes de solicitações +- O formulário de aprovação só aparece para perfis com permissão de aprovar + +### Aprovação/Reprovação + +- **GESTOR** não pode aprovar/reprovar suas próprias solicitações (após sair de "Rascunho") +- Cada perfil só pode aprovar na sua etapa específica do fluxo +- O solicitante não pode aprovar sua própria solicitação + +--- + +## 📊 Fluxo de Aprovação + +### Estados da Solicitação + +1. **RASCUNHO**: Solicitação criada, ainda não enviada +2. **ENVIADA**: Enviada para aprovação (visível para GG) +3. **APROVADA_GG**: Aprovada pela GG (visível para Controladoria) +4. **APROVADA_CONTROLADORIA**: Aprovada pela Controladoria (visível para Diretoria) +5. **FINALIZADA**: Aprovada pela Diretoria (processo concluído) +6. **REPROVADA**: Reprovação em qualquer etapa (processo encerrado) + +### Fluxo Completo + +``` +GESTOR cria solicitação + ↓ +Status: RASCUNHO + ↓ +GESTOR envia para aprovação + ↓ +Status: ENVIADA + ↓ +GG analisa e aprova/reprova + ↓ +Se aprovada → Status: APROVADA_GG + ↓ +CONTROLADORIA analisa e aprova/reprova + ↓ +Se aprovada → Status: APROVADA_CONTROLADORIA + ↓ +DIRETORIA analisa e aprova/reprova + ↓ +Se aprovada → Status: FINALIZADA +``` + +### Regras de Aprovação + +- Cada etapa só pode ser aprovada pelo perfil correspondente +- Uma reprovação em qualquer etapa encerra o processo +- O solicitante não pode aprovar sua própria solicitação +- Solicitações em "RascUNHO" só são visíveis para o criador + +--- + +## 🛠️ Solução de Problemas + +### Não consigo fazer login + +**Possíveis causas:** +- Matrícula ou senha incorretas +- Usuário inativo no sistema +- Problema de conexão com o Winthor + +**Solução:** +1. Verifique suas credenciais do Winthor +2. Acesse o admin Django (`/admin/`) e verifique se o usuário está ativo +3. Verifique a conexão com o banco Oracle + +### Não vejo minhas solicitações + +**Possíveis causas:** +- Perfil incorreto +- Solicitações em status "Rascunho" (só visíveis para o criador) +- Filtro aplicado no dashboard + +**Solução:** +1. Verifique seu perfil na página de permissões +2. Se for GESTOR, certifique-se de que criou as solicitações +3. Limpe os filtros no dashboard + +### Não consigo aprovar solicitações + +**Possíveis causas:** +- Perfil sem permissão de aprovação +- Tentando aprovar sua própria solicitação +- Solicitação não está na sua etapa + +**Solução:** +1. Verifique seu perfil (deve ser GG, CONTROLADORIA ou DIRETORIA) +2. Certifique-se de que não é o solicitante +3. Verifique se a solicitação está no status correto para sua etapa + +### Não consigo criar solicitações + +**Possíveis causas:** +- Perfil não é GESTOR + +**Solução:** +1. Acesse a página de permissões +2. Altere seu perfil para GESTOR +3. Faça logout e login novamente + +--- + +## 📝 Notas Importantes + +1. **Senhas**: As senhas são gerenciadas pelo Winthor. O SGMP não armazena senhas. + +2. **Sincronização**: O nome do usuário é sincronizado do Winthor no primeiro login. + +3. **Perfil Padrão**: Novos usuários recebem automaticamente o perfil GESTOR. + +4. **Ativação**: Usuários podem ser desativados no admin Django, impedindo login. + +5. **Segurança**: Qualquer usuário autenticado pode gerenciar permissões. Considere restringir isso se necessário. + +--- + +## 🔗 Links Úteis + +- **Página de Login**: `/login/` +- **Dashboard**: `/solicitacoes/` +- **Gerenciar Permissões**: `/solicitacoes/permissoes/` +- **Admin Django**: `/admin/` + +--- + +**Última atualização**: 2024 + diff --git a/colaboradores_rm.txt b/colaboradores_rm.txt new file mode 100644 index 0000000..b973166 --- /dev/null +++ b/colaboradores_rm.txt @@ -0,0 +1,737 @@ +{'CODCOLIGADA': 3, 'CHAPA': '052561', 'NOME': 'ABRAHAO LINCON DA SILVA BARBOSA', 'CPF': '02919236237', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Estagiario Gente e Gestao', 'DATAADMISSAO': datetime.datetime(2025, 8, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000385', 'SALARIO': Decimal('600.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -351} +{'CODCOLIGADA': 1, 'CHAPA': '052058', 'NOME': 'ADAILSON SOUSA PADILHA', 'CPF': '04791987217', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 9, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4565} +{'CODCOLIGADA': 1, 'CHAPA': '051855', 'NOME': 'ADALBERTO PEREIRA DE OLIVEIRA JUNIOR', 'CPF': '03930082233', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 2, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 7045} +{'CODCOLIGADA': 2, 'CHAPA': '051596', 'NOME': 'ADELICIO FERREIRA DE LIMA', 'CPF': '29427754249', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 3, 13, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044131', 'NOME': 'ADEMIR VASCONCELOS CORREA', 'CPF': '03209838208', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2021, 3, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051513', 'NOME': 'ADENILSON FERREIRA DA SILVA', 'CPF': '02437749233', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 11, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1297} +{'CODCOLIGADA': 3, 'CHAPA': '051928', 'NOME': 'ADILHA RAIANA BATISTA SANTOS', 'CPF': '70688159281', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 5, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6394} +{'CODCOLIGADA': 1, 'CHAPA': '052189', 'NOME': 'ADRIANO DA SILVA BARBOSA', 'CPF': '02566506248', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 12083} +{'CODCOLIGADA': 2, 'CHAPA': '044989', 'NOME': 'ADRIANO FIGUEIREDO MACHADO', 'CPF': '97087718215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2022, 9, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052481', 'NOME': 'ADRIANO MOURA DE HOLANDA', 'CPF': '02516882246', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 4, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6697} +{'CODCOLIGADA': 1, 'CHAPA': '052603', 'NOME': 'ADRIEL VITOR DO ROSARIO CARDOSO', 'CPF': '05934564242', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 10, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2597} +{'CODCOLIGADA': 2, 'CHAPA': '044908', 'NOME': 'AFONSO BRAGA DE SOUSA', 'CPF': '98565486249', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2021, 11, 25, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051852', 'NOME': 'AIDA MONTEIRO PORTAL', 'CPF': '00185769233', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de loja Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000318', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2224} +{'CODCOLIGADA': 2, 'CHAPA': '052403', 'NOME': 'AILSON DA SILVA BRITO', 'CPF': '91749760282', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051764', 'NOME': 'AILSON DA SILVA DA COSTA', 'CPF': '04614741231', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2023, 10, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3320} +{'CODCOLIGADA': 1, 'CHAPA': '002627', 'NOME': 'AILTON CESAR BRITO REIS', 'CPF': '02565348100', 'SECAO': 'DIRETORIA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2018, 3, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.009', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -176640} +{'CODCOLIGADA': 1, 'CHAPA': '051654', 'NOME': 'ALAN AZEVEDO DOS SANTOS', 'CPF': '48325856220', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 6, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 8471} +{'CODCOLIGADA': 1, 'CHAPA': '052558', 'NOME': 'ALAN DA SILVA PANTOJA', 'CPF': '02306366241', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2615} +{'CODCOLIGADA': 3, 'CHAPA': '051801', 'NOME': 'ALAN KENNALD VIANA DA SILVA', 'CPF': '00207328218', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2023, 12, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1394} +{'CODCOLIGADA': 2, 'CHAPA': '044909', 'NOME': 'ALAN MARTINS DA SILVA', 'CPF': '91701910268', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2021, 11, 29, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3603} +{'CODCOLIGADA': 2, 'CHAPA': '052415', 'NOME': 'ALAN PATRIK PEREIRA DE OEIRAS', 'CPF': '86258036287', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052158', 'NOME': 'ALAN ROBERTO MENDES CARDOSO', 'CPF': '03338295227', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 1, 'CHAPA': '052376', 'NOME': 'ALANA PEREIRA LOUREIRO', 'CPF': '08398217278', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1605} +{'CODCOLIGADA': 1, 'CHAPA': '052525', 'NOME': 'ALDINEI DA COSTA RIBEIRO', 'CPF': '01187318230', 'SECAO': 'LOJA 10 LOGISTICA ', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 5, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.003', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -114} +{'CODCOLIGADA': 2, 'CHAPA': '004474', 'NOME': 'ALDO DA SILVA SANTOS', 'CPF': '45463654204', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Operador de Empilhadeira Nivel III', 'DATAADMISSAO': datetime.datetime(2020, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000056', 'SALARIO': Decimal('2165.24'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044932', 'NOME': 'ALEFY SERGIO MOREIRA REIS', 'CPF': '70415079209', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 2, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1661} +{'CODCOLIGADA': 2, 'CHAPA': '052612', 'NOME': 'ALEHANDRO ICARO CUNHA DA SILVA', 'CPF': '06805445264', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052293', 'NOME': 'ALESSANDRO DA SILVA TEIXEIRA', 'CPF': '69292302272', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051979', 'NOME': 'ALESSANDRO FERREIRA FERREIRA', 'CPF': '03336289262', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 6, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6839} +{'CODCOLIGADA': 5, 'CHAPA': '019', 'NOME': 'ALESSANDRO GUIMARAES GONCALVES', 'CPF': '51674645287', 'SECAO': 'DTI', 'FUNCAO': 'Desenvolvedor de TI', 'DATAADMISSAO': datetime.datetime(2024, 12, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.02', 'CODFUNCAO': '000400', 'SALARIO': Decimal('8500.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052563', 'NOME': 'ALESSANDRO MONTEIRO BARBOSA', 'CPF': '70938241290', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 2, 'CHAPA': '052333', 'NOME': 'ALESSANDRO PEREIRA CARVALHO', 'CPF': '52724832272', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Encarregado de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051795', 'NOME': 'ALEXANDRE ARAUJO DA CRUZ', 'CPF': '92749240204', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052367', 'NOME': 'ALEXANDRO FERREIRA DE ASSIS', 'CPF': '69011702204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motoboy', 'DATAADMISSAO': datetime.datetime(2025, 1, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000032', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003918', 'NOME': 'ALFREDO DA CONCEICAO NETO', 'CPF': '02474537228', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Gerente de Loja', 'DATAADMISSAO': datetime.datetime(2020, 3, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000208', 'SALARIO': Decimal('3814.46'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051974', 'NOME': 'ALICE PINZ KLEMANN', 'CPF': '03069097235', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Estagiario Gente e Gestao', 'DATAADMISSAO': datetime.datetime(2024, 5, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000385', 'SALARIO': Decimal('600.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 380} +{'CODCOLIGADA': 2, 'CHAPA': '004459', 'NOME': 'ALINE SANTOS COSTA', 'CPF': '01034164201', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Coordenador de Logística', 'DATAADMISSAO': datetime.datetime(2020, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000404', 'SALARIO': Decimal('3540.13'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052375', 'NOME': 'ALISON MONTEIRO CUNHA', 'CPF': '05048873270', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6915} +{'CODCOLIGADA': 2, 'CHAPA': '052093', 'NOME': 'ALLAN CRUZ COSTA', 'CPF': '54558000278', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 7, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052627', 'NOME': 'ALLAN DE LIMA CAMARA', 'CPF': '02551724279', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 5, 'CHAPA': '011', 'NOME': 'ALMIR PANTOJA MEIRELES', 'CPF': '55243487287', 'SECAO': 'FINANCEIRO', 'FUNCAO': 'Supervisor financeiro nível VI', 'DATAADMISSAO': datetime.datetime(2024, 5, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.03', 'CODFUNCAO': '000382', 'SALARIO': Decimal('4061.48'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '051818', 'NOME': 'ALVARO DO ESPIRITO SANTO DAS DORES', 'CPF': '46106286272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 1, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1926.49'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5256} +{'CODCOLIGADA': 1, 'CHAPA': '052462', 'NOME': 'ALYSON BRUNO DE MELO SOUSA', 'CPF': '06025794227', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Repositor de mercadorias Nivel VI', 'DATAADMISSAO': datetime.datetime(2025, 4, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000320', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -582} +{'CODCOLIGADA': 2, 'CHAPA': '004476', 'NOME': 'AMADEU JUNIOR BRITO SERRAO', 'CPF': '64038025268', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel III', 'DATAADMISSAO': datetime.datetime(2020, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000056', 'SALARIO': Decimal('2165.24'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052550', 'NOME': 'AMANDA DA SILVA FIALHO', 'CPF': '05000708229', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 7, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 524} +{'CODCOLIGADA': 1, 'CHAPA': '026103', 'NOME': 'ANA BEATRIZ ARAUJO DOS SANTOS', 'CPF': '07145884232', 'SECAO': 'DTI', 'FUNCAO': 'Analista Administrativo Nivel III', 'DATAADMISSAO': datetime.datetime(2021, 2, 3, 0, 0), 'CODSITUACAO': 'E', 'CODSECAO': '006.003.005', 'CODFUNCAO': '000406', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -664} +{'CODCOLIGADA': 1, 'CHAPA': '052220', 'NOME': 'ANA CRISTINA FEIO DE SOUSA', 'CPF': '96469846220', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5893} +{'CODCOLIGADA': 2, 'CHAPA': '052208', 'NOME': 'ANAILSON PEREIRA CORREA', 'CPF': '04168190285', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003916', 'NOME': 'ANDERSON DA SILVA MOREIRA', 'CPF': '03076187228', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 3, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1549} +{'CODCOLIGADA': 2, 'CHAPA': '052619', 'NOME': 'ANDERSON DOS SANTOS RODRIGUES', 'CPF': '03860591282', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '000574', 'NOME': 'ANDERSON JOSE BRASIL FEITOSA FERNANDES', 'CPF': '77725239200', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 11, 24, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1134} +{'CODCOLIGADA': 2, 'CHAPA': '052248', 'NOME': 'ANDERSON LUIS COSTA RODRIGUES', 'CPF': '68994958215', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '003816', 'NOME': 'ANDERSON SILVA DA SILVA', 'CPF': '06395303201', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 4, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -550} +{'CODCOLIGADA': 5, 'CHAPA': '018', 'NOME': 'ANDRE BARROSO DA COSTA', 'CPF': '63561450210', 'SECAO': 'DTI', 'FUNCAO': 'Gerente de TI', 'DATAADMISSAO': datetime.datetime(2024, 12, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.02', 'CODFUNCAO': '000344', 'SALARIO': Decimal('10000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '003443', 'NOME': 'ANDRE DA SILVA BARBOSA', 'CPF': '74167570297', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2017, 11, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 869} +{'CODCOLIGADA': 1, 'CHAPA': '051635', 'NOME': 'ANDRE FONSECA DOS SANTOS', 'CPF': '68801785291', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 5, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3922} +{'CODCOLIGADA': 2, 'CHAPA': '051718', 'NOME': 'ANDRE ROGERIO DE OLIVEIRA FARIAS', 'CPF': '60273003291', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2023, 9, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003345', 'NOME': 'ANDRECI SOARES SOARES', 'CPF': '94367787249', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 1, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 13484} +{'CODCOLIGADA': 2, 'CHAPA': '051884', 'NOME': 'ANDREI BRITO REIS', 'CPF': '03404114221', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Analista de logistica Nivel III', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000254', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4782} +{'CODCOLIGADA': 1, 'CHAPA': '052173', 'NOME': 'ANDREIA ALVES CARDOSO', 'CPF': '74293052291', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 9, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9973} +{'CODCOLIGADA': 1, 'CHAPA': '003347', 'NOME': 'ANDREIA FIALHO NASCIMENTO', 'CPF': '01031771247', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Gerente de Loja', 'DATAADMISSAO': datetime.datetime(2019, 6, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000208', 'SALARIO': Decimal('3729.18'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044906', 'NOME': 'ANDREW COSTA MONTEIRO', 'CPF': '05856834259', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Analista de logistica Nivel III', 'DATAADMISSAO': datetime.datetime(2021, 11, 18, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000254', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051857', 'NOME': 'ANDREY BRITO MELO', 'CPF': '00756712203', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 3, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6052} +{'CODCOLIGADA': 2, 'CHAPA': '052487', 'NOME': 'ANDREY EDMUNDO DE SOUSA FERREIRA', 'CPF': '01877122203', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 2, 'CHAPA': '052286', 'NOME': 'ANDREY YAGO FERREIRA RODRIGUES', 'CPF': '00723982210', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051646', 'NOME': 'ANGELA DE LEMOS LIMA RODRIGUES', 'CPF': '04529436209', 'SECAO': 'FINANCEIRO', 'FUNCAO': 'Supervisor Financeiro Nivel V', 'DATAADMISSAO': datetime.datetime(2023, 5, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.006', 'CODFUNCAO': '000398', 'SALARIO': Decimal('3692.25'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2809} +{'CODCOLIGADA': 1, 'CHAPA': '052483', 'NOME': 'ANGELO MARCIO DE LIMA MARTINS', 'CPF': '60213612291', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 7105} +{'CODCOLIGADA': 3, 'CHAPA': '051811', 'NOME': 'ANNY CAROLYNI SANTOS DA SILVA', 'CPF': '04046377283', 'SECAO': 'CONTABILIDADE', 'FUNCAO': 'Assistente Administrativo I', 'DATAADMISSAO': datetime.datetime(2023, 12, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000370', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2353} +{'CODCOLIGADA': 2, 'CHAPA': '052331', 'NOME': 'ANTONIEL HADAD BRAGA', 'CPF': '01099681235', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044130', 'NOME': 'ANTONIO CARLOS DA COSTA MONTEIRO', 'CPF': '81126549215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2021, 2, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052310', 'NOME': 'ANTONIO CARLOS DE MENDONCA NETO', 'CPF': '03127359284', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 464} +{'CODCOLIGADA': 1, 'CHAPA': '051935', 'NOME': 'ANTONIO CARLOS DE SOUSA FERREIRA', 'CPF': '77774310215', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11089} +{'CODCOLIGADA': 1, 'CHAPA': '005732', 'NOME': 'ANTONIO DEIVISON AZEVEDO LAMEIRA', 'CPF': '02334922242', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2022, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 392} +{'CODCOLIGADA': 1, 'CHAPA': '052574', 'NOME': 'ANTONIO NELSON PENICHE FERREIRA', 'CPF': '08967437218', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 8, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 7} +{'CODCOLIGADA': 1, 'CHAPA': '052593', 'NOME': 'ANTONIO PAULO SOARES DE BRITO', 'CPF': '08613291988', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 10, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 104} +{'CODCOLIGADA': 1, 'CHAPA': '003458', 'NOME': 'ARLIELSON VIANA FERREIRA', 'CPF': '02141928222', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2021, 10, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 170} +{'CODCOLIGADA': 1, 'CHAPA': '051682', 'NOME': 'ARNALDO GARCIA FERREIRA', 'CPF': '29599628268', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 8, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 220} +{'CODCOLIGADA': 1, 'CHAPA': '003917', 'NOME': 'AROLDO JUNIOR REIS PAIVA', 'CPF': '01762824248', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 3, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5314} +{'CODCOLIGADA': 2, 'CHAPA': '051722', 'NOME': 'ARTHUR CESAR TORRES', 'CPF': '01704225264', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2023, 9, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9818} +{'CODCOLIGADA': 1, 'CHAPA': '052373', 'NOME': 'ARTHUR DA COSTA ALVES', 'CPF': '06022463262', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 817} +{'CODCOLIGADA': 1, 'CHAPA': '052277', 'NOME': 'ARTHUR LOARNES RODRIGUES DA SILVA', 'CPF': '06038690255', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Auxiliar de estoque Nivel V', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000321', 'SALARIO': Decimal('1851.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 76} +{'CODCOLIGADA': 3, 'CHAPA': '052029', 'NOME': 'ARTHUR PINHEIRO DOS SANTOS', 'CPF': '00497356244', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2024, 6, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.010', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2292} +{'CODCOLIGADA': 2, 'CHAPA': '052198', 'NOME': 'ARTUR SILVA MATOS', 'CPF': '02775960251', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -323} +{'CODCOLIGADA': 1, 'CHAPA': '052165', 'NOME': 'AUGUSTO CEZAR CHERMONT BENTES', 'CPF': '04178885200', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2523} +{'CODCOLIGADA': 2, 'CHAPA': '051594', 'NOME': 'BEATRIZ ALBUQUERQUE SOARES', 'CPF': '02262425280', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Supervisor de logística Nivel II', 'DATAADMISSAO': datetime.datetime(2023, 3, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000261', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052298', 'NOME': 'BEATRIZ HELENA SOARES SOUZA', 'CPF': '01554937280', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Coordenador de Transporte', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000414', 'SALARIO': Decimal('4245.40'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -880} +{'CODCOLIGADA': 2, 'CHAPA': '051796', 'NOME': 'BEGNO DOS SANTOS GONCALVES', 'CPF': '95490086220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051676', 'NOME': 'BENEDITO LOPES MAIA', 'CPF': '01982292245', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 7, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052601', 'NOME': 'BENTO DO ESPIRITO SANTO PINHEIRO DOS SANTOS', 'CPF': '29926181287', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 10, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2694} +{'CODCOLIGADA': 2, 'CHAPA': '044149', 'NOME': 'BERNARD ROGER CABRAL MENDES', 'CPF': '06944386267', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2021, 5, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052199', 'NOME': 'BRAYAM ESPIRITO SANTO DOS SANTOS', 'CPF': '07659961209', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052460', 'NOME': 'BRENDA RABELO XIMENDES', 'CPF': '02211605230', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2025, 4, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '052477', 'NOME': 'BRENDO FAVACHO PINTO', 'CPF': '70173008232', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -51} +{'CODCOLIGADA': 2, 'CHAPA': '051555', 'NOME': 'BRENO FERNANDO PINHEIRO DE DEUS', 'CPF': '05391353211', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2023, 1, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052205', 'NOME': 'BRENO JOSE LIMA DE OLIVEIRA', 'CPF': '96748320259', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051496', 'NOME': 'BRENO RIBEIRO DA SILVA', 'CPF': '03636407201', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2022, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2759} +{'CODCOLIGADA': 1, 'CHAPA': '003411', 'NOME': 'BRUNA RAFAELA MACHADO LOPES', 'CPF': '98696211200', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Supervisor Administrativo nível I', 'DATAADMISSAO': datetime.datetime(2018, 5, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 25386} +{'CODCOLIGADA': 2, 'CHAPA': '051784', 'NOME': 'BRUNELLE BENILDA GAMA COSTA', 'CPF': '04525597232', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 11, 6, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 2, 'CHAPA': '052491', 'NOME': 'BRUNO GABRIEL PINTO CORREA', 'CPF': '04694487256', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente Administrativo I', 'DATAADMISSAO': datetime.datetime(2025, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000370', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -167} +{'CODCOLIGADA': 1, 'CHAPA': '052148', 'NOME': 'BRUNO LEONARDO BARBOSA BARRAL', 'CPF': '04229826281', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2024, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1470} +{'CODCOLIGADA': 1, 'CHAPA': '051583', 'NOME': 'BRUNO PIRES DA CONCEICAO', 'CPF': '96180986215', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 3, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1647} +{'CODCOLIGADA': 2, 'CHAPA': '051716', 'NOME': 'CAIO ANDRADE DOS SANTOS', 'CPF': '07059807233', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 9, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -3960} +{'CODCOLIGADA': 1, 'CHAPA': '052168', 'NOME': 'CAIO FERREIRA TORRES', 'CPF': '03678927238', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2412} +{'CODCOLIGADA': 2, 'CHAPA': '052230', 'NOME': 'CAIO HENRIQUE MACHADO DE SOUSA', 'CPF': '07684191233', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 5, 'CHAPA': '022', 'NOME': 'CARLA ADRIANA DE ANDRADE BATISTA', 'CPF': '32791801200', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras V', 'DATAADMISSAO': datetime.datetime(2024, 12, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.04', 'CODFUNCAO': '000293', 'SALARIO': Decimal('5000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '036124', 'NOME': 'CARLA BIANCA RODRIGUES FERREIRA', 'CPF': '05334206280', 'SECAO': 'FINANCEIRO', 'FUNCAO': 'Analista Financeiro Nivel III', 'DATAADMISSAO': datetime.datetime(2020, 8, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.001', 'CODFUNCAO': '000368', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2263} +{'CODCOLIGADA': 3, 'CHAPA': '052535', 'NOME': 'CARLA MARIA BEZERRA DE LIMA', 'CPF': '02641567229', 'SECAO': 'DTI', 'FUNCAO': 'Analista de T.I.', 'DATAADMISSAO': datetime.datetime(2025, 6, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.014', 'CODFUNCAO': '000130', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '003618', 'NOME': 'CARLINDO MONTEIRO BARBOSA', 'CPF': '70257368213', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Supervisor de Estoque Nivel II', 'DATAADMISSAO': datetime.datetime(2017, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000168', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051826', 'NOME': 'CARLOS ALBERTO ALVES BEZERRA', 'CPF': '26043130220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 1, 8, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051765', 'NOME': 'CARLOS ANDRE MONTEIRO FREITAS', 'CPF': '02110115254', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 10, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052445', 'NOME': 'CARLOS ARTHUR MORAES FONSECA', 'CPF': '03588147233', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 3, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1387} +{'CODCOLIGADA': 1, 'CHAPA': '000573', 'NOME': 'CARLOS AUGUSTO DE ARAUJO LIMA', 'CPF': '25436716253', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 11, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6407} +{'CODCOLIGADA': 1, 'CHAPA': '052536', 'NOME': 'CARLOS BENEDITO FONSECA DE LIMA', 'CPF': '48738298287', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 6, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2756} +{'CODCOLIGADA': 1, 'CHAPA': '052541', 'NOME': 'CARLOS EDUARDO DOS SANTOS DE OLIVEIRA', 'CPF': '06521825267', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 7, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 19} +{'CODCOLIGADA': 1, 'CHAPA': '051602', 'NOME': 'CARLOS JOSE DE ALMEIDA ARRUDA', 'CPF': '03822073270', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 3, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.004', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -9617} +{'CODCOLIGADA': 1, 'CHAPA': '052166', 'NOME': 'CARLOS VICTOR TORRES AYRES', 'CPF': '05784588290', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5424} +{'CODCOLIGADA': 2, 'CHAPA': '051900', 'NOME': 'CAROLINA SOUSA PINHEIRO', 'CPF': '03436164240', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051686', 'NOME': 'CASSIO WESLEN DA SILVA', 'CPF': '06098165270', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 8, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2032} +{'CODCOLIGADA': 1, 'CHAPA': '052540', 'NOME': 'CAUA FRANCO GOMES', 'CPF': '07825756258', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 6, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1052} +{'CODCOLIGADA': 1, 'CHAPA': '026106', 'NOME': 'CECILIA MARIA LISBOA SAMPAIO', 'CPF': '04292240280', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2021, 3, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10360} +{'CODCOLIGADA': 3, 'CHAPA': '052364', 'NOME': 'CHARLES BASTOS BRASIL', 'CPF': '63063042234', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 1, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1208} +{'CODCOLIGADA': 5, 'CHAPA': '014', 'NOME': 'CICERO NAIDEL FERREIRA DE CARVALHO', 'CPF': '03650633396', 'SECAO': 'COMERCIAL', 'FUNCAO': 'Gerente Comercial', 'DATAADMISSAO': datetime.datetime(2024, 6, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.06', 'CODFUNCAO': '000329', 'SALARIO': Decimal('18573.63'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '051924', 'NOME': 'CIRINEU CORREA SOUSA', 'CPF': '08014015266', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003432', 'NOME': 'CLARISSE DE MELO CARDOSO NUNES', 'CPF': '75211939204', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2017, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5661} +{'CODCOLIGADA': 2, 'CHAPA': '004442', 'NOME': 'CLAUDECIR LIMA SALES', 'CPF': '02858106266', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2019, 11, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003372', 'NOME': 'CLAUDENOR COSTA RAIOL', 'CPF': '00856933244', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 5, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 20218} +{'CODCOLIGADA': 1, 'CHAPA': '051478', 'NOME': 'CLAUDIA DAYANE SOUSA RIBEIRO', 'CPF': '70055765270', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2022, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3706} +{'CODCOLIGADA': 2, 'CHAPA': '052432', 'NOME': 'CLAUDIA REGINA MARTINS AZEVEDO', 'CPF': '61157333249', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 2, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000165', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '000002', 'NOME': 'CLAUDIO DE ANDRADE BATISTA', 'CPF': '81496052234', 'SECAO': 'DIRETORIA', 'FUNCAO': 'Socio Administrador', 'DATAADMISSAO': datetime.datetime(2017, 9, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.009', 'CODFUNCAO': '000020', 'SALARIO': Decimal('10000.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052575', 'NOME': 'CLAUDIO RONALDO MARREIROS PINTO', 'CPF': '66961530206', 'SECAO': 'DIRETORIA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 8, 28, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.009', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '000513', 'NOME': 'CLAYTON CARDOSO DOMINGUES', 'CPF': '78835470200', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2021, 7, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 17700} +{'CODCOLIGADA': 2, 'CHAPA': '044138', 'NOME': 'CLEIDSON DA COSTA DOS SANTOS', 'CPF': '63973740259', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2021, 4, 27, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 177} +{'CODCOLIGADA': 2, 'CHAPA': '052409', 'NOME': 'CLEITON MAUES DOS SANTOS', 'CPF': '78739519287', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '004468', 'NOME': 'CLEMENTE ANTONIO CARMO DA COSTA', 'CPF': '80858589249', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2020, 7, 1, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.001', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051746', 'NOME': 'CLEYTON CLEBER LIMA DE SOUZA', 'CPF': '75886332200', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motoboy', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000032', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052309', 'NOME': 'CLOVIS FERREIRA DA SILVA', 'CPF': '75331551220', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052584', 'NOME': 'CRISTHIAN LORRAN SARAIVA DE LIMA', 'CPF': '06541856206', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -3349} +{'CODCOLIGADA': 2, 'CHAPA': '051747', 'NOME': 'CRISTIANO CEZAR PINHEIRO GONZALEZ', 'CPF': '02051952299', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051663', 'NOME': 'CRISTIANO LAZARO GAMA TEIXEIRA', 'CPF': '45141207234', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 6, 12, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2415} +{'CODCOLIGADA': 2, 'CHAPA': '052130', 'NOME': 'CRISTIANO SILVA DE SOUZA', 'CPF': '00437521281', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 8, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051689', 'NOME': 'DAIANE DE ALMEIDA DAMASCENO DE SOUSA', 'CPF': '02834659214', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2023, 8, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1741} +{'CODCOLIGADA': 2, 'CHAPA': '052034', 'NOME': 'DANIEL DA SILVA', 'CPF': '02407986270', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 6, 28, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051713', 'NOME': 'DANIEL DO NASCIMENTO PANTOJA', 'CPF': '03923484208', 'SECAO': 'MARKETING', 'FUNCAO': 'Gerente de Marketing Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 9, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000427', 'SALARIO': Decimal('6998.73'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 951} +{'CODCOLIGADA': 2, 'CHAPA': '052570', 'NOME': 'DANIEL FERREIRA ALVES', 'CPF': '01242864296', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 8, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052622', 'NOME': 'DANIEL PORTELA SOARES DA SILVA', 'CPF': '95050965268', 'SECAO': 'MARKETING', 'FUNCAO': 'Supervisor de Marketing Nivel VII', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000428', 'SALARIO': Decimal('4467.63'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -480} +{'CODCOLIGADA': 1, 'CHAPA': '052610', 'NOME': 'DANIEL YAN MELO DA SILVA', 'CPF': '02848963220', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3526} +{'CODCOLIGADA': 1, 'CHAPA': '003933', 'NOME': 'DANIELLE FERNANDA LIMA NOGUEIRA', 'CPF': '74838334249', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 10, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 13102} +{'CODCOLIGADA': 2, 'CHAPA': '052346', 'NOME': 'DANILO DA CONCEICAO CARDOSO', 'CPF': '06330526206', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 12, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '005719', 'NOME': 'DANILO PEREIRA MODESTO', 'CPF': '01967065217', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de loja Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 12, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.004', 'CODFUNCAO': '000318', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2455} +{'CODCOLIGADA': 1, 'CHAPA': '003451', 'NOME': 'DARLENE SANTOS SILVA', 'CPF': '80429742215', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Supervisor Administrativo nível I', 'DATAADMISSAO': datetime.datetime(2021, 5, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 36420} +{'CODCOLIGADA': 2, 'CHAPA': '052136', 'NOME': 'DAVI DA SILVA GOMES', 'CPF': '03416905202', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2024, 8, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051741', 'NOME': 'DAVID CHAVES DE ABREU', 'CPF': '02305282281', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2023, 9, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4697} +{'CODCOLIGADA': 3, 'CHAPA': '051800', 'NOME': 'DAYANARA RAISSA MONTEIRO PEGADO', 'CPF': '01326200224', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 20462} +{'CODCOLIGADA': 1, 'CHAPA': '003655', 'NOME': 'DAYVID HENRIQUE NUNES MEDEIROS', 'CPF': '77886216253', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Encarregado de Estoque Nivel IV', 'DATAADMISSAO': datetime.datetime(2017, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000309', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 18723} +{'CODCOLIGADA': 2, 'CHAPA': '052317', 'NOME': 'DEJACI BRITO DA SILVA', 'CPF': '01736745263', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051651', 'NOME': 'DELIO DE ANDRADE BATISTA', 'CPF': '90884396215', 'SECAO': 'DIRETORIA', 'FUNCAO': 'Socio Administrador', 'DATAADMISSAO': datetime.datetime(2023, 5, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.013', 'CODFUNCAO': '000020', 'SALARIO': Decimal('8000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '052284', 'NOME': 'DELSON SANTANA DO AMARAL', 'CPF': '85171255253', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 911} +{'CODCOLIGADA': 1, 'CHAPA': '005713', 'NOME': 'DENILSE DE OLIVEIRA TRINDADE', 'CPF': '06806388221', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2021, 11, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3002} +{'CODCOLIGADA': 1, 'CHAPA': '051572', 'NOME': 'DENILSON FERREIRA DE SOUZA', 'CPF': '46243631249', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 2, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1722} +{'CODCOLIGADA': 3, 'CHAPA': '051869', 'NOME': 'DENISE FERNANDA GUIMARAES FERNANDES', 'CPF': '00493768297', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Supervisor de logística Nivel II', 'DATAADMISSAO': datetime.datetime(2024, 4, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.017', 'CODFUNCAO': '000261', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003919', 'NOME': 'DENISE MAUES MACEDO', 'CPF': '94521212204', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2020, 3, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051936', 'NOME': 'DENIZE DO REMEDIO FERREIRA CAVALCANTE', 'CPF': '85768456287', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 12801} +{'CODCOLIGADA': 2, 'CHAPA': '051917', 'NOME': 'DENNIS JUNIOR RODRIGUES FARO', 'CPF': '55079261234', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051830', 'NOME': 'DERICK DAVISON CORREA DE ARAUJO', 'CPF': '92777457204', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 1, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 838} +{'CODCOLIGADA': 2, 'CHAPA': '044928', 'NOME': 'DIEGO CASTRO PINHEIRO', 'CPF': '93467346200', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2022, 2, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '036165', 'NOME': 'DIEGO FELIPE DA SILVA MOURA', 'CPF': '92569366234', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 5, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9342} +{'CODCOLIGADA': 3, 'CHAPA': '051804', 'NOME': 'DIEGO YAN OLIVEIRA DE LIMA', 'CPF': '06855322247', 'SECAO': 'LOJA 1 OPERACIONAL ', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 12, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.019', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6290} +{'CODCOLIGADA': 2, 'CHAPA': '051590', 'NOME': 'DIOGO JOSE SILVA DE ARAUJO', 'CPF': '06049840229', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 3, 8, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051814', 'NOME': 'DJALMA LUCIO MACIEL DE CASTRO', 'CPF': '83909893287', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051851', 'NOME': 'DOUGLAS ALVES NASCIMENTO', 'CPF': '03006119274', 'SECAO': 'CONTABILIDADE', 'FUNCAO': 'Assistente Administrativo I', 'DATAADMISSAO': datetime.datetime(2024, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000370', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -884} +{'CODCOLIGADA': 1, 'CHAPA': '052059', 'NOME': 'DOUGLAS CHRISTIANO FARIAS SANTOS', 'CPF': '01761691210', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 9, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1851.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1815} +{'CODCOLIGADA': 1, 'CHAPA': '051806', 'NOME': 'DOUGLAS LIMA DO NASCIMENTO', 'CPF': '02948827230', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Supervisor de Estoque Nivel II', 'DATAADMISSAO': datetime.datetime(2023, 12, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000168', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -480} +{'CODCOLIGADA': 5, 'CHAPA': '031', 'NOME': 'EDCACIO BRUNO TEIXEIRA DAS NEVES', 'CPF': '03310171213', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Encarregado de Logistica Nivel III', 'DATAADMISSAO': datetime.datetime(2025, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.08', 'CODFUNCAO': '000424', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '051887', 'NOME': 'EDENILSON BRAGANCA LEAL RODRIGUES', 'CPF': '55755895287', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051469', 'NOME': 'EDICIRENE BARBOSA TAVARES', 'CPF': '42791880259', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 8, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1740} +{'CODCOLIGADA': 1, 'CHAPA': '003674', 'NOME': 'EDICLEI MACIEL MORAES', 'CPF': '00577864297', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Embalador', 'DATAADMISSAO': datetime.datetime(2018, 10, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000075', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2364} +{'CODCOLIGADA': 1, 'CHAPA': '051822', 'NOME': 'EDIEL DE SOUZA SOARES', 'CPF': '69232555204', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 798} +{'CODCOLIGADA': 1, 'CHAPA': '052041', 'NOME': 'EDIL DE JESUS CARDOSO', 'CPF': '00461875292', 'SECAO': 'LOJA 9 LOGISTICA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 7, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1851.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '003832', 'NOME': 'EDILTON FONSECA DA SILVA', 'CPF': '25132962220', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 7, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2805} +{'CODCOLIGADA': 1, 'CHAPA': '052042', 'NOME': 'EDINALDO LIMA DO AMARAL', 'CPF': '04018026200', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 7, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1851.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 329} +{'CODCOLIGADA': 2, 'CHAPA': '044142', 'NOME': 'EDIRLEI DA SILVA NEGRAO', 'CPF': '93313063268', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2021, 5, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051910', 'NOME': 'EDIVALDO DA SILVA NEGRAO', 'CPF': '60856181234', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '003846', 'NOME': 'EDMILSON SILVA DE SOUZA', 'CPF': '29984556204', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 11, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4257} +{'CODCOLIGADA': 2, 'CHAPA': '052206', 'NOME': 'EDMILSON SOUSA REIS', 'CPF': '71241787204', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051484', 'NOME': 'EDNETH MELO OLIVEIRA', 'CPF': '73029653234', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras IV', 'DATAADMISSAO': datetime.datetime(2022, 9, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.006', 'CODFUNCAO': '000424', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -146} +{'CODCOLIGADA': 2, 'CHAPA': '004499', 'NOME': 'EDUARDO CLEITON SILVA SANTOS', 'CPF': '83184341291', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2020, 11, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2788} +{'CODCOLIGADA': 1, 'CHAPA': '000265', 'NOME': 'EDUARDO LEONI SANTOS DA GAMA', 'CPF': '01899875298', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Supervisor de Estoque Nivel II', 'DATAADMISSAO': datetime.datetime(2017, 11, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000168', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 39069} +{'CODCOLIGADA': 2, 'CHAPA': '052521', 'NOME': 'EDUARDO SA PEREIRA', 'CPF': '03408591210', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003421', 'NOME': 'ELBER JUNIOR LISBOA TEIXEIRA', 'CPF': '91834660297', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 6, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1882} +{'CODCOLIGADA': 2, 'CHAPA': '051516', 'NOME': 'ELDELITO DIAS BATISTA', 'CPF': '24577464268', 'SECAO': 'DIRETORIA', 'FUNCAO': 'Socio Administrador', 'DATAADMISSAO': datetime.datetime(2018, 12, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.009', 'CODFUNCAO': '000020', 'SALARIO': Decimal('8000.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052004', 'NOME': 'ELIANE CRISTINA VIEIRA DA CRUZ', 'CPF': '63400375268', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 6, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051476', 'NOME': 'ELIANE LOPES MAIA', 'CPF': '98458078287', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2022, 8, 16, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10215} +{'CODCOLIGADA': 3, 'CHAPA': '052503', 'NOME': 'ELIAS CARVALHO DA COSTA', 'CPF': '03456086237', 'SECAO': 'MARKETING', 'FUNCAO': 'Analista de Marketing Nivel III', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000332', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1016} +{'CODCOLIGADA': 2, 'CHAPA': '052360', 'NOME': 'ELIAS VITOR BARROS FREITAS', 'CPF': '07517413295', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Operador de Empilhadeira Nivel III', 'DATAADMISSAO': datetime.datetime(2025, 1, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000056', 'SALARIO': Decimal('2165.24'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051749', 'NOME': 'ELIENAI PALHETA RIBEIRO', 'CPF': '00774466235', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051859', 'NOME': 'ELISANGELA NAZARE AZEVEDO DA SILVA', 'CPF': '64206041253', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2024, 3, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 13310} +{'CODCOLIGADA': 3, 'CHAPA': '051853', 'NOME': 'ELISANGELA SILVA DE BRITO', 'CPF': '59924845234', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Coordenador(a) de Gente e Gestão', 'DATAADMISSAO': datetime.datetime(2024, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000422', 'SALARIO': Decimal('4067.48'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '052177', 'NOME': 'ELISEU TEIXEIRA DE ASSIS', 'CPF': '83816917291', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 9, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9394} +{'CODCOLIGADA': 2, 'CHAPA': '052638', 'NOME': 'ELISIVALDO ROCHA DOS SANTOS', 'CPF': '03468969244', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 2, 5, 0, 0), 'CODSITUACAO': 'Z', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052406', 'NOME': 'ELISSON RODRIGO SILVA GONCALVES', 'CPF': '01182319289', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003669', 'NOME': 'ELIVONE MARIA GOMES VIEIRA', 'CPF': '32721919253', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2018, 6, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2199} +{'CODCOLIGADA': 1, 'CHAPA': '052560', 'NOME': 'ELIZA CRISTINE MACIEL ALHO', 'CPF': '04588532243', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2025, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '007.001.002', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3440} +{'CODCOLIGADA': 1, 'CHAPA': '052187', 'NOME': 'ELIZANDRA FIGUEIRO CARDOSO', 'CPF': '01345487282', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6581} +{'CODCOLIGADA': 1, 'CHAPA': '052258', 'NOME': 'ELOM SILVA LOUREIRO', 'CPF': '86302930200', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 7059} +{'CODCOLIGADA': 1, 'CHAPA': '036140', 'NOME': 'ELZIRENE DO CARMO MARTINS AGRA FARIAS', 'CPF': '41409221253', 'SECAO': 'DIRETORIA', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2020, 3, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.009', 'CODFUNCAO': '000165', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 237} +{'CODCOLIGADA': 1, 'CHAPA': '052605', 'NOME': 'EMERSON COSTA VIEIRA', 'CPF': '06351142245', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1712} +{'CODCOLIGADA': 1, 'CHAPA': '051639', 'NOME': 'EMERSON MENDES DA LUZ', 'CPF': '45088831846', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 5, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 18790} +{'CODCOLIGADA': 2, 'CHAPA': '052155', 'NOME': 'EMIDIO RAIMUNDO PAMPLONA BANDEIRA', 'CPF': '88434176220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044878', 'NOME': 'ENDEON NIK SOARES D ALMEIDA', 'CPF': '54491940215', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2021, 8, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1116} +{'CODCOLIGADA': 2, 'CHAPA': '052289', 'NOME': 'ERIC PRIMO DA SILVA', 'CPF': '05256015206', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052583', 'NOME': 'ERICK BENICIO DA SILVA', 'CPF': '07861317218', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '003834', 'NOME': 'ERICK FABRICIO NASCIMENTO NOGUEIRA DE SOUZA', 'CPF': '01834727219', 'SECAO': 'COMERCIAL', 'FUNCAO': 'ANALISTA ADMINISTRATIVO NIVEL I', 'DATAADMISSAO': datetime.datetime(2022, 7, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.018', 'CODFUNCAO': '000429', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5832} +{'CODCOLIGADA': 1, 'CHAPA': '052461', 'NOME': 'ERICK SANTOS LEITE', 'CPF': '03676700201', 'SECAO': 'LOJA 10 LOGISTICA ', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 4, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -603} +{'CODCOLIGADA': 2, 'CHAPA': '051669', 'NOME': 'ERICO RODRIGO DO ROSARIO ARIAS', 'CPF': '01393046223', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 7, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003627', 'NOME': 'ERIKA PRISCILA CARDOSO AMARAL', 'CPF': '98097156253', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2017, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000163', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4320} +{'CODCOLIGADA': 2, 'CHAPA': '051544', 'NOME': 'EUDES ALMEIDA PEREIRA', 'CPF': '77426843220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 1, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '005712', 'NOME': 'EURINEIA MANOS VIEIRA', 'CPF': '57588546204', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Supervisor Administrativo nível I', 'DATAADMISSAO': datetime.datetime(2021, 11, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 23788} +{'CODCOLIGADA': 2, 'CHAPA': '052217', 'NOME': 'EVALDO ADRIEL SOUSA LOPES', 'CPF': '04245969202', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051890', 'NOME': 'EVANDRO SOUZA DA SILVA', 'CPF': '04783527270', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '036154', 'NOME': 'EVERALDO BATISTA JAIME', 'CPF': '70301440239', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 10, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6367} +{'CODCOLIGADA': 1, 'CHAPA': '003466', 'NOME': 'EVERALDO ROBERTO PEREIRA DOS SANTOS', 'CPF': '14563576204', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 5, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6544} +{'CODCOLIGADA': 1, 'CHAPA': '036158', 'NOME': 'EVERSON SANTOS DA COSTA', 'CPF': '02084381223', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 2, 26, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9915} +{'CODCOLIGADA': 2, 'CHAPA': '052207', 'NOME': 'EVERTON ANAISSE DE SOUZA', 'CPF': '95831908291', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052571', 'NOME': 'EVERTON PATRICK MARTINS DA COSTA', 'CPF': '04545946232', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 8, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052482', 'NOME': 'EWERSON ALVES SIQUEIRA', 'CPF': '05531668244', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 4, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 205} +{'CODCOLIGADA': 2, 'CHAPA': '004462', 'NOME': 'EWERTON ACACIO DE SOUZA', 'CPF': '70223327204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2020, 7, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052449', 'NOME': 'FABIANO SILVA DOS SANTOS', 'CPF': '02472105282', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 3, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -4947} +{'CODCOLIGADA': 3, 'CHAPA': '052154', 'NOME': 'FABIO DA CONCEICAO MARINHO', 'CPF': '02433442281', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 14920} +{'CODCOLIGADA': 1, 'CHAPA': '003927', 'NOME': 'FABIO DA COSTA FERREIRA', 'CPF': '01853906255', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 7, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6374} +{'CODCOLIGADA': 2, 'CHAPA': '052562', 'NOME': 'FABIO JUNIOR CAMPOS MACHADO', 'CPF': '04946763295', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051963', 'NOME': 'FABIO JUNIOR RODRIGUES DOS SANTOS', 'CPF': '54422957287', 'SECAO': 'LOJA 10 LOGISTICA ', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -903} +{'CODCOLIGADA': 1, 'CHAPA': '005729', 'NOME': 'FABIO LIMA SILVA', 'CPF': '74343610268', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Repositor de mercadorias Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 12, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000320', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1313} +{'CODCOLIGADA': 1, 'CHAPA': '003454', 'NOME': 'FABIO LUIZ LEAL SALDANHA', 'CPF': '68705972272', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 8, 5, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 76} +{'CODCOLIGADA': 2, 'CHAPA': '051820', 'NOME': 'FABRICIO JOSE PEREIRA FALCAO', 'CPF': '91714524272', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051504', 'NOME': 'FABRICIO JUNIOR CORREA SANTA ROSA', 'CPF': '01617228222', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2022, 10, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -259} +{'CODCOLIGADA': 2, 'CHAPA': '044998', 'NOME': 'FABRICIO MONTEIRO DE ALMEIDA', 'CPF': '59825596287', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 10, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2198} +{'CODCOLIGADA': 2, 'CHAPA': '052389', 'NOME': 'FABRICIO RODRIGUES LOUZEIRO', 'CPF': '88276414249', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1760} +{'CODCOLIGADA': 3, 'CHAPA': '052602', 'NOME': 'FELIPE ARAUJO CAMELO', 'CPF': '54605199268', 'SECAO': 'DTI', 'FUNCAO': 'Analista de T.I.', 'DATAADMISSAO': datetime.datetime(2025, 10, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.014', 'CODFUNCAO': '000130', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 5, 'CHAPA': '006', 'NOME': 'FELIPE DE ANDRADE BATISTA', 'CPF': '90884434249', 'SECAO': 'DTI', 'FUNCAO': 'Gerente de Projetos', 'DATAADMISSAO': datetime.datetime(2023, 5, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.02', 'CODFUNCAO': '000340', 'SALARIO': Decimal('10000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 3, 'CHAPA': '051975', 'NOME': 'FELIPE MACEDO DINIZ', 'CPF': '03875486293', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 6, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 19351} +{'CODCOLIGADA': 2, 'CHAPA': '052308', 'NOME': 'FELIPE MONTEIRO DA SILVA', 'CPF': '84204796249', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '026126', 'NOME': 'FERNANDA CLARA FERNANDO COELHO', 'CPF': '02685790241', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2022, 1, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '007.001.002', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1218} +{'CODCOLIGADA': 2, 'CHAPA': '052338', 'NOME': 'FERNANDO ALVES DAS MERCES', 'CPF': '45070555200', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044944', 'NOME': 'FERNANDO ANDRADE DA SILVA', 'CPF': '76184960210', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel III', 'DATAADMISSAO': datetime.datetime(2022, 4, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000056', 'SALARIO': Decimal('2165.24'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052615', 'NOME': 'FERNANDO SANTOS DA COSTA', 'CPF': '02957765284', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -117} +{'CODCOLIGADA': 2, 'CHAPA': '052330', 'NOME': 'FLAVIO HENRIQUE REIS DA COSTA', 'CPF': '06506497297', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051653', 'NOME': 'FLAVIO MORAES MARQUES', 'CPF': '03224011270', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 6, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -6836} +{'CODCOLIGADA': 1, 'CHAPA': '026135', 'NOME': 'FRANCILENE MIRANDA CALDAS', 'CPF': '70390983268', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2022, 6, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '007.001.002', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 13223} +{'CODCOLIGADA': 2, 'CHAPA': '052263', 'NOME': 'FRANCISCO DE ASSIS VIEIRA SOUZA', 'CPF': '25260391349', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051758', 'NOME': 'FRANCISCO DE MELO COSTA', 'CPF': '94621640291', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003949', 'NOME': 'FRANCISCO DOS SANTOS FEITOSA', 'CPF': '01987600274', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 10, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 253} +{'CODCOLIGADA': 2, 'CHAPA': '051888', 'NOME': 'FRANCISCO NATALINO BEZERRA SANTOS', 'CPF': '84799099353', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '036144', 'NOME': 'FRANCIVALDO LIMA NOBRE', 'CPF': '97942634272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 3, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2464} +{'CODCOLIGADA': 1, 'CHAPA': '051655', 'NOME': 'FRANK NELSON BOA MORTE', 'CPF': '20562780220', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 6, 5, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 852} +{'CODCOLIGADA': 1, 'CHAPA': '052378', 'NOME': 'FRANSUELEN MONTEIRO DA SILVA', 'CPF': '01538988283', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1668} +{'CODCOLIGADA': 1, 'CHAPA': '026132', 'NOME': 'FREDSON CRISTIAN VASCONCELOS SANTOS', 'CPF': '65160118268', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2022, 5, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5625} +{'CODCOLIGADA': 1, 'CHAPA': '052630', 'NOME': 'GABRIEL DA COSTA BATISTA', 'CPF': '02206867265', 'SECAO': 'DTI', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2026, 1, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.005', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052351', 'NOME': 'GABRIEL DE JESUS FIEL', 'CPF': '05269287277', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -264} +{'CODCOLIGADA': 3, 'CHAPA': '052492', 'NOME': 'GABRIEL FARIAS DA PAIXAO', 'CPF': '06195926213', 'SECAO': 'DTI', 'FUNCAO': 'Analista de T.I.', 'DATAADMISSAO': datetime.datetime(2025, 5, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.014', 'CODFUNCAO': '000130', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -480} +{'CODCOLIGADA': 1, 'CHAPA': '052341', 'NOME': 'GABRIEL FONTEL DA SILVA', 'CPF': '08234017233', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2024, 12, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1750.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -7560} +{'CODCOLIGADA': 3, 'CHAPA': '052436', 'NOME': 'GABRIEL OLIVEIRA DOS SANTOS', 'CPF': '04468004223', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Monitor de sistemas de segurança interno', 'DATAADMISSAO': datetime.datetime(2025, 2, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000073', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3729} +{'CODCOLIGADA': 1, 'CHAPA': '052122', 'NOME': 'GABRIEL SANDE MEIRELES', 'CPF': '06976789200', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2024, 8, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -3} +{'CODCOLIGADA': 1, 'CHAPA': '052456', 'NOME': 'GABRIEL SOARES DE SOUZA', 'CPF': '03008461263', 'SECAO': 'LOJA 10 LOGISTICA ', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 3, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.003', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2548} +{'CODCOLIGADA': 2, 'CHAPA': '052145', 'NOME': 'GAIIEL MIRANDA DE BRITO', 'CPF': '05947673266', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 8, 16, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 3, 'CHAPA': '052442', 'NOME': 'GEANE MARCELA ROCHA DE JESUS', 'CPF': '71532650230', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 3, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 496} +{'CODCOLIGADA': 1, 'CHAPA': '051578', 'NOME': 'GENIVALDO DA SILVA SOUSA', 'CPF': '84316292234', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2023, 2, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1632} +{'CODCOLIGADA': 1, 'CHAPA': '051878', 'NOME': 'GEOVANE SOUZA SILVA', 'CPF': '03178886257', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2073} +{'CODCOLIGADA': 1, 'CHAPA': '051954', 'NOME': 'GEOVANNE CARDOSO RODRIGUES', 'CPF': '04067876203', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5635} +{'CODCOLIGADA': 2, 'CHAPA': '052361', 'NOME': 'GERLANE OLIVEIRA MELO', 'CPF': '87909979215', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras III', 'DATAADMISSAO': datetime.datetime(2025, 1, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.006', 'CODFUNCAO': '000400', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1073} +{'CODCOLIGADA': 2, 'CHAPA': '051881', 'NOME': 'GILBERTO TRINDADE DE OLIVEIRA', 'CPF': '77527739215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2024, 4, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044903', 'NOME': 'GILVANDO ALEXANDRINO MENDES', 'CPF': '92479855287', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Supervisor de logística Nivel II', 'DATAADMISSAO': datetime.datetime(2021, 11, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000261', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052587', 'NOME': 'GISELY DE ALMEIDA DAMASCENO DE SOUSA', 'CPF': '07551566252', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Estagiario Gente e Gestao', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000385', 'SALARIO': Decimal('600.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -169} +{'CODCOLIGADA': 1, 'CHAPA': '052349', 'NOME': 'GLAUCO SULIVAN CORREA COSTA', 'CPF': '02039482202', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1226} +{'CODCOLIGADA': 1, 'CHAPA': '052438', 'NOME': 'GLAYCE HELLEN SILVA MORAIS', 'CPF': '83758372291', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 2, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5479} +{'CODCOLIGADA': 1, 'CHAPA': '052377', 'NOME': 'GLEIDSON JOSE DE OLIVEIRA ROCHA', 'CPF': '88149331204', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 8335} +{'CODCOLIGADA': 1, 'CHAPA': '051436', 'NOME': 'GLEMILSON PEREIRA GOMES', 'CPF': '70390605239', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 7, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1797} +{'CODCOLIGADA': 1, 'CHAPA': '052044', 'NOME': 'GLEYDSON GIL GUIMARAES COSTA', 'CPF': '01886587264', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 7, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1911} +{'CODCOLIGADA': 3, 'CHAPA': '052412', 'NOME': 'GRAZIELLE LOHANA DE MELO DA SILVA', 'CPF': '07027999200', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -5019} +{'CODCOLIGADA': 1, 'CHAPA': '052447', 'NOME': 'GUSTAVO COSTA RODRIGUES', 'CPF': '07416586232', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 3, 7, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '006.004.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 98} +{'CODCOLIGADA': 1, 'CHAPA': '052554', 'NOME': 'GUSTAVO HENRIQUE NOVAES BRANCO', 'CPF': '00672594218', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2025, 7, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4980} +{'CODCOLIGADA': 3, 'CHAPA': '052363', 'NOME': 'HAELJA PATRICIA SANTOS BATISTA', 'CPF': '01653102276', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 1, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4568} +{'CODCOLIGADA': 2, 'CHAPA': '052613', 'NOME': 'HAMILTON REIS DA SILVA', 'CPF': '05962836286', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052197', 'NOME': 'HARLEM ANDREY PARENTE CRISTO', 'CPF': '61387908200', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052117', 'NOME': 'HELTON SOUZA CORREA', 'CPF': '04160867219', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 7, 26, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052304', 'NOME': 'HENRIQUE DA SILVA TRINDADE', 'CPF': '05069330241', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051938', 'NOME': 'HIGOR RODRIGUES E SILVA', 'CPF': '00797371290', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11928} +{'CODCOLIGADA': 1, 'CHAPA': '051455', 'NOME': 'HILDA MARIA PINHEIRO DE SOUZA SOARES', 'CPF': '85243000272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2022, 6, 21, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003633', 'NOME': 'HUGO RAFAEL LIMA E SILVA', 'CPF': '88542823249', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2017, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3959} +{'CODCOLIGADA': 1, 'CHAPA': '003461', 'NOME': 'IDELMAR NONATO CONCEIÇÃO MACEDO', 'CPF': '53390318291', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 11, 17, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 8239} +{'CODCOLIGADA': 2, 'CHAPA': '051641', 'NOME': 'IGHOR COSTA ALVES CAMARA', 'CPF': '05293736299', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2023, 5, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2271} +{'CODCOLIGADA': 1, 'CHAPA': '051643', 'NOME': 'IGOR JOSE MESCOUTO DOS SANTOS', 'CPF': '01412923263', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2023, 5, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9213} +{'CODCOLIGADA': 2, 'CHAPA': '044900', 'NOME': 'IGOR LEONARDO PINTO LEMOS DA SILVA', 'CPF': '01681637219', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2021, 10, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051752', 'NOME': 'INGREDY NASCIMENTO DA SILVA', 'CPF': '03046430256', 'SECAO': 'MARKETING', 'FUNCAO': 'Analista de Marketing Nivel VI', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000424', 'SALARIO': Decimal('2862.94'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -63} +{'CODCOLIGADA': 1, 'CHAPA': '052121', 'NOME': 'INGRID JOICE AMANAJAS MARINHO', 'CPF': '70102941270', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2024, 8, 1, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 17615} +{'CODCOLIGADA': 1, 'CHAPA': '051500', 'NOME': 'INGRID MAYARA DE SOUZA ABREU', 'CPF': '07223341254', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2022, 10, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2896} +{'CODCOLIGADA': 1, 'CHAPA': '051813', 'NOME': 'IRA WALDIR DAMASCENO DOS SANTOS', 'CPF': '41094077291', 'SECAO': 'COMERCIAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 1, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.014', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1926.49'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1038} +{'CODCOLIGADA': 1, 'CHAPA': '052428', 'NOME': 'IRANILSON MACEDO DE SOUZA', 'CPF': '68382219268', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 2, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -6362} +{'CODCOLIGADA': 2, 'CHAPA': '052391', 'NOME': 'IRIVALDO LEAL DIAS', 'CPF': '75298520278', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051821', 'NOME': 'ISABEL CRISTINY BORGES DOS SANTOS', 'CPF': '01534678271', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Supervisor(a) de Gente e Gestao', 'DATAADMISSAO': datetime.datetime(2024, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000388', 'SALARIO': Decimal('4061.48'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6887} +{'CODCOLIGADA': 1, 'CHAPA': '051439', 'NOME': 'ISABELA CRISTINA AFONSO CANTAO COSTA', 'CPF': '02388504201', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2021, 7, 12, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '006.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2540} +{'CODCOLIGADA': 1, 'CHAPA': '052184', 'NOME': 'ISABELLE RAMOS EVANGELISTA', 'CPF': '07293865201', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3129} +{'CODCOLIGADA': 1, 'CHAPA': '003915', 'NOME': 'ISADORA LAVOR DINIZ', 'CPF': '00960122265', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 3, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1909} +{'CODCOLIGADA': 1, 'CHAPA': '052253', 'NOME': 'ISAIAS COUTO OLIVEIRA', 'CPF': '02541632207', 'SECAO': 'LOJA 10 LOGISTICA ', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2128} +{'CODCOLIGADA': 2, 'CHAPA': '052625', 'NOME': 'ISAIAS DE CASTRO COSTA', 'CPF': '00969069286', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 5, 'CHAPA': '020', 'NOME': 'IVE MOUSINHO RISUENHO BATISTA', 'CPF': '78827221204', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Psicologo(a)', 'DATAADMISSAO': datetime.datetime(2024, 12, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.07', 'CODFUNCAO': '000401', 'SALARIO': Decimal('4000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '051649', 'NOME': 'IZAC TEODORO DOS PASSOS', 'CPF': '06983125207', 'SECAO': 'COMERCIAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2023, 5, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.014', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1686} +{'CODCOLIGADA': 2, 'CHAPA': '051819', 'NOME': 'IZAIAS LEAO GONCALVES', 'CPF': '81226918204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 1, 5, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052418', 'NOME': 'IZAQUE RODRIGUES BARBOZA', 'CPF': '07740854280', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052590', 'NOME': 'JACKELINE RODRIGUES CARDOSO DA SILVA', 'CPF': '88566315200', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 10, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 513} +{'CODCOLIGADA': 2, 'CHAPA': '051597', 'NOME': 'JADILSON ARAUJO', 'CPF': '94836710278', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 3, 13, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052569', 'NOME': 'JADSON NAZARENO PRESTES CHAVES', 'CPF': '06374297296', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 8, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -22} +{'CODCOLIGADA': 1, 'CHAPA': '036121', 'NOME': 'JAILSON DE SOUSA', 'CPF': '28724429287', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6184} +{'CODCOLIGADA': 2, 'CHAPA': '051570', 'NOME': 'JAILSON MOREIRA', 'CPF': '79119077220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2022, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '002672', 'NOME': 'JAILTON OLIVEIRA DA COSTA', 'CPF': '00320295273', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Embalador', 'DATAADMISSAO': datetime.datetime(2020, 6, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000075', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4802} +{'CODCOLIGADA': 2, 'CHAPA': '052156', 'NOME': 'JAIRO FERREIRA BOTELHO', 'CPF': '68742177200', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052507', 'NOME': 'JAISON HERIKIS GARCIA CAVALCANTE', 'CPF': '03203807262', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 315} +{'CODCOLIGADA': 2, 'CHAPA': '052626', 'NOME': 'JAKSON RIBEIRO DE BRITO', 'CPF': '98748386200', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003435', 'NOME': 'JAMILE PONCIANO VASCONCELOS', 'CPF': '59393025215', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 7, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 21476} +{'CODCOLIGADA': 1, 'CHAPA': '051875', 'NOME': 'JANICE CRISTINA DE SOUSA SILVA', 'CPF': '68977255287', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5997} +{'CODCOLIGADA': 1, 'CHAPA': '051834', 'NOME': 'JANILSON DOS SANTOS SANTIAGO', 'CPF': '01717492274', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 1, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 16026} +{'CODCOLIGADA': 1, 'CHAPA': '003346', 'NOME': 'JAQUELINE OLIVEIRA RIBEIRO', 'CPF': '98927272234', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2019, 6, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000163', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9374} +{'CODCOLIGADA': 2, 'CHAPA': '044994', 'NOME': 'JARDSON DIAS SILVA', 'CPF': '00996208208', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 9, 28, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052243', 'NOME': 'JEAN CARLOS DE MESQUITA FERREIRA', 'CPF': '26231166287', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2673} +{'CODCOLIGADA': 1, 'CHAPA': '051661', 'NOME': 'JEAN FRANKY LOPES', 'CPF': '02035403286', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 6, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6477} +{'CODCOLIGADA': 1, 'CHAPA': '051832', 'NOME': 'JEFFERSON MARIANO VAZ MARQUES', 'CPF': '75225093272', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 1, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11739} +{'CODCOLIGADA': 2, 'CHAPA': '052240', 'NOME': 'JEFFERSON NASCIMENTO PEREIRA', 'CPF': '00196578205', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2348} +{'CODCOLIGADA': 1, 'CHAPA': '051537', 'NOME': 'JEOVANA DA SILVA BRITO', 'CPF': '07882878260', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel V', 'DATAADMISSAO': datetime.datetime(2022, 12, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.004', 'CODFUNCAO': '000425', 'SALARIO': Decimal('1930.59'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051644', 'NOME': 'JHENNYFER KARYNNE DA SILVA SOUSA', 'CPF': '02570376248', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2023, 5, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 15099} +{'CODCOLIGADA': 1, 'CHAPA': '036133', 'NOME': 'JHONATA ALEF MATOS CAMPOS', 'CPF': '02324990202', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 8, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3952} +{'CODCOLIGADA': 2, 'CHAPA': '051558', 'NOME': 'JHONATAS CARRERA DUTRA', 'CPF': '01954370202', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Operador de Empilhadeira Nivel III', 'DATAADMISSAO': datetime.datetime(2023, 1, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000056', 'SALARIO': Decimal('2165.24'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 2, 'CHAPA': '052102', 'NOME': 'JHONATHAN GABRIEL LIBONATI BARBOSA', 'CPF': '05888417220', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 7, 26, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052272', 'NOME': 'JHONE ALVES DA COSTA', 'CPF': '01776793366', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de loja Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000318', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 815} +{'CODCOLIGADA': 1, 'CHAPA': '002639', 'NOME': 'JOAO ANDERSON COUTO MALATO', 'CPF': '86395165291', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2018, 9, 1, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5145} +{'CODCOLIGADA': 1, 'CHAPA': '003339', 'NOME': 'JOAO BATISTA CARVALHO DE PAULA', 'CPF': '70753636204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2018, 5, 8, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 775} +{'CODCOLIGADA': 1, 'CHAPA': '051626', 'NOME': 'JOAO BATISTA MIRANDA SILVA', 'CPF': '15918890220', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 5, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1937} +{'CODCOLIGADA': 2, 'CHAPA': '044150', 'NOME': 'JOAO BATISTA RIBEIRO PANTOJA', 'CPF': '90766229220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2021, 5, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052604', 'NOME': 'JOAO FERREIRA DOS REIS JUNIOR', 'CPF': '79303870204', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 11, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.004', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2680} +{'CODCOLIGADA': 2, 'CHAPA': '051883', 'NOME': 'JOAO PAULO DE ARAUJO COSTA', 'CPF': '84403845215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 4, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052628', 'NOME': 'JOAO PAULO NOGUEIRA DO ESPIRITO SANTO', 'CPF': '71363359223', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051695', 'NOME': 'JOAO PAULO XIMENDES DA SILVA', 'CPF': '72044055287', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2023, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1386} +{'CODCOLIGADA': 3, 'CHAPA': '051662', 'NOME': 'JOAO RAMOS BATISTA', 'CPF': '02223436218', 'SECAO': 'EXPANSAO E MANUTENCAO', 'FUNCAO': 'Eletricista de Instalações', 'DATAADMISSAO': datetime.datetime(2023, 6, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.001', 'CODFUNCAO': '000182', 'SALARIO': Decimal('2197.46'), 'CODSINDICATO': '04', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -12454} +{'CODCOLIGADA': 2, 'CHAPA': '044922', 'NOME': 'JOAO RICARDO MARREIROS PINTO', 'CPF': '46094474287', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Gerente de Segurança Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 1, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000252', 'SALARIO': Decimal('4320.26'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003940', 'NOME': 'JOAO SANTOS DA MOTA', 'CPF': '40430871287', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 11, 11, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2765} +{'CODCOLIGADA': 2, 'CHAPA': '052264', 'NOME': 'JOAO VICTOR DA CONCEICAO DE SOUSA', 'CPF': '08034773255', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 5, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052352', 'NOME': 'JOAO VICTOR DE SOUSA COSTA', 'CPF': '02078154296', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '007.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1772} +{'CODCOLIGADA': 1, 'CHAPA': '052452', 'NOME': 'JOAO VITOR DA SILVA VENANCIO', 'CPF': '05239245266', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Repositor de Mercadoria', 'DATAADMISSAO': datetime.datetime(2025, 3, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000043', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1620} +{'CODCOLIGADA': 1, 'CHAPA': '052181', 'NOME': 'JOAQUIM DOS ANJOS FERREIRA DA SILVEIRA', 'CPF': '74799355287', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 9, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1750.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10036} +{'CODCOLIGADA': 2, 'CHAPA': '004447', 'NOME': 'JOAQUIM RODRIGO DO NASCIMENTO VALENTIM', 'CPF': '00184660289', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2020, 2, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052506', 'NOME': 'JOEL SOUZA DOS SANTOS', 'CPF': '86789090215', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Encarregado de Seguranca de Patrimonial', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000418', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6981} +{'CODCOLIGADA': 2, 'CHAPA': '044982', 'NOME': 'JOELMA CARDOSO AMANAJAS', 'CPF': '81151489204', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2022, 7, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5261} +{'CODCOLIGADA': 1, 'CHAPA': '003352', 'NOME': 'JOELMA FERREIRA PEREIRA', 'CPF': '76796264215', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 7, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2286} +{'CODCOLIGADA': 3, 'CHAPA': '051870', 'NOME': 'JOELSON DE BRITO RIBEIRO', 'CPF': '70290642167', 'SECAO': 'DTI', 'FUNCAO': 'Analista de T.I.', 'DATAADMISSAO': datetime.datetime(2024, 4, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.014', 'CODFUNCAO': '000130', 'SALARIO': Decimal('3091.98'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051613', 'NOME': 'JOELSON DE MORAES FERREIRA', 'CPF': '00644164298', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 4, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 18679} +{'CODCOLIGADA': 2, 'CHAPA': '044992', 'NOME': 'JOFISO CORREA DE FARIAS', 'CPF': '90605101272', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2022, 9, 28, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052600', 'NOME': 'JOHN OEY FREIRE DE SOUZA', 'CPF': '78961769200', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 10, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 873} +{'CODCOLIGADA': 2, 'CHAPA': '051679', 'NOME': 'JOILSON FRANCA DA SILVA', 'CPF': '70005672287', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel III', 'DATAADMISSAO': datetime.datetime(2023, 7, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000056', 'SALARIO': Decimal('2165.24'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003325', 'NOME': 'JONATA DE SOUSA MONTEIRO', 'CPF': '03533925293', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2018, 3, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.004', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2252} +{'CODCOLIGADA': 2, 'CHAPA': '052127', 'NOME': 'JONES EDUARDO CORREA SANTA ROSA', 'CPF': '08025232263', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 8, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052387', 'NOME': 'JORGE ARMANDO FARIAS NOGUEIRA', 'CPF': '82572011204', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051573', 'NOME': 'JORGE LUIS MEDEIROS MENDES', 'CPF': '02425200223', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 2, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 5, 'CHAPA': '030', 'NOME': 'JORGE LUIZ VEIGA DOS SANTOS', 'CPF': '82846901287', 'SECAO': 'CONTABILIDADE', 'FUNCAO': 'Supervisor de Contabilidade Nivel V', 'DATAADMISSAO': datetime.datetime(2025, 5, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.12', 'CODFUNCAO': '000391', 'SALARIO': Decimal('4107.25'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '052046', 'NOME': 'JOSAFA DE LIMA ANGELINO', 'CPF': '03269190239', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2024, 7, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11475} +{'CODCOLIGADA': 1, 'CHAPA': '005724', 'NOME': 'JOSE ALZIE DE SOUZA LIMA', 'CPF': '98007890220', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Repositor de mercadorias Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 12, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000320', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1361} +{'CODCOLIGADA': 2, 'CHAPA': '044917', 'NOME': 'JOSE ANTONIO PINHEIRO MIRANDA', 'CPF': '87044412220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2022, 1, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '003819', 'NOME': 'JOSE ANTONIO SOUSA COSTA', 'CPF': '01863256229', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Supervisor de Seguranca Patrimonial', 'DATAADMISSAO': datetime.datetime(2022, 4, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000394', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051909', 'NOME': 'JOSE BENEDITO CORREA ALVES', 'CPF': '70268479291', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '004417', 'NOME': 'JOSE CARLOS SOUSA', 'CPF': '80120296268', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2019, 1, 31, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '000383', 'NOME': 'JOSE DA CONCEICAO BARBOSA', 'CPF': '17831750282', 'SECAO': 'EXPANSAO E MANUTENCAO', 'FUNCAO': 'Servente de Pedreiro', 'DATAADMISSAO': datetime.datetime(2018, 10, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.001', 'CODFUNCAO': '000177', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '04', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -11512} +{'CODCOLIGADA': 1, 'CHAPA': '052607', 'NOME': 'JOSE FELIPE ASSUNCAO GOMES', 'CPF': '08424655290', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Auxiliar de estoque Nivel V', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000321', 'SALARIO': Decimal('1851.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1317} +{'CODCOLIGADA': 2, 'CHAPA': '052118', 'NOME': 'JOSE HELENO DA SILVA DE OLIVEIRA', 'CPF': '04992561233', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 7, 26, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051891', 'NOME': 'JOSE LUCAS DE OLIVEIRA VIEIRA', 'CPF': '03699763200', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051825', 'NOME': 'JOSE LUICIO OLIVEIRA DA SILVA', 'CPF': '04827544271', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2024, 1, 8, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -241} +{'CODCOLIGADA': 1, 'CHAPA': '005711', 'NOME': 'JOSE ONERYS MOTA RODRIGUES', 'CPF': '10089055268', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 11, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 17684} +{'CODCOLIGADA': 1, 'CHAPA': '051698', 'NOME': 'JOSE RICHARD DA SILVA OLIVEIRA', 'CPF': '99142899249', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 8, 16, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6134} +{'CODCOLIGADA': 2, 'CHAPA': '052343', 'NOME': 'JOSE RICHELE DOS SANTOS DAMASCENO', 'CPF': '55616011215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052128', 'NOME': 'JOSE ROBERTO DE OLIVEIRA PINHEIRO', 'CPF': '58144218272', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 8, 6, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044910', 'NOME': 'JOSE ROBERTO FERREIRA AFONSO', 'CPF': '73280690234', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2021, 12, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003941', 'NOME': 'JOSE RODRIGUES SERRAO', 'CPF': '68979606249', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Embalador', 'DATAADMISSAO': datetime.datetime(2021, 3, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000075', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3134} +{'CODCOLIGADA': 1, 'CHAPA': '051464', 'NOME': 'JOSELMA DOS SANTOS ARAUJO', 'CPF': '84656689220', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2022, 7, 12, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11642} +{'CODCOLIGADA': 2, 'CHAPA': '052326', 'NOME': 'JOSEPH MATHEUS GOES AMOEDO', 'CPF': '70143221256', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052606', 'NOME': 'JOSIANE RODRIGUES CARDOSO AVELAR', 'CPF': '66713366287', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -784} +{'CODCOLIGADA': 1, 'CHAPA': '052478', 'NOME': 'JOSIMAR LUIS DA SILVA E SILVA JUNIOR', 'CPF': '04056984298', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 4, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.004', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4671} +{'CODCOLIGADA': 2, 'CHAPA': '052520', 'NOME': 'JOTAN LEAL DA CUNHA', 'CPF': '06911227259', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003672', 'NOME': 'JOY TAVARES PAES', 'CPF': '96248734291', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2018, 9, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 992} +{'CODCOLIGADA': 2, 'CHAPA': '044107', 'NOME': 'JUCELINO PEREIRA SOUZA', 'CPF': '68293607220', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2020, 12, 14, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6178} +{'CODCOLIGADA': 3, 'CHAPA': '052588', 'NOME': 'JULIANY SAFIRA SOUZA DE SOUZA', 'CPF': '08761899232', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Auxiliar Administrativo', 'DATAADMISSAO': datetime.datetime(2025, 9, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000021', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 245} +{'CODCOLIGADA': 2, 'CHAPA': '051984', 'NOME': 'JULIO ARTUR LIMA DOS ANJOS', 'CPF': '03614960285', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 6, 17, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052080', 'NOME': 'KAMILLY EMANUELLY DOS SANTOS VELOSO', 'CPF': '03169884212', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Operador de caixa Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 9, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000317', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -3472} +{'CODCOLIGADA': 5, 'CHAPA': '032', 'NOME': 'KARLA GISELLI DOS SANTOS BATISTA', 'CPF': '73300390206', 'SECAO': 'AUDITORIA', 'FUNCAO': 'Gerente de Controladoria', 'DATAADMISSAO': datetime.datetime(2025, 8, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.13', 'CODFUNCAO': '000423', 'SALARIO': Decimal('8100.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '052219', 'NOME': 'KARLOS ICARO RODRIGUES FERRAZ', 'CPF': '08849831293', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 399} +{'CODCOLIGADA': 1, 'CHAPA': '052485', 'NOME': 'KAROLINE NATERCIA SILVA DE OLIVEIRA', 'CPF': '03060424284', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2025, 5, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2223} +{'CODCOLIGADA': 2, 'CHAPA': '052291', 'NOME': 'KAUA SENA SILVA', 'CPF': '05932872233', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052529', 'NOME': 'KAUA ULYSSES SANTOS DA SILVA', 'CPF': '06945820262', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 6, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -376} +{'CODCOLIGADA': 1, 'CHAPA': '052451', 'NOME': 'KAUE LISBOA OLIVEIRA', 'CPF': '05245078210', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 3, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1360} +{'CODCOLIGADA': 1, 'CHAPA': '051967', 'NOME': 'KAWA SOARES QUARESMA', 'CPF': '06023007201', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.004', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 7390} +{'CODCOLIGADA': 1, 'CHAPA': '051850', 'NOME': 'KEDMA SOANI FAVACHO SARAIVA', 'CPF': '97726052287', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2024, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 16564} +{'CODCOLIGADA': 1, 'CHAPA': '052379', 'NOME': 'KELLY ANNE BRAGA SIZO OLIVEIRA', 'CPF': '92837620297', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -5813} +{'CODCOLIGADA': 1, 'CHAPA': '052599', 'NOME': 'KELVIN CAUA DE SOUSA CHAVES', 'CPF': '01981295216', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2025, 10, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 214} +{'CODCOLIGADA': 1, 'CHAPA': '052598', 'NOME': 'KESSIA DO NASCIMENTO FERNANDES', 'CPF': '06525558298', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Operador de caixa Nivel VI', 'DATAADMISSAO': datetime.datetime(2025, 10, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000317', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1707} +{'CODCOLIGADA': 1, 'CHAPA': '003452', 'NOME': 'KETH GEYSE BARBOSA DE JESUS', 'CPF': '92443060268', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 33530} +{'CODCOLIGADA': 2, 'CHAPA': '052473', 'NOME': 'KLEBISON DA SILVEIRA BORGES', 'CPF': '06889518217', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052414', 'NOME': 'KLEIDSON LIMA DE BARROS', 'CPF': '93228740234', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052416', 'NOME': 'KLEYTON ROBERTO DO CARMO ARAÚJO', 'CPF': '65124731249', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052249', 'NOME': 'LADILSON COLARES SOLEDADE', 'CPF': '69528403204', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051565', 'NOME': 'LAERCIO PINTO DA CUNHA', 'CPF': '61549924249', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2023, 2, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2961} +{'CODCOLIGADA': 3, 'CHAPA': '051600', 'NOME': 'LAIS ELIOENA ALVES PEREIRA LEMOS', 'CPF': '02314435281', 'SECAO': 'CONTABILIDADE', 'FUNCAO': 'Gerente de Contabilidade Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 3, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000268', 'SALARIO': Decimal('4061.48'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5038} +{'CODCOLIGADA': 3, 'CHAPA': '051760', 'NOME': 'LARISSA FURTADO DOS SANTOS', 'CPF': '06461055231', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Coordenador(a) de Gente e Gestão', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000422', 'SALARIO': Decimal('4067.48'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4924} +{'CODCOLIGADA': 1, 'CHAPA': '051687', 'NOME': 'LARISSA PALOMA PENA DOS SANTOS', 'CPF': '01825768250', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2023, 8, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -329} +{'CODCOLIGADA': 3, 'CHAPA': '052324', 'NOME': 'LAURA REIS DE CARVALHO', 'CPF': '06050470227', 'SECAO': 'MARKETING', 'FUNCAO': 'Analista de Marketing Nivel V ', 'DATAADMISSAO': datetime.datetime(2024, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000417', 'SALARIO': Decimal('2650.87'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 779} +{'CODCOLIGADA': 2, 'CHAPA': '051534', 'NOME': 'LAURO ANTONIO DOS SANTOS BARREIROS', 'CPF': '85460176204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2022, 12, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '036143', 'NOME': 'LEANDRO DA SILVA BARREIROS', 'CPF': '70453648223', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 12, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11694} +{'CODCOLIGADA': 2, 'CHAPA': '052204', 'NOME': 'LEANDRO HENRIQUE SANTOS COSTA', 'CPF': '55434681215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051498', 'NOME': 'LEIDIANE DO CARMO ARAUJO', 'CPF': '80831095253', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2022, 10, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6818} +{'CODCOLIGADA': 1, 'CHAPA': '052069', 'NOME': 'LEILA CRISTINA DO NASCIMENTO BRITO', 'CPF': '99995000210', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 9, 9, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -5844} +{'CODCOLIGADA': 1, 'CHAPA': '051488', 'NOME': 'LEILA PEDREIRA DO CARMO', 'CPF': '42302048253', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 9, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1340} +{'CODCOLIGADA': 1, 'CHAPA': '051697', 'NOME': 'LENILDO DA CONCEICAO SOUZA', 'CPF': '00932366201', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2023, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3055} +{'CODCOLIGADA': 1, 'CHAPA': '003359', 'NOME': 'LENISE DE SOUZA ANDRADE COSTA', 'CPF': '95816259253', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Gerente de Loja', 'DATAADMISSAO': datetime.datetime(2021, 4, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000208', 'SALARIO': Decimal('3729.18'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044866', 'NOME': 'LEONARDO CORREA RODRIGUES', 'CPF': '98125320210', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Analista de logistica Nivel III', 'DATAADMISSAO': datetime.datetime(2021, 8, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000254', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051514', 'NOME': 'LEONARDO DOS SANTOS GALVAO', 'CPF': '03260169296', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 11, 11, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3637} +{'CODCOLIGADA': 1, 'CHAPA': '052566', 'NOME': 'LEONARDO PINTO DA SILVA FILHO', 'CPF': '03437235222', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1863} +{'CODCOLIGADA': 2, 'CHAPA': '051774', 'NOME': 'LEONARDO SILVA DA SILVA', 'CPF': '01358386226', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 10, 24, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 1, 'CHAPA': '051650', 'NOME': 'LEONARDO VINICIUS ALVES NUNES', 'CPF': '02620363209', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Encarregado de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 5, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.002', 'CODFUNCAO': '000422', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052354', 'NOME': 'LETICIA ADRIANA GOMES RENTE', 'CPF': '07778892340', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -392} +{'CODCOLIGADA': 1, 'CHAPA': '003375', 'NOME': 'LILIANE PEREIRA DA SILVA', 'CPF': '72275723234', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 6, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 8779} +{'CODCOLIGADA': 2, 'CHAPA': '044175', 'NOME': 'LORENA CRISTINA DOS REIS DE BRITO', 'CPF': '96791780215', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras IV', 'DATAADMISSAO': datetime.datetime(2021, 6, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.006', 'CODFUNCAO': '000421', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 760} +{'CODCOLIGADA': 1, 'CHAPA': '051121', 'NOME': 'LORRAN DE JESUS DOS SANTOS', 'CPF': '92988962200', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2021, 7, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9289} +{'CODCOLIGADA': 1, 'CHAPA': '052045', 'NOME': 'LORRANY PINTO BARBOSA', 'CPF': '03774316210', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2024, 7, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 18851} +{'CODCOLIGADA': 3, 'CHAPA': '051780', 'NOME': 'LOURIMAR JOSE MONTEIRO FIGUEIREDO', 'CPF': '18969534253', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2023, 11, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3596} +{'CODCOLIGADA': 1, 'CHAPA': '003657', 'NOME': 'LOURIVAL EDVALDO COSTA FERREIRA', 'CPF': '44054513204', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2017, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5288} +{'CODCOLIGADA': 5, 'CHAPA': '034', 'NOME': 'LUAN DA ROCHA PEREIRA', 'CPF': '02137922223', 'SECAO': 'AUTONOMOS', 'FUNCAO': 'Gerente de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.01', 'CODFUNCAO': '000047', 'SALARIO': Decimal('8500.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052526', 'NOME': 'LUAN EVILAZIO LIMA RODRIGUES', 'CPF': '05882034248', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051703', 'NOME': 'LUAN NEGRAO DA COSTA', 'CPF': '05054828273', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 8, 16, 0, 0), 'CODSITUACAO': 'I', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052085', 'NOME': 'LUCAS ARAUJO DE SOUZA', 'CPF': '00064346226', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Repositor de Mercadoria', 'DATAADMISSAO': datetime.datetime(2024, 9, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000043', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -10385} +{'CODCOLIGADA': 1, 'CHAPA': '036142', 'NOME': 'LUCAS ARTHUR ANDRADE CORREA', 'CPF': '02730978224', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Analista de logistica Nivel III', 'DATAADMISSAO': datetime.datetime(2020, 11, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000254', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051494', 'NOME': 'LUCAS CAUA RAIOL DOS SANTOS', 'CPF': '05978925208', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2022, 9, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 18072} +{'CODCOLIGADA': 2, 'CHAPA': '052393', 'NOME': 'LUCAS CLAYTON BARBOSA DE SOUSA', 'CPF': '02902864256', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052161', 'NOME': 'LUCAS COELHO SOUSA', 'CPF': '03931172279', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051980', 'NOME': 'LUCAS MEDA FONTES DOS SANTOS', 'CPF': '06130866275', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 6, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052435', 'NOME': 'LUCAS PABLO DUARTE DA SILVA', 'CPF': '02250344256', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2025, 2, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051708', 'NOME': 'LUCAS SOUZA DE JESUS', 'CPF': '04151695265', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Repositor de mercadorias Nivel VI', 'DATAADMISSAO': datetime.datetime(2023, 9, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000320', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -880} +{'CODCOLIGADA': 1, 'CHAPA': '052380', 'NOME': 'LUCIANA ALVES GOMES', 'CPF': '61513113291', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2084} +{'CODCOLIGADA': 1, 'CHAPA': '051471', 'NOME': 'LUCIANA CAROLINA ALVAREZ DE OLIVEIRA', 'CPF': '88769593272', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 8, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 16179} +{'CODCOLIGADA': 5, 'CHAPA': '021', 'NOME': 'LUCIANA LOBATO SILVA', 'CPF': '00021864209', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Engenheiro(a) de Seg do Trabalho', 'DATAADMISSAO': datetime.datetime(2024, 12, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.07', 'CODFUNCAO': '000402', 'SALARIO': Decimal('1500.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '051618', 'NOME': 'LUCINALDO PESSOA GOMES', 'CPF': '45408386287', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 4, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052157', 'NOME': 'LUCIVALDO MONTEIRO PINTO', 'CPF': '00013852248', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044119', 'NOME': 'LUIS AUGUSTO DE SOUZA FURTADO', 'CPF': '87172305272', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2021, 1, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052609', 'NOME': 'LUIS FELIPE MONTEIRO DUTRA', 'CPF': '08790237242', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1693} +{'CODCOLIGADA': 1, 'CHAPA': '052631', 'NOME': 'LUIS MULLER NOGUEIRA DA SILVA', 'CPF': '06229396297', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2026, 1, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 25} +{'CODCOLIGADA': 1, 'CHAPA': '003930', 'NOME': 'LUIZ ANTONIO FREITAS CRUZ', 'CPF': '51196425272', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2020, 7, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1003} +{'CODCOLIGADA': 3, 'CHAPA': '052480', 'NOME': 'LUIZ CARLOS FERREIRA', 'CPF': '01360739211', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 4, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2264} +{'CODCOLIGADA': 1, 'CHAPA': '036106', 'NOME': 'LUIZ CESAR MARTINS FIGUEIREDO', 'CPF': '08125406204', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 12, 2, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -224} +{'CODCOLIGADA': 2, 'CHAPA': '044973', 'NOME': 'LUIZ CEZAR DA SILVA MACEDO', 'CPF': '01892694212', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2022, 4, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051614', 'NOME': 'LUIZ FABIO FERREIRA DA SILVA', 'CPF': '47998865253', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 4, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051898', 'NOME': 'LUIZ HENRIQUE DE SOUZA PINTO', 'CPF': '65806620263', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1508} +{'CODCOLIGADA': 2, 'CHAPA': '052001', 'NOME': 'LUIZ HENRIQUE MELO BORGES', 'CPF': '04588621262', 'SECAO': 'COMPRAS', 'FUNCAO': 'Assistente de Compras', 'DATAADMISSAO': datetime.datetime(2024, 6, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.006', 'CODFUNCAO': '000222', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1896} +{'CODCOLIGADA': 2, 'CHAPA': '052591', 'NOME': 'LUIZ HENRIQUE SANTOS FERREIRA', 'CPF': '02823424270', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 10, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000165', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052579', 'NOME': 'LUIZ RAMON LOPES VIEIRA', 'CPF': '03775603247', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5823} +{'CODCOLIGADA': 1, 'CHAPA': '052167', 'NOME': 'LUIZ SERGIO MACIEL SANTANA', 'CPF': '39449580200', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3269} +{'CODCOLIGADA': 2, 'CHAPA': '052546', 'NOME': 'LUIZA D VIVIANE COSTA DOS SANTOS', 'CPF': '70435889281', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 7, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '005736', 'NOME': 'MACIVALDO EDMILSON DE BRITO JUNIOR', 'CPF': '03612018264', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Supervisor de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 5, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000256', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 38551} +{'CODCOLIGADA': 2, 'CHAPA': '052227', 'NOME': 'MAGNAELSON ASSUNCAO MELO', 'CPF': '04773030216', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044896', 'NOME': 'MAICO DOUGLAS REBELO BRAZIL', 'CPF': '01672876214', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Supervisor Administrativo nível IV', 'DATAADMISSAO': datetime.datetime(2021, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000413', 'SALARIO': Decimal('3296.65'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051995', 'NOME': 'MAISA CRISTINA LEMOS DOS SANTOS', 'CPF': '70196918200', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Monitor de sistemas de segurança interno', 'DATAADMISSAO': datetime.datetime(2024, 6, 21, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000073', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2843} +{'CODCOLIGADA': 2, 'CHAPA': '052095', 'NOME': 'MANOEL ABEL MONTEIRO DE SOUSA', 'CPF': '04046776226', 'SECAO': 'FINANCEIRO', 'FUNCAO': 'Analista Financeiro Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 7, 26, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.001', 'CODFUNCAO': '000367', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -983} +{'CODCOLIGADA': 2, 'CHAPA': '044853', 'NOME': 'MANOEL FERNANDO PADILHA DA SILVA', 'CPF': '97076627272', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Supervisor de Logística Nível V', 'DATAADMISSAO': datetime.datetime(2021, 7, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.002', 'CODFUNCAO': '000401', 'SALARIO': Decimal('3692.25'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051449', 'NOME': 'MANOEL FIGUEIREDO VASCONCELOS', 'CPF': '58674489249', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 6, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6763} +{'CODCOLIGADA': 2, 'CHAPA': '052210', 'NOME': 'MANOEL MIRANDA DE CASTRO', 'CPF': '39517306253', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052634', 'NOME': 'MANOEL TRINDADE DE OLIVEIRA PINHEIRO', 'CPF': '40188264272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2026, 2, 5, 0, 0), 'CODSITUACAO': 'Z', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 5, 'CHAPA': '033', 'NOME': 'MANOEL TRINDADE DE OLIVEIRA PINHEIRO', 'CPF': '40188264272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.14', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1518.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052025', 'NOME': 'MARCELO ALVES DA SILVA', 'CPF': '90835689204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 6, 22, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052614', 'NOME': 'MARCELO BORGES FONTEL', 'CPF': '58786236253', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 596} +{'CODCOLIGADA': 2, 'CHAPA': '052245', 'NOME': 'MARCELO COSTA DA SILVA', 'CPF': '45563560244', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '003813', 'NOME': 'MARCELO DA CONCEICAO DA SILVA', 'CPF': '65923324253', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 4, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5046} +{'CODCOLIGADA': 1, 'CHAPA': '036167', 'NOME': 'MARCELO DA SILVA GOMES', 'CPF': '93410212272', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2022, 5, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10159} +{'CODCOLIGADA': 1, 'CHAPA': '052576', 'NOME': 'MARCIA FERREIRA ANDRE RODRIGUES', 'CPF': '00649324277', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2025, 10, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2257} +{'CODCOLIGADA': 1, 'CHAPA': '051923', 'NOME': 'MARCILEIA CARDOSO DOS SANTOS', 'CPF': '02664388223', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4293} +{'CODCOLIGADA': 1, 'CHAPA': '051817', 'NOME': 'MARCILIO MONTEIRO PINTO', 'CPF': '65809106234', 'SECAO': 'COMERCIAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2024, 1, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.014', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -11251} +{'CODCOLIGADA': 2, 'CHAPA': '052359', 'NOME': 'MARCIO ANDRE DOS SANTOS TEIXEIRA', 'CPF': '01130990290', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras IV', 'DATAADMISSAO': datetime.datetime(2025, 1, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.006', 'CODFUNCAO': '000421', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2817} +{'CODCOLIGADA': 2, 'CHAPA': '004475', 'NOME': 'MARCIO DA SILVA TAVARES', 'CPF': '73514128200', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2020, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -264} +{'CODCOLIGADA': 5, 'CHAPA': '029', 'NOME': 'MARCIO DAYVID FERNANDES DA COSTA', 'CPF': '87740567272', 'SECAO': 'COMERCIAL', 'FUNCAO': 'Supervisor Geral', 'DATAADMISSAO': datetime.datetime(2025, 5, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.06', 'CODFUNCAO': '000394', 'SALARIO': Decimal('8500.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052402', 'NOME': 'MARCIO DUARTE ANDRADE', 'CPF': '74925946234', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052559', 'NOME': 'MARCIO FERNANDES PANTOJA PEREIRA', 'CPF': '01379444209', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2317} +{'CODCOLIGADA': 3, 'CHAPA': '052580', 'NOME': 'MARCIO JADERSON SILVA DA COSTA', 'CPF': '58761900206', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2768} +{'CODCOLIGADA': 3, 'CHAPA': '051876', 'NOME': 'MARCIO PENA MIRANDA', 'CPF': '48888966234', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1604} +{'CODCOLIGADA': 2, 'CHAPA': '052211', 'NOME': 'MARCIO ROBERTO ALVES PEREIRA', 'CPF': '75713713253', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003942', 'NOME': 'MARCIO SOUSA DA COSTA', 'CPF': '01668377250', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2021, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5223} +{'CODCOLIGADA': 2, 'CHAPA': '052295', 'NOME': 'MARCOS ALEXANDRE MELO CONCEICAO', 'CPF': '07492793200', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052254', 'NOME': 'MARCOS ANTONIO ALVES DA SILVA', 'CPF': '63655764200', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 10, 21, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1849} +{'CODCOLIGADA': 2, 'CHAPA': '052213', 'NOME': 'MARCOS ANTONIO DE SOUZA MAIA', 'CPF': '02465084267', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003453', 'NOME': 'MARCOS CABRAL DE SOUZA', 'CPF': '59190868234', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2238} +{'CODCOLIGADA': 2, 'CHAPA': '052510', 'NOME': 'MARCOS COSTA RODRIGUES', 'CPF': '00573446202', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044931', 'NOME': 'MARCOS FONSECA CORREA', 'CPF': '85991457204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 2, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052505', 'NOME': 'MARCOS GABRIEL DE ASSIS MATOS', 'CPF': '05861651264', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 389} +{'CODCOLIGADA': 2, 'CHAPA': '004418', 'NOME': 'MARCOS PEREIRA FERREIRA', 'CPF': '02471199208', 'SECAO': 'LOJA 10 LOGISTICA', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2019, 2, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.012', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '05', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052140', 'NOME': 'MARCOS RAIMUNDO FREITAS PEREIRA', 'CPF': '60015942287', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051448', 'NOME': 'MARCOS RICARDO MOURA TAVARES', 'CPF': '90149742215', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 6, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3305} +{'CODCOLIGADA': 2, 'CHAPA': '052327', 'NOME': 'MARCOS SANTOS SILVA', 'CPF': '62153730287', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052518', 'NOME': 'MARCOS VINICIUS DE OLIVEIRA TRINDADE', 'CPF': '04390527266', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003467', 'NOME': 'MARCUS VINICIUS SOUZA DA ROSA', 'CPF': '37311271215', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 5, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2971} +{'CODCOLIGADA': 1, 'CHAPA': '051542', 'NOME': 'MARDIENE CASTRO RIBEIRO', 'CPF': '67053254291', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2023, 1, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5737} +{'CODCOLIGADA': 1, 'CHAPA': '051941', 'NOME': 'MARIA DE JESUSDE NAZARE TELES FERREIRA', 'CPF': '78624509220', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 12828} +{'CODCOLIGADA': 1, 'CHAPA': '052350', 'NOME': 'MARIA EDUARDA ASSIS MAUES', 'CPF': '02126191281', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -535} +{'CODCOLIGADA': 1, 'CHAPA': '052542', 'NOME': 'MARIA JOSIANE BALIEIRO DOS SANTOS', 'CPF': '91932602291', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2025, 6, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11016} +{'CODCOLIGADA': 1, 'CHAPA': '051463', 'NOME': 'MARIA LEANE ASSUNÇAO GOMES', 'CPF': '70444604294', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Operador de caixa Nivel VI', 'DATAADMISSAO': datetime.datetime(2022, 7, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000317', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1848} +{'CODCOLIGADA': 1, 'CHAPA': '051942', 'NOME': 'MARIA SANTANA BITENCOURT BRITO', 'CPF': '83146490234', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 14751} +{'CODCOLIGADA': 3, 'CHAPA': '051809', 'NOME': 'MARIELSON CORREA AMORAS', 'CPF': '05082489224', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de loja Nivel VI', 'DATAADMISSAO': datetime.datetime(2023, 12, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000318', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1439} +{'CODCOLIGADA': 1, 'CHAPA': '052259', 'NOME': 'MARILENE BARBOSA DA SILVA', 'CPF': '01154219208', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6301} +{'CODCOLIGADA': 1, 'CHAPA': '052430', 'NOME': 'MARILIA ROCHA BATISTA', 'CPF': '37633708204', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2025, 2, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '007.001.002', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -522} +{'CODCOLIGADA': 3, 'CHAPA': '052369', 'NOME': 'MARINALDO CARDOSO ALVES', 'CPF': '05001314224', 'SECAO': 'CONTABILIDADE', 'FUNCAO': 'Estagiario Contabil', 'DATAADMISSAO': datetime.datetime(2025, 1, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000369', 'SALARIO': Decimal('600.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2154} +{'CODCOLIGADA': 1, 'CHAPA': '051950', 'NOME': 'MARINEIDE BAILAO CORREA', 'CPF': '02778273298', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -31709} +{'CODCOLIGADA': 1, 'CHAPA': '051502', 'NOME': 'MARINETH FERREIRA CORDOVIL', 'CPF': '61174696249', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 10, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10402} +{'CODCOLIGADA': 2, 'CHAPA': '052611', 'NOME': 'MARINEUTON JASTER RODRIGUES', 'CPF': '08894944280', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051934', 'NOME': 'MARISTELA PEREIRA CARVALHO', 'CPF': '01862591237', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '026127', 'NOME': 'MARIZETE CORREA DE SOUSA', 'CPF': '85123064249', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2022, 2, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1272} +{'CODCOLIGADA': 1, 'CHAPA': '003952', 'NOME': 'MARLLESON GUILHERME DOS SANTOS DE JESUS', 'CPF': '06844389256', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Supervisor Administrativo nível I', 'DATAADMISSAO': datetime.datetime(2022, 5, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5450} +{'CODCOLIGADA': 2, 'CHAPA': '051799', 'NOME': 'MATEUS HENRIQUE DA SILVA CORREA', 'CPF': '06741597212', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052581', 'NOME': 'MATHEUS DA COSTA LEAL', 'CPF': '01480619230', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 28} +{'CODCOLIGADA': 1, 'CHAPA': '052150', 'NOME': 'MATHEUS LOPES DE CASTRO', 'CPF': '99922495287', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2024, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4553} +{'CODCOLIGADA': 2, 'CHAPA': '052222', 'NOME': 'MATHEUS SILVA GONCALVES', 'CPF': '05364235203', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052147', 'NOME': 'MAURICIO JORGE BRITO NASCIMENTO', 'CPF': '00348385200', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3239} +{'CODCOLIGADA': 2, 'CHAPA': '004437', 'NOME': 'MAURICIO PENA DE SOUZA', 'CPF': '66175666291', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2019, 11, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052475', 'NOME': 'MAURO AFONSO CONCEICAO', 'CPF': '00460326228', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051918', 'NOME': 'MAURO RAFAEL AMANAJAS MARINHO', 'CPF': '70103013288', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044912', 'NOME': 'MAURO SERGIO DA CRUZ SOUZA', 'CPF': '69981833215', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2021, 12, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052490', 'NOME': 'MAX CARNEIRO ARAUJO', 'CPF': '70454145284', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10291} +{'CODCOLIGADA': 1, 'CHAPA': '051831', 'NOME': 'MAYARA AGRA DOS SANTOS', 'CPF': '84539232215', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2024, 1, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11757} +{'CODCOLIGADA': 2, 'CHAPA': '052594', 'NOME': 'MAYARA CRISTINA DOS SANTOS RIBEIRO', 'CPF': '02793705209', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 10, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051645', 'NOME': 'MAYARA DO ESPIRITO SANTO GALDEZ', 'CPF': '02697735259', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2023, 5, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3539} +{'CODCOLIGADA': 1, 'CHAPA': '003364', 'NOME': 'MAYCK VINICIUS NASCIMENTO DOS SANTOS', 'CPF': '03343426270', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2021, 9, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 18058} +{'CODCOLIGADA': 2, 'CHAPA': '051894', 'NOME': 'MAYCON DOUGLAS SOUSA NEGRAO', 'CPF': '06549559219', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052494', 'NOME': 'MAYCON PEREIRA DA SILVA', 'CPF': '03263247204', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051610', 'NOME': 'MERIAM PAMPLONA DA COSTA', 'CPF': '62957368234', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2023, 4, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6040} +{'CODCOLIGADA': 1, 'CHAPA': '003678', 'NOME': 'MESAQUE ABRAAO NASCIMENTO DOS SANTOS', 'CPF': '96364440215', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2018, 12, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -835} +{'CODCOLIGADA': 2, 'CHAPA': '051770', 'NOME': 'MICHEL DE JESUS SERRAO FERREIRA', 'CPF': '02075588252', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 10, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052370', 'NOME': 'MICHEL ICARO ALVES DOS SANTOS', 'CPF': '07373873278', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -200} +{'CODCOLIGADA': 1, 'CHAPA': '052527', 'NOME': 'MICHEL RODRIGUES DA COSTA', 'CPF': '02889003248', 'SECAO': 'LOJA 10 LOGISTICA ', 'FUNCAO': 'Motoboy', 'DATAADMISSAO': datetime.datetime(2025, 5, 30, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.003', 'CODFUNCAO': '000032', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2609} +{'CODCOLIGADA': 2, 'CHAPA': '052537', 'NOME': 'MICHEL SOEIRO DE ARAUJO', 'CPF': '07859081296', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Analista de logistica Nivel III', 'DATAADMISSAO': datetime.datetime(2025, 6, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000254', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052549', 'NOME': 'MICHELE GARCIA DE OLIVEIRA', 'CPF': '00687410223', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2025, 7, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -480} +{'CODCOLIGADA': 5, 'CHAPA': '028', 'NOME': 'MICHELE GONCALVES PAIXAO', 'CPF': '66840279200', 'SECAO': 'COMPRAS', 'FUNCAO': 'Supervisor de compras Nível VII', 'DATAADMISSAO': datetime.datetime(2025, 5, 25, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.04', 'CODFUNCAO': '000362', 'SALARIO': Decimal('8000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052162', 'NOME': 'MICHELLE CAROLINY NASCIMENTO PEREIRA', 'CPF': '01762911213', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 5, 'CHAPA': '001', 'NOME': 'MICHELLY KETHLEN FERREIRA DE LIMA', 'CPF': '02957031213', 'SECAO': 'COMPRAS', 'FUNCAO': 'Gerente de compras Nivel VI', 'DATAADMISSAO': datetime.datetime(2023, 5, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.04', 'CODFUNCAO': '000311', 'SALARIO': Decimal('8800.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '003410', 'NOME': 'MIKE DA SILVA AMARO', 'CPF': '03121350250', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2018, 3, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 598} +{'CODCOLIGADA': 1, 'CHAPA': '052637', 'NOME': 'MIKE WALLACE LIMA MATOS', 'CPF': '02050931247', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2026, 2, 5, 0, 0), 'CODSITUACAO': 'Z', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '044933', 'NOME': 'MILENA DE ANDRADE ALIEVI', 'CPF': '09441405990', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Analista de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 2, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000253', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052636', 'NOME': 'MIRLA TIELLE MENDES CONCEICAO', 'CPF': '02270233239', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2026, 2, 5, 0, 0), 'CODSITUACAO': 'Z', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '051790', 'NOME': 'MISAEL DOS SANTOS SENADO', 'CPF': '04429632200', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2023, 11, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052332', 'NOME': 'MOISES COSTA PANTOJA', 'CPF': '67689191215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003679', 'NOME': 'MOISES MORAES RESQUE', 'CPF': '67934250215', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Gerente de Loja', 'DATAADMISSAO': datetime.datetime(2018, 12, 14, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000208', 'SALARIO': Decimal('3729.18'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051631', 'NOME': 'NADABE PACHECO SANTOS', 'CPF': '01853718254', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 5, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003457', 'NOME': 'NAYARA CRISTINA SOUZA DOS SANTOS', 'CPF': '95213872204', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Gerente de Loja', 'DATAADMISSAO': datetime.datetime(2021, 10, 19, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000208', 'SALARIO': Decimal('3729.18'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 20352} +{'CODCOLIGADA': 2, 'CHAPA': '052597', 'NOME': 'NELSON SANTOS DE ASSIS', 'CPF': '06256407210', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 10, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '002670', 'NOME': 'NIELLE LEANDRA DE SOUZA NASCIMENTO', 'CPF': '02641008246', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2020, 5, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11198} +{'CODCOLIGADA': 1, 'CHAPA': '036168', 'NOME': 'NORBERTO MALCHER DOS SANTOS', 'CPF': '41036050220', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 5, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6004} +{'CODCOLIGADA': 1, 'CHAPA': '051945', 'NOME': 'ODILENE DA SILVA PAZ', 'CPF': '86326732204', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 12274} +{'CODCOLIGADA': 1, 'CHAPA': '051949', 'NOME': 'ODILENE SANTOS ANDRÉ', 'CPF': '03987548290', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Supervisor Administrativo nível I', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 24142} +{'CODCOLIGADA': 1, 'CHAPA': '003357', 'NOME': 'ODINEI ROBSON PANTOJA NASCIMENTO', 'CPF': '72243104253', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição Nivel II', 'DATAADMISSAO': datetime.datetime(2021, 1, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000426', 'SALARIO': Decimal('1660.56'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 13510} +{'CODCOLIGADA': 3, 'CHAPA': '003825', 'NOME': 'ODIVAL DE ALMEIDA QUARESMA', 'CPF': '93064721291', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Analista de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 5, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.010', 'CODFUNCAO': '000246', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2165} +{'CODCOLIGADA': 2, 'CHAPA': '052413', 'NOME': 'OTAVIO LUIZ CALDEIRA SILVA', 'CPF': '03599939233', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -420} +{'CODCOLIGADA': 1, 'CHAPA': '052273', 'NOME': 'OZIEL MIRANDA PASTANA', 'CPF': '05398549219', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2808} +{'CODCOLIGADA': 3, 'CHAPA': '052551', 'NOME': 'PAMELA DE NAZARE FARIAS', 'CPF': '02080607235', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Assistente de Gente e Gestão', 'DATAADMISSAO': datetime.datetime(2025, 7, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000395', 'SALARIO': Decimal('2128.57'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1944} +{'CODCOLIGADA': 1, 'CHAPA': '052608', 'NOME': 'PATRICIA SANTANA DO CARMO', 'CPF': '79311261220', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Assistente de Credito Nivel VI', 'DATAADMISSAO': datetime.datetime(2025, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000316', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 659} +{'CODCOLIGADA': 2, 'CHAPA': '052237', 'NOME': 'PATRICK NASCIMENTO DE SOUZA', 'CPF': '55166911253', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052398', 'NOME': 'PAULINO ANTONIO DA SILVEIRA NETO', 'CPF': '06893322208', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052623', 'NOME': 'PAULO CEZAR MEIRELES SAMPAIO', 'CPF': '04551119288', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051759', 'NOME': 'PAULO DE TARSO CORREA LIMA', 'CPF': '96071060249', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052633', 'NOME': 'PAULO ERIC AMORIM DE BARROS', 'CPF': '08790157214', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2026, 1, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.011', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052472', 'NOME': 'PAULO HENRIQUE SILVA GONCALVES', 'CPF': '04967228240', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052396', 'NOME': 'PAULO JOLRAN LIMA MELO DE JESUS', 'CPF': '04711993207', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051609', 'NOME': 'PAULO REINALDO RUFINO DE JESUS', 'CPF': '80534953204', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2023, 4, 3, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1176} +{'CODCOLIGADA': 1, 'CHAPA': '003661', 'NOME': 'PAULO RICARDO SIDONIO GOMES', 'CPF': '02447966296', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Supervisor de Estoque Nivel II', 'DATAADMISSAO': datetime.datetime(2017, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000168', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '044864', 'NOME': 'PAULO ROBERTO ALVES BARROSO', 'CPF': '75513390272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 8, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 12241} +{'CODCOLIGADA': 2, 'CHAPA': '051657', 'NOME': 'PAULO ROBERTO DA SILVA GARCIA', 'CPF': '53775570268', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Encarregado de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 6, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000259', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044882', 'NOME': 'PAULO ROBERTO GOMES DOS SANTOS', 'CPF': '37111108272', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Supervisor de logística Nivel II', 'DATAADMISSAO': datetime.datetime(2021, 9, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000261', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052138', 'NOME': 'PAULO SERGIO CHARCHA FIGUEIREDO FILHO', 'CPF': '70232429294', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 8, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052235', 'NOME': 'PAULO SERGIO DA SILVA SANTOS', 'CPF': '85048380215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044893', 'NOME': 'PAULO SERGIO DO VALE', 'CPF': '01794913262', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2021, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1211} +{'CODCOLIGADA': 2, 'CHAPA': '052040', 'NOME': 'PAULO SERGIO FERREIRA BORCEM', 'CPF': '86018361272', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 6, 28, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044940', 'NOME': 'PAULO SERGIO MIRANDA TEIXEIRA', 'CPF': '35276339287', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2022, 3, 29, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051854', 'NOME': 'PAULO VICTOR DOS PASSOS BRAGA', 'CPF': '01852082232', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Assistente Administrativo I', 'DATAADMISSAO': datetime.datetime(2024, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000370', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1427} +{'CODCOLIGADA': 2, 'CHAPA': '052582', 'NOME': 'PAULO VICTOR OLIVEIRA ESTUMANO', 'CPF': '02465618237', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052257', 'NOME': 'PEDRO EMMANUEL DOS SANTOS SERRAO', 'CPF': '01243650273', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 11, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4860} +{'CODCOLIGADA': 1, 'CHAPA': '026129', 'NOME': 'PEDRO GABRIEL CORDEIRO LIMA', 'CPF': '02632068231', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Repositor de Mercadoria', 'DATAADMISSAO': datetime.datetime(2022, 4, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000043', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2418} +{'CODCOLIGADA': 2, 'CHAPA': '052103', 'NOME': 'PEDRO HENRIQUE DA CONCEICAO ALVES', 'CPF': '03645102264', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 7, 26, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052548', 'NOME': 'PEDRO HENRIQUE FONSECA ALBERNAZ', 'CPF': '03508117251', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 7, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 99} +{'CODCOLIGADA': 1, 'CHAPA': '052427', 'NOME': 'PEDRO LUCCAS CARVALHO BRITO', 'CPF': '05234610209', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Repositor de mercadorias Nivel VI', 'DATAADMISSAO': datetime.datetime(2025, 2, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000320', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -4131} +{'CODCOLIGADA': 2, 'CHAPA': '052501', 'NOME': 'PEDRO PAULO FERREIRA DE OLIVEIRA', 'CPF': '03308912279', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051906', 'NOME': 'PERCILIANO EVANGELISTA FILHO', 'CPF': '88233618268', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052215', 'NOME': 'QUIONIS ARAUJO DA SILVA', 'CPF': '01544371233', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000165', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052312', 'NOME': 'QUITERIA MARIA DA CONCEIÇÃO NETA', 'CPF': '75068125172', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2024, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4398} +{'CODCOLIGADA': 2, 'CHAPA': '051911', 'NOME': 'RAFAEL DE OLIVEIRA DOS SANTOS BRITO', 'CPF': '06431438230', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Analista de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000253', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '005728', 'NOME': 'RAFAEL DO NASCIMENTO LIMA', 'CPF': '82536295249', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 12, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1604} +{'CODCOLIGADA': 1, 'CHAPA': '051604', 'NOME': 'RAFAEL REIS LIMA', 'CPF': '02434910262', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 3, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5939} +{'CODCOLIGADA': 2, 'CHAPA': '044881', 'NOME': 'RAFAEL RODRIGUES DOS SANTOS', 'CPF': '03529407275', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Supervisor de Estoque Nivel II', 'DATAADMISSAO': datetime.datetime(2021, 9, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000168', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 21328} +{'CODCOLIGADA': 1, 'CHAPA': '051960', 'NOME': 'RAFAEL SANTOS DA SILVA', 'CPF': '04151907203', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11189} +{'CODCOLIGADA': 1, 'CHAPA': '003437', 'NOME': 'RAFAEL SILVA MONTEIRO', 'CPF': '72476338249', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Supervisor de logística Nivel I', 'DATAADMISSAO': datetime.datetime(2020, 9, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.004', 'CODFUNCAO': '000271', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1395} +{'CODCOLIGADA': 1, 'CHAPA': '051444', 'NOME': 'RAFAELA DA SILVA DE SOUZA SALES', 'CPF': '02673683216', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Supervisor Administrativo nível I', 'DATAADMISSAO': datetime.datetime(2021, 10, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6403} +{'CODCOLIGADA': 1, 'CHAPA': '051827', 'NOME': 'RAFAELA MARIANA ALBUQUERQUE GOMES', 'CPF': '01613445261', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2024, 1, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1563} +{'CODCOLIGADA': 5, 'CHAPA': '008', 'NOME': 'RAFAELA MERICIA MENDES DA SILVA', 'CPF': '95295593215', 'SECAO': 'EXPANSAO E MANUTENCAO', 'FUNCAO': 'Engenheiro (a) Civil', 'DATAADMISSAO': datetime.datetime(2023, 11, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.10', 'CODFUNCAO': '000393', 'SALARIO': Decimal('5031.12'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '036136', 'NOME': 'RAIMUNDA NONATA VERAS DA SILVA', 'CPF': '61563951215', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 10, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3039} +{'CODCOLIGADA': 2, 'CHAPA': '044934', 'NOME': 'RAIMUNDO AUGUSTO SANTOS RIBEIRO', 'CPF': '59117850215', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Supervisor de logística Nivel II', 'DATAADMISSAO': datetime.datetime(2022, 2, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000261', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051777', 'NOME': 'RAIMUNDO NONATO DA SILVA MENDONCA', 'CPF': '31848532253', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2023, 10, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3679} +{'CODCOLIGADA': 1, 'CHAPA': '051431', 'NOME': 'RAIMUNDO NONATO NEVES FARIAS', 'CPF': '78056152253', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 7, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5375} +{'CODCOLIGADA': 1, 'CHAPA': '052353', 'NOME': 'RAIMUNDO VITOR RODRIGUES CARDOSO', 'CPF': '08983753200', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -891} +{'CODCOLIGADA': 1, 'CHAPA': '003433', 'NOME': 'RALDAN SANTANA DE CASTRO', 'CPF': '85025240204', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 8286} +{'CODCOLIGADA': 1, 'CHAPA': '005731', 'NOME': 'RAQUEL BATISTA BESSA', 'CPF': '04805822465', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2021, 12, 27, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1008} +{'CODCOLIGADA': 1, 'CHAPA': '051124', 'NOME': 'RAQUEL MOTA LOBATO', 'CPF': '71624309291', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 7, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 14939} +{'CODCOLIGADA': 3, 'CHAPA': '000011', 'NOME': 'RENAN FROES DE CARVALHO', 'CPF': '00512643237', 'SECAO': 'CONTABILIDADE', 'FUNCAO': 'Analista Contábil Nível III', 'DATAADMISSAO': datetime.datetime(2022, 3, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '04', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 111} +{'CODCOLIGADA': 2, 'CHAPA': '052231', 'NOME': 'RENAN HENRIQUE DOS SANTOS FERREIRA', 'CPF': '01397472227', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051956', 'NOME': 'RENAN PINHEIRO SENA', 'CPF': '08182563208', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 7574} +{'CODCOLIGADA': 1, 'CHAPA': '051480', 'NOME': 'RENAN SOUSA DA SILVA', 'CPF': '05267630276', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Supervisor de Estoque Nivel II', 'DATAADMISSAO': datetime.datetime(2022, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000168', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9393} +{'CODCOLIGADA': 1, 'CHAPA': '002677', 'NOME': 'RENATO BATISTA COSTA', 'CPF': '90061357200', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Gerente de Loja', 'DATAADMISSAO': datetime.datetime(2020, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000208', 'SALARIO': Decimal('3729.18'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052247', 'NOME': 'RENATO SILVA DE SOUZA', 'CPF': '80546013287', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052334', 'NOME': 'RHUAN ROMERO CASCAES BARROS', 'CPF': '92091512249', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052228', 'NOME': 'RICARDO DO NASCIMENTO BAIA', 'CPF': '70055751210', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'V', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051957', 'NOME': 'RICHARDSON SILVA PINTO', 'CPF': '06870760217', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 13421} +{'CODCOLIGADA': 2, 'CHAPA': '052621', 'NOME': 'RILEY GARDSON PINTO MORAIS JUNIOR', 'CPF': '55194869215', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 12, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051812', 'NOME': 'RITA DE CASSIA DA SILVA GRANJEIRA DE OLIVEIRA', 'CPF': '48946958391', 'SECAO': 'COMERCIAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 1, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.014', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6070} +{'CODCOLIGADA': 1, 'CHAPA': '051902', 'NOME': 'RIVELINO AUGUSTO SANTANA LIMA', 'CPF': '57384452287', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2024, 5, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6037} +{'CODCOLIGADA': 2, 'CHAPA': '052502', 'NOME': 'ROBENILSON DO NASCIMENTO SANTOS', 'CPF': '99301695200', 'SECAO': 'EXPANSAO E MANUTENCAO', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.012', 'CODFUNCAO': '000165', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052033', 'NOME': 'ROBERTO DE OLIVEIRA NASCIMENTO', 'CPF': '66185718200', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2024, 6, 28, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2220} +{'CODCOLIGADA': 1, 'CHAPA': '036116', 'NOME': 'ROBSON DA SILVA RAMALHO', 'CPF': '02165375258', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 7, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 7397} +{'CODCOLIGADA': 1, 'CHAPA': '003951', 'NOME': 'ROBSON GALHARDO GOMES', 'CPF': '72453150278', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2022, 1, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1506} +{'CODCOLIGADA': 1, 'CHAPA': '036135', 'NOME': 'ROBSON SOARES DE SOUZA', 'CPF': '77793811291', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 10, 13, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5228} +{'CODCOLIGADA': 2, 'CHAPA': '044884', 'NOME': 'RODENYL VINAGRE DINIZ', 'CPF': '91997968215', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2021, 9, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '036100', 'NOME': 'RODOLFO RODRIGO NEVES DE OLIVEIRA', 'CPF': '00056032269', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 10, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1250} +{'CODCOLIGADA': 3, 'CHAPA': '003852', 'NOME': 'RODRIGO JORGE BARBOSA RAMOS', 'CPF': '95553002249', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 11, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3082} +{'CODCOLIGADA': 1, 'CHAPA': '003356', 'NOME': 'RODRIGO LAGO RODRIGUES', 'CPF': '02597600211', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Supervisor de Estoque Nivel II', 'DATAADMISSAO': datetime.datetime(2020, 11, 12, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000168', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10470} +{'CODCOLIGADA': 2, 'CHAPA': '051673', 'NOME': 'RODRIGO MENDES QUEIROZ', 'CPF': '04785727276', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2023, 7, 17, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4327} +{'CODCOLIGADA': 2, 'CHAPA': '051808', 'NOME': 'RODRIGO PEREIRA DA SILVA', 'CPF': '70011372273', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 12, 15, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052516', 'NOME': 'RODRIGO RODRIGUES DE LIMA', 'CPF': '07285176206', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052328', 'NOME': 'RODRIGO SANTOS PEREIRA', 'CPF': '63564052364', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 12, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051628', 'NOME': 'ROGERIO MELO DOS REMEDIOS', 'CPF': '01582333289', 'SECAO': 'LOJA 9 LOGISTICA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2023, 5, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.003', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11033} +{'CODCOLIGADA': 1, 'CHAPA': '052586', 'NOME': 'ROGERIO SILVA COSTA', 'CPF': '07972003203', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3879} +{'CODCOLIGADA': 1, 'CHAPA': '052348', 'NOME': 'RONALD FELIPE DE OLIVEIRA FARIAS', 'CPF': '08786960245', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -176} +{'CODCOLIGADA': 1, 'CHAPA': '003333', 'NOME': 'RONALD FERREIRA BORCEM', 'CPF': '85711764268', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel II', 'DATAADMISSAO': datetime.datetime(2018, 3, 20, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '006.004.001', 'CODFUNCAO': '000284', 'SALARIO': Decimal('2787.22'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003418', 'NOME': 'RONALDO FIGUEIREDO DE MIRANDA', 'CPF': '46090576204', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 1, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1928} +{'CODCOLIGADA': 2, 'CHAPA': '000446', 'NOME': 'RONALDO JOSE DE SOUSA', 'CPF': '26290200291', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel IV', 'DATAADMISSAO': datetime.datetime(2019, 1, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000164', 'SALARIO': Decimal('2199.39'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052488', 'NOME': 'RONALDO MACHADO DE LIMA', 'CPF': '55267076287', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 5, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -528} +{'CODCOLIGADA': 2, 'CHAPA': '044852', 'NOME': 'RONES DE JESUS SANTOS', 'CPF': '74913204220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel IV', 'DATAADMISSAO': datetime.datetime(2021, 7, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000409', 'SALARIO': Decimal('4720.66'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003431', 'NOME': 'ROSANA DOS SANTOS MONTEIRO', 'CPF': '73772879268', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2020, 4, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000163', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2262} +{'CODCOLIGADA': 1, 'CHAPA': '003354', 'NOME': 'ROSANE MONTEIRO MAURICIO', 'CPF': '00538624221', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 8, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1895} +{'CODCOLIGADA': 1, 'CHAPA': '052543', 'NOME': 'ROSENILDA RIBEIRO FERREIRA', 'CPF': '97579076268', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2025, 6, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 9756} +{'CODCOLIGADA': 5, 'CHAPA': '002', 'NOME': 'ROSIANE PELAES PINTO', 'CPF': '00500684235', 'SECAO': 'COMERCIAL', 'FUNCAO': 'Gerente Geral', 'DATAADMISSAO': datetime.datetime(2023, 5, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.06', 'CODFUNCAO': '000343', 'SALARIO': Decimal('19565.46'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '051460', 'NOME': 'ROSICLEA SOUZA DA SILVA', 'CPF': '86409638272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2022, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5843} +{'CODCOLIGADA': 1, 'CHAPA': '003373', 'NOME': 'ROSINEIDE FERREIRA DA SILVA', 'CPF': '87081849253', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Supervisor Administrativo nível I', 'DATAADMISSAO': datetime.datetime(2022, 5, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000415', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5589} +{'CODCOLIGADA': 5, 'CHAPA': '024', 'NOME': 'RUI GREGORIO DA COSTA CASTRO', 'CPF': '66049636249', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Gerente de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 1, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.11', 'CODFUNCAO': '000047', 'SALARIO': Decimal('13000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052108', 'NOME': 'SALOMAO HENRIQUE LOBO ABREU', 'CPF': '99009056287', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Assistente de Logistica Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 7, 26, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000238', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052539', 'NOME': 'SAMYLLE DA SILVA PEREIRA', 'CPF': '06770085208', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 6, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 627} +{'CODCOLIGADA': 2, 'CHAPA': '051528', 'NOME': 'SANDRO LUIZ CARDOSO FERREIRA', 'CPF': '04659411257', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2022, 12, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052123', 'NOME': 'SARAH EVELYN DE JESUS DE SOUZA', 'CPF': '08625865267', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2024, 8, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -23} +{'CODCOLIGADA': 5, 'CHAPA': '017', 'NOME': 'SEBASTIAO RODRIGUES DA COSTA NETO', 'CPF': '01769541209', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Gerente de Supply', 'DATAADMISSAO': datetime.datetime(2024, 8, 28, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '1.09', 'CODFUNCAO': '000399', 'SALARIO': Decimal('12000.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '052054', 'NOME': 'SERGIO MAIA COELHO', 'CPF': '19196915889', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 7, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -440} +{'CODCOLIGADA': 2, 'CHAPA': '004432', 'NOME': 'SERGIO SARDINHA CARVALHO', 'CPF': '79403891220', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2019, 11, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052479', 'NOME': 'SHEILA COSTA SANTOS', 'CPF': '91776384253', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2025, 4, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3751} +{'CODCOLIGADA': 1, 'CHAPA': '003691', 'NOME': 'SHIRLENE DA SILVA CHERMONT', 'CPF': '75345501220', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 3, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1752} +{'CODCOLIGADA': 1, 'CHAPA': '000578', 'NOME': 'SILMARA TRAVASSOS FURTADO', 'CPF': '01958519278', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Assistente de Credito Nivel VI', 'DATAADMISSAO': datetime.datetime(2021, 11, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000316', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 23164} +{'CODCOLIGADA': 1, 'CHAPA': '051947', 'NOME': 'SILVANA PEIXOTO SOARES', 'CPF': '77113330215', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2024, 7, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 19021} +{'CODCOLIGADA': 1, 'CHAPA': '051688', 'NOME': 'SILVANA SILVA', 'CPF': '82346712272', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras IV', 'DATAADMISSAO': datetime.datetime(2023, 8, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.006', 'CODFUNCAO': '000424', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 817} +{'CODCOLIGADA': 1, 'CHAPA': '003374', 'NOME': 'SILVIO JOSÉ DA SILVA LIMA', 'CPF': '78286182200', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Repositor de Mercadoria', 'DATAADMISSAO': datetime.datetime(2022, 5, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000043', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6400} +{'CODCOLIGADA': 1, 'CHAPA': '051699', 'NOME': 'SOCRATES SOUZA DA SILVA', 'CPF': '78888433287', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 557} +{'CODCOLIGADA': 1, 'CHAPA': '052635', 'NOME': 'SOLANGE DAS GRACAS CAVALCANTE FEIO', 'CPF': '32859740287', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2026, 2, 5, 0, 0), 'CODSITUACAO': 'Z', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '051976', 'NOME': 'STHEFANY NATALIA SANTOS BRITO', 'CPF': '05712362279', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Supervisor de Loja', 'DATAADMISSAO': datetime.datetime(2024, 6, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000240', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 1, 'CHAPA': '002692', 'NOME': 'SUELLANE PINTO PEREIRA', 'CPF': '01729517200', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras I', 'DATAADMISSAO': datetime.datetime(2019, 12, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.006', 'CODFUNCAO': '000402', 'SALARIO': Decimal('1930.60'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1433} +{'CODCOLIGADA': 1, 'CHAPA': '002684', 'NOME': 'SUIANNY LISSANDRA FERREIRA MESSIAS', 'CPF': '73212393220', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 8, 26, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5277} +{'CODCOLIGADA': 1, 'CHAPA': '051647', 'NOME': 'TABITA MOTA DOS ANJOS', 'CPF': '07525617236', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2023, 5, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 8411} +{'CODCOLIGADA': 1, 'CHAPA': '051519', 'NOME': 'TALYSSA LIMA RIBEIRO', 'CPF': '03141394270', 'SECAO': 'LOJA 5 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2022, 12, 1, 0, 0), 'CODSITUACAO': 'E', 'CODSECAO': '005.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -164} +{'CODCOLIGADA': 1, 'CHAPA': '026113', 'NOME': 'TATIANA CAVALHEIRO GUIMARAES', 'CPF': '94383146287', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2021, 6, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '007.001.002', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2075} +{'CODCOLIGADA': 1, 'CHAPA': '052509', 'NOME': 'TAYNA CLICIA DA SILVA DOS SANTOS', 'CPF': '05614264221', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'ASSISTENTE DE CREDITO', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000134', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 4739} +{'CODCOLIGADA': 2, 'CHAPA': '052544', 'NOME': 'THAIS CRISTINA DOS SANTOS MOURAO', 'CPF': '03695456213', 'SECAO': 'GENTE E GESTAO', 'FUNCAO': 'Tecnico de Segurança do Trabalho', 'DATAADMISSAO': datetime.datetime(2025, 6, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.011', 'CODFUNCAO': '000360', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -981} +{'CODCOLIGADA': 1, 'CHAPA': '026102', 'NOME': 'THAIS DIAS PIRES', 'CPF': '94744610234', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2021, 1, 28, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000163', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5728} +{'CODCOLIGADA': 1, 'CHAPA': '051582', 'NOME': 'THAIS DO NASCIMENTO GOMES', 'CPF': '02995479226', 'SECAO': 'LOJA 1 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2023, 3, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 877} +{'CODCOLIGADA': 3, 'CHAPA': '052568', 'NOME': 'THAIS DO SOCORRO MARCIEIRA MENDONCA', 'CPF': '89994272268', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 3, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2268} +{'CODCOLIGADA': 3, 'CHAPA': '051925', 'NOME': 'THAISA SANDRA BARATA VILHENA', 'CPF': '01362662232', 'SECAO': 'COMPRAS', 'FUNCAO': 'Analista de Compras IV', 'DATAADMISSAO': datetime.datetime(2024, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.012', 'CODFUNCAO': '000421', 'SALARIO': Decimal('2454.50'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -5} +{'CODCOLIGADA': 1, 'CHAPA': '052278', 'NOME': 'THALISON ANDERSON RODRIGUES DA SILVA', 'CPF': '02519602260', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Auxiliar de estoque Nivel V', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000321', 'SALARIO': Decimal('1851.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051754', 'NOME': 'THALISON DO ROSARIO GOMES', 'CPF': '02444156250', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051807', 'NOME': 'THAYNA AIRES ANDRADE', 'CPF': '01249032237', 'SECAO': 'CONTABILIDADE', 'FUNCAO': 'Supervisor de Contabilidade Nivel III', 'DATAADMISSAO': datetime.datetime(2023, 12, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.002', 'CODFUNCAO': '000269', 'SALARIO': Decimal('2996.96'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051503', 'NOME': 'THAYNA ALHO FARIAS', 'CPF': '03733237277', 'SECAO': 'FINANCEIRO', 'FUNCAO': 'Analista Financeiro Nivel III', 'DATAADMISSAO': datetime.datetime(2022, 10, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.001', 'CODFUNCAO': '000368', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 530} +{'CODCOLIGADA': 2, 'CHAPA': '052209', 'NOME': 'THIAGO DOS SANTOS DA SILVA', 'CPF': '03493258208', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052190', 'NOME': 'THIAGO FRANCA DE SOUZA', 'CPF': '04794468229', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3456} +{'CODCOLIGADA': 2, 'CHAPA': '052500', 'NOME': 'THIAGO SARMENTO DE OLIVEIRA', 'CPF': '09977437270', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052499', 'NOME': 'THIAGO YURI DA SILVA SOARES', 'CPF': '04497608204', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 12, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '003311', 'NOME': 'THIEGO FREITAS MORAES', 'CPF': '00948133295', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Supervisor de logística Nivel II', 'DATAADMISSAO': datetime.datetime(2017, 11, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.004.004', 'CODFUNCAO': '000261', 'SALARIO': Decimal('2724.51'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1099} +{'CODCOLIGADA': 1, 'CHAPA': '051509', 'NOME': 'TIAGO JOSE FARIAS DOS SANTOS', 'CPF': '02438413298', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 11, 9, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2509} +{'CODCOLIGADA': 1, 'CHAPA': '052538', 'NOME': 'TIAGO LISBOA BRASIL', 'CPF': '06807867247', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 6, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 272} +{'CODCOLIGADA': 3, 'CHAPA': '051566', 'NOME': 'UTUPIRANI APRIGIO', 'CPF': '57569207220', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2023, 2, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2420} +{'CODCOLIGADA': 2, 'CHAPA': '052241', 'NOME': 'VALBERTO SANTOS DE SOUZA', 'CPF': '70851824234', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 10, 11, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '051996', 'NOME': 'VALDECIR DO NASCIMENTO CORREIA', 'CPF': '06935887216', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2024, 6, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1030} +{'CODCOLIGADA': 1, 'CHAPA': '036147', 'NOME': 'VALDEILSON SANTA BRIGIDA FURTADO', 'CPF': '42874874272', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2021, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10881} +{'CODCOLIGADA': 2, 'CHAPA': '044151', 'NOME': 'VALDEMAR REIS DO ROSARIO', 'CPF': '02575569230', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2021, 5, 24, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052097', 'NOME': 'VALDIR SENA DE OLIVEIRA', 'CPF': '75833514215', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 7, 26, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052567', 'NOME': 'VANESSA SOUSA DE PAIVA', 'CPF': '01718744200', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Gerente de Loja', 'DATAADMISSAO': datetime.datetime(2025, 2, 10, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000208', 'SALARIO': Decimal('3729.18'), 'CODSINDICATO': '01', 'INICIOPER': None, 'FIMPER': None, 'SALDO_MINUTOS': None} +{'CODCOLIGADA': 2, 'CHAPA': '051756', 'NOME': 'VARLINDO CAMPOS BAIA', 'CPF': '64184293204', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044891', 'NOME': 'VERISSIMO VILHENA DOS SANTOS', 'CPF': '63764938234', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2021, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052010', 'NOME': 'VICTO LARANJEIRA GULART', 'CPF': '10848939328', 'SECAO': 'LOGISTICA SUPPLY', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 6, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.006', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052578', 'NOME': 'VICTOR ALMEIDA DA SILVA', 'CPF': '06922534247', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 9, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.002', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052514', 'NOME': 'VICTOR AUGUSTO SILVA MORAES', 'CPF': '70219671281', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 5, 23, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '052564', 'NOME': 'VICTOR HENRIQUE ARAUJO DE SOUZA', 'CPF': '05242956208', 'SECAO': 'MARKETING', 'FUNCAO': 'Analista de Marketing Nivel III', 'DATAADMISSAO': datetime.datetime(2025, 8, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000332', 'SALARIO': Decimal('2251.85'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 300} +{'CODCOLIGADA': 2, 'CHAPA': '052305', 'NOME': 'VICTOR HUGO DA CUNHA SOARES', 'CPF': '05980173218', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 11, 18, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051885', 'NOME': 'VICTOR HUGO DOS SANTOS DO NASCIMENTO', 'CPF': '06335963299', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 4, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.004', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -2390} +{'CODCOLIGADA': 1, 'CHAPA': '052632', 'NOME': 'VICTOR MATHEUS PUREZA RODRIGUES', 'CPF': '08823913306', 'SECAO': 'LOJA 10 LOGISTICA ', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2026, 1, 19, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.003', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052573', 'NOME': 'VINICIOS DA SILVA CARVALHO', 'CPF': '14785377607', 'SECAO': 'LOGISTICA OPERACIONAL BR', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 8, 20, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.005', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052504', 'NOME': 'VINICIUS DE MORAES DA SILVA', 'CPF': '05624907281', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2025, 5, 15, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052466', 'NOME': 'VINICIUS OLIMPIO NASCIMENTO DA SILVA', 'CPF': '70090102266', 'SECAO': 'LOJA 2 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 4, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '002.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -3764} +{'CODCOLIGADA': 1, 'CHAPA': '052382', 'NOME': 'VINICIUS RENAN COSTA RODRIGUES', 'CPF': '04477478275', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 1185} +{'CODCOLIGADA': 3, 'CHAPA': '052323', 'NOME': 'WALBER DO ESPIRITO SANTO BRITO', 'CPF': '95847391234', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2024, 12, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -1705} +{'CODCOLIGADA': 3, 'CHAPA': '003848', 'NOME': 'WALDECY PANTOJA LOBATO', 'CPF': '66768934287', 'SECAO': 'EXPANSAO E MANUTENCAO', 'FUNCAO': 'Pedreiro Nivel I', 'DATAADMISSAO': datetime.datetime(2022, 11, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.001', 'CODFUNCAO': '000327', 'SALARIO': Decimal('2197.46'), 'CODSINDICATO': '04', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -22824} +{'CODCOLIGADA': 1, 'CHAPA': '005730', 'NOME': 'WALDENIR DE SOUZA GUIMARAES', 'CPF': '58276874215', 'SECAO': 'LOJA 9 LOGISTICA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2021, 12, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.003', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 11284} +{'CODCOLIGADA': 1, 'CHAPA': '052532', 'NOME': 'WALISSON NUNES SILVA', 'CPF': '02233648277', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel VI', 'DATAADMISSAO': datetime.datetime(2025, 6, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '009.001.002', 'CODFUNCAO': '000313', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 5436} +{'CODCOLIGADA': 2, 'CHAPA': '052434', 'NOME': 'WALLACE DA SILVA TAVARES', 'CPF': '00962666270', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2025, 2, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '004433', 'NOME': 'WALTER MAIA DA CONCEICAO', 'CPF': '45274797253', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Encarregado de Manunteção', 'DATAADMISSAO': datetime.datetime(2019, 11, 1, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000346', 'SALARIO': Decimal('2165.24'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 3, 'CHAPA': '003847', 'NOME': 'WALWYLEN DOS SANTOS BARROSO', 'CPF': '79670822220', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2022, 11, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 424} +{'CODCOLIGADA': 1, 'CHAPA': '052182', 'NOME': 'WANDINEIA ALVES GONCALVES', 'CPF': '01654332216', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000059', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 958} +{'CODCOLIGADA': 2, 'CHAPA': '052216', 'NOME': 'WANESSA SERRAO DA SILVA', 'CPF': '00812082273', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Servicos Gerais', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'F', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000165', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051986', 'NOME': 'WARLEN EDUARDO CARVALHO RODRIGUES', 'CPF': '05888668222', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Operador de Empilhadeira Nivel I', 'DATAADMISSAO': datetime.datetime(2024, 6, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000377', 'SALARIO': Decimal('2085.05'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052027', 'NOME': 'WARLEN SEBASTIAO DOS SANTOS VASCONCELOS', 'CPF': '70619645296', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2024, 6, 22, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '036150', 'NOME': 'WELITON FABRICIO SOUSA DA SILVA', 'CPF': '03621996206', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2021, 9, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000282', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 17988} +{'CODCOLIGADA': 3, 'CHAPA': '052424', 'NOME': 'WELLINGTON REIS PEREIRA', 'CPF': '06374139208', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 3198} +{'CODCOLIGADA': 1, 'CHAPA': '003682', 'NOME': 'WENDEL DO NASCIMENTO CARVALHO', 'CPF': '61789313287', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2019, 1, 2, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2430} +{'CODCOLIGADA': 1, 'CHAPA': '052381', 'NOME': 'WENDEL PATRICK LIBONATI DIAS', 'CPF': '06264319210', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Estoque Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000280', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 8660} +{'CODCOLIGADA': 2, 'CHAPA': '052629', 'NOME': 'WENDELL DIAS DE SOUSA', 'CPF': '60519100263', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '052397', 'NOME': 'WENDELL KAUA RAMOS ALMEIDA', 'CPF': '04973473260', 'SECAO': 'LOGISTICA OPERACIONAL CEDL', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.003', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '051700', 'NOME': 'WENDERSON LUIZ DE LIMA PINTO', 'CPF': '07929257266', 'SECAO': 'LOGISTICA ESTOQUE', 'FUNCAO': 'Assistente de Logistica Nivel IV', 'DATAADMISSAO': datetime.datetime(2023, 8, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '006.003.013', 'CODFUNCAO': '000257', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '051757', 'NOME': 'WENDERSON RAFAEL SANTIAGO AMARAL', 'CPF': '05860543247', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2023, 10, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -3110} +{'CODCOLIGADA': 1, 'CHAPA': '052463', 'NOME': 'WENISSON WAGNER CARDOSO DE SOUZA', 'CPF': '00790314207', 'SECAO': 'LOJA 3 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 4, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '003.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 244} +{'CODCOLIGADA': 3, 'CHAPA': '052191', 'NOME': 'WESLEY BARROS DA SILVA', 'CPF': '04103756241', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas Nivel IV', 'DATAADMISSAO': datetime.datetime(2024, 10, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.008', 'CODFUNCAO': '000294', 'SALARIO': Decimal('1838.66'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10210} +{'CODCOLIGADA': 1, 'CHAPA': '002681', 'NOME': 'WESLEY SILVA DA SILVA', 'CPF': '05244779222', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Consultor de Vendas', 'DATAADMISSAO': datetime.datetime(2020, 7, 21, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000144', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 784} +{'CODCOLIGADA': 1, 'CHAPA': '052459', 'NOME': 'WESLLEY CORREA DIAS', 'CPF': '02940783209', 'SECAO': 'LOJA 10 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 4, 4, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '010.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1780.00'), 'CODSINDICATO': '05', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 6514} +{'CODCOLIGADA': 1, 'CHAPA': '052528', 'NOME': 'WEVERTON SILVA TAVARES', 'CPF': '07587117270', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'Auxiliar de Reposição', 'DATAADMISSAO': datetime.datetime(2025, 6, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000327', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 10330} +{'CODCOLIGADA': 2, 'CHAPA': '052335', 'NOME': 'WILLIAM MEDEIROS ROCHA', 'CPF': '37554018272', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 1, 6, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -669} +{'CODCOLIGADA': 2, 'CHAPA': '052624', 'NOME': 'WILLYS DE KASSIO SILVA DE SOUZA', 'CPF': '11649209282', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Auxiliar de Logistica', 'DATAADMISSAO': datetime.datetime(2026, 1, 5, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000061', 'SALARIO': Decimal('1621.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 2, 'CHAPA': '044167', 'NOME': 'WILSON SIDRIM DOS SANTOS NETO', 'CPF': '70700788204', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2021, 6, 14, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.003.010', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -446} +{'CODCOLIGADA': 1, 'CHAPA': '052555', 'NOME': 'YAGO GUILHERME GUIMARAES BARROSO', 'CPF': '07036743239', 'SECAO': 'LOJA 8 OPERACIONAL', 'FUNCAO': 'Operador de Caixa', 'DATAADMISSAO': datetime.datetime(2025, 7, 16, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '008.001.002', 'CODFUNCAO': '000042', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 587} +{'CODCOLIGADA': 2, 'CHAPA': '051694', 'NOME': 'YAN DE SOUSA MEIRELES', 'CPF': '06342050210', 'SECAO': 'LOJA 9 OPERACIONAL', 'FUNCAO': 'Assistente de Estoque IV', 'DATAADMISSAO': datetime.datetime(2023, 8, 7, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.001.009', 'CODFUNCAO': '000282', 'SALARIO': Decimal('2043.00'), 'CODSINDICATO': '03', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 18156} +{'CODCOLIGADA': 3, 'CHAPA': '052467', 'NOME': 'YARLEY SERRA DA LUZ', 'CPF': '07596610226', 'SECAO': 'SEGURANCA PATRIMONIAL', 'FUNCAO': 'Fiscal de Loja', 'DATAADMISSAO': datetime.datetime(2025, 4, 4, 0, 0), 'CODSITUACAO': 'P', 'CODSECAO': '001.001.003', 'CODFUNCAO': '000116', 'SALARIO': Decimal('1680.00'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 122} +{'CODCOLIGADA': 1, 'CHAPA': '026120', 'NOME': 'YASMIN FREITAS ASSIS', 'CPF': '06930046221', 'SECAO': 'LOJA 7 OPERACIONAL', 'FUNCAO': 'Supervisor de E-commerce Nivel IV', 'DATAADMISSAO': datetime.datetime(2021, 9, 1, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '007.001.002', 'CODFUNCAO': '000423', 'SALARIO': Decimal('3296.62'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 2762} +{'CODCOLIGADA': 2, 'CHAPA': '052408', 'NOME': 'ZAQUEU CORREA SACRAMENTO', 'CPF': '91286980291', 'SECAO': 'LOGISTICA FROTA', 'FUNCAO': 'Motorista Nivel I', 'DATAADMISSAO': datetime.datetime(2025, 2, 3, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '001.004.001', 'CODFUNCAO': '000161', 'SALARIO': Decimal('2163.23'), 'CODSINDICATO': '02', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': 0} +{'CODCOLIGADA': 1, 'CHAPA': '052620', 'NOME': 'ZENILSON PERDIGAO DE OLIVEIRA', 'CPF': '10293506205', 'SECAO': 'LOJA 4 OPERACIONAL', 'FUNCAO': 'APRENDIZ', 'DATAADMISSAO': datetime.datetime(2025, 12, 17, 0, 0), 'CODSITUACAO': 'A', 'CODSECAO': '004.001.002', 'CODFUNCAO': '000038', 'SALARIO': Decimal('761.55'), 'CODSINDICATO': '01', 'INICIOPER': datetime.datetime(2025, 12, 21, 0, 0), 'FIMPER': datetime.datetime(2026, 1, 20, 0, 0), 'SALDO_MINUTOS': -720} diff --git a/config/__init__.py b/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/asgi.py b/config/asgi.py new file mode 100644 index 0000000..787b362 --- /dev/null +++ b/config/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for config project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_asgi_application() diff --git a/config/debug_static_logger.py b/config/debug_static_logger.py new file mode 100644 index 0000000..8f72a81 --- /dev/null +++ b/config/debug_static_logger.py @@ -0,0 +1,47 @@ +# Middleware de diagnóstico: grava uma linha em NDJSON ao acessar /admin/ +# Remover após confirmar correção do admin sem estilo. +import json +from pathlib import Path +from django.conf import settings + +LOG_PATH = Path("/home/f3lipe/dev/.cursor/debug-288380.log") +SESSION_ID = "288380" + + +class DebugStaticLoggerMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + # #region agent log + if request.path.startswith("/admin/"): + static_root = getattr(settings, "STATIC_ROOT", None) + admin_css_exists = False + if static_root: + p = Path(static_root) / "admin" / "css" + admin_css_exists = p.exists() and any(p.iterdir()) + try: + with open(LOG_PATH, "a") as f: + f.write( + json.dumps( + { + "sessionId": SESSION_ID, + "hypothesisId": "H1", + "location": "config/debug_static_logger.py", + "message": "admin request static config", + "data": { + "DEBUG": settings.DEBUG, + "STATIC_URL": getattr(settings, "STATIC_URL", None), + "STATIC_ROOT": str(static_root) if static_root else None, + "admin_css_exists": admin_css_exists, + }, + "timestamp": __import__("time").time() * 1000, + }, + ensure_ascii=False, + ) + + "\n" + ) + except Exception: + pass + # #endregion + return self.get_response(request) diff --git a/config/settings/__init__.py b/config/settings/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/settings/base.py b/config/settings/base.py new file mode 100644 index 0000000..06ff368 --- /dev/null +++ b/config/settings/base.py @@ -0,0 +1,129 @@ +# SGMP_PROD/config/settings/base.py + +import os +from pathlib import Path +from dotenv import load_dotenv +load_dotenv() +BASE_DIR = Path(__file__).resolve().parent.parent.parent + +# Em produção defina a variável de ambiente SECRET_KEY; default apenas para desenvolvimento. +SECRET_KEY = os.getenv('SECRET_KEY', 'dev-insecure-key') + +DEBUG = False + +# Lista separada por vírgulas; em produção defina ALLOWED_HOSTS (ex.: "localhost,127.0.0.1,app.exemplo.com"). +ALLOWED_HOSTS = [h.strip() for h in os.getenv('ALLOWED_HOSTS', '').split(',') if h.strip()] + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + # Apps de terceiros + 'corsheaders', + # Seus apps + 'solicitacoes' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'whitenoise.middleware.WhiteNoiseMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'corsheaders.middleware.CorsMiddleware', + # 'winthor_sessions.middleware.WinthorBasicAuthMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'config.urls' +WSGI_APPLICATION = 'config.wsgi.application' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR / 'templates'], + + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + 'solicitacoes.context_processors.usuario_sistema', + ], + }, + }, +] + +# Banco de dados padrão (SQLite), será sobrescrito em produção e testes. +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + +AUTH_PASSWORD_VALIDATORS = [ + {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'}, + {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'}, + {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'}, + {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, +] + +# Internacionalização +LANGUAGE_CODE = 'pt-br' +TIME_ZONE = 'America/Sao_Paulo' +USE_I18N = True +USE_TZ = True + +# Arquivos Estáticos (CSS, JS, Imagens) +STATIC_URL = '/static/' +STATICFILES_DIRS = [d for d in [BASE_DIR / 'static'] if d.exists()] +STATIC_ROOT = BASE_DIR / 'staticfiles' +STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage' + +# Arquivos de Mídia (Uploads de usuários) +MEDIA_URL = '/media/' +MEDIA_ROOT = BASE_DIR / 'mediafiles' + +# Chave Primária Padrão +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + + +# ============================ +# CONFIGURAÇÃO DE SESSÃO +# ============================ + +# 30 minutos (em segundos) +SESSION_COOKIE_AGE = 30 * 60 +# SESSION_COOKIE_AGE = 1 + +# Expira por tempo, não só ao fechar browser +SESSION_EXPIRE_AT_BROWSER_CLOSE = True + +SESSION_SAVE_EVERY_REQUEST = True + +# Segurança básica do cookie +SESSION_COOKIE_HTTPONLY = True +SESSION_COOKIE_SAMESITE = "Lax" + +SQLSERVER_CONFIG = { + "SERVER": os.getenv("RM_HOST"), + "PORT": int(os.getenv("RM_PORT", 38000)), + "USER": os.getenv("RM_USER"), + "PASSWORD": os.getenv("RM_PASS"), + "DATABASE": os.getenv("RM_DB"), +} + +# ============================ +# CONFIGURAÇÃO DE LOGIN/URLS +# ============================ +LOGIN_URL = "/login/" +LOGIN_REDIRECT_URL = "/" +LOGOUT_REDIRECT_URL = "/login/" \ No newline at end of file diff --git a/config/settings/dev.py b/config/settings/dev.py new file mode 100644 index 0000000..4ebffc7 --- /dev/null +++ b/config/settings/dev.py @@ -0,0 +1,39 @@ +# SGMP_PROD/config/settings/dev.py + +from .base import * + +# Sobrescreve o padrão seguro de 'base.py' para facilitar o desenvolvimento. +DEBUG = True + +# Permite qualquer host durante o desenvolvimento. +ALLOWED_HOSTS = ["*"] +# Permite requisições de qualquer origem (útil para desenvolvimento de frontend separado). +# Requer que 'corsheaders' esteja em INSTALLED_APPS e MIDDLEWARE em base.py. +CORS_ALLOW_ALL_ORIGINS = True + +# Nenhuma outra configuração é necessária, pois já herdamos o banco de dados +# SQLite e outras configurações do 'base.py', que são perfeitas para o desenvolvimento. + +LOGGING = { + "version": 1, + "disable_existing_loggers": False, + + "formatters": { + "verbose": { + "format": "[{asctime}] [{levelname}] {name}: {message}", + "style": "{", + }, + }, + + "handlers": { + "console": { + "class": "logging.StreamHandler", + "formatter": "verbose", + }, + }, + + "root": { + "handlers": ["console"], + "level": "INFO", + }, +} diff --git a/config/settings/prod.py b/config/settings/prod.py new file mode 100644 index 0000000..a6ef878 --- /dev/null +++ b/config/settings/prod.py @@ -0,0 +1,27 @@ +# aigents/settings/prod.py + +from .base import * +import os + +# DEBUG já é False por padrão no base.py, não precisamos redefinir. + +# ALLOWED_HOSTS = ["localhost", "127.0.0.1"] + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.postgresql", + "HOST": os.getenv("DB_HOST"), + "PORT": os.getenv("DB_PORT", 5432), + "USER": os.getenv("DB_USER"), + "PASSWORD": os.getenv("DB_PASSWORD"), + "NAME": os.getenv("DB_NAME"), + } +} + +# CSRF_TRUSTED_ORIGINS = ["https://aigents.f3lipe.com"] +SESSION_COOKIE_SECURE = True +CSRF_COOKIE_SECURE = True + +# Sobrescreve os locais dos arquivos estáticos e de mídia para o servidor de produção. +# STATIC_ROOT = "/var/www/aigents/static/" +# MEDIA_ROOT = "/var/www/aigents/media/" \ No newline at end of file diff --git a/config/settings/test.py b/config/settings/test.py new file mode 100644 index 0000000..201f85d --- /dev/null +++ b/config/settings/test.py @@ -0,0 +1,19 @@ +# aigents/settings/test.py + +from .base import * + +# DEBUG já é False por padrão no base.py, o que é bom para testes. + +# Adiciona apps necessários para testes +INSTALLED_APPS.append("connector") +INSTALLED_APPS.append("winthor_sessions") + +# Sobrescreve o banco de dados para usar um banco de dados SQLite em memória. +# Isso torna os testes muito mais rápidos e garante que eles não toquem +# no banco de dados de desenvolvimento. +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": ":memory:", + } +} \ No newline at end of file diff --git a/config/urls.py b/config/urls.py new file mode 100644 index 0000000..bef034f --- /dev/null +++ b/config/urls.py @@ -0,0 +1,14 @@ +from django.contrib import admin +from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static + +urlpatterns = [ + path("admin/", admin.site.urls), + path("", include("solicitacoes.urls")), +] + +# Servir arquivos de mídia (anexos de pareceres etc.) pela própria aplicação. +# Em ambientes com servidor web dedicado (nginx/apache), essa configuração +# pode ser substituída pelo serviço de arquivos estáticos do servidor. +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/config/wsgi.py b/config/wsgi.py new file mode 100644 index 0000000..d70e87d --- /dev/null +++ b/config/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for config project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.dev') + +application = get_wsgi_application() diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..761c777 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,46 @@ +services: + web: + image: sgmp_prod:latest + container_name: sgmp_prod_web + build: + context: . + dockerfile: Dockerfile + + # Ajuste na formatação do command para evitar quebras de linha indesejadas + command: gunicorn config.wsgi:application --bind 0.0.0.0:8888 --workers 3 --timeout 120 + + # Arquivo .env é opcional - se não existir, usa variáveis de ambiente do sistema + env_file: + - .env + + ports: + - "8888:8888" + + volumes: + - .:/app + - /app/venv + - mediafiles:/app/mediafiles + - staticfiles:/app/staticfiles + + deploy: + resources: + limits: + cpus: "1.50" + memory: 1024M + reservations: + cpus: "0.50" + memory: 512M + + restart: unless-stopped + + networks: + - jurunense_net + +volumes: + mediafiles: + staticfiles: + +networks: + jurunense_net: + external: true + diff --git a/docs/head_relacao_gestor_investigacao.md b/docs/head_relacao_gestor_investigacao.md new file mode 100644 index 0000000..bec46f7 --- /dev/null +++ b/docs/head_relacao_gestor_investigacao.md @@ -0,0 +1,82 @@ +# Head em relação a quem? — Investigação + +## Situação atual + +- O perfil **Head** no SGMP aprova rascunhos enviados por **qualquer** gestor: no dashboard, usuários com perfil HEAD veem todas as solicitações em status `AGUARDANDO_HEAD`, sem filtro por “seus” gestores. +- Ou seja: **não existe hoje nenhuma regra que vincule um Head a um conjunto de gestores**. A pergunta “ele é Head em relação a quem?” ainda não está respondida no código. + +## O que precisamos para filtrar + +Para que um Head só aprove solicitações dos gestores que estão sob sua responsabilidade, é necessário ter em algum lugar a relação **Head ↔ Gestores**. Por exemplo: + +- “Head (matrícula X) é superior dos gestores (matrículas A, B, C)”, ou +- “Gestor (matrícula A) tem gestor imediato Head (matrícula X)”. + +No SGMP: + +- **Solicitação** tem `solicitante` (FK para `UsuarioSistema`). +- **UsuarioSistema** (gestor ou head) tem `matricula` e `perfil`. +- Login é feito via **Winthor**; o `username` do Django é a **matrícula** vinda do Winthor, e o `UsuarioSistema` é identificado por essa `matricula`. + +Ou seja: temos **matrícula do gestor** (solicitante) e **matrícula do Head** (usuário logado). Falta uma **fonte de verdade** que diga qual Head é responsável por qual gestor. + +## Fontes possíveis: RM e Winthor + +### 1. TOTVS RM (SQL Server) + +- O RM tem conceitos de **hierarquia** e **gestor imediato**: + - **Chefia tradicional**: cadastro de chefes/supervisores (em algum campo ou tabela auxiliar). + - **Hierarquia por posição** (versões mais recentes): estrutura por posição/cargo. +- Em muitos clientes RM, a tabela **PFUNC** (ou tabelas relacionadas) expõe o “gestor imediato” do funcionário, por exemplo: + - Campo do tipo **CHAPAGERENTE** (ou **CHAPA_CHEFE**, **CODGERENTE**, etc.) na PFUNC, ou + - Tabela específica de chefia (ex.: PSUPERV, ou tabelas de “Hierarquia por Posição”). +- **Hoje no SGMP**: em `intf_sqlserver.py` a PFUNC é usada para listar colaboradores (CHAPA, NOME, CPF, CODSECAO, CODFUNCAO, etc.). **Nenhuma coluna de gestor imediato / chefia é utilizada**. +- **PessoaRM** no SGMP guarda `id_rm` (CODCOLIGADA-CHAPA) e `matricula` (CHAPA). Não há campo “gestor imediato” ou “chapa do head”. + +**Conclusão RM:** +É **provável** que o RM já tenha condições de dizer “este funcionário (CHAPA) tem gestor imediato (CHAPA do chefe)”, mas isso **depende de**: +- (1) O cliente ter **preenchido** a chefia no RM (campo/tabela de gestor imediato ou hierarquia por posição). +- (2) Sabermos o **nome exato** da coluna/tabela (ex.: CHAPAGERENTE na PFUNC, ou tabela de hierarquia). Isso só pode ser confirmado no banco do RM (lista de colunas da PFUNC ou documentação do ambiente). + +Se existir, por exemplo, `PFUNC.CHAPAGERENTE`: +- Dado o **gestor** (solicitante), precisamos obter a CHAPA dele no RM. O vínculo Gestor SGMP → RM pode ser: `UsuarioSistema.matricula` = CHAPA no RM (se a matrícula do Winthor for a mesma CHAPA), ou um mapeamento explícito (ex.: PessoaRM por matrícula/CPF). +- Com a CHAPA do gestor, consultamos no RM o **CHAPAGERENTE** (ou equivalente) desse registro. Esse valor seria a “CHAPA do Head” no RM. +- No SGMP, o Head logado tem `UsuarioSistema.matricula`. Se essa matrícula for a mesma que a CHAPA do gestor imediato no RM (ou houver mapeamento), podemos filtrar: “mostrar só solicitações cujo solicitante tem gestor imediato = usuário logado (Head)”. + +### 2. Winthor (Oracle) + +- No SGMP, **Winthor** é usado para: + - **Login**: `autenticar_usuario(login, senha)` consulta **PCEMPR** (MATRICULA, USUARIOBD, NOME, EMAIL, CPF, CODFILIAL, SITUACAO). + - **Dados do colaborador**: `buscar_colaborador_oracle(cpf)` também em PCEMPR (MATRICULA, NOME, CPF, SITUACAO, ENDERECO, etc.). +- No pipeline `pipeline_rm_winthor_ad.json` aparecem CODFILIAL, CODSETOR, SITUACAO; **não há campo de gestor / superior / hierarquia**. +- **Não foi encontrada** na documentação consultada referência a campo de “gestor imediato” ou “superior” na tabela PCEMPR do Winthor. Seria necessário: + - Consultar o dicionário de dados ou DBA do Oracle do Winthor no seu ambiente, ou + - Confirmar com a TOTVS/equipe de sistemas se existe tabela/campo de hierarquia no Winthor que possa ser usada para “Head de quem”. + +**Conclusão Winthor:** +Com o que o SGMP usa hoje (PCEMPR para login e busca por CPF), **não há evidência de que já tenhamos condição de saber “Head em relação a quem” apenas pelo Winthor**. Pode existir em outro schema/tabela; isso exige verificação no ambiente. + +## Resumo + +| Fonte | Hoje no SGMP | Possível usar para “Head de quem”? | +|--------|--------------------------------------|-------------------------------------| +| **RM** | PFUNC sem campo de chefia | **Sim, se** existir e estiver preenchido um campo/tabela de gestor imediato (ex.: CHAPAGERENTE). Confirmar no banco do cliente. | +| **Winthor** | PCEMPR para login e dados básicos | **Inconclusivo.** Não há uso de hierarquia. Verificar se existe tabela/campo de superior no Oracle do Winthor. | + +## Próximos passos recomendados + +1. **No banco RM (SQL Server)** + - Listar as colunas da tabela **PFUNC** (ou consultar GCAMPOS onde TABELA = 'PFUNC') e procurar por colunas como CHAPAGERENTE, CHAPA_CHEFE, CODGERENTE, ou equivalente. + - Se existir: verificar se está preenchido para os gestores que devem ter Head; definir se a matrícula do Head no SGMP será a CHAPA do RM ou se será preciso mapear (ex.: por CPF ou por outro identificador). + +2. **No Winthor (Oracle)** + - Verificar se **PCEMPR** ou outra tabela possui campo de “matrícula do superior” / “gestor imediato”. + - Se sim, definir como cruzar com UsuarioSistema (matrícula do Head) para filtrar solicitações. + +3. **No SGMP** + - Manter por enquanto o comportamento atual (Head vê todas as solicitações AGUARDANDO_HEAD) até existir uma fonte confiável de “Head ↔ Gestores”. + - Quando houver essa fonte (RM e/ou Winthor): + - Implementar função (ex.: em `intf_sqlserver.py` ou `intf_winthor.py`) que, dado o Head (matrícula ou id), retorne a lista de matrículas dos gestores sob sua responsabilidade (ou que, dado o gestor, retorne a matrícula do Head). + - No `dashboard_view` (e onde mais listar solicitações para Head), filtrar: `Solicitacao.objects.filter(status=AGUARDANDO_HEAD, solicitante__matricula__in=matriculas_dos_gestores_do_head)` (ou equivalente). + +Este arquivo pode ser usado como referência para a decisão e para a implementação futura do vínculo “Head em relação a quem”. diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..61c4a96 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -e + +echo "=== Executando migrações do banco de dados ===" +python manage.py migrate --noinput || echo "Aviso: Migrações falharam ou não há mudanças" + +echo "=== Coletando arquivos estáticos ===" +# Garante que o diretório existe +mkdir -p /app/staticfiles +python manage.py collectstatic --noinput --clear || { + echo "Aviso: collectstatic falhou, tentando novamente..." + python manage.py collectstatic --noinput || echo "Erro: Não foi possível coletar arquivos estáticos" +} + +echo "=== Verificando arquivos estáticos coletados ===" +ls -la /app/staticfiles/ | head -10 || echo "Diretório staticfiles vazio ou não acessível" + +echo "=== Iniciando servidor Gunicorn ===" +exec "$@" + diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..beea7af --- /dev/null +++ b/manage.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys +from dotenv import load_dotenv + +load_dotenv() + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.dev') + +def main(): + """Run administrative tasks.""" + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/readme b/readme new file mode 100644 index 0000000..6ccc01d --- /dev/null +++ b/readme @@ -0,0 +1,28 @@ +# Link de referencias + - https://miro.com/app/board/uXjVL0plbIo=/ - Projeto no MIRO diagrama + + +# Objetivo principal: + Utilizar a plataforma integrada com sistemas do universo "Jurunense", importando dados como -cargos,-empregados,-setores,-filial/coligada e disponibilizar opções para gestão desses objetos. + Ex: Criar uma solicitação de DESLIGAMENTO + Criar uma solicitação de Movimentação de pessoa (Uma promoção, ou movimentação sem promocao) + '' '' de aumento de quadro. + '' '' Admissão por substituição + +# Integrações externas + - RM (Totvs) + - Winthor (Totvs) + +# Caso de uso sob cada tipo de solicitação. + * Solicitação de DESLIGAMENTO + - Ao escolher essa opção o usuário deve encontrar um formulário que renderize alguns campos (já preenchido ou não) + Chapa + Nome completo + Coligada / filial + Função + Matricula + Centro de Custo + Salário atual + + + Motivo do desligamento diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ecb4b8c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +Django +whitenoise[brotli]>=6.0 +django-extensions +django-environ==0.12.0 +djangorestframework==3.16.1 +pyodbc==5.1.0 +oracledb==2.0.1 +pymssql==2.2.7 +python-dotenv +django-cors-headers +python-dateutil \ No newline at end of file diff --git a/solicitacoes/__init__.py b/solicitacoes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solicitacoes/admin.py b/solicitacoes/admin.py new file mode 100644 index 0000000..96543aa --- /dev/null +++ b/solicitacoes/admin.py @@ -0,0 +1,225 @@ +from django.contrib import admin, messages +from django.urls import path +from django.shortcuts import redirect +from django.utils import timezone + +from .models import HeadGestor, PessoaRM, UsuarioSistema +from .intf_sqlserver import listar_para_selecionar_colaborador +from .intf_winthor import buscar_colaborador_oracle +from .models import Solicitacao + + +@admin.register(PessoaRM) +class PessoaRMAdmin(admin.ModelAdmin): + list_display = ( + "nome", + "matricula", + "cargo", + "setor", + "centro_custo", + "matricula_winthor", + "sincronizado_em", + ) + + search_fields = ( + "nome", + "matricula", + "id_rm", + "matricula_winthor", + ) + + list_filter = ( + "setor", + "cargo", + ) + + readonly_fields = ( + "id_rm", + "sincronizado_em", + "criado_em", + "atualizado_em", + ) + + # Diz ao Django para usar um template customizado + change_list_template = "admin/solicitacoes/pessoarm/pessoarm_changelist.html" + + def get_urls(self): + urls = super().get_urls() + custom_urls = [ + path( + "sync-rm/", + self.admin_site.admin_view(self.sync_rm), + name="pessoarm-sync-rm", + ), + ] + return custom_urls + urls + + def sync_rm(self, request): + dados_rm = listar_para_selecionar_colaborador() + + criados = 0 + atualizados = 0 + winthor_ok = 0 + winthor_erro = 0 + winthor_sem_cpf = 0 + + agora = timezone.now() + + for row in dados_rm: + id_rm = f"{row['CODCOLIGADA']}-{row['CHAPA']}" + + matricula_winthor = None + + # ========================= + # Integração Winthor (CPF) + # ========================= + cpf = row.get("CPF") + + if cpf: + try: + dados_w = buscar_colaborador_oracle(cpf) + + if dados_w and dados_w.get("matricula"): + matricula_winthor = dados_w["matricula"] + winthor_ok += 1 + else: + winthor_erro += 1 + + except Exception: + winthor_erro += 1 + else: + winthor_sem_cpf += 1 + + # ========================= + # Sync RM (sempre executa) + # ========================= + _, created = PessoaRM.objects.update_or_create( + id_rm=id_rm, + defaults={ + "matricula": row["CHAPA"], + "nome": row["NOME"], + "cargo": row["FUNCAO"], + "setor": row["SECAO"], + "centro_custo": row["CODSECAO"], + + "cpf": row["CPF"], + "data_admissao": row["DATAADMISSAO"], + "situacao": row["CODSITUACAO"], + "cod_funcao": row["CODFUNCAO"], + "salario": row["SALARIO"], + "cod_sindicato": row["CODSINDICATO"], + + "saldo_banco_horas_minutos": row["SALDO_MINUTOS"], + "inicio_periodo_banco_horas": row["INICIOPER"], + "fim_periodo_banco_horas": row["FIMPER"], + + "matricula_winthor": matricula_winthor, + "sincronizado_em": agora, + }, + ) + + if created: + criados += 1 + else: + atualizados += 1 + + # ========================= + # Mensagens finais + # ========================= + messages.success( + request, + ( + "Sincronização RM concluída com sucesso. " + f"Criados: {criados} | Atualizados: {atualizados}" + ), + ) + + if winthor_ok: + messages.info( + request, + f"Winthor: {winthor_ok} matrícula(s) sincronizada(s) com sucesso." + ) + + if winthor_sem_cpf: + messages.warning( + request, + f"Winthor: {winthor_sem_cpf} colaborador(es) sem CPF — ignorados." + ) + + if winthor_erro: + messages.warning( + request, + f"Winthor: {winthor_erro} falha(s) ao buscar matrícula." + ) + + return redirect("..") + +@admin.register(UsuarioSistema) +class UsuarioSistemaAdmin(admin.ModelAdmin): + list_display = ( + "nome", + "matricula", + "perfil", + "ativo", + "criado_em", + ) + + list_filter = ( + "perfil", + "ativo", + ) + + search_fields = ( + "nome", + "matricula", + ) + + readonly_fields = ( + "criado_em", + "atualizado_em", + ) + + fieldsets = ( + ("Informações Básicas", { + "fields": ("matricula", "nome", "ativo") + }), + ("Permissões", { + "fields": ("perfil",) + }), + ("Auditoria", { + "fields": ("criado_em", "atualizado_em"), + "classes": ("collapse",) + }), + ) + +@admin.register(HeadGestor) +class HeadGestorAdmin(admin.ModelAdmin): + list_display = ("head", "gestor") + list_filter = ("head",) + search_fields = ("head__nome", "gestor__nome", "head__matricula", "gestor__matricula") + autocomplete_fields = ("head", "gestor") + + +@admin.register(Solicitacao) +class SolicitacaoAdmin(admin.ModelAdmin): + list_display = [ + "id", + "tipo", + "status", + "funcionario", + "solicitante", + "criado_em", + ] + list_filter = ("tipo", "status", "funcionario", "solicitante") + search_fields = ("id", "tipo", "status", "funcionario", "solicitante") + readonly_fields = ("id", "criado_em", "atualizado_em") + fieldsets = ( + ("Informações Básicas", { + "fields": ("id", "tipo", "status", "funcionario", "solicitante") + }), + ("Auditoria", { + "fields": ("criado_em", "atualizado_em"), + "classes": ("collapse",) + }), + ) + diff --git a/solicitacoes/apps.py b/solicitacoes/apps.py new file mode 100644 index 0000000..7cf45e3 --- /dev/null +++ b/solicitacoes/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SolicitacoesConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'solicitacoes' diff --git a/solicitacoes/context_processors.py b/solicitacoes/context_processors.py new file mode 100644 index 0000000..6409327 --- /dev/null +++ b/solicitacoes/context_processors.py @@ -0,0 +1,20 @@ +# /SGMP_PROD/solicitacoes/context_processors.py + +from .models import UsuarioSistema + + +def usuario_sistema(request): + """ + Context processor que adiciona o UsuarioSistema ao contexto de todos os templates. + """ + if request.user.is_authenticated: + try: + usuario = UsuarioSistema.objects.get( + matricula=request.user.username, + ativo=True + ) + return {'usuario_sistema': usuario} + except UsuarioSistema.DoesNotExist: + return {'usuario_sistema': None} + return {'usuario_sistema': None} + diff --git a/solicitacoes/decorators.py b/solicitacoes/decorators.py new file mode 100644 index 0000000..25f4f9e --- /dev/null +++ b/solicitacoes/decorators.py @@ -0,0 +1,83 @@ +# /SGMP_PROD/solicitacoes/decorators.py + +from functools import wraps +from django.contrib import messages +from django.shortcuts import redirect +from .models import UsuarioSistema + + +def requer_perfil(*perfis_permitidos): + """ + Decorador que verifica se o usuário possui um dos perfis permitidos. + + Uso: + @requer_perfil(UsuarioSistema.Perfil.GESTOR, UsuarioSistema.Perfil.GG) + def minha_view(request): + ... + """ + def decorator(view_func): + @wraps(view_func) + def wrapper(request, *args, **kwargs): + if not request.user.is_authenticated: + messages.error(request, "Você precisa estar autenticado.") + return redirect("solicitacoes:login") + + try: + usuario = UsuarioSistema.objects.get( + matricula=request.user.username, + ativo=True + ) + except UsuarioSistema.DoesNotExist: + messages.error(request, "Usuário não encontrado no sistema.") + return redirect("solicitacoes:login") + + # Aceita se o usuário possuir pelo menos um dos perfis permitidos, + # considerando perfil principal e perfis extras. + if not any(usuario.tem_perfil(p) for p in perfis_permitidos): + messages.error( + request, + f"Você não tem permissão para acessar esta funcionalidade. " + f"Perfil necessário: {', '.join([p.label for p in perfis_permitidos])}" + ) + return redirect("solicitacoes:dashboard") + + # Injeta o usuario no request para uso na view + request.usuario_sistema = usuario + return view_func(request, *args, **kwargs) + + return wrapper + return decorator + + +def pode_criar_solicitacao(view_func): + """ + Decorador que verifica se o usuário pode criar solicitações. + Por padrão, apenas GESTOR pode criar. + """ + @wraps(view_func) + def wrapper(request, *args, **kwargs): + if not request.user.is_authenticated: + messages.error(request, "Você precisa estar autenticado.") + return redirect("solicitacoes:login") + + try: + usuario = UsuarioSistema.objects.get( + matricula=request.user.username, + ativo=True + ) + except UsuarioSistema.DoesNotExist: + messages.error(request, "Usuário não encontrado no sistema.") + return redirect("solicitacoes:login") + + if usuario.perfil != UsuarioSistema.Perfil.GESTOR: + messages.error( + request, + "Apenas gestores podem criar solicitações." + ) + return redirect("solicitacoes:dashboard") + + request.usuario_sistema = usuario + return view_func(request, *args, **kwargs) + + return wrapper + diff --git a/solicitacoes/intf_sqlserver.py b/solicitacoes/intf_sqlserver.py new file mode 100644 index 0000000..f3f0b43 --- /dev/null +++ b/solicitacoes/intf_sqlserver.py @@ -0,0 +1,613 @@ +# /SGMP_PROD/solicitacoes/intf_sqlserver.py + +import pymssql +from django.conf import settings + +def get_sqlserver_connection(): + """ + Cria uma conexão com o banco SQL Server do TOTVS RM. + + A configuração é obtida a partir do settings do Django, + permitindo separação por ambiente (dev, homologação, produção). + """ + return pymssql.connect( + server=settings.SQLSERVER_CONFIG["SERVER"], + port=settings.SQLSERVER_CONFIG["PORT"], + user=settings.SQLSERVER_CONFIG["USER"], + password=settings.SQLSERVER_CONFIG["PASSWORD"], + database=settings.SQLSERVER_CONFIG["DATABASE"], + ) + +def listar_para_selecionar_colaborador(apenas_desligados=False): + """ + Lista colaboradores do RM para seleção. + + Args: + apenas_desligados (bool): Se True, retorna apenas pessoas DESLIGADAS + (útil para admissão por substituição). + Se False, retorna pessoas que não estão desligadas (padrão). + + Returns: + list: Lista de dicionários com dados dos colaboradores + """ + # Define o filtro de situação baseado no parâmetro + if apenas_desligados: + # Para admissão por substituição: busca pessoas DESLIGADAS + # CODSITUACAO = 'D' e DATADEMISSAO IS NOT NULL (seguindo padrão do sgmp) + filtro_situacao = "PF.CODSITUACAO = 'D' AND PF.DATADEMISSAO IS NOT NULL" + else: + # Padrão: busca pessoas que não estão desligadas (inclui admitidos) + filtro_situacao = "PF.CODSITUACAO <> 'D'" + + query = f""" + WITH SALDO_ATUAL AS ( + SELECT + SB.CODCOLIGADA, + SB.CHAPA, + SB.INICIOPER, + SB.FIMPER, + ((SB.EXTRAANT - SB.ATRASOANT - SB.FALTAANT) + + (SB.EXTRAATU - SB.ATRASOATU - SB.FALTAATU)) AS SALDO_MINUTOS, + ROW_NUMBER() OVER ( + PARTITION BY SB.CODCOLIGADA, SB.CHAPA + ORDER BY SB.FIMPER DESC + ) AS RN + FROM ASALDOBANCOHOR SB + ) + SELECT + PF.CODCOLIGADA, + PF.CHAPA, + PF.NOME, + P.CPF, + PS.DESCRICAO AS SECAO, + PU.NOME AS FUNCAO, + PF.DATAADMISSAO, + PF.DATADEMISSAO, + PF.CODSITUACAO, + PF.CODSECAO, + PF.CODFUNCAO, + PF.SALARIO, + PF.CODSINDICATO, + SA.INICIOPER, + SA.FIMPER, + SA.SALDO_MINUTOS + FROM PFUNC PF + JOIN PPESSOA P + ON P.CODIGO = PF.CODPESSOA + JOIN PSECAO PS + ON PS.CODCOLIGADA = PF.CODCOLIGADA + AND PS.CODIGO = PF.CODSECAO + JOIN PFUNCAO PU + ON PU.CODCOLIGADA = PF.CODCOLIGADA + AND PU.CODIGO = PF.CODFUNCAO + LEFT JOIN SALDO_ATUAL SA + ON SA.CODCOLIGADA = PF.CODCOLIGADA + AND SA.CHAPA = PF.CHAPA + AND SA.RN = 1 + WHERE + {filtro_situacao} + ORDER BY PF.NOME + """ + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query) + return cursor.fetchall() + + +def buscar_colaboradores_rm_desligados(nome: str = None): + """ + Busca colaboradores DESLIGADOS no RM para fluxo de Substituição. + + Seguindo padrão do sgmp: + - CODSITUACAO = 'D' + - DATADEMISSAO IS NOT NULL + + Args: + nome (str, optional): Nome para filtrar (busca parcial, case-insensitive) + + Returns: + list: Lista de dicionários com dados dos colaboradores desligados + """ + query = """ + SELECT + PF.CODCOLIGADA, + PF.CHAPA, + P.NOME, + P.CPF, + PS.DESCRICAO AS SECAO, + PU.NOME AS FUNCAO, + PF.DATAADMISSAO, + PF.DATADEMISSAO, + PF.CODSITUACAO, + PF.CODSECAO, + PF.CODFUNCAO, + PF.SALARIO, + PF.CODSINDICATO + FROM PFUNC PF + JOIN PPESSOA P + ON P.CODIGO = PF.CODPESSOA + JOIN PSECAO PS + ON PS.CODCOLIGADA = PF.CODCOLIGADA + AND PS.CODIGO = PF.CODSECAO + JOIN PFUNCAO PU + ON PU.CODCOLIGADA = PF.CODCOLIGADA + AND PU.CODIGO = PF.CODFUNCAO + WHERE + PF.CODSITUACAO = 'D' + AND PF.DATADEMISSAO IS NOT NULL + """ + + params = [] + if nome: + query += " AND LOWER(P.NOME) LIKE LOWER(%s)" + params.append(f"%{nome}%") + + query += " ORDER BY P.NOME" + + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query, tuple(params) if params else None) + return cursor.fetchall() + + +def listar_cargos_ativos_rm(): + """ + Lista cargos existentes no RM com base em uso real: + - Apenas cargos associados a colaboradores ATIVOS + - Remove duplicidade por nome + - Não depende de codcoligada do usuário + + Retorna lista simples para uso em selects. + """ + query = """ + SELECT DISTINCT + PU.CODIGO AS cod_funcao, + PU.NOME AS nome_funcao, + PU.CARGO AS cargo + FROM PFUNC PF + JOIN PFUNCAO PU + ON PU.CODCOLIGADA = PF.CODCOLIGADA + AND PU.CODIGO = PF.CODFUNCAO + WHERE + PF.CODSITUACAO <> 'D' + AND PU.INATIVA = 0 + ORDER BY PU.NOME + """ + + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query) + rows = cursor.fetchall() + + # Normalização leve + cargos = [] + vistos = set() + + for row in rows: + nome = (row.get("nome_funcao") or "").strip() + if not nome: + continue + + chave = nome.lower() + if chave in vistos: + continue + + vistos.add(chave) + cargos.append({ + "codigo": row.get("cod_funcao"), + "nome": nome, + "cargo": row.get("cargo"), + }) + + return cargos + + +def listar_secoes_ativas_rm(): + """ + Lista seções/centros de custo existentes no RM com base em uso real: + - Apenas seções associadas a colaboradores ATIVOS + - Remove duplicidade por nome + - Não depende de codcoligada do usuário + + Retorna lista simples para uso em selects. + """ + query = """ + SELECT DISTINCT + PS.CODIGO AS cod_secao, + PS.DESCRICAO AS descricao_secao + FROM PFUNC PF + JOIN PSECAO PS + ON PS.CODCOLIGADA = PF.CODCOLIGADA + AND PS.CODIGO = PF.CODSECAO + WHERE + PF.CODSITUACAO <> 'D' + ORDER BY PS.DESCRICAO + """ + + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query) + rows = cursor.fetchall() + + # Normalização leve + secoes = [] + vistos = set() + + for row in rows: + descricao = (row.get("descricao_secao") or "").strip() + if not descricao: + continue + + chave = descricao.lower() + if chave in vistos: + continue + + vistos.add(chave) + secoes.append({ + "codigo": row.get("cod_secao"), + "descricao": descricao, + }) + + return secoes + + +def listar_coligadas_rm(): + """ + Lista coligadas existentes no RM para uso em selects (ex.: formulário de admissão por aumento). + Tenta GCOLIGADA (NOME); senão usa CODCOLIGADA distintos de PFUNC. + Retorna lista de {"codigo": int, "nome": str}. Exclui sempre CODCOLIGADA=0 (inválido no RM). + """ + try: + query = """ + SELECT CODCOLIGADA AS codigo, NOME AS nome + FROM GCOLIGADA + WHERE CODCOLIGADA <> 0 AND NOME IS NOT NULL + ORDER BY NOME + """ + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query) + rows = cursor.fetchall() + result = [ + {"codigo": row["codigo"], "nome": (row.get("nome") or str(row["codigo"])).strip()} + for row in rows + if row.get("codigo") and ((row.get("nome") or str(row["codigo"])).strip()) + ] + except Exception: + query = """ + SELECT DISTINCT CODCOLIGADA AS codigo + FROM PFUNC + WHERE CODSITUACAO <> 'D' AND CODCOLIGADA <> 0 + ORDER BY CODCOLIGADA + """ + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query) + rows = cursor.fetchall() + result = [{"codigo": row["codigo"], "nome": str(row["codigo"])} for row in rows if row.get("codigo")] + + return [r for r in result if r.get("codigo") != 0] + + +def listar_filiais_rm(): + """ + Lista filiais existentes no RM para uso em selects (ex.: formulário de admissão por aumento). + Tenta GFILIAL; senão usa CODCOLIGADA/CODFILIAL distintos de PFUNC quando existir CODFILIAL. + Retorna lista de {"cod_coligada": int, "codigo": int, "nome": str} para permitir filtrar por coligada no front. + """ + try: + query = """ + SELECT CODCOLIGADA AS cod_coligada, CODFILIAL AS codigo, + COALESCE(NOME, CAST(CODFILIAL AS VARCHAR)) AS nome + FROM GFILIAL + ORDER BY CODCOLIGADA, CODFILIAL + """ + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query) + rows = cursor.fetchall() + out = [ + { + "cod_coligada": int(row["cod_coligada"]), + "codigo": int(row["codigo"]), + "nome": (row.get("nome") or str(row["codigo"])).strip(), + } + for row in rows + ] + return out + except Exception: + try: + query = """ + SELECT DISTINCT CODCOLIGADA AS cod_coligada, CODFILIAL AS codigo + FROM PFUNC + WHERE CODSITUACAO <> 'D' + ORDER BY CODCOLIGADA, CODFILIAL + """ + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query) + rows = cursor.fetchall() + out = [ + {"cod_coligada": int(row["cod_coligada"]), "codigo": int(row["codigo"]), "nome": str(int(row["codigo"]))} + for row in rows + ] + return out + except Exception: + return [] + + +def verificar_estabilidades_colaborador(id_rm: str): + """ + Verifica todas as estabilidades legais/operacionais de um colaborador + que podem bloquear um desligamento. + + O id_rm deve estar no formato "CODCOLIGADA-CHAPA" (ex: "3-052412") + + Retorna uma lista de dicionários com informações sobre cada estabilidade encontrada. + + Args: + id_rm: Identificador do colaborador no formato "CODCOLIGADA-CHAPA" + + Returns: + list: Lista de dicionários com: + - tipo: Tipo de estabilidade (MATERNIDADE, PREVIDENCIARIO, ACIDENTE_TRABALHO, CIPA) + - bloqueado: bool - Se o desligamento está bloqueado + - data_fim: date - Data até quando a estabilidade vale (None se indefinida) + - mensagem: str - Mensagem explicativa para o usuário + - detalhes: dict - Detalhes adicionais do afastamento + """ + # Extrai codcoligada e chapa do id_rm + try: + codcoligada_str, chapa = id_rm.split('-', 1) + codcoligada = int(codcoligada_str) + except (ValueError, AttributeError): + # Se não conseguir extrair, retorna lista vazia + return [] + + # Chama a função auxiliar + return verificar_estabilidades_colaborador_por_codcoligada_chapa(codcoligada, chapa) + + +def _normalizar_para_date(valor): + """ + Normaliza um valor para datetime.date. + Aceita date, datetime, ou outros tipos que tenham método .date() + Garante que sempre retorne date (não datetime). + """ + from datetime import date, datetime + if valor is None: + return None + + # Se já é date (e não datetime), retorna direto + if isinstance(valor, date): + # Verifica se é datetime (datetime é subclasse de date) + if isinstance(valor, datetime): + return valor.date() + return valor + + # Se é datetime, converte para date + if isinstance(valor, datetime): + return valor.date() + + # Se tem método date(), tenta usar + if hasattr(valor, 'date'): + try: + resultado = valor.date() + # Se o resultado ainda for datetime, converte novamente + if isinstance(resultado, datetime): + return resultado.date() + return resultado + except (AttributeError, TypeError): + pass + + # Se chegou aqui e não conseguiu converter, retorna None ou tenta converter de outra forma + return valor + + +def verificar_estabilidades_colaborador_por_codcoligada_chapa(codcoligada: int, chapa: str): + """ + Versão alternativa que aceita codcoligada e chapa diretamente. + Usada internamente pela função principal. + """ + from datetime import date, timedelta + try: + from dateutil.relativedelta import relativedelta + except ImportError: + # Fallback se dateutil não estiver instalado + def relativedelta(**kwargs): + months = kwargs.get('months', 0) + if months: + # Aproximação simples: 30 dias por mês + return timedelta(days=months * 30) + return timedelta() + + estabilidades = [] + + query = """ + SELECT + HS.TIPO, + HS.MOTIVO, + HS.DTINICIO, + HS.DTFINAL, + HS.OBSERVACAO, + HS.CODESTABILIDADE, + HS.AFASTPELAPREVIDENCIA + FROM PFHSTAFT HS + WHERE + HS.CODCOLIGADA = %s + AND HS.CHAPA = %s + AND ( + -- Licença Maternidade + (HS.TIPO = 'E' AND HS.MOTIVO = '03') + OR + -- Afastamento Previdenciário + (HS.TIPO = 'P' AND HS.AFASTPELAPREVIDENCIA = 1) + OR + -- Acidente de Trabalho + (HS.TIPO = 'T') + OR + -- Outros tipos que podem indicar estabilidade + (HS.CODESTABILIDADE IS NOT NULL AND HS.CODESTABILIDADE <> '') + ) + ORDER BY HS.DTINICIO DESC + """ + + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query, (codcoligada, chapa)) + rows = cursor.fetchall() + + hoje = date.today() # Garantir que hoje é sempre date + + for row in rows: + tipo_afast = row.get('TIPO', '').upper() + motivo = row.get('MOTIVO', '') + observacao = (row.get('OBSERVACAO') or '').upper() + dt_inicio = row.get('DTINICIO') + dt_final = row.get('DTFINAL') + afast_previdencia = row.get('AFASTPELAPREVIDENCIA', 0) + + # 1. LICENÇA MATERNIDADE + if tipo_afast == 'E' and motivo == '03' and 'MATERNIDADE' in observacao: + if dt_final: + # Estabilidade: durante licença + 30 dias após retorno + data_retorno = _normalizar_para_date(dt_final) + data_fim_estabilidade = data_retorno + timedelta(days=30) + # Garante que data_fim_estabilidade seja date + data_fim_estabilidade = _normalizar_para_date(data_fim_estabilidade) + + bloqueado = hoje <= data_fim_estabilidade + + estabilidades.append({ + 'tipo': 'MATERNIDADE', + 'bloqueado': bloqueado, + 'data_fim': data_fim_estabilidade, + 'mensagem': f"Colaboradora em estabilidade por licença maternidade. O desligamento não é permitido até {data_fim_estabilidade.strftime('%d/%m/%Y')}.", + 'detalhes': { + 'dt_inicio': dt_inicio, + 'dt_final': dt_final, + 'observacao': row.get('OBSERVACAO') + } + }) + else: + # Licença em andamento sem data final + estabilidades.append({ + 'tipo': 'MATERNIDADE', + 'bloqueado': True, + 'data_fim': None, + 'mensagem': "Colaboradora em licença maternidade. O desligamento não é permitido durante a licença e até 30 dias após o retorno.", + 'detalhes': { + 'dt_inicio': dt_inicio, + 'dt_final': dt_final, + 'observacao': row.get('OBSERVACAO') + } + }) + + # 2. AFASTAMENTO PREVIDENCIÁRIO + elif tipo_afast == 'P' and afast_previdencia == 1: + if dt_final: + data_fim = _normalizar_para_date(dt_final) + bloqueado = hoje <= data_fim + else: + # Afastamento em andamento + bloqueado = True + data_fim = None + + if bloqueado: + estabilidades.append({ + 'tipo': 'PREVIDENCIARIO', + 'bloqueado': True, + 'data_fim': data_fim, + 'mensagem': "Colaborador encontra-se afastado pelo INSS. O desligamento só poderá ser avaliado após o término do afastamento." + (f" (até {data_fim.strftime('%d/%m/%Y')})" if data_fim else ""), + 'detalhes': { + 'dt_inicio': dt_inicio, + 'dt_final': dt_final, + 'observacao': row.get('OBSERVACAO') + } + }) + + # 3. ACIDENTE DE TRABALHO + elif tipo_afast == 'T': + if dt_final: + # Estabilidade de 12 meses após retorno + data_retorno = _normalizar_para_date(dt_final) + if data_retorno is None or not isinstance(data_retorno, date): + continue # Não conseguiu normalizar, pula este registro + + # Soma os meses usando relativedelta + # IMPORTANTE: relativedelta pode retornar datetime mesmo quando somado a date + data_fim_estabilidade = data_retorno + relativedelta(months=12) + + # Garante que seja sempre date (não datetime) + # relativedelta pode retornar datetime, então normaliza novamente + from datetime import datetime as dt + if isinstance(data_fim_estabilidade, dt): + data_fim_estabilidade = data_fim_estabilidade.date() + elif not isinstance(data_fim_estabilidade, date): + data_fim_estabilidade = _normalizar_para_date(data_fim_estabilidade) + + if data_fim_estabilidade is None or not isinstance(data_fim_estabilidade, date): + continue # Não conseguiu normalizar, pula + + bloqueado = hoje <= data_fim_estabilidade + + if bloqueado: + estabilidades.append({ + 'tipo': 'ACIDENTE_TRABALHO', + 'bloqueado': True, + 'data_fim': data_fim_estabilidade, + 'mensagem': f"Colaborador possui estabilidade por acidente de trabalho até {data_fim_estabilidade.strftime('%d/%m/%Y')}.", + 'detalhes': { + 'dt_inicio': dt_inicio, + 'dt_final': dt_final, + 'dt_retorno': data_retorno, + 'observacao': row.get('OBSERVACAO') + } + }) + + # 4. CIPA (verificar em tabela separada se existir) + query_cipa = """ + SELECT TOP 1 + DTINICIO, + DTFINAL + FROM VCANDIDATOSCIPA + WHERE + CODCOLIGADA = %s + AND CHAPA = %s + AND (DTFINAL IS NULL OR DTFINAL >= GETDATE()) + ORDER BY DTINICIO DESC + """ + + try: + with get_sqlserver_connection() as conn: + cursor = conn.cursor(as_dict=True) + cursor.execute(query_cipa, (codcoligada, chapa)) + cipa_row = cursor.fetchone() + + if cipa_row: + dt_fim_cipa = cipa_row.get('DTFINAL') + if dt_fim_cipa: + data_fim = _normalizar_para_date(dt_fim_cipa) + bloqueado = hoje <= data_fim + else: + # CIPA em andamento + bloqueado = True + data_fim = None + + if bloqueado: + estabilidades.append({ + 'tipo': 'CIPA', + 'bloqueado': True, + 'data_fim': data_fim, + 'mensagem': "Colaborador possui estabilidade por participação na CIPA. Desligamento não permitido neste período." + (f" (até {data_fim.strftime('%d/%m/%Y')})" if data_fim else ""), + 'detalhes': { + 'dt_inicio': cipa_row.get('DTINICIO'), + 'dt_final': dt_fim_cipa + } + }) + except Exception: + # Se a tabela CIPA não existir, ignora silenciosamente + pass + + return estabilidades + diff --git a/solicitacoes/intf_winthor.py b/solicitacoes/intf_winthor.py new file mode 100644 index 0000000..91faca0 --- /dev/null +++ b/solicitacoes/intf_winthor.py @@ -0,0 +1,116 @@ +# /SGMP_PROD/solicitacoes/intf_winthor.py +import os +import oracledb + +# Tenta inicializar o Oracle Client usando a variável de ambiente ou caminho padrão +# No Docker, usa /opt/oracle/instantclient_21_13 (definido no Dockerfile) +# Em desenvolvimento local, pode usar /usr/lib/oracle/23/client64/lib +_oracle_client_initialized = False + +def _init_oracle_client(): + """Inicializa o Oracle Client de forma lazy e segura.""" + global _oracle_client_initialized + + if _oracle_client_initialized: + return + + oracle_lib_dir = os.getenv("ORACLE_LIB_DIR", "/opt/oracle/instantclient_21_13") + + # Tenta inicializar com o caminho do Docker primeiro + try: + oracledb.init_oracle_client(lib_dir=oracle_lib_dir) + _oracle_client_initialized = True + return + except (oracledb.exceptions.DatabaseError, Exception): + pass + + # Se falhar, tenta o caminho alternativo (desenvolvimento local) + if oracle_lib_dir != "/usr/lib/oracle/23/client64/lib": + try: + oracledb.init_oracle_client(lib_dir="/usr/lib/oracle/23/client64/lib") + _oracle_client_initialized = True + return + except (oracledb.exceptions.DatabaseError, Exception): + pass + + # Se ambos falharem, marca como inicializado para não tentar novamente + # O erro será lançado quando tentar usar as funções + _oracle_client_initialized = True + +def get_oracle_connection(): + _init_oracle_client() + + dsn = oracledb.makedsn( + host="10.1.1.241", + port=1521, + service_name="WINT" + ) + + return oracledb.connect( + user="SEVEN", + password="usr54sev", + dsn=dsn + ) + +def buscar_colaborador_oracle(cpf: str): + conn = get_oracle_connection() + cursor = conn.cursor() + + query = """ + SELECT + MATRICULA, + NOME, + CPF, + SITUACAO, + ADMISSAO, + DT_EXCLUSAO, + ENDERECO, + BAIRRO, + CIDADE, + ESTADO + FROM + PCEMPR + WHERE + CPF = :cpf + """ + cursor.execute(query, {"cpf": cpf}) + row = cursor.fetchone() + colunas = [c[0].lower() for c in cursor.description] if row else [] + cursor.close() + conn.close() + + if not row: + return None + + return dict(zip(colunas, row)) + +def autenticar_usuario(login: str, senha: str): + conn = get_oracle_connection() + cursor = conn.cursor() + + query = """ + SELECT + MATRICULA, + USUARIOBD, + NOME, + EMAIL, + CPF, + CODFILIAL, + SITUACAO + FROM PCEMPR + WHERE USUARIOBD = UPPER(:login) + AND SENHABD = CRYPT(UPPER(:senha), USUARIOBD) + AND SITUACAO = 'A' + """ + + cursor.execute(query, {"login": login, "senha": senha}) + row = cursor.fetchone() + colunas = [c[0].lower() for c in cursor.description] if row else [] + cursor.close() + conn.close() + + if not row: + return None # login ou senha inválidos + + return dict(zip(colunas, row)) + diff --git a/solicitacoes/migrations/0001_initial.py b/solicitacoes/migrations/0001_initial.py new file mode 100644 index 0000000..b200527 --- /dev/null +++ b/solicitacoes/migrations/0001_initial.py @@ -0,0 +1,156 @@ +# Generated by Django 4.2.27 on 2026-02-01 22:32 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='PessoaRM', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('id_rm', models.CharField(max_length=20, unique=True)), + ('matricula', models.CharField(max_length=20, unique=True)), + ('nome', models.CharField(max_length=255)), + ('cargo', models.CharField(max_length=255)), + ('setor', models.CharField(max_length=255)), + ('centro_custo', models.CharField(max_length=50)), + ('matricula_winthor', models.CharField(blank=True, db_index=True, help_text='Matrícula/código do usuário no Winthor', max_length=20, null=True)), + ('sincronizado_em', models.DateTimeField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Pessoa (RM)', + 'verbose_name_plural': 'Pessoas (RM)', + }, + ), + migrations.CreateModel( + name='UsuarioSistema', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('matricula', models.CharField(max_length=20, unique=True)), + ('nome', models.CharField(max_length=255)), + ('ativo', models.BooleanField(default=True)), + ('perfil', models.CharField(choices=[('GESTOR', 'Gestor'), ('GG', 'Gente e Gestão'), ('CONTROLADORIA', 'Controladoria'), ('DIRETORIA', 'Diretoria')], max_length=20)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Solicitacao', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('tipo', models.CharField(choices=[('DESLIGAMENTO', 'Desligamento'), ('ADM_SUBSTITUICAO', 'Admissão por Substituição'), ('ADM_AUMENTO', 'Admissão por Aumento de Quadro'), ('MOVIMENTACAO', 'Movimentação')], max_length=30)), + ('status', models.CharField(choices=[('RASCUNHO', 'Rascunho'), ('ENVIADA', 'Enviada'), ('APROVADA_GG', 'Aprovada GG'), ('APROVADA_CONTROLADORIA', 'Aprovada Controladoria'), ('APROVADA_DIRETORIA', 'Aprovada Diretoria'), ('FINALIZADA', 'Finalizada'), ('REPROVADA', 'Reprovada')], default='RASCUNHO', max_length=30)), + ('enviada_em', models.DateTimeField(blank=True, null=True)), + ('finalizada_em', models.DateTimeField(blank=True, null=True)), + ('funcionario', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='solicitacoes', to='solicitacoes.pessoarm')), + ('solicitante', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='solicitacoes_criadas', to='solicitacoes.usuariosistema')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Movimentacao', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('altera_funcao', models.BooleanField(default=False)), + ('altera_centro_custo', models.BooleanField(default=False)), + ('novo_cod_secao', models.CharField(blank=True, max_length=50, null=True)), + ('novo_cod_funcao', models.CharField(blank=True, max_length=50, null=True)), + ('novo_salario', models.DecimalField(blank=True, decimal_places=2, max_digits=12, null=True)), + ('data_efetivacao', models.DateField(help_text='Data que a mudança passa a valer no RM')), + ('justificativa', models.TextField()), + ('solicitacao', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='movimentacao', to='solicitacoes.solicitacao')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Desligamento', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('motivo', models.TextField()), + ('data_prevista_desligamento', models.DateField()), + ('observacoes', models.TextField(blank=True)), + ('solicitacao', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='desligamento', to='solicitacoes.solicitacao')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='AdmissaoSubstituicao', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('data_previsao_contratacao', models.DateField()), + ('cod_coligada_destino', models.IntegerField(help_text='Cód. Coligada RM')), + ('cod_filial_destino', models.IntegerField(help_text='Cód. Filial RM')), + ('cod_secao_destino', models.CharField(help_text='Cód. Seção/Centro de Custo', max_length=50)), + ('cod_funcao_destino', models.CharField(help_text='Cód. Função/Cargo', max_length=50)), + ('justificativa', models.TextField()), + ('solicitacao', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='admissao_substituicao', to='solicitacoes.solicitacao')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='AdmissaoAumentoQuadro', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('data_previsao_contratacao', models.DateField()), + ('justificativa_estrategica', models.TextField()), + ('cod_coligada_destino', models.IntegerField()), + ('cod_filial_destino', models.IntegerField()), + ('cod_secao_destino', models.CharField(max_length=50)), + ('cod_funcao_destino', models.CharField(max_length=50)), + ('requer_suplementacao_orcamentaria', models.BooleanField(default=False)), + ('solicitacao', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='admissao_aumento', to='solicitacoes.solicitacao')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Aprovacao', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('etapa', models.CharField(choices=[('GG', 'Gente e Gestão'), ('CONTROLADORIA', 'Controladoria'), ('DIRETORIA', 'Diretoria')], max_length=20)), + ('decisao', models.CharField(choices=[('APROVADO', 'Aprovado'), ('REPROVADO', 'Reprovado')], max_length=10)), + ('justificativa', models.TextField()), + ('decidido_em', models.DateTimeField(auto_now_add=True)), + ('solicitacao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='aprovacoes', to='solicitacoes.solicitacao')), + ('usuario', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='aprovacoes_realizadas', to='solicitacoes.usuariosistema')), + ], + options={ + 'unique_together': {('solicitacao', 'etapa')}, + }, + ), + ] diff --git a/solicitacoes/migrations/0002_alter_pessoarm_cargo_alter_pessoarm_centro_custo_and_more.py b/solicitacoes/migrations/0002_alter_pessoarm_cargo_alter_pessoarm_centro_custo_and_more.py new file mode 100644 index 0000000..a030d71 --- /dev/null +++ b/solicitacoes/migrations/0002_alter_pessoarm_cargo_alter_pessoarm_centro_custo_and_more.py @@ -0,0 +1,48 @@ +# Generated by Django 4.2.27 on 2026-02-02 15:02 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('solicitacoes', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='pessoarm', + name='cargo', + field=models.CharField(help_text='Nome da função/cargo atual do colaborador', max_length=255), + ), + migrations.AlterField( + model_name='pessoarm', + name='centro_custo', + field=models.CharField(help_text='Código da seção no RM (PFUNC.CODSECAO)', max_length=50), + ), + migrations.AlterField( + model_name='pessoarm', + name='id_rm', + field=models.CharField(help_text='Identificador único do colaborador no RM (CODCOLIGADA + CHAPA)', max_length=20, unique=True), + ), + migrations.AlterField( + model_name='pessoarm', + name='matricula', + field=models.CharField(help_text='Matrícula do colaborador no RM (PFUNC.CHAPA)', max_length=20, unique=True), + ), + migrations.AlterField( + model_name='pessoarm', + name='matricula_winthor', + field=models.CharField(blank=True, db_index=True, help_text='Matrícula/código do usuário correspondente no Winthor', max_length=20, null=True), + ), + migrations.AlterField( + model_name='pessoarm', + name='setor', + field=models.CharField(help_text='Descrição da seção/departamento atual', max_length=255), + ), + migrations.AlterField( + model_name='pessoarm', + name='sincronizado_em', + field=models.DateTimeField(blank=True, help_text='Data/hora da última sincronização com o RM', null=True), + ), + ] diff --git a/solicitacoes/migrations/0003_pessoarm_cod_funcao_pessoarm_cod_sindicato_and_more.py b/solicitacoes/migrations/0003_pessoarm_cod_funcao_pessoarm_cod_sindicato_and_more.py new file mode 100644 index 0000000..708027b --- /dev/null +++ b/solicitacoes/migrations/0003_pessoarm_cod_funcao_pessoarm_cod_sindicato_and_more.py @@ -0,0 +1,58 @@ +# Generated by Django 4.2.27 on 2026-02-02 15:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('solicitacoes', '0002_alter_pessoarm_cargo_alter_pessoarm_centro_custo_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='pessoarm', + name='cod_funcao', + field=models.CharField(blank=True, help_text='Código da função/cargo no RM (PFUNC.CODFUNCAO)', max_length=50, null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='cod_sindicato', + field=models.CharField(blank=True, help_text='Código do sindicato no RM', max_length=10, null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='cpf', + field=models.CharField(blank=True, help_text='CPF do colaborador (PPESSOA.CPF)', max_length=14, null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='data_admissao', + field=models.DateField(blank=True, help_text='Data de admissão do colaborador no RM', null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='fim_periodo_banco_horas', + field=models.DateField(blank=True, help_text='Fim do período do último banco de horas considerado', null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='inicio_periodo_banco_horas', + field=models.DateField(blank=True, help_text='Início do período do último banco de horas considerado', null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='salario', + field=models.DecimalField(blank=True, decimal_places=2, help_text='Salário atual do colaborador no RM', max_digits=12, null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='saldo_banco_horas_minutos', + field=models.IntegerField(blank=True, help_text='Saldo atual de banco de horas em minutos (se aplicável)', null=True), + ), + migrations.AddField( + model_name='pessoarm', + name='situacao', + field=models.CharField(blank=True, help_text='Situação do colaborador no RM (PFUNC.CODSITUACAO)', max_length=5, null=True), + ), + ] diff --git a/solicitacoes/migrations/0004_alter_solicitacao_status_alter_usuariosistema_perfil_and_more.py b/solicitacoes/migrations/0004_alter_solicitacao_status_alter_usuariosistema_perfil_and_more.py new file mode 100644 index 0000000..4cf61ee --- /dev/null +++ b/solicitacoes/migrations/0004_alter_solicitacao_status_alter_usuariosistema_perfil_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 4.2.26 on 2026-02-06 22:01 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('solicitacoes', '0003_pessoarm_cod_funcao_pessoarm_cod_sindicato_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='solicitacao', + name='status', + field=models.CharField(choices=[('RASCUNHO', 'Rascunho'), ('ENVIADA', 'Enviada'), ('APROVADA_GG', 'Aprovada GG'), ('APROVADA_CONTROLADORIA', 'Aprovada Controladoria'), ('APROVADA_DIRETORIA', 'Aprovada Diretoria'), ('AGUARDANDO_DIRETORIA', 'Aguardando Diretoria'), ('FINALIZADA', 'Finalizada'), ('REPROVADA', 'Reprovada')], default='RASCUNHO', max_length=30), + ), + migrations.AlterField( + model_name='usuariosistema', + name='perfil', + field=models.CharField(choices=[('GESTOR', 'Gestor'), ('GG', 'Gente e Gestão'), ('CONTROLADORIA', 'Controladoria'), ('DIRETORIA', 'Diretoria')], default='GESTOR', max_length=20), + ), + migrations.CreateModel( + name='Parecer', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('atualizado_em', models.DateTimeField(auto_now=True)), + ('etapa', models.CharField(choices=[('GG', 'Gente e Gestão'), ('CONTROLADORIA', 'Controladoria'), ('DIRETORIA', 'Diretoria')], help_text='Etapa do parecer (GG ou CONTROLADORIA)', max_length=20)), + ('texto', models.TextField(help_text='Análise, dados e considerações sobre a solicitação')), + ('anexo', models.FileField(blank=True, help_text='Anexo opcional ao parecer (documentos, planilhas, etc.)', null=True, upload_to='pareceres/anexos/%Y/%m/%d/')), + ('criado_em', models.DateTimeField(auto_now_add=True)), + ('solicitacao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pareceres', to='solicitacoes.solicitacao')), + ('usuario', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='pareceres_emitidos', to='solicitacoes.usuariosistema')), + ], + options={ + 'verbose_name': 'Parecer', + 'verbose_name_plural': 'Pareceres', + 'unique_together': {('solicitacao', 'etapa')}, + }, + ), + ] diff --git a/solicitacoes/migrations/0005_adicionar_campos_desligamento.py b/solicitacoes/migrations/0005_adicionar_campos_desligamento.py new file mode 100644 index 0000000..a414914 --- /dev/null +++ b/solicitacoes/migrations/0005_adicionar_campos_desligamento.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.26 on 2026-02-08 01:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('solicitacoes', '0004_alter_solicitacao_status_alter_usuariosistema_perfil_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='desligamento', + name='arquivo_pedido', + field=models.FileField(blank=True, help_text='Carta de pedido de demissão (obrigatório apenas para pedido de demissão)', null=True, upload_to='desligamentos/cartas/%Y/%m/%d/'), + ), + migrations.AddField( + model_name='desligamento', + name='aviso_previo', + field=models.CharField(blank=True, choices=[('TRABALHADO', 'Trabalhado'), ('INDENIZADO', 'Indenizado (Dispensa imediata)'), ('DISPENSADO', 'Dispensado (Pedido de demissão)')], help_text='Tipo de aviso prévio (trabalhado, indenizado, dispensado)', max_length=20, null=True), + ), + migrations.AddField( + model_name='desligamento', + name='tipo_desligamento', + field=models.CharField(blank=True, choices=[('PEDIDO_DEMISSAO', 'Pedido de Demissão'), ('SEM_JUSTA_CAUSA', 'Demissão sem Justa Causa'), ('COM_JUSTA_CAUSA', 'Demissão por Justa Causa'), ('TERMINO_CONTRATO', 'Término de Contrato de Experiência'), ('OUTROS', 'Outros')], help_text='Tipo de desligamento (pedido de demissão, sem justa causa, etc.)', max_length=30, null=True), + ), + ] diff --git a/solicitacoes/migrations/0006_head_aguardando_head_choices.py b/solicitacoes/migrations/0006_head_aguardando_head_choices.py new file mode 100644 index 0000000..d169ebd --- /dev/null +++ b/solicitacoes/migrations/0006_head_aguardando_head_choices.py @@ -0,0 +1,74 @@ +# Migration: add HEAD profile and AGUARDANDO_HEAD status (perfil Head aprova rascunho) + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("solicitacoes", "0005_adicionar_campos_desligamento"), + ] + + operations = [ + migrations.AlterField( + model_name="solicitacao", + name="status", + field=models.CharField( + choices=[ + ("RASCUNHO", "Rascunho"), + ("AGUARDANDO_HEAD", "Aguardando Head"), + ("ENVIADA", "Enviada"), + ("APROVADA_GG", "Aprovada GG"), + ("APROVADA_CONTROLADORIA", "Aprovada Controladoria"), + ("APROVADA_DIRETORIA", "Aprovada Diretoria"), + ("AGUARDANDO_DIRETORIA", "Aguardando Diretoria"), + ("FINALIZADA", "Finalizada"), + ("REPROVADA", "Reprovada"), + ], + default="RASCUNHO", + max_length=30, + ), + ), + migrations.AlterField( + model_name="usuariosistema", + name="perfil", + field=models.CharField( + choices=[ + ("GESTOR", "Gestor"), + ("HEAD", "Head"), + ("GG", "Gente e Gestão"), + ("CONTROLADORIA", "Controladoria"), + ("DIRETORIA", "Diretoria"), + ], + default="GESTOR", + max_length=20, + ), + ), + migrations.AlterField( + model_name="aprovacao", + name="etapa", + field=models.CharField( + choices=[ + ("HEAD", "Head"), + ("GG", "Gente e Gestão"), + ("CONTROLADORIA", "Controladoria"), + ("DIRETORIA", "Diretoria"), + ], + max_length=20, + ), + ), + migrations.AlterField( + model_name="parecer", + name="etapa", + field=models.CharField( + choices=[ + ("HEAD", "Head"), + ("GG", "Gente e Gestão"), + ("CONTROLADORIA", "Controladoria"), + ("DIRETORIA", "Diretoria"), + ], + help_text="Etapa do parecer (GG ou CONTROLADORIA)", + max_length=20, + ), + ), + ] diff --git a/solicitacoes/migrations/0007_headgestor.py b/solicitacoes/migrations/0007_headgestor.py new file mode 100644 index 0000000..8af789b --- /dev/null +++ b/solicitacoes/migrations/0007_headgestor.py @@ -0,0 +1,48 @@ +# Migration: HeadGestor - vínculo Head → Gestores (quem o Head aprova) + +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("solicitacoes", "0006_head_aguardando_head_choices"), + ] + + operations = [ + migrations.CreateModel( + name="HeadGestor", + fields=[ + ("id", models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ("criado_em", models.DateTimeField(auto_now_add=True)), + ("atualizado_em", models.DateTimeField(auto_now=True)), + ( + "head", + models.ForeignKey( + on_delete=models.CASCADE, + related_name="gestores_vinculados", + to="solicitacoes.usuariosistema", + ), + ), + ( + "gestor", + models.ForeignKey( + on_delete=models.CASCADE, + related_name="heads_que_me_aprovam", + to="solicitacoes.usuariosistema", + ), + ), + ], + options={ + "verbose_name": "Head → Gestor", + "verbose_name_plural": "Head → Gestores", + }, + ), + migrations.AddConstraint( + model_name="headgestor", + constraint=models.UniqueConstraint( + fields=("head", "gestor"), name="unique_head_gestor" + ), + ), + ] diff --git a/solicitacoes/migrations/0008_usuarioperfilextra.py b/solicitacoes/migrations/0008_usuarioperfilextra.py new file mode 100644 index 0000000..9a7486a --- /dev/null +++ b/solicitacoes/migrations/0008_usuarioperfilextra.py @@ -0,0 +1,54 @@ +# Migration: UsuarioPerfilExtra - perfis adicionais por usuário (múltiplos perfis) + +import uuid +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("solicitacoes", "0007_headgestor"), + ] + + operations = [ + migrations.CreateModel( + name="UsuarioPerfilExtra", + fields=[ + ("id", models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ("criado_em", models.DateTimeField(auto_now_add=True)), + ("atualizado_em", models.DateTimeField(auto_now=True)), + ( + "usuario", + models.ForeignKey( + on_delete=models.CASCADE, + related_name="perfis_extras", + to="solicitacoes.usuariosistema", + ), + ), + ( + "perfil", + models.CharField( + choices=[ + ("GESTOR", "Gestor"), + ("HEAD", "Head"), + ("GG", "Gente e Gestão"), + ("CONTROLADORIA", "Controladoria"), + ("DIRETORIA", "Diretoria"), + ], + max_length=20, + ), + ), + ], + options={ + "verbose_name": "Perfil extra de usuário", + "verbose_name_plural": "Perfis extras de usuário", + }, + ), + migrations.AddConstraint( + model_name="usuarioperfilextra", + constraint=models.UniqueConstraint( + fields=("usuario", "perfil"), + name="unique_usuario_perfil_extra", + ), + ), + ] diff --git a/solicitacoes/migrations/__init__.py b/solicitacoes/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solicitacoes/models.py b/solicitacoes/models.py new file mode 100644 index 0000000..2b6fb7d --- /dev/null +++ b/solicitacoes/models.py @@ -0,0 +1,761 @@ +from django.db import models +from django.utils.translation import gettext_lazy as _ +import uuid + +class BaseModel(models.Model): + """ + Modelo base abstrato utilizado por todas as entidades do SGMP. + + Centraliza atributos comuns de persistência, garantindo: + - Identificação única global via UUID (facilita integrações externas) + - Rastreabilidade temporal (criação e última atualização) + + O uso de UUID como chave primária evita dependência de IDs sequenciais + e facilita sincronização entre sistemas distintos (SGMP, RM, Winthor). + """ + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + criado_em = models.DateTimeField(auto_now_add=True) + atualizado_em = models.DateTimeField(auto_now=True) + + class Meta: + abstract = True + +class TipoSolicitacao(models.TextChoices): + """ + Enumeração que define os tipos de solicitações suportadas pelo SGMP. + + Cada tipo representa um processo de RH distinto, podendo possuir: + - regras de negócio específicas + - dados complementares próprios + - fluxos de validação e integração diferentes + + Exemplos: + - Desligamento + - Admissão (substituição ou aumento de quadro) + - Movimentação interna + """ + DESLIGAMENTO = "DESLIGAMENTO", _("Desligamento") + ADMISSAO_SUBSTITUICAO = "ADM_SUBSTITUICAO", _("Admissão por Substituição") + ADMISSAO_AUMENTO = "ADM_AUMENTO", _("Admissão por Aumento de Quadro") + MOVIMENTACAO = "MOVIMENTACAO", _("Movimentação") + +class StatusSolicitacao(models.TextChoices): + """ + Enumeração que representa o estado atual de uma solicitação + dentro do fluxo de aprovação do SGMP. + + O status reflete a posição da solicitação no processo, + controlando permissões de edição, envio, aprovação e finalização. + + O fluxo é progressivo e controlado, permitindo auditoria + e rastreabilidade do ciclo de vida da solicitação. + """ + RASCUNHO = "RASCUNHO", _("Rascunho") + AGUARDANDO_HEAD = "AGUARDANDO_HEAD", _("Aguardando Head") + ENVIADA = "ENVIADA", _("Enviada") + APROVADA_GG = "APROVADA_GG", _("Aprovada GG") + APROVADA_CONTROLADORIA = "APROVADA_CONTROLADORIA", _("Aprovada Controladoria") + APROVADA_DIRETORIA = "APROVADA_DIRETORIA", _("Aprovada Diretoria") + AGUARDANDO_DIRETORIA = "AGUARDANDO_DIRETORIA", _("Aguardando Diretoria") + FINALIZADA = "FINALIZADA", _("Finalizada") + REPROVADA = "REPROVADA", _("Reprovada") + +class EtapaAprovacao(models.TextChoices): + """ + Enumeração que define as etapas formais de aprovação + dentro do fluxo decisório do SGMP. + + Cada etapa corresponde a um papel organizacional específico, + responsável por validar a solicitação sob sua ótica + (pessoas, orçamento, estratégia). + """ + HEAD = "HEAD", _("Head") + GG = "GG", _("Gente e Gestão") + CONTROLADORIA = "CONTROLADORIA", _("Controladoria") + DIRETORIA = "DIRETORIA", _("Diretoria") + +class DecisaoAprovacao(models.TextChoices): + """ + Enumeração que representa a decisão tomada em uma etapa + de aprovação de uma solicitação. + + A decisão é registrada de forma explícita para garantir: + - clareza + - rastreabilidade + - auditoria do processo decisório + """ + APROVADO = "APROVADO", _("Aprovado") + REPROVADO = "REPROVADO", _("Reprovado") + +class UsuarioSistema(BaseModel): + """ + Representa um usuário que possui acesso ao SGMP. + + Este modelo não representa necessariamente um funcionário ativo, + mas sim um agente que interage com o sistema, como: + - gestores + - equipe de Gente & Gestão + - controladoria + - diretoria + + O perfil do usuário define seu papel no fluxo de solicitações + e suas permissões de visualização, edição e aprovação. + """ + matricula = models.CharField(max_length=20, unique=True) + nome = models.CharField(max_length=255) + ativo = models.BooleanField(default=True) + + class Perfil(models.TextChoices): + GESTOR = "GESTOR", _("Gestor") + HEAD = "HEAD", _("Head") + GG = "GG", _("Gente e Gestão") + CONTROLADORIA = "CONTROLADORIA", _("Controladoria") + DIRETORIA = "DIRETORIA", _("Diretoria") + + perfil = models.CharField( + max_length=20, + choices=Perfil.choices, + default=Perfil.GESTOR + ) + + def tem_perfil(self, perfil: str) -> bool: + """ + Verifica se o usuário possui o perfil informado, considerando + o perfil principal e perfis extras. + """ + if self.perfil == perfil: + return True + # Evita import cíclico: FK de UsuarioPerfilExtra usa related_name="perfis_extras" + return self.perfis_extras.filter(perfil=perfil).exists() + + def perfis_ativos(self): + """ + Retorna lista de códigos de perfis ativos para o usuário, + começando pelo perfil principal e incluindo extras (sem repetir). + """ + extras = list(self.perfis_extras.values_list("perfil", flat=True)) + # Garante que o principal venha primeiro e não seja duplicado + return [self.perfil] + [p for p in extras if p != self.perfil] + + def __str__(self): + return f"{self.nome} ({self.matricula})" + + +class UsuarioPerfilExtra(BaseModel): + """ + Representa perfis adicionais atribuídos a um usuário do sistema. + + Exemplo: perfil principal GESTOR + perfil extra HEAD para permitir + atuar como Head sem perder o comportamento padrão de gestor. + """ + usuario = models.ForeignKey( + UsuarioSistema, + on_delete=models.CASCADE, + related_name="perfis_extras", + ) + perfil = models.CharField( + max_length=20, + choices=UsuarioSistema.Perfil.choices, + ) + + class Meta: + constraints = [ + models.UniqueConstraint( + fields=["usuario", "perfil"], + name="unique_usuario_perfil_extra", + ), + ] + verbose_name = "Perfil extra de usuário" + verbose_name_plural = "Perfis extras de usuário" + + def __str__(self): + return f"{self.usuario} -> {self.perfil}" + + +class HeadGestor(BaseModel): + """ + Vínculo Head → Gestores: define quais gestores um usuário com perfil HEAD + aprova. Quando o Head está cadastrado, o dashboard mostra apenas + solicitações AGUARDANDO_HEAD cujo solicitante está nesta lista. + """ + head = models.ForeignKey( + UsuarioSistema, + on_delete=models.CASCADE, + related_name="gestores_vinculados", + ) + gestor = models.ForeignKey( + UsuarioSistema, + on_delete=models.CASCADE, + related_name="heads_que_me_aprovam", + ) + + class Meta: + constraints = [ + models.UniqueConstraint(fields=["head", "gestor"], name="unique_head_gestor"), + ] + verbose_name = "Head → Gestor" + verbose_name_plural = "Head → Gestores" + + def __str__(self): + return f"{self.head} aprova {self.gestor}" + + +def matriculas_gestores_do_head(usuario: "UsuarioSistema") -> list: + """ + Retorna a lista de matrículas dos gestores que o usuário (HEAD) aprova. + Se o usuário não for HEAD ou não tiver gestores vinculados, retorna lista vazia. + """ + if not usuario or not usuario.tem_perfil(UsuarioSistema.Perfil.HEAD): + return [] + return list( + HeadGestor.objects.filter(head=usuario).values_list("gestor__matricula", flat=True) + ) + + +class PessoaRM(BaseModel): + """ + Representa um funcionário sincronizado a partir do TOTVS RM. + + Este modelo armazena um *snapshot* dos dados cadastrais e organizacionais + do colaborador, utilizados pelo SGMP para iniciar e acompanhar processos + internos de RH (ex: desligamento, admissão, movimentação). + + ⚠️ Importante: + - O TOTVS RM é a origem da verdade. + - Os dados aqui persistidos representam o estado do colaborador + no momento da sincronização. + - Alterações posteriores no RM NÃO atualizam este registro + automaticamente, exceto via rotina de sincronização. + + ------------------------- + Query de origem (consolidada) + ------------------------- + + A sincronização parte da tabela PFUNC (cadastro de pessoas), + utilizando LEFT JOIN para dados auxiliares, garantindo que + TODOS os colaboradores ativos sejam retornados, mesmo que + não possuam banco de horas. + + WITH SALDO_ATUAL AS ( + SELECT + SB.CODCOLIGADA, + SB.CHAPA, + SB.INICIOPER, + SB.FIMPER, + ((SB.EXTRAANT - SB.ATRASOANT - SB.FALTAANT) + + (SB.EXTRAATU - SB.ATRASOATU - SB.FALTAATU)) AS SALDO_MINUTOS, + ROW_NUMBER() OVER ( + PARTITION BY SB.CODCOLIGADA, SB.CHAPA + ORDER BY SB.FIMPER DESC + ) AS RN + FROM ASALDOBANCOHOR SB + ) + SELECT + PF.CODCOLIGADA, + PF.CHAPA, + PF.NOME, + P.CPF, + PS.DESCRICAO AS SECAO, + PU.NOME AS FUNCAO, + PF.DATAADMISSAO, + PF.CODSITUACAO, + PF.CODSECAO, + PF.CODFUNCAO, + PF.SALARIO, + PF.CODSINDICATO, + SA.INICIOPER, + SA.FIMPER, + SA.SALDO_MINUTOS + FROM PFUNC PF + JOIN PPESSOA P ON P.CODIGO = PF.CODPESSOA + JOIN PSECAO PS ON PS.CODCOLIGADA = PF.CODCOLIGADA AND PS.CODIGO = PF.CODSECAO + JOIN PFUNCAO PU ON PU.CODCOLIGADA = PF.CODCOLIGADA AND PU.CODIGO = PF.CODFUNCAO + LEFT JOIN SALDO_ATUAL SA + ON SA.CODCOLIGADA = PF.CODCOLIGADA + AND SA.CHAPA = PF.CHAPA + AND SA.RN = 1 + WHERE PF.CODSITUACAO <> 'D'; + + ------------------------- + Origem dos dados no RM + ------------------------- + - PFUNC → dados funcionais e vínculo + - PPESSOA → dados pessoais básicos + - PSECAO → estrutura organizacional + - PFUNCAO → função/cargo + - ASALDOBANCOHOR → banco de horas (dado auxiliar e opcional) + + ------------------------- + Observações de domínio + ------------------------- + - Banco de horas NÃO é obrigatório para todos os colaboradores. + - Dados de banco de horas são usados apenas para validações + e apoio a decisões (ex: desligamento). + - O SGMP nunca utiliza ASALDOBANCOHOR como base de cadastro. + """ + + # Identificação no RM + id_rm = models.CharField( + max_length=20, + unique=True, + help_text="Identificador único do colaborador no RM (CODCOLIGADA + CHAPA)" + ) + matricula = models.CharField( + max_length=20, + unique=True, + help_text="Matrícula do colaborador no RM (PFUNC.CHAPA)" + ) + + # Dados cadastrais básicos + nome = models.CharField(max_length=255) + cargo = models.CharField( + max_length=255, + help_text="Nome da função/cargo atual do colaborador" + ) + setor = models.CharField( + max_length=255, + help_text="Descrição da seção/departamento atual" + ) + centro_custo = models.CharField( + max_length=50, + help_text="Código da seção no RM (PFUNC.CODSECAO)" + ) + cpf = models.CharField( + max_length=14, + null=True, + blank=True, + help_text="CPF do colaborador (PPESSOA.CPF)" + ) + + data_admissao = models.DateField( + null=True, + blank=True, + help_text="Data de admissão do colaborador no RM" + ) + + situacao = models.CharField( + max_length=5, + null=True, + blank=True, + help_text="Situação do colaborador no RM (PFUNC.CODSITUACAO)" + ) + + cod_funcao = models.CharField( + max_length=50, + null=True, + blank=True, + help_text="Código da função/cargo no RM (PFUNC.CODFUNCAO)" + ) + + salario = models.DecimalField( + max_digits=12, + decimal_places=2, + null=True, + blank=True, + help_text="Salário atual do colaborador no RM" + ) + + cod_sindicato = models.CharField( + max_length=10, + null=True, + blank=True, + help_text="Código do sindicato no RM" + ) + + saldo_banco_horas_minutos = models.IntegerField( + null=True, + blank=True, + help_text="Saldo atual de banco de horas em minutos (se aplicável)" + ) + + inicio_periodo_banco_horas = models.DateField( + null=True, + blank=True, + help_text="Início do período do último banco de horas considerado" + ) + + fim_periodo_banco_horas = models.DateField( + null=True, + blank=True, + help_text="Fim do período do último banco de horas considerado" + ) + # Integração externa (opcional) + matricula_winthor = models.CharField( + max_length=20, + null=True, + blank=True, + db_index=True, + help_text="Matrícula/código do usuário correspondente no Winthor" + ) + + # Controle de sincronização + sincronizado_em = models.DateTimeField( + null=True, + blank=True, + help_text="Data/hora da última sincronização com o RM" + ) + + class Meta: + verbose_name = "Pessoa (RM)" + verbose_name_plural = "Pessoas (RM)" + + def __str__(self): + return f"{self.nome} ({self.matricula})" +# +class Solicitacao(BaseModel): + """ + Entidade central do SGMP e agregador raiz do processo de RH. + + Uma Solicitação representa um pedido formal que percorre + um fluxo controlado de aprovação, desde sua criação até + a finalização ou reprovação. + + Responsabilidades: + - Identificar o tipo de processo (ex: desligamento,movimentação, admissão por substuição ou por aumento de quadro) + - Relacionar solicitante e funcionário + - Controlar o status atual do fluxo + - Servir de ponto de ligação para aprovações e dados específicos + """ + tipo = models.CharField( + max_length=30, + choices=TipoSolicitacao.choices + ) + + solicitante = models.ForeignKey( + UsuarioSistema, + on_delete=models.PROTECT, + related_name="solicitacoes_criadas" + ) + + funcionario = models.ForeignKey( + PessoaRM, + on_delete=models.PROTECT, + null=True, + blank=True, + related_name="solicitacoes" + ) + + status = models.CharField( + max_length=30, + choices=StatusSolicitacao.choices, + default=StatusSolicitacao.RASCUNHO + ) + + enviada_em = models.DateTimeField(null=True, blank=True) + finalizada_em = models.DateTimeField(null=True, blank=True) + + def pode_editar(self): + return self.status == StatusSolicitacao.RASCUNHO + + def pode_enviar(self): + return self.status == StatusSolicitacao.RASCUNHO + + def etapa_atual(self): + """ + Retorna a etapa atual baseada no status. + AGUARDANDO_HEAD: HEAD (apenas Head pode aprovar/reprovar) + ENVIADA: None (GG e CONTROLADORIA podem dar parecer) + AGUARDANDO_DIRETORIA: DIRETORIA (apenas Diretoria pode aprovar/reprovar) + """ + mapa = { + StatusSolicitacao.AGUARDANDO_HEAD: EtapaAprovacao.HEAD, + StatusSolicitacao.ENVIADA: None, # GG e CONTROLADORIA podem dar parecer + StatusSolicitacao.AGUARDANDO_DIRETORIA: EtapaAprovacao.DIRETORIA, + } + return mapa.get(self.status) + + def pode_aprovar(self, usuario=None): + """ + Verifica se a solicitação pode ser aprovada. + + - HEAD pode aprovar/reprovar quando status é AGUARDANDO_HEAD. + Considera tanto perfil principal quanto perfis extras. + - DIRETORIA pode aprovar/reprovar quando status é AGUARDANDO_DIRETORIA. + Considera tanto perfil principal quanto perfis extras. + """ + etapa_atual = self.etapa_atual() + if etapa_atual is None: + return False + + if etapa_atual == EtapaAprovacao.HEAD: + if usuario and not usuario.tem_perfil(UsuarioSistema.Perfil.HEAD): + return False + return True + if etapa_atual == EtapaAprovacao.DIRETORIA: + if usuario and not usuario.tem_perfil(UsuarioSistema.Perfil.DIRETORIA): + return False + return True + + return False + + def pode_dar_parecer(self, usuario): + """ + Verifica se o usuário pode dar parecer na solicitação. + GG e CONTROLADORIA podem dar parecer quando status é ENVIADA. + """ + if self.status != StatusSolicitacao.ENVIADA: + return False + + # GG e CONTROLADORIA podem dar parecer + if usuario.perfil not in [UsuarioSistema.Perfil.GG, UsuarioSistema.Perfil.CONTROLADORIA]: + return False + + # Verifica se já deu parecer + etapa_esperada = None + if usuario.perfil == UsuarioSistema.Perfil.GG: + etapa_esperada = EtapaAprovacao.GG + elif usuario.perfil == UsuarioSistema.Perfil.CONTROLADORIA: + etapa_esperada = EtapaAprovacao.CONTROLADORIA + + if etapa_esperada: + parecer_existente = self.pareceres.filter(etapa=etapa_esperada).exists() + if parecer_existente: + return False # Já deu parecer + + return True + + def __str__(self): + """ + Representação textual da solicitação. + + Em alguns tipos (ex.: Admissão por aumento de quadro) não há + funcionário vinculado, então protegemos contra None. + """ + tipo_label = self.get_tipo_display() + if self.funcionario: + return f"{tipo_label} - {self.funcionario.nome}" + return f"{tipo_label} - (sem funcionário)" +class TipoDesligamento(models.TextChoices): + """Tipos de desligamento suportados pelo sistema.""" + PEDIDO_DEMISSAO = "PEDIDO_DEMISSAO", _("Pedido de Demissão") + SEM_JUSTA_CAUSA = "SEM_JUSTA_CAUSA", _("Demissão sem Justa Causa") + COM_JUSTA_CAUSA = "COM_JUSTA_CAUSA", _("Demissão por Justa Causa") + TERMINO_CONTRATO = "TERMINO_CONTRATO", _("Término de Contrato de Experiência") + OUTROS = "OUTROS", _("Outros") + +class TipoAvisoPrevio(models.TextChoices): + """Tipos de aviso prévio.""" + TRABALHADO = "TRABALHADO", _("Trabalhado") + INDENIZADO = "INDENIZADO", _("Indenizado (Dispensa imediata)") + DISPENSADO = "DISPENSADO", _("Dispensado (Pedido de demissão)") + +class Desligamento(BaseModel): + """ + Modelo que representa os dados específicos de uma solicitação + de desligamento de funcionário. + + Está vinculado obrigatoriamente a uma única Solicitação, + permitindo que o SGMP trate desligamentos como um subtipo + de processo, sem poluir o modelo genérico de Solicitação. + + Contém apenas informações relevantes ao processo de desligamento, + mantendo a separação clara de responsabilidades no domínio. + """ + solicitacao = models.OneToOneField( + Solicitacao, + on_delete=models.CASCADE, + related_name="desligamento" + ) + + tipo_desligamento = models.CharField( + max_length=30, + choices=TipoDesligamento.choices, + help_text="Tipo de desligamento (pedido de demissão, sem justa causa, etc.)", + null=True, + blank=True + ) + + aviso_previo = models.CharField( + max_length=20, + choices=TipoAvisoPrevio.choices, + help_text="Tipo de aviso prévio (trabalhado, indenizado, dispensado)", + null=True, + blank=True + ) + + motivo = models.TextField() + data_prevista_desligamento = models.DateField() + observacoes = models.TextField(blank=True) + + arquivo_pedido = models.FileField( + upload_to='desligamentos/cartas/%Y/%m/%d/', + null=True, + blank=True, + help_text="Carta de pedido de demissão (obrigatório apenas para pedido de demissão)" + ) + + def __str__(self): + return f"Desligamento - {self.solicitacao.funcionario.nome}" +class AdmissaoSubstituicao(BaseModel): + """ + Representa a contratação de um novo colaborador para ocupar a vaga + de alguém que saiu (desligamento) ou mudou de área (movimentação). + + Ponto de Atenção: O 'substituído' é a PessoaRM vinculada na Solicitacao pai. + """ + solicitacao = models.OneToOneField( + Solicitacao, + on_delete=models.CASCADE, + related_name="admissao_substituicao" + ) + + data_previsao_contratacao = models.DateField() + + # Dados do Destino (Onde o novo colaborador irá trabalhar) + cod_coligada_destino = models.IntegerField(help_text="Cód. Coligada RM") + cod_filial_destino = models.IntegerField(help_text="Cód. Filial RM") + cod_secao_destino = models.CharField(max_length=50, help_text="Cód. Seção/Centro de Custo") + cod_funcao_destino = models.CharField(max_length=50, help_text="Cód. Função/Cargo") + + justificativa = models.TextField() + + def __str__(self): + return f"Substituição de {self.solicitacao.funcionario.nome}" + +class AdmissaoAumentoQuadro(BaseModel): + """ + Representa a abertura de uma nova vaga no orçamento (Headcount), + sem um colaborador predecessor. + """ + solicitacao = models.OneToOneField( + Solicitacao, + on_delete=models.CASCADE, + related_name="admissao_aumento" + ) + + data_previsao_contratacao = models.DateField() + justificativa_estrategica = models.TextField() + + # Estrutura de Destino + cod_coligada_destino = models.IntegerField() + cod_filial_destino = models.IntegerField() + cod_secao_destino = models.CharField(max_length=50) + cod_funcao_destino = models.CharField(max_length=50) + + # No BPMN menciona 'Avaliar Suplementação' - campo para controle orçamentário + requer_suplementacao_orcamentaria = models.BooleanField(default=False) + + def __str__(self): + return f"Aumento de Quadro - {self.cod_secao_destino}" + +class Movimentacao(BaseModel): + """ + Representa alteração de cargo, setor ou centro de custo de um + colaborador ativo. + """ + solicitacao = models.OneToOneField( + Solicitacao, + on_delete=models.CASCADE, + related_name="movimentacao" + ) + + # Flags de Mudança (conforme decisão no BPMN: "Altera Função?", "Transfere CC?") + altera_funcao = models.BooleanField(default=False) + altera_centro_custo = models.BooleanField(default=False) + + # Novos Dados (Snapshot do Destino) + novo_cod_secao = models.CharField(max_length=50, null=True, blank=True) + novo_cod_funcao = models.CharField(max_length=50, null=True, blank=True) + novo_salario = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True) + + data_efetivacao = models.DateField(help_text="Data que a mudança passa a valer no RM") + justificativa = models.TextField() + + def __str__(self): + return f"Movimentação - {self.solicitacao.funcionario.nome}" + +class Aprovacao(BaseModel): + """ + Representa uma decisão formal tomada em uma etapa específica + do fluxo de aprovação de uma solicitação. + + Cada aprovação registra: + - a etapa do processo + - a decisão tomada + - o usuário responsável + - a justificativa + - o momento da decisão + + O modelo garante que exista apenas uma aprovação + por etapa para cada solicitação, assegurando consistência + e integridade do processo decisório. + """ + solicitacao = models.ForeignKey( + Solicitacao, + on_delete=models.CASCADE, + related_name="aprovacoes" + ) + + etapa = models.CharField( + max_length=20, + choices=EtapaAprovacao.choices + ) + + decisao = models.CharField( + max_length=10, + choices=DecisaoAprovacao.choices + ) + + usuario = models.ForeignKey( + UsuarioSistema, + on_delete=models.PROTECT, + related_name="aprovacoes_realizadas" + ) + + justificativa = models.TextField() + decidido_em = models.DateTimeField(auto_now_add=True) + + class Meta: + unique_together = ("solicitacao", "etapa") + + def __str__(self): + return f"{self.solicitacao.id} - {self.etapa} - {self.decisao}" + +class Parecer(BaseModel): + """ + Representa um parecer técnico emitido por GG ou CONTROLADORIA + sobre uma solicitação. Diferente de Aprovacao, um Parecer não + altera o status da solicitação diretamente, apenas fornece análise e dados. + + Quando ambos os pareceres (GG e CONTROLADORIA) são dados, + a solicitação muda para AGUARDANDO_DIRETORIA. + """ + solicitacao = models.ForeignKey( + Solicitacao, + on_delete=models.CASCADE, + related_name="pareceres" + ) + + etapa = models.CharField( + max_length=20, + choices=EtapaAprovacao.choices, + help_text="Etapa do parecer (GG ou CONTROLADORIA)" + ) + + usuario = models.ForeignKey( + UsuarioSistema, + on_delete=models.PROTECT, + related_name="pareceres_emitidos" + ) + + texto = models.TextField( + help_text="Análise, dados e considerações sobre a solicitação" + ) + + anexo = models.FileField( + upload_to='pareceres/anexos/%Y/%m/%d/', + null=True, + blank=True, + help_text="Anexo opcional ao parecer (documentos, planilhas, etc.)" + ) + + criado_em = models.DateTimeField(auto_now_add=True) + + class Meta: + unique_together = ("solicitacao", "etapa") + verbose_name = "Parecer" + verbose_name_plural = "Pareceres" + + def __str__(self): + return f"Parecer {self.etapa} - {self.solicitacao.id}" + diff --git a/solicitacoes/services.py b/solicitacoes/services.py new file mode 100644 index 0000000..d7ca8d6 --- /dev/null +++ b/solicitacoes/services.py @@ -0,0 +1,494 @@ +# /SGMP_PROD/solicitacoes/services.py + +import logging +from datetime import date +from typing import Dict, Any, Tuple +from django.db import transaction +from django.utils import timezone +from .models import ( + PessoaRM, + Solicitacao, + Desligamento, + AdmissaoSubstituicao, + AdmissaoAumentoQuadro, + Movimentacao, + Aprovacao, + Parecer, + UsuarioSistema, + TipoSolicitacao, + StatusSolicitacao, + DecisaoAprovacao, + EtapaAprovacao, + ) +from .intf_sqlserver import listar_para_selecionar_colaborador, verificar_estabilidades_colaborador +from .intf_winthor import buscar_colaborador_oracle + +# Configuração do Logger para rastreabilidade +logger = logging.getLogger(__name__) +STATUS_POR_ETAPA = { + EtapaAprovacao.HEAD: StatusSolicitacao.ENVIADA, + EtapaAprovacao.DIRETORIA: StatusSolicitacao.FINALIZADA, +} + +# --- Exceções de Domínio --- +# Usar exceções customizadas torna o código mais explícito e fácil de +# tratar nas camadas superiores (views, APIs). + +class SolicitacaoError(Exception): + """Classe base para erros relacionados a solicitações.""" + pass + +class ValidacaoError(SolicitacaoError): + """Lançada quando uma regra de negócio é violada.""" + pass + +class PermissaoError(SolicitacaoError): + """Lançada quando um usuário tenta executar uma ação não permitida.""" + pass + +def sincronizar_colaboradores_rm() -> Tuple[int, int]: + """ + Executa a sincronização de colaboradores do TOTVS RM para o SGMP. + + Esta função é responsável por: + 1. Buscar todos os colaboradores ativos no RM. + 2. Usar 'update_or_create' para inserir novos ou atualizar existentes. + 3. Tentar, de forma resiliente, enriquecer o dado com a matrícula do Winthor. + + A lógica de integração fica isolada aqui, protegendo o resto do sistema + de sua complexidade. + + Retorna: + Uma tupla (criados, atualizados) com a contagem de registros. + """ + logger.info("Iniciando sincronização de colaboradores com o TOTVS RM.") + dados_rm = listar_para_selecionar_colaborador() + + criados = 0 + atualizados = 0 + agora = timezone.now() + + for row in dados_rm: + id_rm = f"{row['CODCOLIGADA']}-{row['CHAPA']}" + cpf = row.get('CPF') + matricula_winthor = None + + # --- Tratamento de Integração Satélite (Winthor) --- + # A busca no Winthor é "best-effort". Uma falha aqui não deve + # impedir a sincronização principal com o RM. + if cpf: + try: + dados_winthor = buscar_colaborador_oracle(cpf) + if dados_winthor: + matricula_winthor = dados_winthor.get('matricula') + except Exception as e: + logger.error(f"Falha ao buscar CPF {cpf} no Winthor: {e}") + + # O 'update_or_create' é atômico por padrão e a forma mais segura + # e eficiente de realizar a sincronização. + _, created = PessoaRM.objects.update_or_create( + id_rm=id_rm, + defaults={ + "matricula": row["CHAPA"], + "nome": row["NOME"], + "cpf": cpf, + "cargo": row["FUNCAO"], + "setor": row["SECAO"], + "centro_custo": row["CODSECAO"], + "data_admissao": row["DATAADMISSAO"], + "situacao": row["CODSITUACAO"], + "cod_funcao": row["CODFUNCAO"], + "salario": row["SALARIO"], + "cod_sindicato": row["CODSINDICATO"], + "saldo_banco_horas_minutos": row.get("SALDO_MINUTOS"), + "inicio_periodo_banco_horas": row.get("INICIOPER"), + "fim_periodo_banco_horas": row.get("FIMPER"), + "matricula_winthor": matricula_winthor, + "sincronizado_em": agora, + }, + ) + + if created: + criados += 1 + else: + atualizados += 1 + + logger.info(f"Sincronização concluída. Criados: {criados}, Atualizados: {atualizados}.") + return criados, atualizados + +# --- Service de Gestão de Solicitações (Core do Domínio) --- +@transaction.atomic +def criar_solicitacao_desligamento( + solicitante: UsuarioSistema, + funcionario: PessoaRM, + tipo_desligamento: str, + aviso_previo: str, + motivo: str, + data_prevista_desligamento: date, + observacoes: str = "", + arquivo_pedido = None + ) -> Solicitacao: + """ + Cria uma solicitação de Desligamento de forma transacional. + + Validações: + - Garante que não existe outra solicitação em aberto para o mesmo funcionário. + - Verifica estabilidades legais/operacionais que podem bloquear o desligamento. + + O decorador @transaction.atomic garante que a criação da Solicitação + e do Desligamento ocorram juntas. Se uma falhar, a outra é revertida. + """ + if Solicitacao.objects.filter( + funcionario=funcionario, + status__in=[ + StatusSolicitacao.RASCUNHO, + StatusSolicitacao.ENVIADA, + StatusSolicitacao.APROVADA_GG, + StatusSolicitacao.APROVADA_CONTROLADORIA, + StatusSolicitacao.APROVADA_DIRETORIA + ] + ).exists(): + raise ValidacaoError("Já existe uma solicitação em andamento para este funcionário.") + + # Verifica estabilidades que bloqueiam o desligamento + estabilidades = verificar_estabilidades_colaborador(funcionario.id_rm) + estabilidades_bloqueantes = [e for e in estabilidades if e.get('bloqueado', False)] + + if estabilidades_bloqueantes: + mensagens = [e['mensagem'] for e in estabilidades_bloqueantes] + raise ValidacaoError( + "Desligamento bloqueado por estabilidade legal/operacional:\n" + + "\n".join(f"• {msg}" for msg in mensagens) + ) + + solicitacao = Solicitacao.objects.create( + tipo=TipoSolicitacao.DESLIGAMENTO, + solicitante=solicitante, + funcionario=funcionario, + status=StatusSolicitacao.RASCUNHO + ) + + Desligamento.objects.create( + solicitacao=solicitacao, + tipo_desligamento=tipo_desligamento, + aviso_previo=aviso_previo, + motivo=motivo, + data_prevista_desligamento=data_prevista_desligamento, + observacoes=observacoes, + arquivo_pedido=arquivo_pedido + ) + + logger.info(f"Solicitação de Desligamento {solicitacao.id} criada para {funcionario.nome} por {solicitante.nome}.") + return solicitacao + +@transaction.atomic +def criar_solicitacao_aumento_quadro( + solicitante: UsuarioSistema, + dados_admissao: Dict[str, Any] + ) -> Solicitacao: + """ + Cria uma solicitação de Admissão por Aumento de Quadro. + + Este tipo de solicitação não possui um 'funcionario' vinculado + inicialmente, pois representa a criação de uma nova vaga. + """ + solicitacao = Solicitacao.objects.create( + tipo=TipoSolicitacao.ADMISSAO_AUMENTO, + solicitante=solicitante, + # 'funcionario' é None por definição aqui + funcionario=None, + status=StatusSolicitacao.RASCUNHO + ) + + AdmissaoAumentoQuadro.objects.create( + solicitacao=solicitacao, + **dados_admissao + ) + + logger.info(f"Solicitação de Aumento de Quadro {solicitacao.id} criada por {solicitante.nome}.") + return solicitacao + +@transaction.atomic +def criar_solicitacao_substituicao( + solicitante: UsuarioSistema, + funcionario_substituido: PessoaRM, + dados_admissao: Dict[str, Any], + ) -> Solicitacao: + """ + Cria uma solicitação de Admissão por Substituição. + + Regras: + - Deve existir um funcionário sendo substituído + - Não pode haver outra solicitação ativa para esse funcionário + - Permite funcionários desligados, pois a substituição é exatamente para substituir quem já saiu + """ + + # Não valida situação desligada para substituição, pois é esperado que o funcionário + # substituído possa estar desligado (essa é a razão da substituição) + + if Solicitacao.objects.filter( + funcionario=funcionario_substituido, + status__in=[ + StatusSolicitacao.RASCUNHO, + StatusSolicitacao.ENVIADA, + StatusSolicitacao.APROVADA_GG, + StatusSolicitacao.APROVADA_CONTROLADORIA, + StatusSolicitacao.APROVADA_DIRETORIA, + ], + ).exists(): + raise ValidacaoError("Já existe uma solicitação em andamento para este funcionário.") + + solicitacao = Solicitacao.objects.create( + tipo=TipoSolicitacao.ADMISSAO_SUBSTITUICAO, + solicitante=solicitante, + funcionario=funcionario_substituido, + status=StatusSolicitacao.RASCUNHO, + ) + + AdmissaoSubstituicao.objects.create( + solicitacao=solicitacao, + **dados_admissao, + ) + + logger.info( + f"Solicitação de Substituição {solicitacao.id} criada para " + f"{funcionario_substituido.nome} por {solicitante.nome}." + ) + + return solicitacao + +@transaction.atomic +def criar_solicitacao_movimentacao( + solicitante: UsuarioSistema, + funcionario: PessoaRM, + dados_movimentacao: Dict[str, Any], + ) -> Solicitacao: + """ + Cria uma solicitação de Movimentação Interna. + + Regras: + - Funcionário deve estar ativo + - Não pode haver outra solicitação ativa para o mesmo funcionário + """ + + if funcionario.situacao == 'D': + raise ValidacaoError("Não é possível movimentar um funcionário desligado.") + + if Solicitacao.objects.filter( + funcionario=funcionario, + status__in=[ + StatusSolicitacao.RASCUNHO, + StatusSolicitacao.ENVIADA, + StatusSolicitacao.APROVADA_GG, + StatusSolicitacao.APROVADA_CONTROLADORIA, + StatusSolicitacao.APROVADA_DIRETORIA, + ], + ).exists(): + raise ValidacaoError("Já existe uma solicitação em andamento para este funcionário.") + + solicitacao = Solicitacao.objects.create( + tipo=TipoSolicitacao.MOVIMENTACAO, + solicitante=solicitante, + funcionario=funcionario, + status=StatusSolicitacao.RASCUNHO, + ) + + Movimentacao.objects.create( + solicitacao=solicitacao, + **dados_movimentacao, + ) + + logger.info( + f"Solicitação de Movimentação {solicitacao.id} criada para " + f"{funcionario.nome} por {solicitante.nome}." + ) + + return solicitacao + +@transaction.atomic +def enviar_solicitacao(solicitacao: Solicitacao, usuario: UsuarioSistema) -> Solicitacao: + """ + Muda o status de uma solicitação de 'Rascunho' para 'Aguardando Head'. + + O Head deve aprovar ou reprovar; só após aprovação do Head a solicitação + passa para ENVIADA (e enviada_em é preenchido). Reprovação do Head → REPROVADA. + + Validações: + - Apenas o solicitante pode enviar. + - A solicitação deve estar no estado 'Rascunho'. + """ + if solicitacao.solicitante != usuario: + raise PermissaoError("Apenas o solicitante pode enviar a solicitação.") + + if not solicitacao.pode_enviar(): + raise ValidacaoError(f"A solicitação não pode ser enviada no status atual ({solicitacao.get_status_display()}).") + + solicitacao.status = StatusSolicitacao.AGUARDANDO_HEAD + solicitacao.save() + # enviada_em será preenchido quando o Head aprovar (em aprovar_reprovar_por_head) + + logger.info(f"Solicitação {solicitacao.id} enviada para aprovação do Head por {usuario.nome}.") + return solicitacao + +@transaction.atomic +def registrar_parecer( + solicitacao: Solicitacao, + usuario: UsuarioSistema, + texto: str, + anexo=None +) -> Parecer: + """ + Registra um parecer de GG ou CONTROLADORIA sobre uma solicitação. + Não altera o status da solicitação diretamente. + + Quando ambos os pareceres (GG e CONTROLADORIA) são dados, + a solicitação muda automaticamente para AGUARDANDO_DIRETORIA. + + Validações: + - Verifica se o usuário pode dar parecer (GG ou CONTROLADORIA) + - Verifica se a solicitação está no status ENVIADA + - Impede pareceres duplicados para a mesma etapa + """ + if not solicitacao.pode_dar_parecer(usuario): + raise PermissaoError("Usuário não pode dar parecer nesta solicitação.") + + # Mapeia perfil para etapa + mapa_perfil_etapa = { + UsuarioSistema.Perfil.GG: EtapaAprovacao.GG, + UsuarioSistema.Perfil.CONTROLADORIA: EtapaAprovacao.CONTROLADORIA, + } + etapa = mapa_perfil_etapa.get(usuario.perfil) + + if not etapa: + raise PermissaoError("Apenas GG e Controladoria podem dar parecer.") + + # Verifica se já existe parecer para esta etapa + if Parecer.objects.filter(solicitacao=solicitacao, etapa=etapa).exists(): + raise ValidacaoError(f"Já existe um parecer da {etapa.label} para esta solicitação.") + + # Cria o parecer + parecer = Parecer.objects.create( + solicitacao=solicitacao, + etapa=etapa, + usuario=usuario, + texto=texto, + anexo=anexo + ) + + # Verifica se ambos os pareceres foram dados + parecer_gg = Parecer.objects.filter(solicitacao=solicitacao, etapa=EtapaAprovacao.GG).exists() + parecer_controladoria = Parecer.objects.filter(solicitacao=solicitacao, etapa=EtapaAprovacao.CONTROLADORIA).exists() + + if parecer_gg and parecer_controladoria: + # Ambos os pareceres foram dados, muda status para AGUARDANDO_DIRETORIA + solicitacao.status = StatusSolicitacao.AGUARDANDO_DIRETORIA + solicitacao.save() + logger.info(f"Solicitação {solicitacao.id} mudou para AGUARDANDO_DIRETORIA após ambos os pareceres serem dados.") + + logger.info(f"Parecer da {etapa.label} registrado para a solicitação {solicitacao.id} por {usuario.nome}.") + return parecer + +@transaction.atomic +def aprovar_reprovar_solicitacao( + solicitacao: Solicitacao, + aprovador: UsuarioSistema, + decisao: str, + justificativa: str = "" + ) -> Solicitacao: + """ + Registra uma decisão (Aprovação/Reprovação) da DIRETORIA. + + Apenas a DIRETORIA pode aprovar/reprovar solicitações. + A solicitação deve estar no status AGUARDANDO_DIRETORIA. + + Validações: + - Verifica se o aprovador é da DIRETORIA + - Verifica se a solicitação está aguardando aprovação da Diretoria + - Justificativa é obrigatória apenas para reprovação + """ + if aprovador.perfil != UsuarioSistema.Perfil.DIRETORIA: + raise PermissaoError("Apenas a Diretoria pode aprovar/reprovar solicitações.") + + if solicitacao.status != StatusSolicitacao.AGUARDANDO_DIRETORIA: + raise ValidacaoError("A solicitação não está aguardando aprovação da Diretoria.") + + etapa_atual = solicitacao.etapa_atual() + if etapa_atual != EtapaAprovacao.DIRETORIA: + raise ValidacaoError("A solicitação não está em uma etapa de aprovação válida.") + + # Valida justificativa apenas para reprovação + if decisao == DecisaoAprovacao.REPROVADO and not justificativa.strip(): + raise ValidacaoError("Justificativa é obrigatória para reprovação.") + + # Cria o registro de decisão + Aprovacao.objects.create( + solicitacao=solicitacao, + etapa=etapa_atual, + decisao=decisao, + usuario=aprovador, + justificativa=justificativa or "Aprovado" # Valor padrão para aprovação + ) + + if decisao == DecisaoAprovacao.REPROVADO: + solicitacao.status = StatusSolicitacao.REPROVADA + solicitacao.finalizada_em = timezone.now() + else: + solicitacao.status = STATUS_POR_ETAPA[etapa_atual] + if solicitacao.status == StatusSolicitacao.FINALIZADA: + solicitacao.finalizada_em = timezone.now() + + solicitacao.save() + logger.info(f"Decisão '{decisao}' registrada pela Diretoria para a solicitação {solicitacao.id} por {aprovador.nome}.") + return solicitacao + + +@transaction.atomic +def aprovar_reprovar_por_head( + solicitacao: Solicitacao, + aprovador: UsuarioSistema, + decisao: str, + justificativa: str = "", +) -> Solicitacao: + """ + Registra a decisão (Aprovação/Reprovação) do HEAD sobre o rascunho enviado pelo gestor. + + Apenas o perfil HEAD pode usar esta função. + A solicitação deve estar no status AGUARDANDO_HEAD. + Se aprovado: status → ENVIADA e enviada_em é preenchido. + Se reprovado: status → REPROVADA e finalizada_em é preenchido. + """ + if aprovador.perfil != UsuarioSistema.Perfil.HEAD: + raise PermissaoError("Apenas o Head pode aprovar/reprovar solicitações nesta etapa.") + + if solicitacao.status != StatusSolicitacao.AGUARDANDO_HEAD: + raise ValidacaoError("A solicitação não está aguardando aprovação do Head.") + + etapa_atual = solicitacao.etapa_atual() + if etapa_atual != EtapaAprovacao.HEAD: + raise ValidacaoError("A solicitação não está em etapa de aprovação do Head.") + + if decisao == DecisaoAprovacao.REPROVADO and not justificativa.strip(): + raise ValidacaoError("Justificativa é obrigatória para reprovação.") + + Aprovacao.objects.create( + solicitacao=solicitacao, + etapa=EtapaAprovacao.HEAD, + decisao=decisao, + usuario=aprovador, + justificativa=justificativa or "Aprovado", + ) + + if decisao == DecisaoAprovacao.REPROVADO: + solicitacao.status = StatusSolicitacao.REPROVADA + solicitacao.finalizada_em = timezone.now() + else: + solicitacao.status = StatusSolicitacao.ENVIADA + solicitacao.enviada_em = timezone.now() + + solicitacao.save() + logger.info( + f"Decisão '{decisao}' registrada pelo Head para a solicitação {solicitacao.id} por {aprovador.nome}." + ) + return solicitacao + + diff --git a/solicitacoes/templatetags/__init__.py b/solicitacoes/templatetags/__init__.py new file mode 100644 index 0000000..48f8f5b --- /dev/null +++ b/solicitacoes/templatetags/__init__.py @@ -0,0 +1,2 @@ +# Template tags do app solicitacoes + diff --git a/solicitacoes/templatetags/solicitacoes_extras.py b/solicitacoes/templatetags/solicitacoes_extras.py new file mode 100644 index 0000000..1109e8c --- /dev/null +++ b/solicitacoes/templatetags/solicitacoes_extras.py @@ -0,0 +1,34 @@ +# /SGMP_PROD/solicitacoes/templatetags/solicitacoes_extras.py + +from django import template + +register = template.Library() + + +@register.filter +def minutos_para_horas(minutos): + """Converte minutos para horas com 1 casa decimal""" + if minutos is None: + return None + try: + horas = float(minutos) / 60.0 + return f"{horas:.1f}" + except (ValueError, TypeError): + return None + + +@register.filter +def formatar_saldo_banco_horas(minutos): + """Formata saldo de banco de horas de forma legível""" + if minutos is None: + return "N/A" + try: + minutos_int = int(minutos) + horas = minutos_int / 60.0 + if minutos_int >= 0: + return f"{minutos_int} minutos ({horas:.1f} horas)" + else: + return f"{minutos_int} minutos" + except (ValueError, TypeError): + return "N/A" + diff --git a/solicitacoes/tests/__init__.py b/solicitacoes/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solicitacoes/tests/test_desligamento_services.py b/solicitacoes/tests/test_desligamento_services.py new file mode 100644 index 0000000..757c37b --- /dev/null +++ b/solicitacoes/tests/test_desligamento_services.py @@ -0,0 +1,311 @@ +# /SGMP_PROD/solicitacoes/tests/test_desligamento_services.py + +import json +from datetime import date, timedelta +from unittest import TestCase as AssertionsMixin +from pathlib import Path + +from django.test import TestCase +from django.db import IntegrityError + +from ..models import ( + PessoaRM, + UsuarioSistema, + Solicitacao, + Desligamento, + Aprovacao, + StatusSolicitacao, + DecisaoAprovacao, + EtapaAprovacao +) +from .. import services + +# --- Estrutura para Geração do Relatório JSON --- +# Esta estrutura será populada durante a execução dos testes +TEST_RESULTS = { + "summary": { + "total": 0, + "passed": 0, + "failed": 0, + "errors": 0, + }, + "details": [], +} + +class TestResultLogger(AssertionsMixin): + """ + Um mixin para registrar os resultados de cada teste em nossa estrutura JSON. + """ + def run(self, result=None): + self.test_result_data = { + "name": self.id(), + "status": "PASS", + "description": self._testMethodDoc or "Sem descrição.", + "steps": [], + "error_message": None, + } + + # Armazena a referência original do 'addFailure' + original_addFailure = result.addFailure + + # Monkey-patch para capturar a falha + def custom_addFailure(test, err): + self.test_result_data["status"] = "FAIL" + self.test_result_data["error_message"] = str(err[1]) + original_addFailure(test, err) + + result.addFailure = custom_addFailure + + super().run(result) + + # Restaura o método original para não afetar outros testes + result.addFailure = original_addFailure + + TEST_RESULTS["details"].append(self.test_result_data) + TEST_RESULTS["summary"]["total"] += 1 + if self.test_result_data["status"] == "PASS": + TEST_RESULTS["summary"]["passed"] += 1 + else: + TEST_RESULTS["summary"]["failed"] += 1 + + def _add_step(self, description, success=True): + self.test_result_data["steps"].append({ + "description": description, + "success": success + }) + + +class DesligamentoServiceTests(TestResultLogger, TestCase): + """ + Testa o ciclo de vida completo de uma Solicitação de Desligamento, + incluindo criação, validações, permissões e o fluxo de aprovação. + """ + + @classmethod + def tearDownClass(cls): + """ + Executado uma vez no final de todos os testes desta classe. + Gera o arquivo JSON com os resultados. + """ + output_path = Path("./test_results.json") + with open(output_path, "w", encoding="utf-8") as f: + json.dump(TEST_RESULTS, f, indent=4, ensure_ascii=False) + print(f"\n[INFO] Relatório de testes salvo em: {output_path.resolve()}") + super().tearDownClass() + + def setUp(self): + """ + Prepara o ambiente para cada teste, criando os usuários e + o funcionário que serão usados nos cenários. + """ + # 1. Criação dos Atores do Processo + self.solicitante = UsuarioSistema.objects.create( + matricula="100", nome="Gestor Solicitante", perfil=UsuarioSistema.Perfil.GESTOR + ) + self.aprovador_head = UsuarioSistema.objects.create( + matricula="150", nome="Aprovador Head", perfil=UsuarioSistema.Perfil.HEAD + ) + self.aprovador_gg = UsuarioSistema.objects.create( + matricula="200", nome="Aprovador de GG", perfil=UsuarioSistema.Perfil.GG + ) + self.aprovador_controladoria = UsuarioSistema.objects.create( + matricula="300", nome="Aprovador da Controladoria", perfil=UsuarioSistema.Perfil.CONTROLADORIA + ) + self.aprovador_diretoria = UsuarioSistema.objects.create( + matricula="400", nome="Aprovador da Diretoria", perfil=UsuarioSistema.Perfil.DIRETORIA + ) + + # 2. Criação do Objeto do Processo + self.funcionario = PessoaRM.objects.create( + id_rm="1-12345", matricula="12345", nome="Colaborador Teste", situacao='A' + ) + + # --- Testes de Caminho Feliz (Happy Path) --- + + def test_criar_desligamento_sucesso(self): + """ + Garante que uma solicitação de desligamento é criada corretamente + com o status inicial 'RASCUNHO'. + """ + solicitacao = services.criar_solicitacao_desligamento( + solicitante=self.solicitante, + funcionario=self.funcionario, + motivo="Teste de criação", + data_prevista_desligamento=date.today(), + ) + self._add_step("Service 'criar_solicitacao_desligamento' executado.") + + self.assertIsNotNone(solicitacao) + self.assertEqual(Solicitacao.objects.count(), 1) + self.assertEqual(Desligamento.objects.count(), 1) + self._add_step("Objetos Solicitacao e Desligamento criados no DB.") + + self.assertEqual(solicitacao.status, StatusSolicitacao.RASCUNHO) + self.assertEqual(solicitacao.tipo, "DESLIGAMENTO") + self.assertEqual(solicitacao.desligamento.motivo, "Teste de criação") + self._add_step("Validação dos atributos e status inicial da solicitação.") + + def test_fluxo_aprovacao_completo_sucesso(self): + """ + Simula o fluxo completo de aprovação de um desligamento, + passando por todas as etapas até a finalização. + """ + # Etapa 1: Criação e Envio (gestor envia → AGUARDANDO_HEAD) + solicitacao = services.criar_solicitacao_desligamento( + solicitante=self.solicitante, funcionario=self.funcionario, + motivo="Fluxo completo", data_prevista_desligamento=date.today() + ) + services.enviar_solicitacao(solicitacao, usuario=self.solicitante) + solicitacao.refresh_from_db() + self.assertEqual(solicitacao.status, StatusSolicitacao.AGUARDANDO_HEAD) + self.assertIsNone(solicitacao.enviada_em) + self._add_step("Solicitação criada e enviada (status: AGUARDANDO_HEAD).") + + # Etapa 1b: Aprovação Head (libera para ENVIADA) + services.aprovar_reprovar_por_head( + solicitacao, self.aprovador_head, DecisaoAprovacao.APROVADO, "OK Head" + ) + solicitacao.refresh_from_db() + self.assertEqual(solicitacao.status, StatusSolicitacao.ENVIADA) + self.assertIsNotNone(solicitacao.enviada_em) + self._add_step("Aprovação pelo Head (status: ENVIADA).") + + # Etapa 2: Aprovação GG + services.aprovar_reprovar_solicitacao( + solicitacao, self.aprovador_gg, DecisaoAprovacao.APROVADO, "OK GG" + ) + solicitacao.refresh_from_db() + self.assertEqual(solicitacao.status, StatusSolicitacao.APROVADA_GG) + self.assertTrue(Aprovacao.objects.filter(solicitacao=solicitacao, etapa=EtapaAprovacao.GG).exists()) + self._add_step("Aprovação por Gente & Gestão (status: APROVADA_GG).") + + # Etapa 3: Aprovação Controladoria + services.aprovar_reprovar_solicitacao( + solicitacao, self.aprovador_controladoria, DecisaoAprovacao.APROVADO, "OK Controladoria" + ) + solicitacao.refresh_from_db() + self.assertEqual(solicitacao.status, StatusSolicitacao.APROVADA_CONTROLADORIA) + self._add_step("Aprovação pela Controladoria (status: APROVADA_CONTROLADORIA).") + + # Etapa 4: Aprovação Diretoria (Finalização) + services.aprovar_reprovar_solicitacao( + solicitacao, self.aprovador_diretoria, DecisaoAprovacao.APROVADO, "OK Diretoria" + ) + solicitacao.refresh_from_db() + self.assertEqual(solicitacao.status, StatusSolicitacao.FINALIZADA) + self.assertIsNotNone(solicitacao.finalizada_em) + self._add_step("Aprovação pela Diretoria, finalizando a solicitação (status: FINALIZADA).") + + def test_fluxo_reprovacao_sucesso(self): + """ + Garante que a reprovação em qualquer etapa move a solicitação + para o status 'REPROVADA' e a finaliza. + """ + solicitacao = services.criar_solicitacao_desligamento( + solicitante=self.solicitante, funcionario=self.funcionario, + motivo="Teste de reprovação", data_prevista_desligamento=date.today() + ) + services.enviar_solicitacao(solicitacao, usuario=self.solicitante) + self._add_step("Solicitação criada e enviada (AGUARDANDO_HEAD).") + + # Reprovação na primeira etapa (Head) + services.aprovar_reprovar_por_head( + solicitacao, self.aprovador_head, DecisaoAprovacao.REPROVADO, "Reprovado pelo Head" + ) + solicitacao.refresh_from_db() + self._add_step("Service de reprovação executado pelo Head.") + + self.assertEqual(solicitacao.status, StatusSolicitacao.REPROVADA) + self.assertIsNotNone(solicitacao.finalizada_em) + self.assertTrue(Aprovacao.objects.filter(solicitacao=solicitacao, decisao=DecisaoAprovacao.REPROVADO).exists()) + self._add_step("Status da solicitação e data de finalização validados como REPROVADA.") + + # --- Testes de Validação e Permissão (Caminho Infeliz) --- + + def test_criar_solicitacao_duplicada_falha(self): + """ + Verifica se o service levanta ValidacaoError ao tentar criar uma + solicitação para um funcionário que já possui uma em andamento. + """ + # Cria a primeira solicitação (válida) + services.criar_solicitacao_desligamento( + solicitante=self.solicitante, funcionario=self.funcionario, + motivo="Primeira solicitação", data_prevista_desligamento=date.today() + ) + self._add_step("Primeira solicitação criada com sucesso.") + + # Tenta criar a segunda (inválida) + with self.assertRaises(services.ValidacaoError) as ctx: + services.criar_solicitacao_desligamento( + solicitante=self.solicitante, funcionario=self.funcionario, + motivo="Segunda solicitação (inválida)", data_prevista_desligamento=date.today() + ) + + self.assertIn("Já existe uma solicitação em andamento", str(ctx.exception)) + self.assertEqual(Solicitacao.objects.count(), 1) + self._add_step("Tentativa de criar solicitação duplicada levantou ValidacaoError como esperado.") + + def test_enviar_por_nao_solicitante_falha(self): + """ + Garante que PermissaoError é levantada se um usuário que não é + o solicitante original tenta enviar a solicitação. + """ + solicitacao = services.criar_solicitacao_desligamento( + solicitante=self.solicitante, funcionario=self.funcionario, + motivo="Teste de permissão", data_prevista_desligamento=date.today() + ) + self._add_step("Solicitação criada pelo solicitante original.") + + with self.assertRaises(services.PermissaoError): + # GG tenta enviar uma solicitação que não é dele + services.enviar_solicitacao(solicitacao, usuario=self.aprovador_gg) + self._add_step("Tentativa de envio por outro usuário levantou PermissaoError.") + + def test_aprovar_com_perfil_errado_falha(self): + """ + Verifica se PermissaoError é levantada quando um usuário com perfil + inadequado tenta aprovar a etapa do Head. + """ + solicitacao = services.criar_solicitacao_desligamento( + solicitante=self.solicitante, funcionario=self.funcionario, + motivo="Teste de perfil", data_prevista_desligamento=date.today() + ) + services.enviar_solicitacao(solicitacao, usuario=self.solicitante) + self._add_step("Solicitação criada e enviada, aguardando aprovação do Head.") + + # O usuário da Controladoria tenta aprovar a etapa do Head + with self.assertRaises(services.PermissaoError) as ctx: + services.aprovar_reprovar_por_head( + solicitacao, self.aprovador_controladoria, DecisaoAprovacao.APROVADO, "Aprovação indevida" + ) + + self.assertIn("Head", str(ctx.exception)) + solicitacao.refresh_from_db() + self.assertEqual(solicitacao.status, StatusSolicitacao.AGUARDANDO_HEAD) + self._add_step("Tentativa de aprovação com perfil incorreto levantou PermissaoError.") + + # --- Teste de Atomicidade --- + + def test_criacao_atomica_falha_nao_persiste_dados(self): + """ + Garante que, se a criação do objeto 'Desligamento' falhar, + a 'Solicitacao' correspondente também não será criada (rollback). + """ + self._add_step("Iniciando teste de transação atômica.") + + # Forçamos um erro passando um valor inválido para um campo DateField, + # o que causará um erro ANTES do .save() ser chamado no service. + # Uma abordagem mais robusta seria mockar o .create() para levantar uma exceção. + with self.assertRaises(Exception): # Captura genérica (pode ser ValueError, TypeError, etc) + services.criar_solicitacao_desligamento( + solicitante=self.solicitante, + funcionario=self.funcionario, + motivo="Teste de falha atômica", + data_prevista_desligamento="DATA_INVALIDA", # Isso causará um erro + ) + self._add_step("Execução do service com dados inválidos levantou uma exceção.") + + # A asserção mais importante: nada deve ter sido criado no banco de dados. + self.assertEqual(Solicitacao.objects.count(), 0) + self.assertEqual(Desligamento.objects.count(), 0) + self._add_step("Confirmado que nenhum registro foi persistido no banco de dados devido ao rollback.") \ No newline at end of file diff --git a/solicitacoes/urls.py b/solicitacoes/urls.py new file mode 100644 index 0000000..9bab0e1 --- /dev/null +++ b/solicitacoes/urls.py @@ -0,0 +1,96 @@ +# /SGMP_PROD/solicitacoes/urls.py + +from django.urls import path + +from . import views +app_name = "solicitacoes" + +urlpatterns = [ + + # ========================= + # DASHBOARD / LISTAGEM + # ========================= + path( + "colaboradores/", + views.listar_colaboradores, + name="listar_colaboradores", + ), + path( + "solicitacao//", + views.solicitacao_detalhe, + name="solicitacao_detalhe", + ), + path( + "solicitacoes/todas/", + views.todas_solicitacoes_view, + name="todas_solicitacoes", + ), + + # ========================= + # DESLIGAMENTO + # ========================= + path( + "desligamento/criar//", + views.criar_desligamento, + name="criar_desligamento", + ), + + # ========================= + # ADMISSÃO POR SUBSTITUIÇÃO + # ========================= + path( + "admissao/substituicao/criar//", + views.criar_admissao_substituicao, + name="criar_admissao_substituicao", + ), + + # ========================= + # ADMISSÃO POR AUMENTO DE QUADRO + # ========================= + path( + "admissao/aumento/criar/", + views.criar_admissao_aumento_quadro, + name="criar_admissao_aumento_quadro", + ), + + # ========================= + # MOVIMENTAÇÃO + # ========================= + path( + "movimentacao/criar//", + views.criar_movimentacao, + name="criar_movimentacao", + ), + + # ========================= + # AÇÕES DE FLUXO + # ========================= + path( + "solicitacao//enviar/", + views.enviar_solicitacao, + name="enviar_solicitacao", + ), + + path( + "solicitacao//decidir/", + views.decidir_solicitacao, + name="decidir_solicitacao", + ), + path( + "solicitacao//parecer/", + views.registrar_parecer_view, + name="registrar_parecer", + ), + # ========================= + # Autenticação + # ========================= + path("login/", views.login_view, name="login"), + path("logout/", views.logout_view, name="logout"), + path("", views.dashboard_view, name="dashboard"), + + # ========================= + # Gerenciamento + # ========================= + path("permissoes/", views.gerenciar_permissoes, name="gerenciar_permissoes"), + +] diff --git a/solicitacoes/views.py b/solicitacoes/views.py new file mode 100644 index 0000000..afc5b9e --- /dev/null +++ b/solicitacoes/views.py @@ -0,0 +1,869 @@ +#SGMP_PROD/solicitacoes/views.py +import logging +from datetime import date +from django.contrib.auth import login, logout, get_user_model +from django.contrib import messages +from django.contrib.auth.decorators import login_required +from django.shortcuts import get_object_or_404, redirect, render +from django.utils import timezone +from django.core.paginator import Paginator +from .models import ( + HeadGestor, + PessoaRM, + Solicitacao, + UsuarioSistema, + TipoSolicitacao, + DecisaoAprovacao, + StatusSolicitacao, + EtapaAprovacao, + matriculas_gestores_do_head, + UsuarioPerfilExtra, +) +from . import services +from .decorators import pode_criar_solicitacao, requer_perfil +from solicitacoes.intf_winthor import autenticar_usuario, buscar_colaborador_oracle + +logger = logging.getLogger(__name__) + +def get_usuario_sistema(request) -> UsuarioSistema: + """ + Resolve o usuário autenticado do Django para o UsuarioSistema do SGMP. + """ + return get_object_or_404( + UsuarioSistema, + matricula=request.user.username, + ativo=True + ) + +@login_required +@pode_criar_solicitacao +def criar_desligamento(request, pessoa_id): + from .intf_sqlserver import verificar_estabilidades_colaborador + + funcionario = get_object_or_404(PessoaRM, id=pessoa_id) + usuario = get_usuario_sistema(request) + + if request.method == "POST": + tipo_desligamento = request.POST.get("tipo_desligamento", "").strip() + aviso_previo = request.POST.get("aviso_previo", "").strip() + motivo = request.POST.get("motivo", "").strip() + data_prevista_str = request.POST.get("data_prevista_desligamento", "").strip() + observacoes = request.POST.get("observacoes", "") or "" + arquivo_pedido = request.FILES.get("arquivo_pedido") + + if not tipo_desligamento or not aviso_previo or not motivo or not data_prevista_str: + messages.error(request, "Preencha todos os campos obrigatórios.") + else: + try: + data_prevista = date.fromisoformat(data_prevista_str) + except ValueError: + messages.error(request, "Data prevista inválida. Use o formato AAAA-MM-DD.") + else: + try: + solicitacao = services.criar_solicitacao_desligamento( + solicitante=usuario, + funcionario=funcionario, + tipo_desligamento=tipo_desligamento, + aviso_previo=aviso_previo, + motivo=motivo, + data_prevista_desligamento=data_prevista, + observacoes=observacoes, + arquivo_pedido=arquivo_pedido, + ) + messages.success(request, "Solicitação de desligamento criada com sucesso.") + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) + except Exception: + logger.exception("Erro ao criar solicitação de desligamento") + messages.error(request, "Não foi possível processar a solicitação. Tente novamente ou contate o suporte.") + + # Verifica estabilidades para exibir na UI + estabilidades = verificar_estabilidades_colaborador(funcionario.id_rm) + estabilidades_bloqueantes = [e for e in estabilidades if e.get('bloqueado', False)] + desligamento_bloqueado = len(estabilidades_bloqueantes) > 0 + + return render( + request, + "solicitacoes/desligamento_form.html", + { + "funcionario": funcionario, + "estabilidades": estabilidades, + "estabilidades_bloqueantes": estabilidades_bloqueantes, + "desligamento_bloqueado": desligamento_bloqueado, + }, + ) + +@login_required +@pode_criar_solicitacao +def criar_admissao_substituicao(request, pessoa_id): + from .intf_sqlserver import listar_cargos_ativos_rm, listar_secoes_ativas_rm + + funcionario = get_object_or_404(PessoaRM, id=pessoa_id) + usuario = get_usuario_sistema(request) + + if request.method == "POST": + data_previsao_str = request.POST.get("data_previsao", "").strip() + cod_coligada = request.POST.get("cod_coligada", "").strip() + cod_filial = request.POST.get("cod_filial", "").strip() + cod_secao = request.POST.get("cod_secao", "").strip() + cod_funcao = request.POST.get("cod_funcao", "").strip() + justificativa = request.POST.get("justificativa", "").strip() + + if not data_previsao_str or not cod_coligada or not cod_filial or not cod_secao or not cod_funcao or not justificativa: + messages.error(request, "Preencha todos os campos obrigatórios.") + else: + try: + data_previsao = date.fromisoformat(data_previsao_str) + except ValueError: + messages.error(request, "Data de previsão inválida. Use o formato AAAA-MM-DD.") + else: + dados = { + "data_previsao_contratacao": data_previsao, + "cod_coligada_destino": cod_coligada, + "cod_filial_destino": cod_filial, + "cod_secao_destino": cod_secao, + "cod_funcao_destino": cod_funcao, + "justificativa": justificativa, + } + try: + solicitacao = services.criar_solicitacao_substituicao( + solicitante=usuario, + funcionario_substituido=funcionario, + dados_admissao=dados, + ) + messages.success(request, "Solicitação de admissão por substituição criada.") + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) + except Exception: + logger.exception("Erro ao criar solicitação de admissão por substituição") + messages.error(request, "Não foi possível processar a solicitação. Tente novamente ou contate o suporte.") + + # Busca cargos e seções ativos do RM + cargos = listar_cargos_ativos_rm() + secoes = listar_secoes_ativas_rm() + + return render( + request, + "solicitacoes/admissao_substituicao_form.html", + { + "funcionario": funcionario, + "cargos": cargos, + "secoes": secoes, + }, + ) +@login_required +@pode_criar_solicitacao +def criar_admissao_aumento_quadro(request): + from .intf_sqlserver import ( + listar_cargos_ativos_rm, + listar_secoes_ativas_rm, + listar_coligadas_rm, + ) + + usuario = get_usuario_sistema(request) + + if request.method == "POST": + data_previsao_str = request.POST.get("data_previsao", "").strip() + cod_coligada = request.POST.get("cod_coligada", "").strip() + cod_filial = request.POST.get("cod_filial", "").strip() + cod_secao = request.POST.get("cod_secao", "").strip() + cod_funcao = request.POST.get("cod_funcao", "").strip() + justificativa = request.POST.get("justificativa", "").strip() + + if not data_previsao_str or not cod_coligada or not cod_filial or not cod_secao or not cod_funcao or not justificativa: + messages.error(request, "Preencha todos os campos obrigatórios.") + else: + try: + data_previsao = date.fromisoformat(data_previsao_str) + except ValueError: + messages.error(request, "Data de previsão inválida. Use o formato AAAA-MM-DD.") + else: + dados = { + "data_previsao_contratacao": data_previsao, + "cod_coligada_destino": cod_coligada, + "cod_filial_destino": cod_filial, + "cod_secao_destino": cod_secao, + "cod_funcao_destino": cod_funcao, + "justificativa_estrategica": justificativa, + } + try: + solicitacao = services.criar_solicitacao_aumento_quadro( + solicitante=usuario, + dados_admissao=dados, + ) + messages.success(request, "Solicitação de aumento de quadro criada.") + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) + except Exception: + logger.exception("Erro ao criar solicitação de aumento de quadro") + messages.error(request, "Não foi possível processar a solicitação. Tente novamente ou contate o suporte.") + + # Busca cargos, seções e coligadas ativos do RM (filial é informada manualmente, 1–13) + cargos = listar_cargos_ativos_rm() + secoes = listar_secoes_ativas_rm() + coligadas = listar_coligadas_rm() + + return render( + request, + "solicitacoes/admissao_aumento_form.html", + { + "cargos": cargos, + "secoes": secoes, + "coligadas": coligadas, + }, + ) +@login_required +@pode_criar_solicitacao +def criar_movimentacao(request, pessoa_id): + from .intf_sqlserver import listar_cargos_ativos_rm, listar_secoes_ativas_rm + + funcionario = get_object_or_404(PessoaRM, id=pessoa_id) + usuario = get_usuario_sistema(request) + + if request.method == "POST": + data_efetivacao_str = request.POST.get("data_efetivacao", "").strip() + justificativa = request.POST.get("justificativa", "").strip() + + if not data_efetivacao_str or not justificativa: + messages.error(request, "Preencha data de efetivação e justificativa.") + else: + try: + data_efetivacao = date.fromisoformat(data_efetivacao_str) + except ValueError: + messages.error(request, "Data de efetivação inválida. Use o formato AAAA-MM-DD.") + else: + dados = { + "altera_funcao": bool(request.POST.get("altera_funcao")), + "altera_centro_custo": bool(request.POST.get("altera_centro_custo")), + "novo_cod_funcao": request.POST.get("novo_cod_funcao"), + "novo_cod_secao": request.POST.get("novo_cod_secao"), + "novo_salario": request.POST.get("novo_salario") or None, + "data_efetivacao": data_efetivacao, + "justificativa": justificativa, + } + try: + solicitacao = services.criar_solicitacao_movimentacao( + solicitante=usuario, + funcionario=funcionario, + dados_movimentacao=dados, + ) + messages.success(request, "Solicitação de movimentação criada.") + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) + except Exception: + logger.exception("Erro ao criar solicitação de movimentação") + messages.error(request, "Não foi possível processar a solicitação. Tente novamente ou contate o suporte.") + + # Busca cargos e seções ativos do RM + cargos = listar_cargos_ativos_rm() + secoes = listar_secoes_ativas_rm() + + return render( + request, + "solicitacoes/movimentacao_form.html", + { + "funcionario": funcionario, + "cargos": cargos, + "secoes": secoes, + }, + ) +@login_required +def enviar_solicitacao(request, solicitacao_id): + solicitacao = get_object_or_404(Solicitacao, id=solicitacao_id) + usuario = get_usuario_sistema(request) + + try: + services.enviar_solicitacao(solicitacao, usuario) + messages.success(request, "Solicitação enviada para aprovação.") + except Exception: + logger.exception("Erro ao enviar solicitação") + messages.error(request, "Não foi possível enviar a solicitação. Tente novamente ou contate o suporte.") + + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) +@login_required +@requer_perfil(UsuarioSistema.Perfil.HEAD, UsuarioSistema.Perfil.DIRETORIA) +def decidir_solicitacao(request, solicitacao_id): + """ + View para HEAD ou DIRETORIA aprovar/reprovar solicitações. + HEAD atua quando status é AGUARDANDO_HEAD; DIRETORIA quando é AGUARDANDO_DIRETORIA. + """ + solicitacao = get_object_or_404(Solicitacao, id=solicitacao_id) + usuario = get_usuario_sistema(request) + + if request.method == "POST": + decisao = request.POST.get("decisao", "").strip() + justificativa = request.POST.get("justificativa", "").strip() + + try: + if ( + solicitacao.status == StatusSolicitacao.AGUARDANDO_HEAD + and usuario.tem_perfil(UsuarioSistema.Perfil.HEAD) + ): + services.aprovar_reprovar_por_head( + solicitacao=solicitacao, + aprovador=usuario, + decisao=decisao, + justificativa=justificativa, + ) + messages.success(request, "Decisão registrada com sucesso.") + elif ( + solicitacao.status == StatusSolicitacao.AGUARDANDO_DIRETORIA + and usuario.tem_perfil(UsuarioSistema.Perfil.DIRETORIA) + ): + services.aprovar_reprovar_solicitacao( + solicitacao=solicitacao, + aprovador=usuario, + decisao=decisao, + justificativa=justificativa, + ) + messages.success(request, "Decisão registrada com sucesso.") + else: + messages.error(request, "Solicitação não está aguardando sua decisão.") + except Exception: + logger.exception("Erro ao registrar decisão da solicitação") + messages.error(request, "Não foi possível registrar a decisão. Tente novamente ou contate o suporte.") + + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) + +@login_required +@requer_perfil(UsuarioSistema.Perfil.GG, UsuarioSistema.Perfil.CONTROLADORIA) +def registrar_parecer_view(request, solicitacao_id): + """ + View para GG e CONTROLADORIA registrarem pareceres. + Permite anexar arquivos junto com o parecer. + """ + solicitacao = get_object_or_404(Solicitacao, id=solicitacao_id) + usuario = get_usuario_sistema(request) + + if request.method == "POST": + texto = request.POST.get("texto", "").strip() + anexo = request.FILES.get("anexo") + + if not texto: + messages.error(request, "O parecer não pode estar vazio.") + else: + try: + services.registrar_parecer( + solicitacao=solicitacao, + usuario=usuario, + texto=texto, + anexo=anexo + ) + messages.success(request, "Parecer registrado com sucesso.") + except Exception: + logger.exception("Erro ao registrar parecer") + messages.error(request, "Não foi possível registrar o parecer. Tente novamente ou contate o suporte.") + + return redirect("solicitacoes:solicitacao_detalhe", solicitacao_id=solicitacao.id) +@login_required +def solicitacao_detalhe(request, solicitacao_id): + solicitacao = get_object_or_404(Solicitacao, id=solicitacao_id) + usuario = get_usuario_sistema(request) + + # Verifica se o usuário é o solicitante + is_solicitante = solicitacao.solicitante.id == usuario.id + + # Verifica se pode aprovar (apenas pela etapa/perfil, não bloqueia o solicitante) + pode_aprovar = solicitacao.pode_aprovar(usuario) + + # Verifica se pode dar parecer + pode_dar_parecer = solicitacao.pode_dar_parecer(usuario) + + # Busca pareceres existentes + pareceres_gg = solicitacao.pareceres.filter(etapa=EtapaAprovacao.GG) + pareceres_controladoria = solicitacao.pareceres.filter(etapa=EtapaAprovacao.CONTROLADORIA) + + # Calcula horas do banco de horas se houver funcionário + horas_banco_horas = None + if solicitacao.funcionario and solicitacao.funcionario.saldo_banco_horas_minutos is not None: + try: + horas_banco_horas = float(solicitacao.funcionario.saldo_banco_horas_minutos) / 60.0 + except (ValueError, TypeError): + horas_banco_horas = None + + # Busca dados do Winthor se houver funcionário com CPF + dados_winthor = None + dados_winthor_organizados = None + if solicitacao.funcionario and solicitacao.funcionario.cpf: + try: + dados_winthor = buscar_colaborador_oracle(solicitacao.funcionario.cpf) + if dados_winthor: + dados_winthor_organizados = { + "basicos": { + "matricula": dados_winthor.get("matricula"), + "nome": dados_winthor.get("nome"), + "cpf": dados_winthor.get("cpf"), + }, + "admissao": { + "admissao": dados_winthor.get("admissao"), + "situacao": dados_winthor.get("situacao"), + "dt_exclusao": dados_winthor.get("dt_exclusao"), + }, + "endereco": { + "endereco": dados_winthor.get("endereco"), + "bairro": dados_winthor.get("bairro"), + "cidade": dados_winthor.get("cidade"), + "estado": dados_winthor.get("estado"), + } + } + except Exception: + logger.exception("Erro ao buscar dados do Winthor") + + return render( + request, + "solicitacoes/solicitacao_detalhe.html", + { + "solicitacao": solicitacao, + "is_solicitante": is_solicitante, + "pode_aprovar": pode_aprovar, + "pode_dar_parecer": pode_dar_parecer, + "pareceres_gg": pareceres_gg, + "pareceres_controladoria": pareceres_controladoria, + "horas_banco_horas": horas_banco_horas, + "dados_winthor": dados_winthor, + "dados_winthor_organizados": dados_winthor_organizados, + }, + ) + + +# auth +User = get_user_model() + + +def login_view(request): + if request.user.is_authenticated: + # CORREÇÃO AQUI: adicionado solicitacoes: + return redirect("solicitacoes:dashboard") + + if request.method == "POST": + login_input = request.POST.get("username", "").strip() + senha = request.POST.get("password", "").strip() + + if not login_input or not senha: + messages.error(request, "Informe usuário e senha.") + return render(request, "auth/login.html") + + # Chama a autenticação do Winthor + # Espera retorno dict: {'matricula': '123', 'nome': 'Fulano', 'usuariobd': 'FULANO.SILVA'} + dados = autenticar_usuario(login_input, senha) + + if not dados: + messages.error(request, "Usuário ou senha inválidos no Winthor.") + return render(request, "auth/login.html") + + # TRUQUE DE INTEGRAÇÃO: + # Salvamos o User do Django usando a MATRÍCULA como username. + # Isso garante que o get_usuario_sistema funcione corretamente. + user, _ = User.objects.get_or_create( + username=str(dados["matricula"]), + defaults={ + "first_name": dados.get("nome", "Usuario").split(" ")[0], + }, + ) + + # Loga no Django (sessão) + login(request, user) + + # Atualiza/Cria o UsuarioSistema (Domínio) + # Se já existe, mantém o perfil atual. Se é novo, define como GESTOR por padrão + usuario_sistema, created = UsuarioSistema.objects.get_or_create( + matricula=str(dados["matricula"]), + defaults={ + "nome": dados["nome"], + "ativo": True, + "perfil": UsuarioSistema.Perfil.GESTOR, # Default para novos usuários + }, + ) + + # Se já existia, apenas atualiza o nome (mantém perfil e status) + if not created: + usuario_sistema.nome = dados["nome"] + usuario_sistema.ativo = True + usuario_sistema.save() + + messages.success(request, f"Bem-vindo, {dados['nome']}!") + # O 'next' pega a url que o usuário tentou acessar antes de logar + next_url = request.GET.get("next", "solicitacoes:dashboard") + + return redirect(next_url) + + return render(request, "auth/login.html") + +@login_required +def logout_view(request): + logout(request) + messages.info(request, "Você saiu do sistema.") + return redirect("solicitacoes:login") + +@login_required +def dashboard_view(request): + usuario = get_usuario_sistema(request) + + # Busca solicitações baseado no perfil + if usuario.perfil == UsuarioSistema.Perfil.GESTOR: + # Gestores veem suas próprias solicitações (todas, incluindo rascunhos) + qs_base = Solicitacao.objects.filter(solicitante=usuario) + solicitacoes = qs_base.order_by('-criado_em') + elif usuario.perfil == UsuarioSistema.Perfil.HEAD: + # Head vê solicitações AGUARDANDO_HEAD cujo solicitante está na sua lista de gestores + matriculas = matriculas_gestores_do_head(usuario) + qs_base = Solicitacao.objects.filter(status=StatusSolicitacao.AGUARDANDO_HEAD) + if matriculas: + qs_base = qs_base.filter(solicitante__matricula__in=matriculas) + solicitacoes = qs_base.order_by('-criado_em') + elif usuario.perfil in [UsuarioSistema.Perfil.GG, UsuarioSistema.Perfil.CONTROLADORIA]: + # GG e Controladoria veem solicitações ENVIADAS para dar parecer + # Verifica se já deram parecer para filtrar + qs_base = Solicitacao.objects.filter(status=StatusSolicitacao.ENVIADA) + # Filtra para mostrar apenas solicitações onde o usuário ainda não deu parecer + etapa_esperada = EtapaAprovacao.GG if usuario.perfil == UsuarioSistema.Perfil.GG else EtapaAprovacao.CONTROLADORIA + qs_base = qs_base.exclude(pareceres__etapa=etapa_esperada, pareceres__usuario=usuario) + solicitacoes = qs_base.order_by('-enviada_em', '-criado_em') + elif usuario.perfil == UsuarioSistema.Perfil.DIRETORIA: + # Diretoria vê solicitações AGUARDANDO_DIRETORIA para aprovar/reprovar + qs_base = Solicitacao.objects.filter(status=StatusSolicitacao.AGUARDANDO_DIRETORIA) + solicitacoes = qs_base.order_by('-enviada_em', '-criado_em') + else: + qs_base = Solicitacao.objects.none() + solicitacoes = Solicitacao.objects.none() + + # Calcula contadores baseado no queryset + finalizados = [StatusSolicitacao.FINALIZADA, StatusSolicitacao.REPROVADA] + + total = qs_base.count() + pendentes = qs_base.exclude(status__in=finalizados).count() + + # Para gestores, ajusta os contadores considerando todos os status + if usuario.perfil == UsuarioSistema.Perfil.GESTOR: + # Total: todas as solicitações + total = qs_base.count() + # Pendentes: rascunho, enviada, aprovadas em etapas intermediárias + pendentes = qs_base.exclude(status__in=[StatusSolicitacao.FINALIZADA, StatusSolicitacao.REPROVADA]).count() + + # Paginação + paginator = Paginator(solicitacoes, 10) + page = request.GET.get('page') + solicitacoes_page = paginator.get_page(page) + + # Prepara informações sobre quais solicitações podem ser aprovadas ou receber parecer + solicitacoes_com_acao = [] + for solicitacao in solicitacoes_page: + is_solicitante = solicitacao.solicitante.id == usuario.id + pode_aprovar = solicitacao.pode_aprovar(usuario) + pode_dar_parecer = solicitacao.pode_dar_parecer(usuario) + + # Busca dados do Winthor se houver funcionário com CPF + dados_winthor_organizados = None + if solicitacao.funcionario and solicitacao.funcionario.cpf: + try: + dados_winthor = buscar_colaborador_oracle(solicitacao.funcionario.cpf) + if dados_winthor: + dados_winthor_organizados = { + "basicos": { + "matricula": dados_winthor.get("matricula"), + "nome": dados_winthor.get("nome"), + "cpf": dados_winthor.get("cpf"), + }, + "admissao": { + "admissao": dados_winthor.get("admissao"), + "situacao": dados_winthor.get("situacao"), + "dt_exclusao": dados_winthor.get("dt_exclusao"), + }, + "endereco": { + "endereco": dados_winthor.get("endereco"), + "bairro": dados_winthor.get("bairro"), + "cidade": dados_winthor.get("cidade"), + "estado": dados_winthor.get("estado"), + } + } + except Exception: + # Ignora erros silenciosamente no dashboard + pass + + solicitacoes_com_acao.append({ + 'solicitacao': solicitacao, + 'pode_aprovar': pode_aprovar, + 'pode_dar_parecer': pode_dar_parecer, + 'is_solicitante': is_solicitante, + 'dados_winthor_organizados': dados_winthor_organizados, + }) + + return render(request, "dashboard.html", { + "solicitacoes": solicitacoes_page, + "solicitacoes_com_acao": solicitacoes_com_acao, + "total": total, + "pendentes": pendentes, + }) + + +@login_required +def todas_solicitacoes_view(request): + """Listagem de solicitações: Gestor não acessa; Head vê só dos gestores vinculados a ele; GG/Controladoria/Diretoria veem todas.""" + usuario = get_usuario_sistema(request) + if usuario.perfil == UsuarioSistema.Perfil.GESTOR: + return redirect("solicitacoes:dashboard") + + qs_base = Solicitacao.objects.all().order_by("-criado_em") + + # Head: apenas solicitações dos gestores que ele aprova (subordinados imediatos) + if usuario.perfil == UsuarioSistema.Perfil.HEAD: + matriculas = matriculas_gestores_do_head(usuario) + if matriculas: + qs_base = qs_base.filter(solicitante__matricula__in=matriculas) + else: + qs_base = qs_base.none() + + # Filtro por status (GET) + filtro_status = request.GET.get("status", "").strip() + if filtro_status: + qs_base = qs_base.filter(status=filtro_status) + + total = qs_base.count() + + # Paginação + paginator = Paginator(qs_base, 20) + page = request.GET.get("page") + solicitacoes_page = paginator.get_page(page) + + # Contexto de ação por solicitação (pode_aprovar, pode_dar_parecer, etc.) + solicitacoes_com_acao = [] + for solicitacao in solicitacoes_page: + is_solicitante = solicitacao.solicitante.id == usuario.id + pode_aprovar = solicitacao.pode_aprovar(usuario) + pode_dar_parecer = solicitacao.pode_dar_parecer(usuario) + dados_winthor_organizados = None + if solicitacao.funcionario and solicitacao.funcionario.cpf: + try: + dados_winthor = buscar_colaborador_oracle(solicitacao.funcionario.cpf) + if dados_winthor: + dados_winthor_organizados = { + "basicos": { + "matricula": dados_winthor.get("matricula"), + "nome": dados_winthor.get("nome"), + "cpf": dados_winthor.get("cpf"), + }, + "admissao": { + "admissao": dados_winthor.get("admissao"), + "situacao": dados_winthor.get("situacao"), + "dt_exclusao": dados_winthor.get("dt_exclusao"), + }, + "endereco": { + "endereco": dados_winthor.get("endereco"), + "bairro": dados_winthor.get("bairro"), + "cidade": dados_winthor.get("cidade"), + "estado": dados_winthor.get("estado"), + }, + } + except Exception: + pass + solicitacoes_com_acao.append({ + "solicitacao": solicitacao, + "pode_aprovar": pode_aprovar, + "pode_dar_parecer": pode_dar_parecer, + "is_solicitante": is_solicitante, + "dados_winthor_organizados": dados_winthor_organizados, + }) + + return render(request, "solicitacoes/todas_solicitacoes.html", { + "solicitacoes": solicitacoes_page, + "solicitacoes_com_acao": solicitacoes_com_acao, + "total": total, + "filtro_status": filtro_status, + "status_choices": StatusSolicitacao.choices, + }) + + +@login_required +@pode_criar_solicitacao +def listar_colaboradores(request): + """ + Lista colaboradores para seleção ao criar solicitação. + + Aceita parâmetro 'tipo' na URL: + - 'substituicao': busca apenas pessoas DESLIGADAS diretamente do RM (para admissão por substituição) + - outros ou ausente: busca pessoas que não estão desligadas do banco local (padrão) + """ + from .intf_sqlserver import buscar_colaboradores_rm_desligados + from .models import PessoaRM + + # Verifica se é para admissão por substituição + tipo = request.GET.get('tipo', '') + apenas_desligados = (tipo == 'substituicao') + + busca = request.GET.get('q', '') + + # Para admissão por substituição: busca direto no RM (como no sgmp) + if apenas_desligados: + # Busca direto no SQL Server para garantir dados atualizados + resultados_rm = buscar_colaboradores_rm_desligados(nome=busca if busca else None) + + # Converte resultados do RM para formato compatível com o template + colaboradores_list = [] + for row in resultados_rm: + id_rm = f"{row['CODCOLIGADA']}-{row['CHAPA']}" + # Tenta encontrar no banco local ou sincroniza + try: + pessoa = PessoaRM.objects.get(id_rm=id_rm) + except PessoaRM.DoesNotExist: + # Sincroniza a pessoa no banco local com os dados do RM + # pymssql retorna chaves em maiúsculas por padrão + pessoa, _ = PessoaRM.objects.update_or_create( + id_rm=id_rm, + defaults={ + "matricula": row['CHAPA'], + "nome": row['NOME'], + "cpf": row.get('CPF'), + "cargo": row['FUNCAO'], + "setor": row['SECAO'], + "centro_custo": row['CODSECAO'], + "situacao": row['CODSITUACAO'], + "cod_funcao": row.get('CODFUNCAO'), + "salario": row.get('SALARIO'), + "cod_sindicato": row.get('CODSINDICATO'), + } + ) + colaboradores_list.append(pessoa) + + # Paginação manual + paginator = Paginator(colaboradores_list, 20) + page = request.GET.get('page') + colaboradores_page = paginator.get_page(page) + else: + # Padrão: busca pessoas que não estão desligadas do banco local + colaboradores = PessoaRM.objects.exclude(situacao='D').order_by('nome') + + # Busca por nome ou matrícula + if busca: + colaboradores = colaboradores.filter( + nome__icontains=busca + ) | colaboradores.filter( + matricula__icontains=busca + ) + + # Paginação + paginator = Paginator(colaboradores, 20) + page = request.GET.get('page') + colaboradores_page = paginator.get_page(page) + + return render(request, "solicitacoes/listar_colaboradores.html", { + "colaboradores": colaboradores_page, + "busca": busca, + "tipo": tipo, + "apenas_desligados": apenas_desligados, + }) + +@login_required +def gerenciar_permissoes(request): + """View para gerenciar permissões de usuários. Para perfil HEAD, permite vincular gestores (em relação a quem o Head aprova).""" + usuario_atual = get_usuario_sistema(request) + + # Pré-carrega perfis extras para evitar N+1 + todos_usuarios = list( + UsuarioSistema.objects.all() + .prefetch_related("perfis_extras") + .order_by("nome") + ) + # Gestores são usuários que possuem o perfil GESTOR (principal ou extra) + gestores_lista = [u for u in todos_usuarios if u.tem_perfil(UsuarioSistema.Perfil.GESTOR)] + usuarios = todos_usuarios + + # Busca + busca = request.GET.get('q', '') + if busca: + usuarios = usuarios.filter( + nome__icontains=busca + ) | usuarios.filter( + matricula__icontains=busca + ) + + if request.method == "POST": + # Salvar gestores vinculados ao Head (formulário "Este Head aprova os gestores:") + gestores_head_id = request.POST.get("gestores_head_id") + if gestores_head_id: + try: + head = UsuarioSistema.objects.get(id=gestores_head_id) + if not head.tem_perfil(UsuarioSistema.Perfil.HEAD): + messages.error(request, "Usuário selecionado não possui perfil de Head.") + else: + gestores_ids = request.POST.getlist("gestores_ids") + HeadGestor.objects.filter(head=head).delete() + # Mantém apenas vínculos com usuários que possuem perfil de Gestor (principal ou extra) + candidatos = UsuarioSistema.objects.filter(id__in=gestores_ids).prefetch_related("perfis_extras") + for gestor in candidatos: + if gestor.tem_perfil(UsuarioSistema.Perfil.GESTOR): + HeadGestor.objects.get_or_create(head=head, gestor=gestor) + messages.success(request, f"Gestores vinculados ao Head {head.nome} atualizados.") + except UsuarioSistema.DoesNotExist: + messages.error(request, "Head não encontrado.") + except Exception: + logger.exception("Erro ao salvar vínculos Head-Gestor") + messages.error(request, "Não foi possível salvar os vínculos. Tente novamente ou contate o suporte.") + return redirect("solicitacoes:gerenciar_permissoes") + + # Atualização de perfil principal + perfis extras + usuario_id = request.POST.get("usuario_id") + novo_perfil = request.POST.get("perfil") + if usuario_id and novo_perfil: + try: + usuario_editado = UsuarioSistema.objects.get(id=usuario_id) + usuario_editado.perfil = novo_perfil + usuario_editado.save() + + # Perfis extras selecionados no formulário + perfis_extras_selecionados = set(request.POST.getlist("perfis_extras")) + # Remove eventual duplicidade com o perfil principal + perfis_extras_selecionados.discard(novo_perfil) + + # Sincroniza perfis extras no banco + UsuarioPerfilExtra.objects.filter(usuario=usuario_editado).exclude( + perfil__in=perfis_extras_selecionados + ).delete() + for codigo_perfil in perfis_extras_selecionados: + UsuarioPerfilExtra.objects.get_or_create( + usuario=usuario_editado, + perfil=codigo_perfil, + ) + + if usuario_editado.id == usuario_atual.id: + messages.success( + request, + f"Seu perfil foi atualizado para: {usuario_editado.get_perfil_display()}", + ) + else: + messages.success( + request, + f"Perfil de {usuario_editado.nome} atualizado para: {usuario_editado.get_perfil_display()}", + ) + except UsuarioSistema.DoesNotExist: + messages.error(request, "Usuário não encontrado.") + except Exception: + logger.exception("Erro ao atualizar perfil") + messages.error(request, "Não foi possível atualizar o perfil. Tente novamente ou contate o suporte.") + return redirect("solicitacoes:gerenciar_permissoes") + + # Lista de gestores (para o multi-select / listas dos Heads) + gestores = gestores_lista + + # Paginação + paginator = Paginator(usuarios, 20) + page = request.GET.get('page') + usuarios_page = paginator.get_page(page) + # head_id -> lista de gestor_id já vinculados (apenas para usuários da página atual) + head_gestores = {} + for row in HeadGestor.objects.filter(head__in=list(usuarios_page)).values_list("head_id", "gestor_id"): + head_gestores.setdefault(str(row[0]), []).append(str(row[1])) + # Para o template: cada item tem usuario, seus perfis extras e lista (gestor, selected) para o multi-select HEAD + usuarios_com_gestores = [ + { + "usuario": u, + "perfis_extras": list(u.perfis_extras.values_list("perfil", flat=True)), + "gestores_com_selecao": [ + (g, str(g.id) in head_gestores.get(str(u.id), [])) + for g in gestores + ], + } + for u in usuarios_page + ] + + return render(request, "solicitacoes/gerenciar_permissoes.html", { + "usuarios_com_gestores": usuarios_com_gestores, + "busca": busca, + "perfis": UsuarioSistema.Perfil.choices, + "gestores": gestores, + }) \ No newline at end of file diff --git a/templates/admin/solicitacoes/pessoarm/pessoarm_changelist.html b/templates/admin/solicitacoes/pessoarm/pessoarm_changelist.html new file mode 100644 index 0000000..cc368cd --- /dev/null +++ b/templates/admin/solicitacoes/pessoarm/pessoarm_changelist.html @@ -0,0 +1,14 @@ +{% extends "admin/change_list.html" %} + +{% block object-tools-items %} + +{{ block.super }} +{% endblock %} diff --git a/templates/auth/login.html b/templates/auth/login.html new file mode 100644 index 0000000..b9db2b9 --- /dev/null +++ b/templates/auth/login.html @@ -0,0 +1,272 @@ + + + + + + Login | SGMP PROD + + + + + + + + + diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..74c2064 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,242 @@ +{% load static %} + + + + + + {% block title %}SGMP - Gestão de Pessoas{% endblock %} + + + + + + + + {% block css %}{% endblock %} + + + +
+ + + + + + +
+
+ {% block content %}{% endblock %} +
+
+
+ +
+
+
+

Iniciar Novo Processo

+ +
+
+
+

Qual tipo de movimentação você deseja realizar hoje?

+
+
+ 🚫 + Desligamento +
+
+ 🔄 + Movimentação +
+
+ 📈 + Aumento de Quadro +
+
+ 👥 + Substituição +
+
+
+
+ +

Selecione o colaborador para o processo de :

+
+
+ 🔍 + + +
+ +
+
+
+
+
+
+
+ + +{% block scripts %}{% endblock %} + + diff --git a/templates/base_original.html b/templates/base_original.html new file mode 100644 index 0000000..84f1d8a --- /dev/null +++ b/templates/base_original.html @@ -0,0 +1,514 @@ +{% load static %} + + + + + + {% block title %}SGMP - Gestão de Pessoas{% endblock %} + + + + + + + + + + {% block css %}{% endblock %} + + + + +
+ + + + + + + + + +
+
+ {% block content %}{% endblock %} +
+
+
+ + + + +
+
+
+

Iniciar Novo Processo

+ +
+
+ + +
+

Qual tipo de movimentação você deseja realizar hoje?

+
+
+ 🚫 + Desligamento +
+
+ 🔄 + Movimentação +
+
+ 📈 + Aumento de Quadro +
+
+ 👥 + Substituição +
+
+
+ + +
+ +

Selecione o colaborador para o processo de :

+ +
+
+ 🔍 + + +
+ +
+ Consultando base de dados... +
+ +
+ +
+
+
+ +
+
+
+ + + +{% block scripts %}{% endblock %} + + \ No newline at end of file diff --git a/templates/dashboard.html b/templates/dashboard.html new file mode 100644 index 0000000..58ddedc --- /dev/null +++ b/templates/dashboard.html @@ -0,0 +1,454 @@ +{% extends "base.html" %} + +{% block title %}Dashboard - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} + +
+

SGMP - Movimentação de Pessoas

+

+ Olá, {{ usuario_sistema.nome }}! + {{ usuario_sistema.get_perfil_display }} +
+ Matrícula: {{ usuario_sistema.matricula }} +

+
+ +{% if messages %} +
    + {% for message in messages %} +
  • + {% if message.tags == 'error' %}⚠️{% elif message.tags == 'success' %}✅{% else %}ℹ️{% endif %} +  {{ message }} +
  • + {% endfor %} +
+{% endif %} + +{% if usuario_sistema.perfil == 'GESTOR' %} +
+
+ 💡 +
+

Lembrete Rápido

+

+ Solicitações em Rascunho só são visíveis para você. + Lembre-se de clicar em "Enviar para Aprovação" na página de detalhes para iniciar o fluxo. +

+
+
+
+{% endif %} + +
+
+
Total
+
{{ total }}
+
+
+
Pendentes
+
{{ pendentes }}
+
+
+ +
+

+ {% if usuario_sistema.perfil == 'GESTOR' %}📋 Minhas Solicitações{% else %}⏳ Pendentes de Aprovação{% endif %} +

+ + {% if usuario_sistema.perfil != 'GESTOR' %} +
+ ℹ️ Você está vendo solicitações com status Enviada aguardando sua análise. +
+ {% endif %} + + {% if solicitacoes %} +
+ + + + + + + + + + + + {% for item in solicitacoes_com_acao %} + {% with solicitacao=item.solicitacao %} + + + + + + + + + + + {% endwith %} + {% endfor %} + +
TipoColaboradorStatusDataAções
{{ solicitacao.get_tipo_display }} + {% if solicitacao.funcionario %}{{ solicitacao.funcionario.nome }}{% else %}N/A{% endif %} + + {{ solicitacao.get_status_display }} + {{ solicitacao.criado_em|date:"d/m/Y H:i" }} +
+ Detalhes + {% if item.pode_dar_parecer %} + 📝 Parecer + {% endif %} + {% if item.pode_aprovar %} +
+ + +
+ {% endif %} +
+
+
+ + + + {% if solicitacoes.has_other_pages %} + + {% endif %} + {% else %} +
+

🎉 Nenhuma solicitação encontrada.

+ {% if usuario_sistema.perfil == 'GESTOR' %}

Use o botão "Nova Solicitação" para começar.

{% endif %} +
+ {% endif %} +
+ +{% endblock %} + +{% block scripts %} + + +{% endblock %} diff --git a/templates/dashboard_original.html b/templates/dashboard_original.html new file mode 100644 index 0000000..e26ae2c --- /dev/null +++ b/templates/dashboard_original.html @@ -0,0 +1,1333 @@ +{% extends "base.html" %} + +{% block title %}Dashboard - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} + +
+

SGMP - Movimentação de Pessoas

+

+ Olá, {{ usuario_sistema.nome }}! + + {{ usuario_sistema.get_perfil_display }} + +
+ Matrícula: {{ usuario_sistema.matricula }} +

+
+ +{% if messages %} +
+
    + {% for message in messages %} +
  • + {% if message.tags == 'error' %}⚠️{% elif message.tags == 'success' %}✅{% else %}ℹ️{% endif %} +  {{ message }} +
  • + {% endfor %} +
+
+{% endif %} + +{% if usuario_sistema.perfil == 'GESTOR' %} +
+
+ 💡 +
+

Lembrete Rápido

+

+ Solicitações em Rascunho só são visíveis para você. + Lembre-se de clicar em "Enviar para Aprovação" na página de detalhes para iniciar o fluxo. +

+
+
+
+{% endif %} + + +
+
+
Total
+
{{ total }}
+
+
+
Pendentes
+
{{ pendentes }}
+
+
+ +
+

+ {% if usuario_sistema.perfil == 'GESTOR' %} + 📋 Minhas Solicitações + {% else %} + ⏳ Pendentes de Aprovação + {% endif %} +

+ + {% if usuario_sistema.perfil != 'GESTOR' %} +
+ ℹ️ Você está vendo solicitações com status Enviada aguardando sua análise. +
+ {% endif %} + + {% if solicitacoes %} +
+ + + + + + + + + + + + {% for item in solicitacoes_com_acao %} + {% with solicitacao=item.solicitacao %} + + + + + + + + + + + + + {% endwith %} + {% endfor %} + +
TipoColaboradorStatusDataAções
{{ solicitacao.get_tipo_display }} + {% if solicitacao.funcionario %} + {{ solicitacao.funcionario.nome }} + {% else %} + N/A + {% endif %} + + + {{ solicitacao.get_status_display }} + + {{ solicitacao.criado_em|date:"d/m/Y H:i" }} +
+ + Detalhes + + + {% if item.pode_dar_parecer %} + + 📝 Parecer + + {% endif %} + + {% if item.pode_aprovar %} +
+ + +
+ {% endif %} +
+
+
+ + + + {% if solicitacoes.has_other_pages %} + + {% endif %} + {% else %} +
+

🎉 Nenhuma solicitação encontrada.

+ {% if usuario_sistema.perfil == 'GESTOR' %} +

Use o botão "Nova Solicitação" para começar.

+ {% endif %} +
+ {% endif %} +
+ +{% endblock %} + +{% block scripts %} + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/solicitacoes/admissao_aumento_form.html b/templates/solicitacoes/admissao_aumento_form.html new file mode 100644 index 0000000..2809054 --- /dev/null +++ b/templates/solicitacoes/admissao_aumento_form.html @@ -0,0 +1,71 @@ +{% extends "base.html" %} + +{% block title %}Criar Admissão por Aumento de Quadro - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} +
+
+

Criar Admissão por Aumento de Quadro

+
+ {% if messages %} +
+
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+
+ {% endif %} +
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ + + Informe o código da filial (entre 1 e 13). +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + Cancelar +
+
+
+{% endblock %} diff --git a/templates/solicitacoes/admissao_substituicao_form.html b/templates/solicitacoes/admissao_substituicao_form.html new file mode 100644 index 0000000..ba4eb5d --- /dev/null +++ b/templates/solicitacoes/admissao_substituicao_form.html @@ -0,0 +1,68 @@ +{% extends "base.html" %} + +{% block title %}Criar Admissão por Substituição - SGMP{% endblock %} + +{% block content %} +
+
+

Criar Admissão por Substituição

+
+ {% if messages %} +
+
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+
+ {% endif %} +
+

Colaborador a ser Substituído

+
+
Nome{{ funcionario.nome }}
+
Matrícula{{ funcionario.matricula }}
+
Cargo{{ funcionario.cargo|default:"N/A" }}
+
Setor{{ funcionario.setor|default:"N/A" }}
+
+
+
+ {% csrf_token %} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + Cancelar +
+
+
+{% endblock %} diff --git a/templates/solicitacoes/desligamento_form.html b/templates/solicitacoes/desligamento_form.html new file mode 100644 index 0000000..c70c34d --- /dev/null +++ b/templates/solicitacoes/desligamento_form.html @@ -0,0 +1,170 @@ +{% extends "base.html" %} + +{% block title %}Criar Desligamento - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} +
+ 🚫 +

Solicitação de Desligamento

+
+ +{% if messages %} +
+ {% for message in messages %} +
+ {% if message.tags == 'error' %}⚠️{% else %}✅{% endif %} {{ message }} +
+ {% endfor %} +
+{% endif %} + + +
+
+ 👤 +

Dados do Colaborador

+
+
+
+
Nome{{ funcionario.nome }}
+
Matrícula{{ funcionario.matricula }}
+
Cargo{{ funcionario.cargo|default:"N/A" }}
+
Setor{{ funcionario.setor|default:"N/A" }}
+
Admissão{{ funcionario.data_admissao|date:"d/m/Y"|default:"N/A" }}
+ {% if funcionario.saldo_banco_horas_minutos %} +
+ Banco de Horas ℹ️ + {{ funcionario.saldo_banco_horas_minutos }} min + {% if funcionario.saldo_banco_horas_minutos < 0 %}
Saldo negativo a descontar.
{% endif %} +
+ {% endif %} +
+
+
+ +{% if estabilidades_bloqueantes %} +
+
+ DESLIGAMENTO BLOQUEADO +
+
O colaborador possui estabilidade ativa que impede o desligamento.
+
    + {% for estabilidade in estabilidades_bloqueantes %} +
  • + + {% if estabilidade.tipo == "MATERNIDADE" %}Licença Maternidade{% elif estabilidade.tipo == "PREVIDENCIARIO" %}Afastamento Previdenciário{% elif estabilidade.tipo == "ACIDENTE_TRABALHO" %}Acidente de Trabalho{% elif estabilidade.tipo == "CIPA" %}Membro da CIPA{% else %}{{ estabilidade.tipo }}{% endif %} + +
    {{ estabilidade.mensagem }}
    + {% if estabilidade.detalhes %} +
    + {% if estabilidade.detalhes.dt_inicio %}Início: {{ estabilidade.detalhes.dt_inicio|date:"d/m/Y" }} | {% endif %} + {% if estabilidade.detalhes.dt_final %}Fim: {{ estabilidade.detalhes.dt_final|date:"d/m/Y" }}{% endif %} + {% if estabilidade.detalhes.observacao %}
    Obs: {{ estabilidade.detalhes.observacao }}{% endif %} +
    + {% endif %} +
  • + {% endfor %} +
+
+{% elif estabilidades %} +
+
+ ⚠️ Atenção: Estabilidades Identificadas +
+
    + {% for estabilidade in estabilidades %} + {% if not estabilidade.bloqueado %} +
  • + Estabilidade (Não Bloqueante) +
    {{ estabilidade.mensagem }}
    +
  • + {% endif %} + {% endfor %} +
+
+{% endif %} + +
+ {% csrf_token %} +
+
+ 📉 +

Detalhes do Desligamento

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+
+ +
+ + Cancelar +
+
+ + +{% endblock %} diff --git a/templates/solicitacoes/gerenciar_permissoes.html b/templates/solicitacoes/gerenciar_permissoes.html new file mode 100644 index 0000000..9a25528 --- /dev/null +++ b/templates/solicitacoes/gerenciar_permissoes.html @@ -0,0 +1,148 @@ +{% extends "base.html" %} + +{% block title %}Gerenciar Permissões - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} +
+

Gerenciar Permissões

+

Gerencie os perfis e permissões dos usuários do sistema

+
+ +{% if messages %} +
+
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+
+{% endif %} + +
+ Seu Perfil Atual: + {{ usuario_sistema.get_perfil_display }} +

Você pode alterar seu próprio perfil e o de outros usuários abaixo.

+
+ +
+
+ + + {% if busca %}Limpar{% endif %} +
+
+ +
+ + + + + + + + + + + + + {% for item in usuarios_com_gestores %} + {% with usuario=item.usuario gestores_com_selecao=item.gestores_com_selecao %} + + + + + + + + + {% endwith %} + {% empty %} + + + + {% endfor %} + +
MatrículaNomePerfil AtualStatusAlterar PerfilHead em relação a (gestores)
{{ usuario.matricula }} + {{ usuario.nome }} + {% if usuario.id == usuario_sistema.id %}(Você){% endif %} + + {{ usuario.get_perfil_display }} + + {% if usuario.ativo %}Ativo{% else %}Inativo{% endif %} + +
+ {% csrf_token %} + +
+ + +
+
+ Perfis adicionais: + {% for valor, label in perfis %} + {% if valor != usuario.perfil %} + + {% endif %} + {% endfor %} +
+
+
+ {% if usuario.perfil == 'HEAD' %} +
+
+ {% csrf_token %} + + + + +
+
+ {% else %}—{% endif %} +
Nenhum usuário encontrado.
+
+ +{% if usuarios.has_other_pages %} +
+ {% if usuarios.has_previous %} + « Primeira + ‹ Anterior + {% endif %} + Página {{ usuarios.number }} de {{ usuarios.paginator.num_pages }} + {% if usuarios.has_next %} + Próxima › + Última » + {% endif %} +
+{% endif %} + +
+ 💡 Dica: Você também pode gerenciar permissões pelo painel administrativo. +
+{% endblock %} diff --git a/templates/solicitacoes/listar_colaboradores.html b/templates/solicitacoes/listar_colaboradores.html new file mode 100644 index 0000000..df7b41c --- /dev/null +++ b/templates/solicitacoes/listar_colaboradores.html @@ -0,0 +1,73 @@ +{% extends "base.html" %} + +{% block title %}Listar Colaboradores - SGMP{% endblock %} + +{% block content %} +
+

Selecionar Colaborador

+

← Voltar ao Dashboard

+
+ +
+
+ + {% if tipo == 'substituicao' %}{% endif %} + + {% if busca %}Limpar{% endif %} +
+ {% if apenas_desligados %} +
+ ℹ️ Informação: Mostrando apenas colaboradores DESLIGADOS (útil para admissão por substituição). +
+ {% endif %} +
+ +
+ + + + + + + + + + + + + {% for colaborador in colaboradores %} + + + + + + + + + {% empty %} + + + + {% endfor %} + +
MatrículaNomeCargoSetorCentro de CustoAções
{{ colaborador.matricula }}{{ colaborador.nome }}{{ colaborador.cargo }}{{ colaborador.setor }}{{ colaborador.centro_custo }} + Desligamento + Movimentação + Substituição +
Nenhum colaborador encontrado.
+
+ +{% if colaboradores.has_other_pages %} +
+ {% if colaboradores.has_previous %} + « Primeira + ‹ Anterior + {% endif %} + Página {{ colaboradores.number }} de {{ colaboradores.paginator.num_pages }} + {% if colaboradores.has_next %} + Próxima › + Última » + {% endif %} +
+{% endif %} +{% endblock %} diff --git a/templates/solicitacoes/movimentacao_form.html b/templates/solicitacoes/movimentacao_form.html new file mode 100644 index 0000000..6a6062a --- /dev/null +++ b/templates/solicitacoes/movimentacao_form.html @@ -0,0 +1,97 @@ +{% extends "base.html" %} + +{% block title %}Criar Solicitação de Movimentação - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} +
+
+

Criar Solicitação de Movimentação

+
+ + {% if messages %} +
+
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+
+ {% endif %} + +
+

Dados do Colaborador

+
+
Nome{{ funcionario.nome }}
+
Matrícula{{ funcionario.matricula }}
+
Cargo Atual{{ funcionario.cargo|default:"N/A" }}
+
Setor Atual{{ funcionario.setor|default:"N/A" }}
+
Centro de Custo Atual{{ funcionario.centro_custo|default:"N/A" }}
+
Salário AtualR$ {{ funcionario.salario|default:"N/A" }}
+
+
+ +
+ {% csrf_token %} +
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + Cancelar +
+
+
+ + +{% endblock %} diff --git a/templates/solicitacoes/solicitacao_detalhe.html b/templates/solicitacoes/solicitacao_detalhe.html new file mode 100644 index 0000000..472d78c --- /dev/null +++ b/templates/solicitacoes/solicitacao_detalhe.html @@ -0,0 +1,333 @@ +{% extends "base.html" %} + +{% block title %}Detalhe #{{ solicitacao.id }} - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} +
+
+
+

Detalhe da Solicitação #{{ solicitacao.id }}

+
Criado em {{ solicitacao.criado_em|date:"d/m/Y H:i" }} por {{ solicitacao.solicitante.nome }}
+
{{ solicitacao.get_status_display }}
+
+ Voltar ao Dashboard +
+ + {% if messages %} +
+
    + {% for message in messages %} +
  • {% if message.tags == 'error' %}⚠️{% else %}✅{% endif %} {{ message }}
  • + {% endfor %} +
+
+ {% endif %} + +
+
+ 📄 +

Dados Gerais

+
+
+
+
+ Tipo de Processo + {{ solicitacao.get_tipo_display }} +
+
+ Solicitante + {{ solicitacao.solicitante.nome }} ({{ solicitacao.solicitante.matricula }}) +
+
+ Enviada em + {{ solicitacao.enviada_em|date:"d/m/Y H:i"|default:"-" }} +
+ {% if solicitacao.finalizada_em %} +
+ Finalizada em + {{ solicitacao.finalizada_em|date:"d/m/Y H:i" }} +
+ {% endif %} +
+
+
+ + {% if solicitacao.funcionario %} +
+
+ 🏢 +

Dados do Colaborador

+ Integração TOTVS RM +
+
+

ℹ️ Snapshot dos dados no momento da criação da solicitação

+
+
Matrícula{{ solicitacao.funcionario.matricula }}
+
Nome Completo{{ solicitacao.funcionario.nome }}
+
CPF{{ solicitacao.funcionario.cpf|default:"-" }}
+
Data de Admissão{{ solicitacao.funcionario.data_admissao|date:"d/m/Y"|default:"-" }}
+
+
+
💼 Dados Profissionais
+
+
Cargo/Função{{ solicitacao.funcionario.cargo }}
+
Cód. Função{{ solicitacao.funcionario.cod_funcao|default:"N/A" }}
+
Setor/Seção{{ solicitacao.funcionario.setor }}
+
Centro de Custo{{ solicitacao.funcionario.centro_custo }}
+ {% if solicitacao.funcionario.salario %} +
Salário AtualR$ {{ solicitacao.funcionario.salario|floatformat:2 }}
+ {% endif %} +
+
+ {% if solicitacao.funcionario.saldo_banco_horas_minutos is not None %} +
+
⏰ Banco de Horas
+
+
Saldo Atual{% if solicitacao.funcionario.saldo_banco_horas_minutos >= 0 %}+{{ solicitacao.funcionario.saldo_banco_horas_minutos }} min{% else %}{{ solicitacao.funcionario.saldo_banco_horas_minutos }} min{% endif %}
+ {% if solicitacao.funcionario.inicio_periodo_banco_horas %} +
Período Referência{{ solicitacao.funcionario.inicio_periodo_banco_horas|date:"d/m/Y" }} a {{ solicitacao.funcionario.fim_periodo_banco_horas|date:"d/m/Y" }}
+ {% endif %} +
+
+ {% endif %} + {% if solicitacao.funcionario.sincronizado_em %} +
Sincronizado com RM em: {{ solicitacao.funcionario.sincronizado_em|date:"d/m/Y H:i" }} | ID: {{ solicitacao.funcionario.id_rm }}
+ {% endif %} +
+
+ {% endif %} + + {% if dados_winthor_organizados %} +
+
+ 💼 +

Dados do Colaborador - Winthor

+ Sistema Winthor +
+
+
+ {% if dados_winthor_organizados.basicos %} +
+
👤 Dados Básicos
+
+ {% if dados_winthor_organizados.basicos.matricula %}
Matrícula{{ dados_winthor_organizados.basicos.matricula }}
{% endif %} + {% if dados_winthor_organizados.basicos.nome %}
Nome{{ dados_winthor_organizados.basicos.nome }}
{% endif %} + {% if dados_winthor_organizados.basicos.cpf %}
CPF{{ dados_winthor_organizados.basicos.cpf }}
{% endif %} +
+
+ {% endif %} + {% if dados_winthor_organizados.admissao %} +
+
📅 Admissão e Situação
+
+ {% if dados_winthor_organizados.admissao.admissao %}
Data de Admissão{% if dados_winthor_organizados.admissao.admissao|date:"d/m/Y" %}{{ dados_winthor_organizados.admissao.admissao|date:"d/m/Y" }}{% else %}{{ dados_winthor_organizados.admissao.admissao }}{% endif %}
{% endif %} + {% if dados_winthor_organizados.admissao.situacao %}
Situação{{ dados_winthor_organizados.admissao.situacao }}
{% endif %} + {% if dados_winthor_organizados.admissao.dt_exclusao %}
Data de Exclusão{% if dados_winthor_organizados.admissao.dt_exclusao|date:"d/m/Y" %}{{ dados_winthor_organizados.admissao.dt_exclusao|date:"d/m/Y" }}{% else %}{{ dados_winthor_organizados.admissao.dt_exclusao }}{% endif %}
{% endif %} +
+
+ {% endif %} + {% if dados_winthor_organizados.endereco %} +
+
📍 Endereço
+
+ {% if dados_winthor_organizados.endereco.endereco %}
Endereço{{ dados_winthor_organizados.endereco.endereco }}
{% endif %} + {% if dados_winthor_organizados.endereco.bairro %}
Bairro{{ dados_winthor_organizados.endereco.bairro }}
{% endif %} + {% if dados_winthor_organizados.endereco.cidade %}
Cidade{{ dados_winthor_organizados.endereco.cidade }}
{% endif %} + {% if dados_winthor_organizados.endereco.estado %}
Estado{{ dados_winthor_organizados.endereco.estado }}
{% endif %} +
+
+ {% endif %} +
+
+
+ {% endif %} + +
+
+ 📋 +

Detalhes da Movimentação

+
+
+ + {% if solicitacao.tipo == 'DESLIGAMENTO' and solicitacao.desligamento %} +
+ {% if solicitacao.desligamento.tipo_desligamento %} +
+ Tipo de Desligamento + + {% if solicitacao.desligamento.tipo_desligamento == 'PEDIDO_DEMISSAO' %} + 📝 Pedido de Demissão + {% elif solicitacao.desligamento.tipo_desligamento == 'SEM_JUSTA_CAUSA' %} + 🚪 Demissão sem Justa Causa + {% elif solicitacao.desligamento.tipo_desligamento == 'COM_JUSTA_CAUSA' %} + ⚠️ Demissão por Justa Causa + {% elif solicitacao.desligamento.tipo_desligamento == 'TERMINO_CONTRATO' %} + 📅 Término de Contrato de Experiência + {% elif solicitacao.desligamento.tipo_desligamento == 'OUTROS' %} + 📋 Outros + {% else %} + {{ solicitacao.desligamento.get_tipo_desligamento_display }} + {% endif %} + +
+ {% endif %} + {% if solicitacao.desligamento.aviso_previo %} +
+ Aviso Prévio + + {% if solicitacao.desligamento.aviso_previo == 'TRABALHADO' %} + ✅ Trabalhado + {% elif solicitacao.desligamento.aviso_previo == 'INDENIZADO' %} + 💰 Indenizado (Dispensa imediata) + {% elif solicitacao.desligamento.aviso_previo == 'DISPENSADO' %} + 📤 Dispensado (Pedido de demissão) + {% else %} + {{ solicitacao.desligamento.get_aviso_previo_display }} + {% endif %} + +
+ {% endif %} +
Data Prevista de Saída{{ solicitacao.desligamento.data_prevista_desligamento|date:"d/m/Y" }}
+
Detalhamento / Justificativa{{ solicitacao.desligamento.motivo }}
+ {% if solicitacao.desligamento.arquivo_pedido %} + + {% endif %} + {% if solicitacao.desligamento.observacoes %} +
Observações Adicionais{{ solicitacao.desligamento.observacoes }}
+ {% endif %} +
+ + {% elif solicitacao.tipo == 'MOVIMENTACAO' and solicitacao.movimentacao %} +
+ {% if solicitacao.movimentacao.altera_funcao %}
Nova Função{{ solicitacao.movimentacao.novo_cod_funcao }}
{% endif %} + {% if solicitacao.movimentacao.altera_centro_custo %}
Nova Seção{{ solicitacao.movimentacao.novo_cod_secao }}
{% endif %} + {% if solicitacao.movimentacao.novo_salario %}
Novo SalárioR$ {{ solicitacao.movimentacao.novo_salario }}
{% endif %} +
Data Efetivação{{ solicitacao.movimentacao.data_efetivacao|date:"d/m/Y" }}
+
Justificativa{{ solicitacao.movimentacao.justificativa }}
+
+ + {% elif solicitacao.tipo == 'ADM_SUBSTITUICAO' and solicitacao.admissao_substituicao %} +
+
Data Prevista{{ solicitacao.admissao_substituicao.data_previsao_contratacao|date:"d/m/Y" }}
+
Coligada/Filial Destino{{ solicitacao.admissao_substituicao.cod_coligada_destino }} / {{ solicitacao.admissao_substituicao.cod_filial_destino }}
+
Seção Destino{{ solicitacao.admissao_substituicao.cod_secao_destino }}
+
Função Destino{{ solicitacao.admissao_substituicao.cod_funcao_destino }}
+
Justificativa{{ solicitacao.admissao_substituicao.justificativa }}
+
+ + {% elif solicitacao.tipo == 'ADM_AUMENTO' and solicitacao.admissao_aumento %} +
+
Data Prevista{{ solicitacao.admissao_aumento.data_previsao_contratacao|date:"d/m/Y" }}
+
Local DestinoCol: {{ solicitacao.admissao_aumento.cod_coligada_destino }} | Fil: {{ solicitacao.admissao_aumento.cod_filial_destino }}
+
Justificativa Estratégica{{ solicitacao.admissao_aumento.justificativa_estrategica }}
+
+ {% endif %} +
+
+ +
+

📝 Pareceres Técnicos

+

Análises das áreas de suporte (Gente e Gestão & Controladoria).

+
+
+

👥 Gente e Gestão

+ {% if pareceres_gg %} + {% for parecer in pareceres_gg %} +
+
{{ parecer.usuario.nome }}{{ parecer.criado_em|date:"d/m H:i" }}
+

{{ parecer.texto }}

+ {% if parecer.anexo %}📎 Ver Anexo{% endif %} +
+ {% endfor %} + {% else %} +
Aguardando parecer de GG...
+ {% endif %} +
+
+

💰 Controladoria

+ {% if pareceres_controladoria %} + {% for parecer in pareceres_controladoria %} +
+
{{ parecer.usuario.nome }}{{ parecer.criado_em|date:"d/m H:i" }}
+

{{ parecer.texto }}

+ {% if parecer.anexo %}📎 Ver Anexo{% endif %} +
+ {% endfor %} + {% else %} +
Aguardando parecer da Controladoria...
+ {% endif %} +
+
+
+ +
+

⚖️ Histórico de Aprovações

+
+ {% for aprovacao in solicitacao.aprovacoes.all %} +
+
+
+
+ {% if aprovacao.decisao == 'APROVADO' %}✅ APROVADO{% else %}❌ REPROVADO{% endif %} + {{ aprovacao.decidido_em|date:"d/m/Y H:i" }} +
+
Por: {{ aprovacao.usuario.nome }} ({{ aprovacao.get_etapa_display }})
+ {% if aprovacao.justificativa %}
"{{ aprovacao.justificativa }}"
{% endif %} +
+
+ {% empty %} +

Nenhuma decisão registrada ainda.

+ {% endfor %} +
+
+ + {% if solicitacao.pode_enviar and is_solicitante %} +
+

🚀 Enviar para Aprovação

+

Sua solicitação está em rascunho. Revise os dados e envie para iniciar o fluxo.

+ Confirmar Envio +
+ {% endif %} + + {% if pode_dar_parecer %} +
+

{% if usuario_sistema.perfil == 'GG' %}👥 Parecer de Gente e Gestão{% elif usuario_sistema.perfil == 'CONTROLADORIA' %}💰 Parecer de Controladoria{% else %}📝 Registrar Parecer{% endif %}

+

Preencha sua análise técnica abaixo para subsidiar a decisão da diretoria.

+
+ {% csrf_token %} +
+ + +
+
+ + +
+ +
+
+ {% endif %} + +
+{% endblock %} \ No newline at end of file diff --git a/templates/solicitacoes/todas_solicitacoes.html b/templates/solicitacoes/todas_solicitacoes.html new file mode 100644 index 0000000..4a92bbc --- /dev/null +++ b/templates/solicitacoes/todas_solicitacoes.html @@ -0,0 +1,150 @@ +{% extends "base.html" %} + +{% block title %}Todas as Solicitações - SGMP{% endblock %} + +{% block css %} + +{% endblock %} + +{% block content %} + + +
+
+

Filtros

+ +
+
+ + {% for valor, label in status_choices %} + + {% endfor %} + +
+
+ +{% if solicitacoes %} +
+ + + + + + + + + + + + + {% for item in solicitacoes_com_acao %} + {% with solicitacao=item.solicitacao %} + + + + + + + + + {% endwith %} + {% endfor %} + +
Tipo da SolicitaçãoColaboradorSolicitanteStatusData
+
+
+ {{ solicitacao.get_tipo_display }} + #{{ solicitacao.id }} +
+
+
+ {% if solicitacao.funcionario %}{{ solicitacao.funcionario.nome }}{% else %}N/A{% endif %} + {% if solicitacao.funcionario and solicitacao.funcionario.chapa %}Chapa: {{ solicitacao.funcionario.chapa }}{% endif %} + + {{ solicitacao.solicitante.nome }} + {{ solicitacao.solicitante.setor|default:"Sem setor" }} + + {{ solicitacao.get_status_display }} + {{ solicitacao.criado_em|timesince }} atrás + Analisar ◹ +
+
+ Nenhuma solicitação encontrada com os filtros aplicados. +
+
+{% if solicitacoes.has_other_pages %} + +{% endif %} +{% else %} +
+ Nenhuma solicitação encontrada no sistema. +
+{% endif %} +{% endblock %} + +{% block scripts %} +{{ block.super }} + +{% endblock %}