Case 02Operações e SST

Kippis

Segurança do trabalho no bolso de quem está na obra.

Plataforma de SST que leva APR, permissão de trabalho, inspeção e advertência para o celular do técnico e liga tudo a colaboradores, cargos, NRs, exames e EPIs. Toda madrugada, cinco rotinas varrem os prazos legais de cada empresa e avisam o responsável certo antes do vencimento e de novo no dia, antes do turno começar.

Cliente
Construtora de grande porte
Período
2025 — 2026
Equipe
Squad de 4 pessoas
Papel
Engenheiro full stack · líder do app mobile e das regras de SST
Stack
Go · Fiber · PostgreSQL · Expo · React Native · TypeScript
Confidencialidade
Dados de clientes preservados
02

Resultados em números

  • 5prazos legais vigiados toda madrugadatreinamento, CA, vida útil de EPI, ASO periódico e ativos
  • 180endpoints na API multiempresa27 módulos de API, de RH e saúde a estoque e comunicação
  • 2.500colaboradores acompanhadospróprios e terceiros, em várias frentes de obra
  • 42condições de insalubridade e periculosidade mapeadas24 da NR-15 e 18 da NR-16, com o percentual de adicional de cada cargo
03

O contexto do negócio

Cliente
Construtora de grande porte
Período
2025 — 2026

Numa construtora de grande porte, segurança do trabalho é exigência legal e risco de vida ao mesmo tempo. Cada frente de obra reúne equipes próprias e terceiras; cada cargo carrega NRs, exames do PCMSO, EPIs com CA válido e adicionais de insalubridade ou periculosidade. Toda atividade crítica começa com uma APR e uma permissão assinada. Quando esse controle vive em papel, planilha e grupo de mensagem, o treinamento vencido aparece na fiscalização, na auditoria ou, no pior caso, depois do acidente.

04

O desafio

O registro precisava acontecer no canteiro, em minutos, com a assinatura de quem vai executar o serviço. RH, saúde ocupacional, segurança e almoxarifado precisavam enxergar o mesmo colaborador sem misturar dados entre empresas. E prazos de naturezas diferentes — certificado de treinamento, CA do EPI, vida útil de cada unidade, ASO periódico e ativos — tinham de virar avisos para a pessoa certa, na hora certa e sem repetição, sem soterrar o técnico de segurança em notificações.

  1. Campo primeiro

    APR com matriz de risco, permissão de trabalho e inspeção preenchidas no celular, etapa por etapa, com assinatura na tela e validação antes do envio. Nenhuma PT pode nascer sem uma APR vinculada.

  2. Cada NR com a sua regra

    NR-35, NR-15, NR-16, NR-06: cada norma exige coisas diferentes de cargos, turmas e permissões. Incluir uma norma nova ou acompanhar uma revisão tinha de ser cadastro, nunca deploy.

  3. Prazos que não podem passar

    Treinamentos, CAs, vida útil de EPI por unidade, ASOs periódicos e ativos vencem em ritmos diferentes — e cada um tem um responsável diferente a ser avisado.

05

O que entreguei

Construí o app de campo em Expo e React Native e estruturei o painel web em React. Por trás, uma API em Go e Fiber, com 180 endpoints em 27 módulos de API e 32 módulos de permissão, isola cada empresa na sessão e trata NRs, exames, EPIs e adicionais como dados ligados ao cargo. Um scheduler em Go roda cinco rotinas por empresa toda madrugada, descobre quem precisa ser avisado e registra cada envio.

  1. App de campo

    APR em cinco etapas com matriz de risco 5 × 4, PT com equipe e assinaturas, inspeção por checklist e advertência com testemunhas e foto.

  2. API multiempresa

    Go e Fiber com empresa vinda da sessão, RBAC em três níveis por módulo e por plataforma, MFA e auditoria em cada alteração.

  3. NRs, cargos e treinamentos

    Catálogo de NRs ligado a turmas e PTs; cada cargo define exames, EPIs e adicionais a partir de 42 condições de insalubridade e periculosidade.

  4. Scheduler de vencimentos

    Cinco rotinas escalonadas entre 3h e 5h, que avisam antes do vencimento e de novo no dia, com destinatário resolvido pela hierarquia e um único aviso por item a cada dia.

06

Como funciona

Siga o trabalho atravessando o sistema, etapa por etapa, ou clique em qualquer componente do quadro para ver o que ele faz.

12 componentes · 13 conexões · 5 camadas

Clique em um componente para ver detalhes←→para navegarPercorra o fluxo abaixo

ENTRADAApp de campoExpo / ReactNativeENTRADAPainel de gestãoReact / ViteSERVIÇOTreinamentos eNRsGoSERVIÇOAPI multiempresaGo / FiberSERVIÇOSST e saúdeGoSERVIÇOEPIs e estoqueGoBANCOCertificados eevidênciasAWS S3BANCOBase operacionalPostgreSQLEXTERNOServiço CA-EPIHTTPSERVIÇOScheduler devencimentosGo / cronFILAAvisosSMTP · inboxSAÍDAPendências eações

arraste para ver o fluxo

Legenda

  • Síncrono
  • Assíncrono
  • Canal seguro
  • Integração externa
Descrição textual do fluxo
  1. De App de campo para API multiempresa — Campo (síncrono).
  2. De Painel de gestão para API multiempresa — Gestão (síncrono).
  3. De API multiempresa para Treinamentos e NRs — Turmas (síncrono).
  4. De API multiempresa para SST e saúde — APR e PT (síncrono).
  5. De API multiempresa para EPIs e estoque — EPIs e ativos (síncrono).
  6. De Treinamentos e NRs para Certificados e evidências — Certificado (síncrono).
  7. De Treinamentos e NRs para Base operacional — Presença (síncrono).
  8. De SST e saúde para Base operacional — Persiste (síncrono).
  9. De EPIs e estoque para Base operacional — Estoque (síncrono).
  10. De EPIs e estoque para Serviço CA-EPI — Consulta CA (integração externa).
  11. De Base operacional para Scheduler de vencimentos — Prazos (assíncrono).
  12. De Scheduler de vencimentos para Avisos — Pendências (assíncrono).
  13. De Avisos para Pendências e ações — Aviso (assíncrono).

Percorra o fluxo

←→trocam de etapa

6 etapas

Do começo ao fim

Escolha uma etapa ou pressione Reproduzir para acompanhar o fluxo inteiro. Enquanto isso, o quadro destaca por onde o trabalho passa.

07

Componentes do sistema

  1. Aplicativo de campo

    O que resolve
    Levar o registro de segurança para o lugar onde o trabalho acontece.
    Como funciona
    São 18 telas em Expo Router. A APR segue cinco etapas — informações, riscos, etapas da atividade, gravidade e assinatura — e cada risco recebe frequência e severidade numa matriz 5 × 4 que devolve prioridade de 1 a 5, com medida de controle administrativa, de EPI ou de engenharia. React Hook Form e Zod barram o envio incompleto. A sessão vive em cookies no SecureStore, e o app só volta ao login quando a API responde SESSION_EXPIRED: um 401 qualquer não derruba um formulário em andamento.

    Expo · React Native · TypeScript · Zod

  2. API multiempresa

    O que resolve
    Fazer RH, saúde ocupacional, segurança e almoxarifado compartilharem contexto sem misturar empresas.
    Como funciona
    O middleware de autenticação tira empresa e usuário da sessão; o de autorização compara o nível exigido pela rota — ver, interagir ou gerenciar — com o do papel naquele módulo e naquela plataforma, com cache de 30 segundos invalidado quando o papel muda. Login com MFA por código, sessão de 1 hora renovada por refresh token de 30 dias e no máximo 5 sessões web por usuário. 68 pontos de auditoria registram quem alterou o quê. São 78 tabelas em 6 schemas: core, hr, health, safety, stock e comms.

    Go · Fiber · PostgreSQL · JWT

  3. NRs, cargos e saúde ocupacional

    O que resolve
    Fazer o sistema se adaptar a cada norma sem reescrever código.
    Como funciona
    Cada NR é um registro com atividade e objetivo; tabelas de ligação conectam a norma às turmas que a cobrem e às PTs que a exigem. O cargo define exames obrigatórios, EPIs exigidos e adicionais: insalubridade da NR-15 em 10, 20 ou 40%, periculosidade da NR-16 em 30% fixo e condições de penosidade. Os ASOs — admissional, periódico, retorno ao trabalho, demissional e PCMSO — registram apto, inapto ou restrito.

    Go · PostgreSQL

  4. Treinamentos e certificados

    O que resolve
    Registrar quem participou, quais NRs a turma cobre e qual evidência foi emitida.
    Como funciona
    Turmas de treinamento ou DDS, do tipo obrigatório, específico ou reciclagem, com instrutor, carga horária, lista de presença e NRs. O backend gera o certificado em PDF A4 sem nenhuma dependência externa — nome, documento, carga horária, instrutor e validade — e o guarda no S3 por turma e participante, pronto para baixar na auditoria.

    Go · PostgreSQL · AWS S3

  5. EPIs, estoque e ativos

    O que resolve
    Saber qual equipamento está com quem, se o CA vale e quando ele precisa ser trocado.
    Como funciona
    O modelo de EPI consulta o número do CA no serviço CA-EPI e guarda a validade. Cada unidade tem número de série, status e data de compra, de onde sai a vida útil em dias, semanas, meses ou anos. Entregas ao colaborador registram a devolução e o estado do item; ferramentas e máquinas têm empréstimo com checklist, intervenção e inventário. Só este módulo responde por 38 endpoints.

    Go · PostgreSQL · CA-EPI

  6. Scheduler de vencimentos

    O que resolve
    Transformar prazos espalhados entre módulos em avisos acionáveis para a pessoa certa.
    Como funciona
    Serviço Go separado da API, com cinco jobs em horários próprios: treinamentos às 3h, CA às 3h30, vida útil de EPI às 4h, ASO periódico às 4h30 e ativos às 5h. Todos reaproveitam um retrato das empresas em cache de 6 horas. Cada job resolve o destinatário — gestor do local da turma, gestor do setor cujos cargos usam aquele EPI, líder direto do colaborador com fallback para o setor e para a empresa — e grava item, destinatários e resultado do envio. Cada prazo gera um aviso antes do vencimento e outro no próprio dia, e a consulta ignora o que já foi avisado no dia.

    Go · robfig/cron · SMTP

  7. Painel de gestão

    O que resolve
    Dar à gestão de SST uma visão administrativa de colaboradores, EPIs, inspeções, treinamentos e permissões.
    Como funciona
    React 19, Vite e Tailwind. O menu nasce da sessão: o backend devolve os caminhos liberados para o papel a partir de um registro de 32 módulos de permissão, então mudar uma rota não exige reescrever perfis. Telas de alerta de CA, vida útil, ASO e treinamentos concentram as pendências, e os mesmos avisos chegam numa caixa de entrada com contador de não lidas.

    React · Vite · TypeScript · Tailwind CSS

08

Decisões que sustentam o sistema

  1. Empresa vem da sessão, nunca do cliente

    O middleware carrega a empresa em cada requisição e toda consulta filtra por ela. Ao criar uma PT, APRs, técnico, trabalhadores e signatários são validados em lote contra a mesma empresa — nenhuma tela consegue misturar dados de outra, mesmo com um parâmetro manipulado.

  2. NR é dado, não código

    A norma é uma linha no catálogo, ligada a turmas, PTs e cargos por tabelas de relação. Atender uma NR nova, uma revisão ou uma exigência específica de obra vira cadastro, e a PT já mostra quais NRs cada trabalhador tem treinadas.

  3. Permissão por módulo, nível e plataforma

    A mesma rota pode exigir permissões diferentes no web e no mobile: criar APR no painel pede um módulo de gestão, no celular pede o módulo de campo. Assim o técnico opera na obra sem ganhar acesso administrativo.

  4. Aviso registrado, não só disparado

    Cada envio grava item, destinatários, origem do responsável e sucesso. Isso impede repetir a mesma notificação no dia e prova, na auditoria, que o responsável foi avisado a tempo.

09

Resultado para o negócio

  • Treinamentos, CAs, EPIs, ASOs e ativos avisam o responsável antes do vencimento e de novo no dia, antes do turno, em vez de aparecerem na auditoria.

  • A emissão de uma permissão de trabalho no canteiro caiu de cerca de 20 minutos em papel para menos de 5 no app.

  • Toda PT nasce vinculada a uma APR avaliada risco a risco, com equipe e signatários validados dentro da mesma empresa.

  • Cada aviso fica registrado com destinatário e resultado do envio: na fiscalização, a prova de que o responsável foi avisado já está pronta.

10

Meu papel

Papel
Engenheiro full stack · líder do app mobile e das regras de SST
Equipe
Squad de 4 pessoas

Planejei e construí o app mobile do zero, da arquitetura de rotas ao tratamento de sessão, e fiz a estruturação real do painel web. Na API, modelei o backend para comportar várias NRs e se adaptar a cada uma: norma, cargo, exame, EPI e adicional viraram dados relacionados, não regras fixas no código. Escrevi a lógica de negócio dos avisos de exames, de vencimento de EPI e de treinamentos, e transformei as exigências do time de SST do cliente em validações de sistema.

Pelo que respondi

  • Construí o app em Expo/React Native: APR, PT, inspeção, advertência, MFA e recuperação de senha em 18 telas.
  • Modelei NRs, cargos, exames, EPIs e adicionais como dados relacionados, para que uma norma nova seja cadastro e não código.
  • Desenhei o RBAC com níveis ver, interagir e gerenciar por módulo, aplicado de forma distinta para web e mobile.
  • Escrevi as cinco rotinas de vencimento e a resolução de destinatários por líder direto, gestor do setor e gestor do local.
  • Integrei o cadastro de EPIs ao serviço CA-EPI e a vida útil de cada unidade ao controle de estoque.
  • Gerei certificados de treinamento em PDF no próprio backend, guardados no S3 por turma e participante.
11

Stack por camada

  • Mobile

    • Expo
    • React Native
    • Expo Router
    • React Query
    • React Hook Form
    • Zod
    • SecureStore
  • Web

    • React
    • Vite
    • TypeScript
    • Tailwind CSS
    • Zustand
  • Backend

    • Go
    • Fiber
    • sqlx
    • JWT
    • TOTP
    • robfig/cron
  • Dados e integrações

    • PostgreSQL
    • Goose
    • AWS S3
    • CA-EPI
    • SMTP
  • Infra

    • Docker
    • Nginx
    • GitHub Actions
12

O que levo deste projeto

  1. Modelar norma, cargo e exigência como dados relacionados desde o início foi o que permitiu acompanhar cada NR sem uma fila de mudanças no código.

  2. Aviso útil é aviso que chega à pessoa certa, na hora certa e sem repetição. Resolver o destinatário pela hierarquia e registrar cada envio fez o técnico confiar no sistema em vez de silenciá-lo.

  3. No campo, sessão expirada precisa ser um estado explícito da interface. Separar SESSION_EXPIRED dos outros 401 evitou formulários perdidos e assinaturas sem dono.

Próximo case 03 LeadSpector De 300 mil CNPJs à abordagem certa, com a IA citando a fonte.

Qual é o próximo sistema que a sua empresa precisa?

Me conte o contexto: um problema, uma ideia ou um sistema que precisa evoluir. Eu respondo com um caminho técnico claro e o primeiro passo para tirar do papel.