Skip to content

mcortes-devops/JobScan-CV-Assistant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Job Offer Analyzer

Proyecto de portafolio en Python para registrar ofertas laborales, extraer habilidades desde sus descripciones y generar reportes exportables que sirvan como insumo para análisis manual de CV, LinkedIn y portafolio.

Resuelve el problema que se presenta cuando se revisan muchas ofertas laborales, las habilidades solicitadas quedan dispersas en textos largos y se vuelven difíciles de comparar. Este proyecto centraliza las ofertas, detecta habilidades técnicas y blandas mediante un diccionario configurable, calcula estadísticas y genera reportes en formatos simples para análisis posterior. El sistema está pensado como una herramienta de apoyo: no evalúa automáticamente al candidato ni reemplaza el análisis manual.

Características Principales

  • API backend con FastAPI.
  • Persistencia inicial con SQLite y SQLAlchemy.
  • Registro, listado, consulta y eliminación de ofertas.
  • Importación masiva desde CSV.
  • Extracción de habilidades con diccionario configurable.
  • Estadísticas de habilidades detectadas.
  • Exportación de reportes en Markdown y CSV.
  • Reporte Markdown orientado a análisis manual con ChatGPT.
  • Frontend mínimo con Streamlit para demo del MVP.
  • Pruebas automatizadas con pytest.

Lo que No Hace

  • No hace scraping.
  • No usa IA integrada dentro de la aplicación.
  • No calcula match automático del candidato.
  • No compara perfiles personales contra ofertas.
  • No incluye autenticación.
  • No incluye dashboard avanzado.

Stack Tecnológico

  • Python 3.11+
  • FastAPI
  • SQLite
  • SQLAlchemy
  • Pydantic
  • Streamlit
  • httpx
  • pytest

Arquitectura

app/
  main.py
  database.py
  models.py
  schemas.py
  crud.py
  routers/
    offers.py
    statistics.py
    exports.py
  services/
    skill_extractor.py
    statistics_service.py
    export_service.py
    skill_dictionary.json
frontend/
  streamlit_app.py
tests/
docs/
sample_data/
README.md
requirements.txt

Instalación

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Si tu sistema expone Python 3 como python, también puedes usar:

python -m venv .venv

Ejecutar Backend

source .venv/bin/activate
uvicorn app.main:app --reload

La API queda disponible en:

http://127.0.0.1:8000

Documentación interactiva:

http://127.0.0.1:8000/docs

Ejecutar Frontend Streamlit

En otra terminal:

source .venv/bin/activate
streamlit run frontend/streamlit_app.py

Streamlit normalmente queda disponible en:

http://localhost:8501

El frontend consume el backend usando API_BASE_URL. Si no se define, usa http://127.0.0.1:8000.

API_BASE_URL=http://127.0.0.1:8000 streamlit run frontend/streamlit_app.py

Demo Rápida

El proyecto incluye un CSV de ejemplo:

sample_data/offers_sample.csv

Flujo recomendado:

  1. Levanta el backend.
  2. Levanta el frontend Streamlit.
  3. Importa sample_data/offers_sample.csv.
  4. Revisa la lista de ofertas y estadísticas.
  5. Exporta el reporte para ChatGPT.

Guía completa:

docs/demo.md

Uso por API

Crear una oferta:

curl -X POST http://127.0.0.1:8000/offers \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Backend Developer",
    "company": "Acme",
    "location": "Remote",
    "modality": "Remote",
    "source": "LinkedIn",
    "url": "https://example.com/job",
    "target_area": "Backend",
    "raw_description": "We need Python, FastAPI, PostgreSQL, Docker and strong communication."
  }'

Importar ofertas desde CSV:

curl -X POST http://127.0.0.1:8000/offers/import-csv \
  -F "file=@sample_data/offers_sample.csv"

Consultar estadísticas:

curl http://127.0.0.1:8000/statistics/skills

Exportar reportes:

curl http://127.0.0.1:8000/exports/markdown
curl http://127.0.0.1:8000/exports/csv
curl http://127.0.0.1:8000/exports/chatgpt-report

Formato CSV

Columnas soportadas:

title,company,location,modality,source,url,target_area,raw_description

Campos obligatorios:

  • title
  • company
  • raw_description

Las filas con campos obligatorios vacíos se omiten y se reportan en la respuesta del importador.

Diccionario de Habilidades

El diccionario configurable está en:

app/services/skill_dictionary.json

Categorías iniciales:

  • languages
  • backend
  • databases
  • devops
  • testing
  • soft_skills

Pruebas

python3 -m pytest

Roadmap

  • Añadir filtros por área objetivo, modalidad y fuente.
  • Añadir endpoints para consultar habilidades detectadas por oferta.
  • Mejorar normalización de sinónimos y variantes de habilidades.
  • Añadir migraciones con Alembic.
  • Evaluar Docker en una fase posterior.

About

Proyecto de software para el registro de ofertas laborales, la extracción de habilidades desde sus descripciones y la generación de reportes exportables que sirvan como insumo para análisis manual de CV, LinkedIn y portafolio.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages