Menuabrir
MVPAtualizado em 14 de mai. de 2026, 00:06

Este módulo depende de

1
  • surveysConsome biblioteca compartilhada (survey_instrument, survey_item, survey_dimension) para instrumentos psicométricos

Módulos que dependem deste

0

Nenhum módulo depende deste hoje.

NR-01

Status: 🔵 MVP (módulo PRIVADO Mais Consciente, primeiro projeto Colorado) Code: backend/app/modules/nr01 UI: frontend/src/app/(public)/r/nr01 (link público) + admin Última revisão deste doc: 2026-05-13 por Felipe + Claude Dependências fortes: surveys (biblioteca de instrumentos)


1. Identidade

O que faz (uma frase)

Protocolo de pesquisa NR-01 (Norma Regulamentadora 1 — saúde mental no trabalho) com coleta completamente anônima via session_token client-side, SEM PII no schema (defesa em profundidade), escores dimensionais via instrumentos psicométricos validados, e descarte programado pós-análise.

Por que existe (negócio)

NR-01 é norma brasileira que obriga empresas a avaliarem riscos psicossociais. Felipe é consultor NR-01 (memória [[nr01-consultoria]]) e usa Mais Consciente como módulo PRIVADO pra atender clientes (memória [[nr01-modulo-privado-maisconsciente]]).

Sem este módulo:

  • Pesquisa anônima exigiria Google Forms/Typeform → vazamento PII inevitável.
  • Sem licença pra usar instrumentos validados (COPSOQ, CBI, etc.).
  • Compliance NR-01 manual.

Com NR-01:

  • Anti-PII radical: schema + trigger DB juntos rejeitam qualquer email/IP/member_id.
  • Biblioteca compartilhada: consome instrumentos da surveys (catálogo global).
  • Retention policy: descarte automático de answers após X dias, mantém scores agregados.
  • Cliente Colorado (memória [[nr01-colorado]]) é primeiro projeto.

Status atual

  • MVP em prod, primeiro projeto Colorado pré-implementação (memória [[nr01-estado-2026-05-11]]).
  • Modo aprendizado (memória [[nr01-modo-aprendizado]]) — sem cobrança, com amigo.

Próxima mudança: Sprint 4 (scoring final + dashboard agregado anti-reID).


2. Cases de uso reais

Case 1: Funcionário Colorado responde

  1. Recebe link app.mandir.com.br/r/nr01/colorado-q2-2026.
  2. Tela de consentimento → click "concordo" → POST /consent (log SEM PII).
  3. UUID gerado no client → POST /session cria nr01_session(session_token)sem email/IP/member_id.
  4. Carrega GET /items → questões da biblioteca COPSOQ.
  5. Responde POST /answer por item.
  6. Demographic POST /demographic (unit, area, tenure_band).
  7. Anti-reID check POST /demographic/check → preview se sua célula tem n≥5.
  8. POST /submit → finaliza → nr01_dimension_score calculado.

Case 2: Descarte automático

Beat (futuro) lê nr01_retention_policy.discard_after_days → após data, deleta nr01_answer + nr01_demographic_answer → mantém apenas nr01_dimension_score (agregado anônimo).


3. Oportunidades de negócio

  • NR-01 as a service completo pra empresas brasileiras.
  • Conformidade auditável — log de consentimentos sem PII = LGPD compliance defensável.
  • Insights anti-reID — analytics agregada que nunca expõe indivíduo.

Riscos: instrumentos sob licença acadêmica (memória [[nr01-modo-aprendizado]] — modo aprendizado OK; pra venda comercial, licenciar formal).


4. Arquitetura interna

Arquivos


5. Tabelas (8)

nr01_project

ColunaNotas
slug / nome / client_name
statusdraft / active / paused / closed / archived
base_instrument_idReferência catálogo surveys.survey_instrument
lgpd_*Controller + legal_basis

nr01_session

SEM PII (defesa radical).

ColunaNotas
session_tokenUUID gerado client-side. Trigger DB rejeita NULL.
statusin_progress / submitted / abandoned
NÃO email / name / ip / member_idDefesa anti-PII

nr01_answer

ColunaNotas
session_token
survey_item_idFK lógica → survey_item (cross-module)
survey_dimension_idFK lógica → survey_dimension
item_text_snapshotPreserva variant no tempo
response_time_msArredondado

nr01_demographic_config

unit, area, tenure_band, role_level. anti_reid_min_n=5.

nr01_demographic_answer

Resposta demográfica separada (agregação anônima).

SEM PII — apenas timestamp + term_version + session_token.

nr01_dimension_score

ColunaNotas
session_token
instrument_id / dimension_idCross-module refs
raw_score / normalized_score (0-100)
threshold_zonegreen / yellow / red

nr01_retention_policy

Retenção X dias, descarte automático.

Relacionamentos cross-módulo

DireçãoOutro móduloComo
↗ LêsurveysLibraryAdapter.validate_item() cross-module

6. API / Endpoints

Admin (1)

MétodoRotaO que faz
GET/api/nr01/projectsLista projetos

Público (7)

MétodoRotaO que faz
GET/r/nr01/{slug}/metadataInfo projeto + consentimento
POST/r/nr01/{slug}/consentLog LGPD (SEM PII)
POST/r/nr01/{slug}/sessionCriar/retomar sessão
GET/r/nr01/{slug}/itemsQuestões da sessão
POST/r/nr01/{slug}/answerResposta individual
POST/r/nr01/{slug}/demographicDemográfico
POST/r/nr01/{slug}/demographic/checkPreview anti-reID
POST/r/nr01/{slug}/submitFinalizar

7. Configuração

Env vars

VarPropósito
NR01_TENANT_WHITELISTLista de tenants autorizados (módulo privado Mais Consciente)

Cada projeto tem lgpd_controller + legal_basis próprios.


8. Operações + Troubleshooting

Sintoma: POST /session retorna 422

Causa: session_token não enviado em header. Fix: Frontend gera UUID e envia em X-Session-Token header.

Sintoma: Cross-module item não encontrado

Causa: Instrumento não existe em survey_instrument do tenant root. Fix: Importar instrumento via surveys admin.


9. Limitações e débitos técnicos

#Item
1Modo aprendizado — sem cobrança formal
2Instrumentos sob licença acadêmica
3Descarte automático — beat task TBD
4Sem dashboard agregado anti-reID
5Defesa anti-PII = trigger DB hard-fail

10. Histórico

  • 2026-05-11 — Sprint 3 entregue + COPSOQ-PT médio 76/76 populado. Memória [[nr01-estado-2026-05-11]].
  • Pré-implementação Colorado: aguardando 1ª reunião. Memória [[nr01-colorado]].
  • Modo privado Mais Consciente, oculto de outros tenants. Memória [[nr01-modulo-privado-maisconsciente]].
  • Parceria Vivian Dantas (médica do trabalho/psiquiatra).