Situation
Recruitment teams process PDF, DOCX, multi-file, and ZIP resume batches, and need candidate evidence they can compare consistently, without losing source files, progress, or human control over hiring decisions.
Data Science
A recruitment data workflow that structures CV information, applies semantic matching, and brings decision support directly into Odoo.
View source repository↗
Why it matters
My role
Recruitment teams process PDF, DOCX, multi-file, and ZIP resume batches, and need candidate evidence they can compare consistently, without losing source files, progress, or human control over hiring decisions.
Build a recruitment data workflow that structures CV evidence, ranks candidates against jobs with semantic matching, and integrates decision support directly into the Odoo hiring process recruiters already use.
Recruiters can search, filter, compare two to four profiles, inspect original CV passages, and shortlist candidates. Scores provide decision support while recruiters retain the final choice, and selected profiles move into native Odoo Recruitment stages instead of replacing the established process.
Technical implementation
Each layer connects an implementation choice to the decision or workflow it supports.
06 layers| Layer | Implementation | Operational purpose |
|---|---|---|
| Document ingestion & OCR | PDF, DOCX, multi-file and ZIP validation; pdfplumber, PyMuPDF and python-docx extraction; OCR fallback for scanned or image-based CVs | Convert heterogeneous documents into traceable, searchable candidate evidence, including files without a usable text layer |
| Multilingual representation | Local SentenceTransformers embeddings for English and French CV and job-description chunks | Capture semantic fit beyond exact keyword matching without exporting personal data |
| Retrieval and ranking | L2-normalized vectors, FAISS IndexFlatIP exact search and a NumPy fallback | Return fast, reproducible candidate-job rankings with inspectable source passages |
| ML processing | Bounded OCA queue_job workers with persistent queued, running, failed and retry states | Keep extraction, indexing and scoring reliable without blocking recruiter screens |
| Business workflow | Native Odoo recruitment stages, applicant records, role-based access and recruiter validation | Put decision support inside the operational process while preserving human control |
| Monitoring and analytics | Matching views, operational monitoring and Power BI recruitment indicators | Track pipeline progress, stage conversion and profiles requiring action |
Product walkthrough

Gives recruiters a fast operational view of candidate volume, matching progress, and shortlisted profiles.

Brings job pipelines, candidate activity, and recruiter tools together in one working view.

Ranks candidates against a single job posting using inspectable semantic similarity scores.

Structures extracted CV evidence into a profile recruiters can inspect before taking action.

Lets a recruiter inspect a candidate's evidence, annotate findings, and record a screening decision.

Places candidate evidence side by side to support a more consistent shortlist decision.

Ranks open roles against a single candidate's profile for candidate-to-job matching.

Imports an existing Odoo job posting into the matching workflow without re-entering requirements.

Captures a new job's requirements before it enters the CV-matching and scoring pipeline.

Lets recruiters tune which requirements matter most, adjusting how candidates are scored and ranked.

Shows a shortlisted candidate inside the native Odoo Recruitment applicant record.

Controls access, roles, and system settings for the recruitment workflow.

Manages data-retention rules and candidate privacy settings for stored CV evidence.

Tracks the status of extraction, embedding, and scoring jobs running through the ML queue.