v1.7.0 - Public Sources, Importers & Capture History¶
A v1.7.0 transforma Fontes e Captura em um fluxo pratico de entrada de oportunidades. O foco foi importar vagas por texto, link publico simples, CSV, JSON e capturas da extensao/local companion, manter historico persistente, detectar duplicatas e conectar os itens ao fluxo Vaga -> Analise -> Candidaturas.
Nota v1.7.1: upload CSV/JSON pelo navegador, mescla visual de duplicatas, exportacao CSV/JSON e
Diretório de Fontes foram adicionados em
v1.7.1-intake-polish-source-discovery.md.
Objetivo¶
- reduzir trabalho manual repetitivo ao organizar vagas;
- preservar origem, texto original e link da oportunidade;
- revisar antes de analisar ou salvar no tracker;
- manter tudo local-first, sem banco remoto ou Supabase;
- preparar fontes publicas seguras sem crawler amplo nem login automatico.
Implementado¶
| Area | Status |
|---|---|
Modelos JobSource, JobImport, CaptureRecord, OpportunityInboxItem, ImportBatch, DuplicateCandidate |
Real |
Store local em data/sources/imports.json |
Real |
| Importacao por texto | Real |
| Importacao por link publico simples | Real, com fallback manual |
| Importacao CSV | Real |
| Importacao JSON | Real |
Caixa de Entrada em /sources |
Real |
| Busca/filtros por status e origem | Real |
| Deduplicacao local explicavel | Real |
| Importar para tela Vaga | Real via API |
| Salvar em Candidaturas/Kanban | Real via API |
| Historico da extensao/local companion | Real, sem automacao sensivel |
| Fontes publicas recorrentes | Roadmap/planejado |
| IA para enriquecer importacoes | Parcial/planejado |
Limites de seguranca¶
- Nao foi criado login automatico.
- Nao foi criado bypass de CAPTCHA.
- Nao foi criado auto-apply.
- Nao foi alterada a logica sensivel de authenticated browser, Chromium ou CDP.
- O importador de URL tenta apenas leitura publica simples da URL informada.
- Se a pagina bloquear acesso, exigir login ou nao permitir leitura simples, a API orienta colar o texto da vaga manualmente.
- O usuario revisa o item antes de salvar em Candidaturas ou usar em analises.
- Dados e capturas ficam em armazenamento local ignorado pelo Git.
Endpoints¶
GET /api/v1/sources/imports
POST /api/v1/sources/imports/text
POST /api/v1/sources/imports/url
POST /api/v1/sources/imports/csv
POST /api/v1/sources/imports/json
GET /api/v1/sources/captures
PATCH /api/v1/sources/captures/{capture_id}
POST /api/v1/sources/captures/{capture_id}/import-job
POST /api/v1/sources/captures/{capture_id}/save-tracker
POST /api/v1/sources/dedupe
GET /api/v1/sources/stats
Tambem foi adicionado:
PATCH /api/v1/extension/captures/{capture_id}
Esse endpoint altera apenas status local de captura da Local Companion API.
Fontes e origens¶
Origens suportadas:
manual_text
manual_url
csv_import
json_import
extension_capture
companion_capture
public_source
official_api_future
public_source e official_api_future existem como preparacao de modelo/UX. A v1.7.0 nao implementa
busca massiva nem varredura recorrente.
Importadores¶
Texto¶
POST /sources/imports/text recebe texto da vaga, URL opcional, empresa opcional, cargo opcional e
notas. O backend usa parser local, preserva o texto original e cria um item na Caixa de Entrada.
Link¶
POST /sources/imports/url recebe uma URL e tenta leitura publica simples. Em bloqueio/login/erro,
cria item com status error e warning amigavel para colar texto manualmente.
CSV¶
Campos esperados:
cargo,empresa,link,local,descricao,fonte,status,observacoes
Analista de Dados,Empresa Exemplo,https://example.com/jobs/123,Remoto,"Python, SQL e dashboards",CSV Manual,nova,"vaga ficticia"
Desenvolvedor Backend,Tech Exemplo,https://example.com/jobs/456,Hibrido,"APIs, testes e bancos de dados",CSV Manual,nova,"vaga ficticia"
Aliases aceitos:
cargo/title
empresa/company
link/url
local/location
descricao/descrição/description
fonte/source
observacoes/observações/notes
JSON¶
Formato esperado:
[
{
"cargo": "Analista de Dados",
"empresa": "Empresa Exemplo",
"link": "https://example.com/jobs/123",
"local": "Remoto",
"descricao": "Python, SQL e dashboards.",
"fonte": "JSON Manual",
"status": "nova",
"observacoes": "vaga ficticia"
}
]
Deduplicacao¶
A deduplicacao v1.7.0 e local e explicavel. Criterios:
- URL normalizada igual;
- empresa + cargo + localidade;
- empresa + cargo com similaridade simples;
- hash de texto normalizado.
Decisoes modeladas:
possible_duplicate
confirmed_duplicate
not_duplicate
Na UI v1.7.0, o usuario pode arquivar/ignorar/manter separado. A v1.7.1 adiciona mescla visual preservando historico e origem.
Integracao com tracker e Kanban¶
Ao salvar um item em Candidaturas:
- o backend cria uma entrada no tracker local;
- preserva link e origem;
- mapeia origem para collection method seguro;
- o Kanban mostra fonte/origem nos cards e na lista.
IA nas importacoes¶
A v1.7.0 nao depende de IA para importar. A v1.7.1 adiciona o prompt
source_import_enrichment_v1 para IA opcional e fallback local quando o provider falha ou nao esta
configurado. Assim:
- tudo funciona com IA desligada;
- nao ha segredo no frontend;
- nenhuma API key retorna ao navegador;
- requisitos nao sao inventados.
Testes¶
Backend:
- importacao texto;
- link publico mockado;
- link bloqueado com orientacao manual;
- CSV valido e CSV com campos faltantes;
- JSON valido e invalido;
- dedupe por URL/empresa+cargo;
- patch/archive/review de captura;
- captura para Vaga;
- captura para tracker;
- stats;
- extensao/local companion patch seguro.
Frontend:
- abre Fontes e Captura;
- Caixa de Entrada aparece;
- importa texto/CSV/JSON fake;
- mostra duplicata fake;
- importa para Vaga;
- salva em Candidaturas;
- origem aparece no Kanban;
- companion offline orienta
.\start-sotuhire.ps1 -WithCompanion; - nao aparece
Career CompassouMatch Engine 2.0.
Roadmap¶
- mescla visual de duplicatas preservando historico;
- importacao de arquivo real por upload no browser;
- conectores recorrentes para RSS/feed publico com revisao manual;
- APIs oficiais quando houver contrato claro;
- IA opcional para tags, dominio e explicacao de duplicatas;
- exportacao da Caixa de Entrada.