docs: update Codigos/notif_ponto

This commit is contained in:
2026-08-15 01:29:35 +00:00
committed by Bruno Santos
parent 08cf529a9d
commit a53383faa5

View File

@@ -2,7 +2,7 @@
title: Notificação de Ponto title: Notificação de Ponto
description: Sistema de notificação ponto description: Sistema de notificação ponto
published: true published: true
date: 2026-08-15T01:00:06.922Z date: 2026-08-15T01:29:32.722Z
tags: tags:
editor: markdown editor: markdown
dateCreated: 2026-08-15T01:00:06.922Z dateCreated: 2026-08-15T01:00:06.922Z
@@ -161,17 +161,11 @@ entrada1 → saida1 → entrada2 → saida2
``` ```
| Pontos no dia | Situação | | Pontos no dia | Situação |
| ---: | --- | | ---: | --- |
| 0 | Falta `entrada1` | | 0 | Falta `entrada1` |
| 1 | Falta `saida1` | | 1 | Falta `saida1` |
| 2 | Falta `entrada2` | | 2 | Falta `entrada2` |
| 3 | Falta `saida2` | | 3 | Falta `saida2` |
| 4 | Jornada concluída | | 4 | Jornada concluída |
### 5.3 Lembrete de entrada2 ### 5.3 Lembrete de entrada2
@@ -193,9 +187,7 @@ Com três pontos no dia, considerar que eles são `entrada1`, `saida1` e `entrad
```text ```text
trabalho_antes_do_almoco = saida1 - entrada1 trabalho_antes_do_almoco = saida1 - entrada1
tempo_restante = 7h55 - trabalho_antes_do_almoco tempo_restante = 7h55 - trabalho_antes_do_almoco
horario_estimado_saida2 = entrada2 + tempo_restante horario_estimado_saida2 = entrada2 + tempo_restante
``` ```
@@ -205,21 +197,13 @@ O lembrete deve ser agendado para o horário calculado menos uma antecedência c
Exemplo: Exemplo:
```text ```text
entrada1: 08:00 entrada1: 08:00
saida1: 12:00 saida1: 12:00
entrada2: 13:00 entrada2: 13:00
trabalho antes do almoço: 4h00 trabalho antes do almoço: 4h00
restante: 3h55 restante: 3h55
saida2 estimada: 16:55 saida2 estimada: 16:55
lembrete: 16:50 (antecedência de 5 minutos) lembrete: 16:50 (antecedência de 5 minutos)
``` ```
## 6. Agendamentos e prevenção de duplicidade ## 6. Agendamentos e prevenção de duplicidade
@@ -227,11 +211,8 @@ lembrete: 16:50 (antecedência de 5 minutos)
Cada lembrete é persistido no SQLite com uma chave única. Uma chave legível pode seguir o formato: Cada lembrete é persistido no SQLite com uma chave única. Uma chave legível pode seguir o formato:
```text ```text
bruno14082026entrada2 bruno14082026entrada2
bruno14082026saida2 bruno14082026saida2
``` ```
A garantia técnica deve ser a restrição única: A garantia técnica deve ser a restrição única:
@@ -247,17 +228,11 @@ Isso evita colisões se nome de usuário mudar ou dois nomes forem semelhantes.
### Estados ### Estados
| Status | Significado | | Status | Significado |
| --- | --- | | --- | --- |
| `scheduled` | Agendamento criado, ainda não é hora de enviar | | `scheduled` | Agendamento criado, ainda não é hora de enviar |
| `ready_to_send` | O horário chegou; `execute_send = true` | | `ready_to_send` | O horário chegou; `execute_send = true` |
| `sent` | Mensagem enviada com sucesso | | `sent` | Mensagem enviada com sucesso |
| `cancelled` | Ponto foi detectado antes do lembrete ou o dia deixou de ser aplicável | | `cancelled` | Ponto foi detectado antes do lembrete ou o dia deixou de ser aplicável |
| `failed` | Houve falha de envio; permite retentativa controlada | | `failed` | Houve falha de envio; permite retentativa controlada |
Pela regra aprovada, quando houver um agendamento pendente com `execute_send = true`, o sistema envia a mensagem sem nova consulta à API. Caso não exista agendamento ou ele esteja com `execute_send = false`, o sistema consulta o histórico para decidir se cria/cancela agendamentos. Pela regra aprovada, quando houver um agendamento pendente com `execute_send = true`, o sistema envia a mensagem sem nova consulta à API. Caso não exista agendamento ou ele esteja com `execute_send = false`, o sistema consulta o histórico para decidir se cria/cancela agendamentos.
@@ -267,49 +242,27 @@ Pela regra aprovada, quando houver um agendamento pendente com `execute_send = t
## 7. Fluxograma operacional ## 7. Fluxograma operacional
```mermaid ```mermaid
flowchart TD flowchart TD
I["Ciclo do agendador, por usuário"] --> D{"É dia útil?<br/>Segunda a sexta"} I["Ciclo do agendador, por usuário"] --> D{"É dia útil?<br/>Segunda a sexta"}
D -->|Não| X["Encerrar ciclo"] D -->|Não| X["Encerrar ciclo"]
D -->|Sim| A{"Existe agendamento vencido<br/>com execute_send = true?"} D -->|Sim| A{"Existe agendamento vencido<br/>com execute_send = true?"}
A -->|Sim| T["Enviar mensagem Telegram"] A -->|Sim| T["Enviar mensagem Telegram"]
T --> M["Registrar status sent e sent_at"] T --> M["Registrar status sent e sent_at"]
M --> X M --> X
A -->|Não| H["Consultar histórico de pontos"] A -->|Não| H["Consultar histórico de pontos"]
H --> E{"Erro de autenticação?"} H --> E{"Erro de autenticação?"}
E -->|Sim| L["Autenticar novamente"] E -->|Sim| L["Autenticar novamente"]
L --> R["Atualizar client, token e validade"] L --> R["Atualizar client, token e validade"]
R --> H R --> H
E -->|Não| V["Filtrar pontos de hoje e ordenar"] E -->|Não| V["Filtrar pontos de hoje e ordenar"]
V --> P{"Quantidade de pontos"} V --> P{"Quantidade de pontos"}
P -->|0 ou 1| X P -->|0 ou 1| X
P -->|2| EN["Criar, se inexistente:<br/>entrada2 = saida1 + 55 min"] P -->|2| EN["Criar, se inexistente:<br/>entrada2 = saida1 + 55 min"]
P -->|3| SA["Calcular saída2 e criar,<br/>se inexistente, o agendamento"] P -->|3| SA["Calcular saída2 e criar,<br/>se inexistente, o agendamento"]
P -->|4| F["Jornada completa;<br/>não criar lembretes"] P -->|4| F["Jornada completa;<br/>não criar lembretes"]
EN --> X EN --> X
SA --> X SA --> X
F --> X F --> X
``` ```
## 8. Estrutura de pastas e arquivos ## 8. Estrutura de pastas e arquivos