{% extends "base.html" %} {% block title %}Configurações RH/Ponto{% endblock %} {% block extra_css %} {% endblock %} {% block content %} {% set abrir_avancado = (request.method == 'POST') or ((request.args.get('abrir_avancado') or '') == '1') %}
RH • Regras operacionais

Configurações de RH e ponto

Centralize tolerâncias, escalas-base, autonomia do atestado e políticas de competência num único painel administrativo.

Atenção: esta tela define regras operacionais de escala e banco de horas. Antes de aplicar mudanças, valide com jurídico/contabilidade para garantir aderência às regras trabalhistas vigentes.
{% set assinatura_diag = assinatura_diagnostico or {} %} {% set assinatura_env_cfg = (assinatura_diag.config if assinatura_diag and assinatura_diag.config else (assinatura_env or {})) %}
Assinatura oficial do RH/Ponto
Configuração do certificado A1 usada para gerar sidecars .p7s no pacote regulatório.
{% if assinatura_diag.status == 'ok' %} ambiente pronto {% elif assinatura_diag.status == 'parcial' %} configuração parcial {% else %} não configurado {% endif %}
Status atual: {{ assinatura_diag.detalhe or 'Diagnóstico indisponível.' }}
CNPJ certificado
{{ assinatura_diag.cnpj_certificado or '--' }}
Empresa x certificado
{% if assinatura_diag.cnpj_compativel is sameas true %} CNPJ compatível {% elif assinatura_diag.cnpj_compativel is sameas false %} CNPJ divergente {% else %} compatibilidade pendente {% endif %}
Empresa: {{ assinatura_diag.cnpj_empresa or '--' }} · Certificado: {{ assinatura_diag.cnpj_certificado or '--' }}
Validade
{{ assinatura_diag.validade[:10] if assinatura_diag.validade else '--' }}
Dias restantes
{{ assinatura_diag.dias_validade if assinatura_diag.dias_validade is not none else '--' }}
{% if assinatura_env_cfg.tem_pfx_path and not assinatura_diag.arquivo_existe %}
Arquivo ausente: o caminho foi configurado, mas o ERP não encontrou o certificado no servidor. Sem isso, o pacote regulatório não consegue gerar os .p7s.
{% endif %} {% if assinatura_diag.cnpj_compativel is sameas false %}
CNPJ divergente: o certificado carregado não pertence ao mesmo CNPJ da empresa ativa. Isso precisa ser corrigido antes de qualquer uso oficial.
{% endif %} {% if assinatura_diag.recomendacao %}
Próximo passo: {{ assinatura_diag.recomendacao }}
{% endif %}
Regras básicas
Parâmetros principais usados no dia a dia do RH.
Selecione o modelo mais usado na empresa para manter os horários de referência alinhados.
Para operação diária, use a tela Escalas. O JSON manual é opcional e deve ser usado só em cenários específicos, quando houver necessidade de manutenção legada.
Modo avançado (JSON legado)
Use apenas em casos específicos. Sempre prefira o cadastro pela tela de Escalas.
Remetente de e-mail do RH
Escolha se o RH usa a caixa própria da empresa ou uma caixa geral compartilhada pelo grupo local.
Se a opção escolhida não tiver uma caixa ativa, o runtime tenta o outro escopo antes de cair no fallback técnico.
Caixas RH encontradas
{% if email_saida_erro %}
Não foi possível consultar as caixas de e-mail agora. A tela continua disponível, mas revise a rotina E-mail de saída antes de depender desse envio.
{% endif %}
Empresa: {% if caixa_rh_empresa %} {{ caixa_rh_empresa.nome_caixa }} ({{ caixa_rh_empresa.email_remetente }}) {% else %} nenhuma caixa ativa para empresa {% endif %}
Grupo: {% if caixa_rh_grupo %} {{ caixa_rh_grupo.nome_caixa }} ({{ caixa_rh_grupo.email_remetente }}) {% else %} nenhuma caixa geral ativa {% endif %}
Cadastre ou ajuste as caixas em E-mail de saída.
Regras avançadas (menos usadas)
Após confirmar, bloqueia temporariamente para evitar duplo clique.
Usado no app do funcionário para avisar antes dos horários de referência.
Depois deste prazo, alerta crítico pendente vira SLA estourado.
Autonomia do atestado
Define o que o sistema fará sozinho quando o colaborador enviar um atestado e o RH aprovar a solicitação.
Ao receber atestado com dia/período informado, o sistema já abre a pendência para o gestor.
Gera o lançamento no banco de horas e reflete no espelho mensal sem retrabalho manual.
Evita abonar automaticamente dias que já possuem registro ativo de ponto.
Quando desligado, o sistema usa a jornada padrão da empresa como referência.
Teto de minutos que a automação pode lançar por dia, mesmo em atestado integral.
Serve de referência para o lançamento automático aprovado pelo RH.
Fechamento de competência
Bloqueia novos registros para o mês fechado
{% if competencias_fechaveis %} Escolha uma competência em aberto para bloquear novos lançamentos. {% else %} Não há competências em aberto disponíveis na janela atual. {% endif %}

Ação sensível: o desfechamento reabre a competência para novas alterações. Use apenas mediante validação administrativa e informe justificativa completa para auditoria.
Para competências antigas (mais de 60 dias), é obrigatória permissão adicional e confirmação explícita de risco.
{% if competencias_reabriveis %} Escolha uma competência já fechada para reabrir o mês correto. {% else %} Não existe competência fechada disponível para reabertura. {% endif %}
Competência antiga detectada (0 dias): coassinatura e confirmação de risco são obrigatórias.
Para competência antiga, a coassinatura deve ser de outro superior (dupla validação).

Total: {{ total_fechamentos or 0 }} Antigas: {{ total_antigas or 0 }} Recentes: {{ total_recentes or 0 }}
Baixar CSV Baixar PDF
{% for f in fechamentos %} {% else %} {% endfor %}
Competência Data Fechamento Usuário Observações Classificação Status
{{ f.ano }}-{{ '%02d'|format(f.mes) }} {{ f.data_fechamento.strftime('%d/%m/%Y %H:%M') if f.data_fechamento else '-' }} {{ f.fechado_por.username if f.fechado_por else '-' }} {{ f.observacoes or '-' }} {% if f._competencia_antiga %} antiga ({{ f._dias_desde_fim_competencia }} dias) {% else %} recente {% endif %} fechada
{% if filtro_competencia == 'antigas' %} Nenhuma competência antiga encontrada no período listado. {% elif filtro_competencia == 'recentes' %} Nenhuma competência recente encontrada no período listado. {% else %} Nenhuma competência fechada até o momento. {% endif %}
{% endblock %} {% block scripts %} {{ super() }} {% endblock %}