DEV Community

Caíque Gaspar
Caíque Gaspar

Posted on

Fiz engenharia reversa de sistemas ATS e descobri por que seu currículo nunca passa da triagem automática

ERROR: Unable to parse candidate resume STATUS: REJECTED

Fiz engenharia reversa de sistemas ATS e documentei tudo em 33 páginas — por que seu currículo nunca passa da triagem.

Você aplica pra 50 vagas, tem a stack perfeita, mas recebe silêncio absoluto.

O problema não é seu código.
É o parser que lê seu currículo antes de qualquer humano ver.


O problema

Sistemas como Gupy, Workday, Greenhouse e Lever não leem currículos como pessoas.

Eles fazem parsing do arquivo, extraem entidades (nome, datas, skills) e atribuem um score baseado em densidade de keywords, vetores semânticos e heurísticas estatísticas.

Seu currículo é tratado como um payload que precisa ser perfeitamente interpretado pelo pipeline de triagem.

E a maioria falha silenciosamente.


O que descobri

Passei as últimas semanas estudando como esses sistemas funcionam.
Não li artigos de coach — li código-fonte.

OpenCATS (open source), documentação de APIs, testes com parsers reais, análise de NLP (BERT, Word2Vec), regex patterns e tokenização.

Abaixo estão alguns bugs que eliminam candidatos qualificados sem que eles saibam.


1. UTF-8 BOM quebra parsers silenciosamente

ERROR: Unable to parse candidate resume
TOKEN: undefined

Se você salvou o .docx com BOM (Byte Order Mark), alguns parsers legados simplesmente falham.
Sem erro. Sem log. Sem aviso.

Você nem sabe que foi rejeitado.


2. “React” ≠ “ReactJS” ≠ “React.js”

São três tokens diferentes para sistemas baseados em regex.

Se a vaga pede “React” e você escreveu “ReactJS”, o match pode ser zero em ATS legados.


3. Layout de duas colunas causa text interleaving

O parser lê linha por linha, da esquerda pra direita.

Se você tem sidebar, o texto das colunas é concatenado de forma alternada:

“Desenvolvedor Python Telefone: (11) 99999-9999
com 5 anos Email: dev@example.com de experiência…”

O NLP não entende nada disso.


4. PDF com fontes não embarcadas falha em OCR

Se a fonte não está embarcada, o sistema usa uma fallback.

Resultado: caracteres trocados, texto corrompido e keywords perdidas.


5. A última linha do resumo “vaza” pra experiência

Parsers baseados em regex cortam seções procurando padrões como “Experience” ou “Experiência”.

Se a keyword que você precisa está na transição entre seções, ela pode ser associada ao bloco errado.

Isso se chama context bleed — e pode ser explorado.


6. Metadados vazios no core.xml

O parser lê os metadados do .docx antes do corpo do texto.

Se dc:title, dc:keywords e dc:description estão vazios, você perde peso algorítmico logo na primeira fase.


Stack de análise

Usei parsers open source como OpenCATS (Ruby + regex), ferramentas de NLP como spaCy e NLTK para Named Entity Recognition, embeddings com Word2Vec, análise de tokens, normalização UTF-8 e regex patterns.

As plataformas analisadas incluíram Gupy, Workday e Greenhouse, a partir de documentação pública e comportamento observado.


O que eu fiz

Compilei tudo em um manual técnico de 33 páginas.

Não é curso.
Não é motivacional.
É documentação de engenharia reversa.

O material cobre:

– Como parsers legacy (regex), modernos (NLP) e híbridos (LLM) funcionam
– Data scraping de keywords a partir de vagas reais
– Metadata injection editando o core.xml do .docx
– Context bleed entre seções
– Normalização de tokens e encoding UTF-8 sem BOM
– Fórmula XYZ para bullets com impacto quantificável
– Diferenças regionais entre Brasil, EUA e Europa
– A/B testing de currículos


Bônus

Incluí um Prompt Mestre v1.0: um pipeline de 10 fases para IA (ChatGPT, Claude, Gemini).

Você cola o prompt, passa 10 vagas + seu currículo atual e recebe o output otimizado em texto, LaTeX e metadados prontos.

Também inclui um template LaTeX profissional, baseado no awesome-cv, com encoding correto, fontes embarcadas e layout ATS-friendly.


Custos

R$ 0,00.

Porque conhecimento técnico não deveria custar R$ 997.

O problema não é falta de curso.
É falta de documentação.

E documentação deveria ser open source.


Links

PDF completo:
https://github.com/caiquegaspar/ats-engineer/releases

Repositório:
https://github.com/caiquegaspar/ats-engineer

Site:
https://ats-engineer.pages.dev


O que aprendi

ATS não são uma coisa só. Existem sistemas legacy, ML-based e híbridos.

Parsing quebra com detalhes bobos: hífen errado, BOM, fontes, aspas tipográficas.

Keywords sem contexto valem pouco. Cluster semântico pesa mais.

E o principal: o problema não é você. É a API.


Exemplo prático

Antes:

Desenvolvedor Full Stack
Experiência com React, Node, Docker

Depois:

Desenvolvedor Full Stack | React | Node.js | Docker

Resumo com contexto, tecnologias em inglês, datas normalizadas e impacto quantificado.


Conclusão

Você debugga exceções no seu código.

Mas está enviando currículos que lançam NullPointerException no parser do recrutador.

Talvez esteja na hora de debugar isso também.


v1.0.0 — Initial Release
✓ Engenharia reversa completa
✓ 33 páginas de documentação técnica
✓ Prompt Mestre v1.0 + Template LaTeX

Feedback é bem-vindo nos comentários ou no repositório.

Top comments (0)