Skip to content

feat: Fase 1 MVP — Cadastro, QR Code, Ocorrências e Dashboard#4

Merged
sthevan027 merged 3 commits into
mainfrom
claude/understand-project-docs-ORU8O
Apr 27, 2026
Merged

feat: Fase 1 MVP — Cadastro, QR Code, Ocorrências e Dashboard#4
sthevan027 merged 3 commits into
mainfrom
claude/understand-project-docs-ORU8O

Conversation

@sthevan027
Copy link
Copy Markdown
Owner

$(cat <<'EOF'

Resumo

Implementação completa da Fase 1 — MVP do SRCM conforme roadmap documentado em docs/roadmap.md.

O que foi implementado

Fundação

  • Tipos TypeScript (src/lib/types.ts) — todas as entidades: Material, Local, QRCode, Ocorrencia, Usuario, HistoricoOcorrencia
  • Camada de storage (src/lib/storage.ts) — CRUD genérico sobre localStorage
  • Geração de QR Code (src/lib/qr.ts) — usa biblioteca qrcode para gerar data URL
  • Seed inicial (src/lib/seed.ts) — 2 locais, 2 materiais, 2 QR Codes e usuário admin na primeira carga

Stores reativos (SolidJS signals + localStorage)

  • auth.store.ts — login/logout com persistência de sessão
  • materiais.store.ts — CRUD de materiais
  • locais.store.ts — CRUD de locais
  • qrcodes.store.ts — criação automática e inativação de QR Codes
  • ocorrencias.store.ts — registro, atualização de status e histórico de tratativas

Rotas públicas

  • / — Landing page com cards de funcionalidades
  • /login — Autenticação com e-mail e senha
  • /qr/:codigoPágina de campo leve: exibe todos os dados do material (identificação, fabricação, pintura, responsáveis) + formulário de ocorrência com 3 categorias (Não Conformidade / Aviso / Melhoria)

Área administrativa (protegida por auth)

  • /admin/dashboard — Indicadores (materiais, QRs ativos, ocorrências por status) + tabela de ocorrências recentes
  • /admin/materiais — Listagem + formulário completo de cadastro (gera QR automaticamente)
  • /admin/locais — Listagem + formulário de cadastro
  • /admin/qrcodes — Listagem com imagem do QR renderizada, link para página de campo, inativação
  • /admin/ocorrencias — Listagem com filtros por tipo/status + painel de tratativa com histórico
  • /admin/usuarios — Listagem de usuários do sistema

Layout e componentes

  • AdminLayout — sidebar de navegação com link ativo, info do usuário logado, botão de logout
  • Badge — componentes de badge para tipo de ocorrência (vermelho/amarelo/verde) e status

Credenciais padrão

  • E-mail: admin@srcm.com
  • Senha: admin123

Verificações

  • pnpm run typecheck — sem erros
  • pnpm run lint — sem erros ou warnings
  • pnpm run build — build de produção OK (103 kB gzip: 35 kB)

Próximos passos (Fase 2)

  • Filtros avançados no dashboard
  • Histórico completo de tratativas
  • Refinamento de perfis e permissões
  • Visões específicas por ambiente

https://claude.ai/code/session_01Lqxw22g3Qc7SPJhy5YfVYP
EOF
)


Generated by Claude Code

claude added 2 commits April 27, 2026 16:00
- Cadastro de locais e materiais com formulários completos
- Geração automática de QR Code único ao salvar material (biblioteca qrcode)
- Página pública /qr/:codigo com todos os dados do material (leve, mobile-first)
- Formulário de ocorrência em campo (Não Conformidade / Aviso / Melhoria)
- Dashboard operacional com indicadores e lista de ocorrências recentes
- Gestão de ocorrências com filtros por tipo/status e atualização de tratativa
- Autenticação via login protegendo rotas administrativas
- Layout admin com sidebar de navegação
- Stores reativos com persistência em localStorage
- Seed de dados iniciais (2 locais, 2 materiais, 2 QR Codes, usuário admin)
- Typecheck, lint e build limpos

https://claude.ai/code/session_01Lqxw22g3Qc7SPJhy5YfVYP
…n test

Home.test.tsx: componentes com <A> precisam de contexto Router; envolve
render() com <Router><Route path="/*" component={Home} /></Router>.

Admin.test.tsx: admin.tsx virou redirect, o teste estava testando componente
que não existe mais; migrado para AdminDashboard com asserções adequadas ao
novo painel (heading "Dashboard", labels de indicadores).

https://claude.ai/code/session_01Lqxw22g3Qc7SPJhy5YfVYP
@sthevan027 sthevan027 marked this pull request as ready for review April 27, 2026 16:07
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a314932962

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/main.tsx Outdated
import { seedIfNeeded } from './lib/seed';

render(() => <App />, document.getElementById("app")!);
seedIfNeeded();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Seed data before initializing reactive stores

Calling seedIfNeeded() here runs after App has already been imported, and that import eagerly loads route/store modules that initialize signals from localStorage at module scope. On a first run with empty storage, the seed is written only after those signals are created, so dashboards/tables start empty until a full page reload or an explicit refresh function runs.

Useful? React with 👍 / 👎.

Comment thread src/stores/qrcodes.store.ts Outdated
}

export function getQRByCodigo(codigo: string): QRCodeItem | undefined {
return qrcodes().find((qr) => qr.codigo_qr === codigo);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Exclude inactive QR codes from public lookup

This lookup ignores status_qr, but /qr/:codigo depends on it to show material data and submit new occurrences. That means a QR marked as inativo in admin can still be accessed publicly and continue generating occurrences, which makes the inactivation action ineffective for field operations.

Useful? React with 👍 / 👎.

P1 — seed antes das stores: seedIfNeeded() agora é side-effect em seed.ts e
o import em main.tsx é o primeiro estático, garantindo que o localStorage
esteja populado antes de qualquer store inicializar seus signals.

P2 — QR inativo inacessível publicamente: getQRByCodigo filtra por
status_qr === 'ativo', impedindo que códigos inativados continuem gerando
ocorrências via página de campo.

https://claude.ai/code/session_01Lqxw22g3Qc7SPJhy5YfVYP
@sthevan027 sthevan027 merged commit 6c72f80 into main Apr 27, 2026
3 checks passed
@sthevan027 sthevan027 deleted the claude/understand-project-docs-ORU8O branch April 27, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants