Sistema de Record Linkage e Gestão de Dados Médicos
Plataforma de unificação de registros médicos, eliminando duplicatas e garantindo que cada paciente tenha um histórico único, completo e confiável.
No sistema de saúde brasileiro, um mesmo paciente pode ter dezenas de cadastros diferentes espalhados por hospitais, clínicas e unidades de saúde:
| Problema | Impacto |
|---|---|
| Pacientes duplicados | Mesmo paciente com múltiplos cadastros em sistemas diferentes |
| Dados inconsistentes | Nomes escritos de formas diferentes, datas erradas |
| Busca ineficiente | Sem CPF exato, encontrar o paciente pode levar minutos |
| Histórico fragmentado | Médico não consegue ver exames de outras unidades |
| Risco à vida | Alergias não registradas, medicamentos incompatíveis |
O MedBlast utiliza tecnologia proprietária DNA (Digital Numeric Algorithm) para:
- Identificar o mesmo paciente mesmo com dados incompletos ou inconsistentes
- Unificar registros de múltiplas fontes em um cadastro único
- Qualificar dados através de revisão humana assistida
- Disponibilizar histórico consolidado para profissionais autorizados
- Busca Inteligente - Encontra pacientes mesmo com dados parciais (algoritmo fonético + fuzzy)
- Sistema de Revisão - Workflow para analistas aprovarem/rejeitarem matches
- Processamento em Lote - Importação de CSV/Excel com detecção automática de duplicatas
- Dashboard Gerencial - Métricas em tempo real, produtividade e relatórios
- Auditoria Completa - Log de todas ações com timestamp e justificativas
| Categoria | Tecnologia |
|---|---|
| Framework | Nuxt 4, Vue 3.5, TypeScript |
| UI | Tailwind CSS 4, shadcn-vue |
| State | Pinia |
| Validação | Zod, VeeValidate |
| Segurança | nuxt-security, nuxt-csurf, JWT |
| Qualidade | ESLint, Prettier, Husky, Commitlint |
| Testes | Vitest, Playwright |
git clone <repo-url> medblast
cd medblast
npm install
npm run setup # Configura git hooks (Husky)
npm run dev # http://localhost:3000# Desenvolvimento
npm run dev # Servidor dev (http://localhost:3000)
npm run build # Build produção
npm run preview # Preview build
# Qualidade de código
npm run lint # Verificar ESLint
npm run lint:fix # Corrigir ESLint
npm run format # Formatar com Prettier
npm run typecheck # Verificar tipos TypeScript
npm run quality # Rodar todas as verificações
npm run quality:fix # Corrigir lint + formatar
# Testes (Vitest - dois projetos: unit + nuxt)
npm run test # Testes unitários (watch)
npm run test:run # Testes unitários (uma execução)
npm run test:coverage # Com cobertura
npm run test:ui # Interface visual
npm run test:e2e # Testes E2E (Playwright)
npm run test:e2e:install # Instala browsers (primeiro uso)O projeto utiliza ferramentas de qualidade pré-configuradas:
- ESLint - Linting (módulo oficial @nuxt/eslint)
- Prettier - Formatação
- Husky - Git hooks
- Commitlint - Padronização de commits
npm run setup # Configura Husky automaticamentefeat: adiciona nova funcionalidade
fix: corrige bug
docs: atualiza documentação
style: formatação de código
refactor: refatoração
chore: tarefas de manutençãoConfiguração completa para testes:
- Vitest - Testes unitários e de integração
- Playwright - Testes E2E (end-to-end)
- Testing Library - Testes de componentes
# Testes unitários (Vitest)
npm run test # Watch mode
npm run test:run # Executa uma vez
npm run test:coverage # Com cobertura
npm run test:ui # Interface visual
# Testes E2E (Playwright)
npm run test:e2e # Executa testes E2E
npm run test:e2e:ui # Interface visual do Playwright
npm run test:e2e:headed # Executa com browser visível
npm run test:e2e:install # Instala browsers do Playwrighttests/
├── setup.ts # Setup global (mocks do Nuxt)
├── unit/ # Testes unitários
├── integration/ # Testes de integração
└── e2e/ # Testes E2E (Playwright)
└── example.spec.ts
npm run test:e2e:install # Instala browsers necessários
npm run test:e2e # Executa testesVeja mais em tests/CLAUDE.md
Arquitetura layers-only - não existe pasta app/ na raiz. Tudo fica em layers.
medblast/
├── layers/ # TUDO fica aqui
│ ├── 0-base/ # Fundação + UI + sistema de janelas
│ │ ├── app/components/ui/ # Componentes shadcn-vue
│ │ └── app/utils/ # Funções utilitárias
│ ├── 2-home/ # Página inicial (design MX)
│ ├── 3-auth/ # Autenticação (BFF, cookies httpOnly)
│ ├── 4-reviews/ # Curadoria de dados (review de clientes)
│ └── 5-docs/ # Site de documentação
│
├── content/docs/ # Conteúdo markdown (Nuxt Content v3)
├── generated/ # Código gerado pelo Kubb (tipos, schemas)
├── tests/ # Testes (unit, nuxt, e2e)
└── docs/ # Documentação técnica (PRD, segurança)
5-docs > 4-reviews > 3-auth > 2-home > 0-base
Número maior = maior prioridade = sobrescreve layers anteriores.
Crie uma nova layer seguindo a estrutura:
layers/N-feature/
├── nuxt.config.ts
├── app/
│ ├── components/ # FeatureCard.vue, FeatureList.vue
│ ├── composables/ # useFeatureApi.ts, useFeatureStore.ts
│ └── pages/feature/ # Rotas da feature
└── server/api/feature/ # Endpoints REST
Layers em
~/layerssão auto-registradas. Use~/layers/...para caminhos em configs.
npx shadcn-vue@latest add button
npx shadcn-vue@latest add card
npx shadcn-vue@latest add inputComponentes são instalados em layers/0-base/app/components/ui/ e auto-importados.
import { z } from 'zod'
import { toTypedSchema } from '@vee-validate/zod'
const schema = z.object({
email: z.string().email(),
password: z.string().min(6)
})
// No componente
const { handleSubmit } = useForm({
validationSchema: toTypedSchema(schema)
})<script setup>
const colorMode = useColorMode()
const toggleTheme = () => {
colorMode.preference = colorMode.value === 'dark' ? 'light' : 'dark'
}
</script>cp .env.example .envNUXT_API_EXTERNAL_BASE_URL=https://api.d2dna.com
NUXT_SITE_URL=https://tucuxi.d2dna.com
NUXT_SITE_INDEXABLE=trueProprietário - D2DNA © 2026