Skip to content
Merged
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,30 @@ versionnage [SemVer](https://semver.org/lang/fr/). Chaque version correspond à
un milestone GitHub ; la liste des issues traitées est aussi publiée dans la
release du même nom.

## [Non publié] — 1.2.3

- #64 — CV : bouton **« ✨ Extrait pour email (IA) »** dans la section Références.
Il génère, via l'IA, un court texte prêt à coller dans un email (« Comme
demandé, je vous joins les références… ») listant chaque référent et ses
coordonnées, affiché dans le modal IA partagé (copie en un clic).
- #63 — La section **« Sites » est renommée « Contacts »** (navigation, titres,
libellés et messages). Le nom d'un contact ouvre désormais une **fiche de
détail** présentant son type, son URL et la **liste des opportunités
associées** (candidatures dont il est la source), avec accès direct à chacune.

- #61 — CV : **édition manuelle de l'analyse, section par section**. Chaque
section de la fiche (profil, expériences, formations, coordonnées,
compétences, langues, loisirs, infos) porte son propre bouton « ✏️ » qui
ouvre un éditeur dédié ; on peut corriger, compléter, **ajouter/supprimer** et
**réagencer** (boutons ⬆️/⬇️) expériences, formations et items de liste sans
toucher au reste. Les sections vides sont affichées et restent éditables.
L'analyse IA distingue désormais les puces « - » des descriptions et les
restitue en **retours à la ligne**.
- #62 — CV : **références à fournir**. Depuis la fiche d'un CV (en pratique le CV
par défaut), on peut enregistrer des référents (nom, prénom, téléphone, email,
LinkedIn), chacun pouvant être **rattaché à une expérience professionnelle** du
CV. Les références s'affichent sur la fiche avec des liens de contact directs.

## [Non publié] — 1.2.2

- #55 — Sites d'emploi : ajout d'un **type** (Généraliste / ESN / Direct) ; les
Expand Down
31 changes: 27 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,8 @@ docker compose up -d --build # → http://127.0.0.1:53487/
`JobSite` (nom, URL, `is_builtin`, `logo_url` — plus d'identifiants depuis
l'issue #43 ; `logo_url` n'est plus saisi mais déduit du favicon, issue #50 ;
`type` = `JobSite.Type` Généraliste/ESN/Direct, défaut Généraliste pour les
sites par défaut, issue #55),
sites par défaut, issue #55 ; côté UI la section est intitulée **« Contacts »**
et une fiche `site_detail` liste les opportunités associées, issue #63),
`Candidature` (cœur
du suivi, étapes de progression + `motif_cloture` = clôture ; `cv` = CV joint,
issue #49 ; `localisation` = zone géographique de l'offre, issue #52 ; `source`
Expand All @@ -65,8 +66,12 @@ fiche, issue #58),
`StatusHistory`,
`Reminder`, `Interview`, `Contact`, `ApiToken`, `CV` (avec analyse IA des
informations principales — champs `analysis`/`analyzed_at`/… , issue #44 ;
analyse **éditable manuellement** via `cv_edit`, issue #61 ;
`actif` = archivage, issue #48 ; `par_defaut` = CV dont l'adresse sert d'origine
aux trajets, issue #52),
`Reference` (référent à fournir : nom/prénom/téléphone/email/linkedin, rattaché
à une expérience du CV via `experience_index` = rang dans
`CV.analysis['experiences']` ; géré depuis la fiche CV, issue #62),
`AIConfig` (singleton de
config du coaching IA, clé Gemini chiffrée — issue #33). Énumérations
`TextChoices` : `Canal`, `Statut`, `MotifCloture` (certaines avec icône
Expand All @@ -92,9 +97,11 @@ emoji dans le libellé pour les menus).
`<provider>_api_key/_model/_monthly_limit`, accès générique par getattr), le
`provider` actif détermine `api_key`/`model`. `MODELS_BY_PROVIDER`, `DEFAULTS`
et `PROVIDER_INFO` (tier gratuit + liens doc/clé) pilotent l'UI. Config via `/aide/` (page Options,
catégorie IA, issue #34). Endpoints POST AJAX `api/coaching/` (bilan) et
`api/candidatures/<pk>/relance/` (mail de relance) ; UI = modal partagé
`#ai-modal` dans `base.html` (spinner + rendu Markdown).
catégorie IA, issue #34). Endpoints POST AJAX `api/coaching/` (bilan),
`api/candidatures/<pk>/relance/` (mail de relance) et
`api/cv/<pk>/references/` (extrait d'email des références,
`coaching.references_email`, issue #64) ; UI = modal partagé `#ai-modal` dans
`base.html` (spinner + rendu Markdown), ouvert via `window.openAiModal`.
- Analyse de CV (issue #44) : `coaching.analyze_cv(cv)` demande à l'IA un JSON
structuré (profil, expériences, formations, compétences, langues, coordonnées/
références — adresse, téléphone, email, permis —, loisirs, infos diverses),
Expand All @@ -107,6 +114,22 @@ emoji dans le libellé pour les menus).
formations en timeline et **cartographie les lieux** (`_cv_localisations`) avec
**OpenStreetMap/Leaflet** (géocodage **Nominatim**, marqueur emoji par type,
popup société) — aucune clé API requise.
- Édition de l'analyse (issue #61) : **par section**. `CV_SECTIONS` (vues)
décrit chaque section éditable (label/icône/`kind`) ; la vue
`cv_edit(pk, section)` ne modifie que la section ciblée (`_apply_cv_section`)
puis re-normalise tout via `coaching.normalize_cv_analysis` (alias public de
`_normalize_cv_analysis`). Template `cv_edit.html` = éditeur JS dynamique
piloté par `kind` (profile/coord/text/chips/experiences/formations),
sérialisé dans un champ caché `value` (objet passé via `json_script`, **pas**
pré-`json.dumps` sinon double encodage). `cv_detail` affiche toutes les
sections (même vides) avec un bouton `.sec-edit` par section. Un CV non
analysé devient « analysé » dès la première saisie. Les descriptions
d'expériences sont rendues avec `linebreaksbr` (puces « - » → retours ligne).
- Références (issue #62) : modèle `Reference` (FK `CV`), `ReferenceForm` propose
l'expérience associée dans une liste déroulante (rang -> libellé) construite
depuis `cv.analysis['experiences']`. Vues `reference_create/update/delete`,
affichage et ajout depuis `cv_detail`. La section « 📇 Références » de l'ancien
bloc coordonnées a été renommée « Coordonnées » pour libérer le terme.
- Exports de CV (issue #44) : `tracking/cv_export.py` convertit `CV.analysis` en
**JSON Resume**, **Europass** (SkillsPassport) et **HR-Open Standards**
(`EXPORTERS`/`EXPORT_LABELS`, stdlib) ; vues `cv_export` (téléchargement JSON) et
Expand Down
4 changes: 2 additions & 2 deletions templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -324,8 +324,8 @@
href="{% url 'tracking:candidature_list' %}" data-label="Candidatures">
<span class="nav-ico" aria-hidden="true">📋</span><span class="nav-label">Candidatures</span></a>
<a class="nav-item {% if '/sites' in request.path %}active{% endif %}"
href="{% url 'tracking:site_list' %}" data-label="Sites">
<span class="nav-ico" aria-hidden="true">🌐</span><span class="nav-label">Sites</span></a>
href="{% url 'tracking:site_list' %}" data-label="Contacts">
<span class="nav-ico" aria-hidden="true">📇</span><span class="nav-label">Contacts</span></a>
<a class="nav-item {% if '/stats' in request.path %}active{% endif %}"
href="{% url 'tracking:stats' %}" data-label="Statistiques">
<span class="nav-ico" aria-hidden="true">📊</span><span class="nav-label">Statistiques</span></a>
Expand Down
Loading
Loading