﻿# Auditoria de Conformidade — REP-P e PTRP

**Sistema:** Registro Pro (ponto-saas)  
**Data da auditoria:** 29/07/2026  
**Escopo normativo de referência:** Portaria MTP nº 671/2021 (versão vigente consolidada), Anexos VI, VII e IX; leiaute AFD; Lei nº 14.063/2020; LGPD; Q&A oficiais do MTE.  
**Fase:** 1 (mapeamento) + 2 (auditoria). **Sem alterações de código nesta etapa.**

> **Aviso obrigatório:** este documento é diagnóstico técnico de software. **Não constitui declaração de conformidade jurídica, trabalhista ou metrológica.** A conformidade plena depende também de registro no INPI, certificados ICP-Brasil, atestados assinados por responsáveis e validação jurídica externa.

---

## 0. Síntese executiva

| Dimensão | Situação |
|----------|----------|
| Natureza atual do produto | SaaS operacional de ponto (app + painel RH + importação facial Control-iD) |
| Identidade REP-P | **Inexistente** como módulo certificado |
| Identidade PTRP | **Parcial** (tratamento operacional + espelho; sem AEJ oficial) |
| Separação lógica original × tratado | **Não conforme** — ajustes sobrescrevem `time_punches` |
| NSR / hash SHA-256 encadeado / AFD / CRC-16 | **Inexistentes** |
| Comprovante + PAdES | **Inexistentes** |
| AEJ + CAdES | **Inexistentes** |
| INPI / Atestado Anexo VII | **Inexistentes** (pendência externa + código) |
| Espelho de ponto | **Parcialmente conforme** (operacional; sem legenda legal completa) |
| Assinaturas digitais existentes | Holerite/documentos com A1/HMAC — **não** PAdES/CAdES de ponto |
| Referência Portaria no produto | Apenas **373/2011** (desligamento do espelho no app) |

**Conclusão:** o repositório **não é** um REP-P/PTRP Portaria 671. Adequação exige **novo subsistema** (não apenas ajustes cosméticos), preservando o fluxo operacional atual via feature flags e camada paralela de registros originais imutáveis.

---

## 1. Arquitetura encontrada (Fase 1)

### 1.1 Componentes

| Camada | Caminho | Papel |
|--------|---------|-------|
| Painel RH | `desktop/public/web/*` | Cadastros, ajuste, espelho, facial, config |
| APIs colaborador | `desktop/public/api/employee/*`, `api/point/*` | Batida, regras, espelho app |
| Domínio ponto | `desktop/src/Point/*` | Espelho, ajuste, tolerâncias, virada |
| Facial Control-iD | `Control-iD/src/*` | Import AccessLog → `time_punches` |
| App | `aplicativo/registropro/*` | WebView / telas de ponto |
| Migrations | `desktop/database/*.sql` | Schema evolutivo |

### 1.2 Modelo de dados central de ponto

**Tabela:** `time_punches` (`desktop/database/02_point_absence_schema.sql` + alters 22, 23, 28)

| Campo relevante | Observação vs. norma |
|-----------------|----------------------|
| `id` BIGINT AI | **Não é NSR**; sequencial global da tabela |
| `tenant_id` | Isolamento multi-empresa (SaaS) |
| `employee_id`, `work_date`, `event_code`, `sequence` | Cadeia operacional (entrada/almoço/saída) |
| `event_at` | Horário da marcação (mutável via RH) |
| `source` | `mobile` / `web` / `manual` |
| `punch_app_channel` | `button` / `facial` / `qr_code` |
| GPS / IP / device / foto | Evidência operacional — **não** campos AFD tipo 7 |
| `status` | OPEN/APPROVED/REJECTED/**EDITED**/CANCELLED |

**Auditoria de ajuste:** `time_punch_edits` (old/new `event_at`, motivo, usuário) — **não** substitui registro original imutável; perde-se no `DELETE` do ponto.

**Estabelecimento:** empresas (`tenant_companies` + CNPJ) e condomínios (`tenant_condominiums`); **não** há sequência NSR por estabelecimento/CNPJ.

### 1.3 Rotas e APIs de ponto

| Rota / arquivo | Função |
|----------------|--------|
| `api/employee/punch_button_register.php` | Batida app (botão/facial câmera/QR) |
| `api/point/punch_create.php` | INSERT genérico |
| `api/point/punch_list.php`, `last_punch.php` | Consulta |
| `web/ajuste_ponto.php` + `_save.php` + `_swap.php` | Tratamento RH (UPDATE/INSERT/DELETE) |
| `web/detalhes_do_ponto.php`, `espelho_ponto_print.php` | Espelho + CSV/impressão |
| `web/facial.php`, `facial_poll_events.php` | Integração Control-iD |
| Control-iD `ControlIdAccessEvents` | Importação facial → INSERT |

**Ausentes:** exportação AFD/AEJ, comprovante por batida, endpoints NSR, validação de cadeia.

---

## 2. Matriz de conformidade (requisitos 1–30)

Legenda: **C** conforme · **PC** parcial · **NC** não conforme · **I** inexistente · **EXT** dependente externo/config/certificado.

### 2.1 Separação REP-P × PTRP (req. 1)

| Item | Situação | Evidência | Status | Ação recomendada | Risco | DB? | Cert.? | Ext.? |
|------|----------|-----------|--------|------------------|-------|-----|--------|-------|
| Separação lógica original × tratado | Mesma tabela `time_punches`; RH altera a linha | `ajuste_ponto_save.php` UPDATE/DELETE | **NC** | Store imutável REP-P + tratamentos PTRP vinculados | Alto | Sim | Não | Não |
| PTRP gera espelho/cálculos | Espelho + ocorrências + regras | `EspelhoPontoService`, gestor mensal | **PC** | Manter espelho; não usar como fonte AFD | Médio | Não | Não | Não |

### 2.2 Imutabilidade (req. 2)

| Item | Situação | Evidência | Status | Ação | Risco | DB | Cert | Ext |
|------|----------|-----------|--------|------|-------|----|------|-----|
| Marcação original imutável | UPDATE `event_at`, DELETE físico | `ajuste_ponto_save.php` | **NC** | Proibir UPDATE/DELETE de originais; tratamentos append-only | Alto | Sim | Não | Não |
| Tratamento separado com trilha | Só `time_punch_edits` parcial | schema 02 | **PC** | Modelo de tratamento completo | Médio | Sim | Não | Não |

### 2.3 NSR (req. 3)

| Item | Situação | Evidência | Status | Ação | Risco | DB | Cert | Ext |
|------|----------|-----------|--------|------|-------|----|------|-----|
| NSR numérico por estabelecimento | Inexistente; usa `id` global | busca sem matches NSR | **I** | Sequence atômica por estabelecimento (CNPJ/CPF) | Alto | Sim | Não | Cadastro estabelecimento |
| Históricos sem NSR | Todos os registros atuais | `time_punches` | **EXT** | **Não** preencher NSR retroativo sem estratégia formal | Alto se inventar | Relatório | Não | Definição jurídica |

### 2.4 Registro tipo 7 / coletor / on-off (req. 4, 8)

| Item | Situação | Status | Ação |
|------|----------|--------|------|
| Campos tipo 7 AFD | Ausentes (NSR, gravação, coletor 01–05, on/off, hash) | **I** | Schema REP-P + mapeamento coletores |
| `event_at` vs horário gravação | Só `event_at` (+ `created_at` implícito) | **PC** | Separar marcação × gravação |
| Off-line app | Sem fila de ponto off-line | **I** | Avaliar produto; se ofertar, sync idempotente |
| Facial Control-iD | Importação online da nuvem | **PC** como coletor 04 | Mapear device → coletor |

### 2.5 Hash SHA-256 encadeado (req. 5)

| Item | Status | Evidência |
|------|--------|-----------|
| SHA-256 tipo 7 + hash anterior | **I** | SHA-256 só em PDF/docs/jitter espelho emergencial |

### 2.6 CRC-16 AFD (req. 6)

| Item | Status |
|------|--------|
| CRC-16 CCITT-TRUE / KERMIT (`123456789` → `2189`) | **I** |

### 2.7 Data/hora/fuso (req. 7)

| Item | Situação | Status |
|------|----------|--------|
| America/Sao_Paulo no app/facial | Usado | **PC** |
| Formato oficial AFD `AAAA-MM-DDThh:mm:00-0300` | Não padronizado para exportação | **I** |

### 2.8 Eventos sensíveis (req. 9)

| Item | Status |
|------|--------|
| Log imutável energia/indisponibilidade REP-P | **I** |

### 2.9 Proibições no registro (req. 10) — ponto crítico

| Item | Situação encontrada | Status | Observação |
|------|---------------------|--------|------------|
| Bloqueio por tolerância de horário | `PunchToleranceValidator` rejeita batida fora da janela | **NC** (risco normativo) | Tentativa pode falhar sem registro original preservado |
| Bloqueio por método (facial/QR) | `app_punch_registration_method` | **PC** | Mapear impacto jurídico |
| GPS obrigatório / accuracy | Rejeita se GPS ruim | **PC/EXT** | Evidência ≠ restrição ilegal |
| Edição gestor no original | `ajuste_ponto_save` UPDATE | **NC** | Deve virar tratamento |
| "Completar mês" a partir do turno | Gera batidas manuais | **NC** se confundido com original | Identificar como inclusão PTRP |

**Ação:** **não remover bloqueios de imediato** sem mapeamento de impacto; planejar registro de tentativa + feature flag jurídica.

### 2.10 Comprovante (req. 11)

| Item | Status |
|------|--------|
| Comprovante após cada batida / extrato 48h | **I** |

### 2.11 PDF PAdES (req. 12)

| Item | Status | Evidência |
|------|--------|-----------|
| Comprovante PDF PAdES ICP-Brasil | **I** | Signer atual = docs/holerite, não PAdES de ponto |

### 2.12 AFD + CAdES (req. 13–14)

| Item | Status |
|------|--------|
| Geração AFD / validador / `.p7s` | **I** |

### 2.13 INPI (req. 15)

| Item | Status | Ext |
|------|--------|-----|
| Config número INPI + bloqueio export oficial | **I** | **Sim** — registro administrativo externo |

### 2.14 PTRP — tratamentos (req. 16–17)

| Item | Situação | Status |
|------|----------|--------|
| Inclusão manual | INSERT `source=manual` / `RH_AJUSTE` | **PC** |
| Desconsideração mantendo original | DELETE remove linha | **NC** |
| Pré-assinalação intervalo legal | Não encontrada | **I** |
| Ocorrências/ausências | Domínio separado no espelho | **PC** |

### 2.15 AEJ + assinatura (req. 18–19)

| Item | Status |
|------|--------|
| Geração AEJ (Anexo VI) + CAdES | **I** |

### 2.16 Espelho (req. 20)

| Item | Situação | Status |
|------|----------|--------|
| Espelho eletrônico | Existe (web/app/print/CSV) | **PC** |
| Legenda origem legal + coerência AEJ | Ausente / AEJ inexistente | **NC/I** |

Arquivos: `EspelhoPontoService.php`, `detalhes_do_ponto.php`, `espelho_ponto_print.php`, app `espelho_ponto.html`.

### 2.17 Atestado Técnico Anexo VII (req. 21)

| Item | Status | Ext |
|------|--------|-----|
| Módulo atestado | **I** | Assinatura PF responsável legal + técnico |

### 2.18 Auditoria / segurança / ACL / multi-tenant / LGPD (req. 22–26)

| Item | Situação | Status |
|------|----------|--------|
| Trilha imutável completa | Parcial (`time_punch_edits`, Control-iD, aceite 373) | **PC** |
| Certificados ponto | Inexistentes | **I** + **EXT** |
| ACL geração AFD | N/A | **I** |
| Isolamento tenant | Presente em queries | **PC** |
| LGPD biometria/foto/GPS | Dados sensíveis; retenção pouco documentada | **PC** + **EXT** |

### 2.19 Painel / testes / validador / migrations (req. 27–30)

| Item | Status |
|------|--------|
| Painel conformidade / testes NSR-hash-AFD / CLI validador / migrations REP-P | **I** |

---

## 3. O que já existe e deve ser **preservado**

1. Batida app (`punch_button_register`) — GPS, canal, foto, cadeia operacional.  
2. Virada/turno noturno (`PunchWorkDateResolver`) e `config_regras_ponto`.  
3. Espelho operacional e impressão A4.  
4. Facial Control-iD (seleção, importação, intervalos).  
5. Multi-tenant; documentos/holerite assinados (escopo distinto).  
6. Ocorrências RH e gestor mensal (insumos PTRP futuro).  
7. Aceite Portaria 373 no desligamento do espelho do app.

---

## 4. Lacunas críticas (prioridade)

| Prioridade | Lacuna | Dependência |
|------------|--------|-------------|
| P0 | Store imutável + NSR + hash encadeado | DB + desenho |
| P0 | Cessar sobrescrita/DELETE de originais | Mudança fluxo RH |
| P0 | Revisar bloqueios de marcação (tolerância) | Definição jurídica |
| P1 | Comprovante + PAdES | Certificado ICP-Brasil |
| P1 | AFD + `.p7s` | INPI + certificado |
| P1 | Tratamentos PTRP + AEJ + `.p7s` | Certificado PTRP |
| P2 | Espelho com legendas legais; painel; testes; CLI | — |
| P2 | Atestado Anexo VII | Assinaturas PF |
| EXT | Número INPI; certificados produção | Externos |

---

## 5. Históricos sem NSR

**Situação:** 100% das batidas em `time_punches` **não possuem NSR**.

**Recomendação:** não atribuir NSR retroativo automaticamente; inventariar; cutover a partir de data D com laudo jurídico; documentar em plano de migração (Fase 6).

---

## 6. Riscos de alteração prematura

- Gerar AFD a partir do espelho/ajustes → arquivo inválido.  
- Preencher NSR/hash retroativo → cadeia falsa.  
- Remover tolerâncias sem alternativa → quebra operação.  
- Mudar API do app sem versão → quebra app.  
- Colocar `.pfx`/senha no repositório → incidente.  
- Declarar "100% conforme" só com código → risco jurídico.

---

## 7. Próximas etapas (sem implementar ainda)

1. **Fase 3 — Projeto técnico mínimo** (schema paralelo, feature flag, cutover).  
2. **Fase 4 — Implementação segura.**  
3. **Fase 5 — Validação** (CRC `2189`, cadeia, AFD/AEJ teste).  
4. **Fase 6 — Documentação** complementar.

Ainda **não** criados (aguardam Fase 3+):  
`docs/arquitetura-rep-p-ptrp.md`, `docs/afd.md`, `docs/aej.md`, `docs/assinaturas-digitais.md`, `docs/configuracao-inpi.md`, `docs/atestado-tecnico.md`, `docs/plano-de-migracao.md`, `docs/checklist-producao.md`.

---

## 8. Tabela-resumo da auditoria

| Requisito | Situação inicial | Evidência principal | Alteração nesta fase | Situação final (agora) | Dependência externa |
|-----------|------------------|---------------------|----------------------|------------------------|---------------------|
| Separação REP-P/PTRP | NC | `time_punches` + ajuste | Nenhuma | NC | — |
| Imutabilidade | NC | UPDATE/DELETE | Nenhuma | NC | — |
| NSR | I | — | Nenhuma | I | Estabelecimento |
| Tipo 7 / coletor | I/PC | APIs + Control-iD | Nenhuma | I/PC | — |
| Hash SHA-256 | I | — | Nenhuma | I | — |
| CRC-16 | I | — | Nenhuma | I | — |
| Fuso oficial | PC | SP timezone | Nenhuma | PC | — |
| Off-line | I | — | Nenhuma | I | Produto |
| Eventos sensíveis | I | — | Nenhuma | I | Infra |
| Proibições/bloqueios | NC/PC | PunchToleranceValidator | Nenhuma | NC/PC | Jurídico |
| Comprovante | I | — | Nenhuma | I | — |
| PAdES | I | — | Nenhuma | I | ICP-Brasil |
| AFD + p7s | I | — | Nenhuma | I | INPI + cert |
| INPI | I | — | Nenhuma | EXT | **INPI** |
| PTRP tratamentos | PC/NC | ajuste | Nenhuma | PC/NC | — |
| Pré-assinalação | I | — | Nenhuma | I | Config |
| AEJ + p7s | I | — | Nenhuma | I | Cert PTRP |
| Espelho | PC | EspelhoPontoService | Nenhuma | PC | — |
| Atestado VII | I | — | Nenhuma | EXT | Assinaturas PF |
| Auditoria | PC | time_punch_edits | Nenhuma | PC | — |
| Certificados ponto | I | — | Nenhuma | EXT | Secret mgr |
| ACL / multi-tenant | PC | tenants | Nenhuma | PC | — |
| LGPD | PC | fotos/GPS | Nenhuma | PC/EXT | DPO |
| Painel/testes/CLI | I | — | Nenhuma | I | — |

---

## 9. Declarações finais

- **Não** se declara conformidade jurídica total com base nesta análise de código.  
- **Não** se inventou número de INPI nem certificado.  
- **Não** foram feitas alterações destrutivas no código nesta etapa.  
- O produto atual permanece operacional como **gestão de ponto**; a adequação REP-P/PTRP é **projeto de conformidade**.

---

*Fim da auditoria Fase 1–2. Aguardando autorização explícita para a Fase 3 (projeto técnico mínimo) antes de qualquer migration ou módulo novo.*


---

## Apêndice — Fase 3 (projeto técnico) — 29/07/2026

Documentos publicados (sem alteração de código de produção):

| Documento | Caminho |
|-----------|---------|
| Arquitetura REP-P/PTRP | `docs/arquitetura-rep-p-ptrp.md` |
| Spec AFD | `docs/afd.md` |
| Spec AEJ | `docs/aej.md` |
| Assinaturas digitais | `docs/assinaturas-digitais.md` |
| INPI | `docs/configuracao-inpi.md` |
| Atestado Técnico | `docs/atestado-tecnico.md` |
| Plano de migração | `docs/plano-de-migracao.md` |
| Checklist produção | `docs/checklist-producao.md` |

**Decisões de desenho fixadas:** store paralelo imutável; NSR por `tenant_companies`; dual-write sob flag; sem NSR retroativo; AFD só do REP-P; PAdES/CAdES novos (não reutilizar HMAC do holerite).

**Status:** Fase 3 concluída. Aguardando autorização explícita para **Fase 4** (migrations + NSR/hash/CRC + dual-write piloto).
