Obrigado pelo interesse em contribuir. Este guia garante que todos seguem os mesmos padrões de qualidade.
git clone https://github.com/lexagestaojuridica/LexaCore.git
cd LexaCore
npm installgit checkout -b <tipo>/<descricao-curta>Tipos de branch:
feat/— nova funcionalidadefix/— correção de bugdocs/— documentaçãorefactor/— refatoração sem nova funcionalidadetest/— adição ou correção de testeschore/— manutenção, CI/CD, dependências
Exemplos:
feat/add-processo-search
fix/timesheet-calculation-error
docs/update-api-examples
Consulte ARCHITECTURE.md e SPECS.md para detalhes.
- TypeScript
strict: trueobrigatório - Zod para todas as validações
- Testes para toda lógica de negócio nova
- Sem
console.logem produção
git commit -m "<tipo>(<escopo>): <descrição>"Tipos:
feat— nova funcionalidadefix— correção de bugdocs— documentaçãorefactor— refatoraçãotest— testeschore— manutenção
Exemplos:
feat(processos): add search by numero and cliente
fix(timesheet): correct hours calculation on DST change
docs(api): update supabase integration examples
test(auth): add tests for protected routes
# Lint
npm run lint
# Testes
npm run test
# Build
npm run buildTítulo seguindo Conventional Commits.
Template do PR:
## Descrição
<!-- O que esta PR faz? -->
## Motivação
<!-- Por que essa mudança é necessária? -->
## Tipo de mudança
- [ ] Bug fix
- [ ] Nova feature
- [ ] Refatoração
- [ ] Documentação
- [ ] Testes
## Checklist
- [ ] Código segue os padrões do projeto (TypeScript strict, FSD)
- [ ] Testes adicionados/atualizados
- [ ] Lint passando
- [ ] Build passando
- [ ] Documentação atualizada (se necessário)
- [ ] PRD.md / SPECS.md atualizados (se necessário)// ✅ Correto - componente tipado, sem lógica de negócio
interface ProcessoCardProps {
titulo: string;
status: 'ativo' | 'arquivado';
onEdit: (id: string) => void;
}
export function ProcessoCard({ titulo, status, onEdit }: ProcessoCardProps) {
return (
<Card>
<CardHeader>
<CardTitle>{titulo}</CardTitle>
<Badge variant={status === 'ativo' ? 'default' : 'secondary'}>
{status}
</Badge>
</CardHeader>
</Card>
);
}
// ❌ Errado - lógica de negócio dentro de componente UI
export function ProcessoCard() {
const { data } = useQuery(...); // Isso vai em useProcessos hook
// ...
}// ✅ Correto - hook tipado com React Query
export function useProcessos(filtros?: ProcessoFiltros) {
return useQuery({
queryKey: ['processos', filtros],
queryFn: () => processosService.listar(filtros),
staleTime: 5 * 60 * 1000,
});
}// ✅ Correto - Zod schema centralizado em validators/
import { ProcessoSchema } from '@/shared/validators';
const form = useForm<Processo>({
resolver: zodResolver(ProcessoSchema),
});Toda PR requer aprovação de pelo menos um reviewer.
O reviewer verifica:
- Funcionalidade implementada corretamente
- TypeScript sem erros
- Testes cobrem os casos principais
- Sem acoplamento entre features
- Segurança (sem dados sensíveis expostos, RLS respeitado)
- Performance (sem queries N+1, sem re-renders desnecessários)
Consulte DEVELOPMENT.md para setup local ou abra uma Issue.