{% extends "base.html" %} {% block title %}Espelho Mensal de Ponto{% endblock %} {% block extra_css %} {% endblock %} {% block content %} {% set cl = contadores_linhas|default({'total': 0, 'ok': 0, 'retificados': 0, 'intervencoes_rh': 0, 'inconsistentes': 0, 'sem_registro': 0, 'com_registro': 0, 'faltas': 0, 'justificados': 0}) %} {% set competencia_exibicao = (competencia[5:7] ~ '/' ~ competencia[:4]) if competencia and competencia|length >= 7 else competencia %} {% set filtro_operacional = filtro_dias|default('todos') %} {% set linhas_visiveis = linhas_espelho|default([]) %} {% set total_exibidas = linhas_exibidas|default(0) %} {% set formato_dia = (request.args.get('formato_dia', 'curto') if request else 'curto') %} {% set formato_dia = (formato_dia if formato_dia in ['curto', 'completo'] else 'curto') %} {% set modo_visualizacao = modo_visualizacao|default(request.args.get('modo', 'padrao') if request else 'padrao') %} {% set modo_visualizacao = ('ampliado' if modo_visualizacao == 'ampliado' else 'padrao') %} {% set ocultar_resumo_raw = (request.args.get('ocultar_resumo', '') if request else '') %} {% set ocultar_lancamento_manual_raw = (request.args.get('ocultar_lancamento_manual', '') if request else '') %} {% set ocultar_resumo = ocultar_resumo_raw|string|lower in ['1', 'true', 'on', 'sim'] %} {% set ocultar_lancamento_manual = ocultar_lancamento_manual_raw|string|lower in ['1', 'true', 'on', 'sim'] %} {% set dias_semana_pt_curto = ['Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb', 'Dom'] %} {% set dias_semana_pt_completo = ['Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado', 'Domingo'] %} {% set url_modo_ampliado = url_for('rh_ponto_espelho_mensal', empresa_id=empresa_id_selecionada, competencia=competencia, funcionario_id=funcionario_id, filtro_dias=filtro_operacional, formato_dia=formato_dia, modo='ampliado', ocultar_resumo=1, ocultar_lancamento_manual=1) ~ '#espelho-registros' %} {% set url_modo_padrao = url_for('rh_ponto_espelho_mensal', empresa_id=empresa_id_selecionada, competencia=competencia, funcionario_id=funcionario_id, filtro_dias=filtro_operacional, formato_dia=formato_dia, modo='padrao') %}

Espelho Mensal de Ponto

{% if modo_visualizacao == 'ampliado' %} Modo padrão {% else %} Abrir tela ampliada {% endif %} Notificações Internas {% if (rh_notificacoes_menu.total_criticas_pendentes or 0) > 0 %} {{ rh_notificacoes_menu.total_criticas_pendentes }} {% elif (rh_notificacoes_menu.total_pendentes or 0) > 0 %} {{ rh_notificacoes_menu.total_pendentes }} {% endif %} Funcionários Apuração do Ponto Registros
Empresa: {{ empresa.nome_fantasia or empresa.razao_social or empresa.nome }}
Visão consolidada mensal por colaborador (MVP operacional).
Guia ERP: okdia consistente inconsistentefaltam batidas/par intervenção RHhouve ação manual do RH retificadoteve retificação formal aprovada sem registrosem batidas no dia
{% if competencia_fechada %}
Competência {{ competencia_exibicao }} fechada. Ajustes devem seguir fluxo de retificação/desfechamento autorizado.
{% endif %}
Limpar
{% if funcionario_id %}
{% endif %}
{% if funcionario_id %}
Exportações rápidas
Compartilhar
{% endif %}
{% if funcionario %}
Espelho carregado
Funcionário: {{ funcionario.nome }} ID {{ funcionario.id }} Competência: {{ competencia_exibicao }} Dias exibidos: {{ total_exibidas }} / {{ cl.total or 0 }}
Atualizado em --/--/---- --:--:--
Exibindo {{ total_exibidas }}/{{ cl.total or 0 }} OK {{ cl.ok or 0 }} Intervenções RH {{ cl.intervencoes_rh or 0 }} Retificados {{ cl.retificados or 0 }} Inconsistentes {{ cl.inconsistentes or 0 }} Sem registro {{ cl.sem_registro or 0 }} Com registro {{ cl.com_registro or 0 }} Faltas {{ cl.faltas or 0 }} Justificados {{ cl.justificados or 0 }}
{% else %}
Selecione um funcionário e clique em Gerar Espelho para carregar os dados.
{% endif %} {% if funcionario %}
{% for l in linhas_visiveis %} {% else %} {% endfor %}
Data Entrada {% if modo_visualizacao == 'ampliado' %}Pausa{% else %}Pausa{% endif %} Retorno Saída Registros {% if modo_visualizacao == 'ampliado' %}Batidas{% else %}Batidas do dia{% endif %} Trabalhado Previsto Saldo Atraso {% if modo_visualizacao == 'ampliado' %}Ações RH{% else %}Intervenções RH{% endif %} {% if modo_visualizacao == 'ampliado' %}Justif.{% else %}Justificativas{% endif %} Status
{{ l.data.strftime('%d/%m/%Y') }} ({% if formato_dia == 'completo' %}{{ dias_semana_pt_completo[l.data.weekday()] }}{% else %}{{ dias_semana_pt_curto[l.data.weekday()] }}{% endif %}) {{ l.entrada }} {{ l.pausa_inicio }} {{ l.pausa_fim }} {{ l.saida }} {{ l.qtd_registros }} {% set batidas_dia = l.batidas_dia or [] %} {% if batidas_dia %} {% else %} - {% endif %} {{ fmt_duracao(l.trabalhado_min) }} {{ fmt_duracao(l.previsto_min) }} {{ fmt_duracao(l.saldo_min) }} {% if l.dia_futuro %}-{% else %}{{ fmt_duracao(l.atraso_min) }}{% endif %} {% if l.tem_intervencao_rh %}
{{ l.qtd_intervencoes_rh or 0 }} {% if l.tem_ajuste_retificacao %} retif. {{ l.qtd_ajustes_retificacao or 0 }} {% endif %}
{% else %} - {% endif %}
{% if l.tem_justificativa %} {{ l.qtd_justificativas or 0 }} {{ fmt_duracao(l.justificativa_min or 0) }} {% for j in (l.detalhes_justificativas or [])[:2] %} {{ j.justificativa_nome or '-' }} ({{ fmt_duracao(j.minutos or 0) }}) {% endfor %} {% else %} - {% endif %} {% if l.dia_futuro %} futuro {% elif l.falta %} falta {% elif l.tem_justificativa and not l.tem_registro %} justificado {% elif not l.tem_registro %} sem registro {% elif l.inconsistente %} inconsistente {% elif l.tem_ajuste_retificacao %} retificado {{ l.qtd_ajustes_retificacao or 0 }} ajuste(s) {% elif l.tem_intervencao_rh %} intervenção RH {{ l.qtd_intervencoes_rh or 0 }} ação(ões) {% else %} ok {% endif %}
Nenhum dado para o período selecionado.
{% if not ocultar_resumo %}
Resumo visual em HH:MM para facilitar a conferência operacional do mês.
Referência diária
Base usada para definir o previsto e calcular atrasos dia a dia.
Jornada dia
{{ fmt_duracao(espelho.meta.jornada_diaria_min) }}
Entrada ref.
{{ espelho.meta.horario_entrada or '08:00' }}
Tolerância
{{ fmt_duracao(espelho.meta.tolerancia_entrada_min or 0) }}
Acumulado mensal
Consolidação do mês com horas previstas, trabalhadas, justificadas e impacto operacional.
Trabalhado mês
{{ fmt_duracao(espelho.resumo.total_trabalhado_min) }}
Previsto mês
{{ fmt_duracao(espelho.resumo.total_previsto_min) }}
Saldo mês
{{ fmt_duracao(espelho.resumo.total_saldo_min) }}
Extras mês
{{ fmt_duracao(espelho.resumo.total_extras_min) }}
Débito mês
{{ fmt_duracao(espelho.resumo.total_debito_min) }}
Atraso mês
{{ fmt_duracao(espelho.resumo.total_atraso_min) }}
Justificativas mês
{{ fmt_duracao(espelho.resumo.total_justificativa_min) }}
Faltas
{{ espelho.resumo.total_faltas or 0 }}
Inconsistências
{{ espelho.resumo.inconsistencias or 0 }}
Dias com intervenção RH
{{ espelho.resumo.dias_com_intervencao_rh or 0 }}
Dias retificados
{{ espelho.resumo.dias_retificados or 0 }}
Intervenções RH no mês
{{ espelho.resumo.intervencoes_rh_total or 0 }}
Leitura operacional do saldo
{{ fmt_duracao(espelho.resumo.total_previsto_min) }} - {{ fmt_duracao(espelho.resumo.total_trabalhado_min + (espelho.resumo.total_justificativa_min or 0)) }} = {{ fmt_duracao(espelho.resumo.total_saldo_min) }}
Previsto do mês - (trabalhado + justificativas) = saldo acumulado.
Ajustes por retificação formal
{{ espelho.resumo.ajustes_retificacao_total or 0 }}
{% endif %} {% if not ocultar_lancamento_manual %}
Guia rápido de apuração: tempos e saldos seguem o padrão HH:MM (ex.: 01:30); para abatimento, use valor negativo (ex.: -01:30) no ajuste do banco de horas.
Funcionário
Data base
{% if (padrao_lancamento_manual.escala_nome if padrao_lancamento_manual else None) %} Escala vinculada: {{ padrao_lancamento_manual.escala_nome }}. {% else %} Usando horário padrão da configuração da empresa. {% endif %}
Batida 1
Batida 2
Batida 3
Batida 4
Informe a data uma única vez e só altere os horários. Linhas totalmente vazias continuam sendo ignoradas.
{% endif %}
Use esta rotina para abonar dias sem inventar batidas. O sistema consulta a escala do funcionário, calcula o previsto do dia e lança a justificativa no espelho de forma rápida.
Ajuste de batida
Esta ação invalida o registro no espelho (não remove trilha de auditoria).
Será criada uma nova batida com base no registro selecionado. O original permanece ativo.
Aceita HH:MM quando o ajuste partir da linha do dia.
Ajuste de coluna no espelho.
{% else %}
Nenhum funcionário ativo disponível para gerar espelho nesta empresa.
{% endif %} {% endblock %} {% block scripts %} {{ super() }} {% endblock %}