v0.12.0 — Match Engine 2.0¶
Status¶
Implementado em 2026-06-21.
A v0.12.0 adiciona uma engine determinística para comparar currículo, vaga e evidências profissionais sem depender apenas de keyword matching. A IA continua opcional e consultiva: ela pode classificar, interpretar e explicar, mas o score final é calculado pelo código.
Problema resolvido¶
O matching simples por palavras falha quando:
- a vaga é de área não técnica;
- o requisito é registro profissional;
- a vaga mistura obrigatório, desejável e opcional;
- a competência é transferível, mas não direta;
- o currículo tem evidências em GitHub, portfolio, memória ou perfil;
- a senioridade, domínio ou formação mudam o risco da candidatura;
- o requisito é norma, software, equipamento, ambiente ou credencial.
Módulos implementados¶
modules/matching/
__init__.py
models.py
exceptions.py
requirement_matcher.py
evidence_matcher.py
transferable_skills.py
score_calculator.py
risk_adjustment.py
confidence.py
explanation_builder.py
engine.py
Fluxo¶
ResumeExtractionOutput
+ JobExtractionOutput
+ GitHubAnalyzerReport opcional
+ ProjectAnalysisReport opcional
+ memory/profile opcional
-> requirements_from_job_extraction
-> collect_resume/github/portfolio/text_evidence
-> match_requirements
-> find_transferable_skills
-> build_critical_gaps
-> calculate_match_scores
-> build_match_explanation
-> MatchResultV2
O analyzer antigo permanece disponível. O novo caminho analyze_job_v2 usa Match Engine 2.0 e cai
para analyze_job se a engine falhar.
Modelos principais¶
MatchRequirement;CandidateEvidence;RequirementMatch;CriticalGap;TransferableSkillMatch;MatchScoreBreakdown;MatchExplanation;MatchResultV2;ProfessionalRegistrationInput.
Categorias e status¶
Categorias aceitas pela engine:
education
hard_skill
soft_skill
tool
software
equipment
certification
professional_license
professional_registration
language
experience
methodology
regulation
responsibility
availability
location
portfolio
domain_knowledge
other
Status de requisito:
matched
partial
missing
unclear
not_applicable
Competências transferíveis são explicadas em lista própria e não viram match direto.
Score calculado por código¶
Pesos da v0.12.0:
| Dimensão | Peso |
|---|---|
| Requisitos obrigatórios | 30% |
| Requisitos desejáveis | 15% |
| Aderência de domínio | 10% |
| Senioridade | 10% |
| Formação, certificações e registros | 10% |
| Força das evidências | 10% |
| Evidências GitHub/portfolio | 5% |
| ATS keyword alignment | 5% |
| Preferências/logística | 5% |
Depois do cálculo base, risk_adjustment aplica penalidade. Um gap knockout real limita o score, e
registro profissional obrigatório ausente limita ainda mais.
Scores emitidos:
match_score;ats_alignment_score;opportunity_fit_score;evidence_score;risk_score;confidence_score;overall_score.
Registros profissionais¶
O catálogo inicial classifica:
- CRM, CRO, CRF, COREN, CREFITO, CRN, CRMV, CRP, CREF e CRTR;
- CREA, CAU, CFT, CRT e CRQ;
- OAB, CRC, CRA, CORECON, CRB, CRESS, CONRERP e CRECI;
- CRBio;
- MTE/DRT como
professional_registration.
Regras:
- registro obrigatório vira
criticality = knockout; - registro desejável vira
criticality = medium; - registro obrigatório ausente vira gap knockout;
- a engine não sugere inventar credencial;
- a opção
Outro conselho / Outro registro profissionalé aceita para cadastro ou revisão manual.
Exemplo de safe action:
A vaga exige CREA. Como o currículo não mostra esse registro, isso deve ser tratado como gap
crítico. Se você possui CREA ativo, destaque no currículo; caso contrário, a vaga pode não ser
compatível.
Evidências¶
Fontes aceitas:
resume;github;portfolio;memory;profile;manual;none.
Força da evidência:
weak;medium;strong;verified;unclear.
GitHub Analyzer 2.0 contribui quando disponível, especialmente para stacks, frameworks, arquivos amostrados, skills demonstradas e evidence score.
Competências transferíveis¶
A v0.12.0 inclui regras iniciais para:
- professor;
- enfermagem;
- psicologia;
- engenharia civil;
- arquitetura;
- manutenção;
- cybersecurity.
Transferível ajuda a explicar compatibilidade parcial, mas não compensa registro profissional, diploma obrigatório ou experiência direta quando a vaga exige explicitamente.
Explicação¶
MatchExplanation inclui:
- resumo do match;
- motivos do score;
- requisitos atendidos;
- requisitos parcialmente atendidos;
- requisitos ausentes;
- gaps críticos;
- competências transferíveis;
- evidências usadas;
- safe actions;
- melhorias de currículo;
- melhorias de GitHub/portfolio.
Testes e fixtures¶
Criados:
tests/test_match_engine_v2.py;tests/test_requirement_matcher.py;tests/test_evidence_matcher.py;tests/test_transferable_skills.py;tests/test_match_score_calculator.py;tests/test_match_explanation_builder.py;tests/test_match_confidence.py;tests/test_match_risk_adjustment.py;tests/fixtures/matching/*.
As fixtures cobrem backend, enfermagem, pedagogia, psicologia, engenharia civil, arquitetura, cybersecurity e evidências GitHub/portfolio.
Limites conhecidos¶
- A integração profunda com ATS e Resume Tailor ficou preparada por contratos e prompts, mas pode evoluir em versões posteriores.
- Pesos por domínio foram adicionados na v1.0.0 como configuração simples em
modules/matching/domain_weights.py. - A UI ainda pode exibir o resultado v2 de forma mais rica em versão futura.
- A lista de registros profissionais é catálogo inicial, não validação jurídica definitiva.
Critério de pronto¶
A v0.12.0 foi considerada pronta porque:
- o score não depende apenas de keywords;
- requisitos são normalizados e classificados;
- gaps críticos travam score quando necessário;
- registros profissionais sensíveis são tratados com linguagem segura;
- competências transferíveis aparecem separadas de match direto;
- evidências de currículo, GitHub, portfolio, memória e perfil entram no cálculo;
- confidence é separado de score;
- exemplos multiárea têm cobertura automatizada;
- o matching antigo permanece como fallback.