{#if !temFuncionarioAssociado}

Funcionário Não Associado

Você não possui um funcionário associado à sua conta.
Entre em contato com o administrador do sistema para associar um funcionário à sua conta.
{/if} {#if estaDispensado && motivoDispensa && temFuncionarioAssociado}

Registro de Ponto Dispensado

Você está dispensado de registrar ponto no momento.
Motivo: {motivoDispensa}
{/if}

Registrar Ponto

{#if sucesso}
{sucesso}
{/if}

Próximo registro: {tipoLabel}

Horário Padrão

{#each mapaHorarios as horario (horario.tipo)}
{#if horario.registrado} {#if horario.dentroDoPrazo} {:else} {/if} {:else} {/if}
{horario.label}
{horario.horario}
{#if horario.registrado}
Registrado:
{horario.horarioRegistrado}
{:else}
Aguardando registro
{/if}
{/each}
{#if historicoSaldo && registrosOrdenados.length > 0}

Histórico do Dia

Saldo de Horas

{saldoFormatado}

{#if saldoPositivo} {:else} {/if}

Carga Horária Diária: {Math.floor(historicoSaldo.cargaHorariaDiaria / 60)}h {historicoSaldo.cargaHorariaDiaria % 60}min

Horas Trabalhadas: {Math.floor(historicoSaldo.horasTrabalhadas / 60)}h {historicoSaldo.horasTrabalhadas % 60}min

Timeline do Dia

Entradas

{#each registrosOrdenados.filter(r => r.tipo === 'entrada' || r.tipo === 'retorno_almoco') as registro (registro._id)}
{#if registro.dentroDoPrazo} {:else} {/if} {config ? getTipoRegistroLabel(registro.tipo, { nomeEntrada: config.nomeEntrada, nomeRetornoAlmoco: config.nomeRetornoAlmoco, }) : getTipoRegistroLabel(registro.tipo)}

{formatarHoraPonto(registro.hora, registro.minuto)}

{#if config} {@const horarioEsperado = registro.tipo === 'entrada' ? config.horarioEntrada : config.horarioRetornoAlmoco} {@const [horaEsperada, minutoEsperado] = horarioEsperado.split(':').map(Number)} {@const minutosEsperados = horaEsperada * 60 + minutoEsperado} {@const minutosRegistrados = registro.hora * 60 + registro.minuto} {@const diferenca = minutosRegistrados - minutosEsperados} {@const diferencaAbs = Math.abs(diferenca)} {@const diferencaTexto = diferencaAbs >= 60 ? `${Math.floor(diferencaAbs / 60)}h ${diferencaAbs % 60}min` : `${diferencaAbs}min`}
Esperado: {horarioEsperado} {#if diferencaAbs > 0} {diferenca > 0 ? '+' : '-'}{diferencaTexto} {/if}
{/if} {#if registro.justificativa}

Justificativa:

{registro.justificativa}

{/if}
{/each} {#if config} {#each [ { tipo: 'entrada', horario: config.horarioEntrada, label: config.nomeEntrada || 'Entrada 1' }, { tipo: 'retorno_almoco', horario: config.horarioRetornoAlmoco, label: config.nomeRetornoAlmoco || 'Entrada 2' } ] as horarioEsperado} {#if !registrosOrdenados.find(r => r.tipo === horarioEsperado.tipo)}

{horarioEsperado.label} (não registrado)

{horarioEsperado.horario}

{/if} {/each} {/if}

Saídas

{#each registrosOrdenados.filter(r => r.tipo === 'saida_almoco' || r.tipo === 'saida') as registro (registro._id)}
{config ? getTipoRegistroLabel(registro.tipo, { nomeSaidaAlmoco: config.nomeSaidaAlmoco, nomeSaida: config.nomeSaida, }) : getTipoRegistroLabel(registro.tipo)} {#if registro.dentroDoPrazo} {:else} {/if}

{formatarHoraPonto(registro.hora, registro.minuto)}

{#if config} {@const horarioEsperado = registro.tipo === 'saida_almoco' ? config.horarioSaidaAlmoco : config.horarioSaida} {@const [horaEsperada, minutoEsperado] = horarioEsperado.split(':').map(Number)} {@const minutosEsperados = horaEsperada * 60 + minutoEsperado} {@const minutosRegistrados = registro.hora * 60 + registro.minuto} {@const diferenca = minutosRegistrados - minutosEsperados} {@const diferencaAbs = Math.abs(diferenca)} {@const diferencaTexto = diferencaAbs >= 60 ? `${Math.floor(diferencaAbs / 60)}h ${diferencaAbs % 60}min` : `${diferencaAbs}min`}
{#if diferencaAbs > 0} {diferenca > 0 ? '+' : '-'}{diferencaTexto} {/if} {horarioEsperado} Esperado:
{/if} {#if registro.justificativa}

Justificativa:

{registro.justificativa}

{/if}
{/each} {#if config} {#each [ { tipo: 'saida_almoco', horario: config.horarioSaidaAlmoco, label: config.nomeSaidaAlmoco || 'Saída 1' }, { tipo: 'saida', horario: config.horarioSaida, label: config.nomeSaida || 'Saída 2' } ] as horarioEsperado} {#if !registrosOrdenados.find(r => r.tipo === horarioEsperado.tipo)}

{horarioEsperado.label} (não registrado)

{horarioEsperado.horario}

{/if} {/each} {/if}
{/if} {#if mostrandoWebcam} {/if} {#if mostrandoModalConfirmacao && imagemCapturada && dataHoraAtual} {/if} {#if mostrandoComprovante && registroId} {/if}