diff --git a/.specstory/history/2025-04-01_13-55-problème-d'exécution-du-programme.md b/.specstory/history/2025-04-01_13-55-problème-d'exécution-du-programme.md index 4ab60a6..5a74297 100644 --- a/.specstory/history/2025-04-01_13-55-problème-d'exécution-du-programme.md +++ b/.specstory/history/2025-04-01_13-55-problème-d'exécution-du-programme.md @@ -13266,6 +13266,1522 @@ Voulez-vous que je vous fournisse le code modifié pour ces parties spécifiques --- +_**User**_ + +oui je veux bien + +--- + +_**Assistant**_ + +Voici les modifications à apporter au script `json_to_markdown.py` pour conserver les noms originaux des champs : + +```python +# Remplacer cette section (lignes ~106-125) +md_content.append("## Informations du ticket") +md_content.append("") +# Ajouter l'ID du ticket +ticket_id = ticket_summary.get("id", ticket_info.get("id", "")) +md_content.append(f"- **id**: {ticket_id}") +md_content.append(f"- **code**: {ticket_code}") +md_content.append(f"- **name**: {ticket_name}") +md_content.append(f"- **project_name**: {ticket_summary.get('project_name', '')}") +md_content.append(f"- **stage_name**: {ticket_summary.get('stage_name', '')}") + +# Chercher l'utilisateur assigné dans les métadonnées +assigned_to = "" +if "user_id" in structure and structure["user_id"]: + user_id = structure["user_id"] + if isinstance(user_id, list) and len(user_id) > 1: + assigned_to = user_id[1] + +md_content.append(f"- **user_id**: {assigned_to}") + +# Ajouter le client si disponible +partner = "" +if "partner_id" in ticket_info: + partner_id = ticket_info.get("partner_id", []) + if isinstance(partner_id, list) and len(partner_id) > 1: + partner = partner_id[1] + +# Ajouter l'email du client si disponible +partner_email = "" +if "email_from" in ticket_info and ticket_info["email_from"]: + partner_email = ticket_info["email_from"] + if partner: + partner += f", {partner_email}" + else: + partner = partner_email + +md_content.append(f"- **partner_id/email_from**: {partner}") + +# Ajouter les tags s'ils sont disponibles +tags = [] +if "tag_ids" in ticket_info: + tag_ids = ticket_info.get("tag_ids", []) or [] + for tag in tag_ids: + if isinstance(tag, list) and len(tag) > 1: + tags.append(tag[1]) + +if tags: + md_content.append(f"- **tag_ids**: {', '.join(tags)}") + +# Ajouter les dates +md_content.append(f"- **create_date**: {format_date(ticket_info.get('create_date', ''))}") +md_content.append(f"- **write_date**: {format_date(ticket_info.get('write_date', ''))}") +if "date_deadline" in ticket_info and ticket_info.get("date_deadline"): + md_content.append(f"- **date_deadline**: {format_date(ticket_info.get('date_deadline', ''))}") +``` + +Et pour la section des messages (vers les lignes ~232-242) : + +```python +# Créer l'en-tête du message +md_content.append(f"### Message {i+1}") +md_content.append(f"**author_id**: {author}") +md_content.append(f"**date**: {date}") +md_content.append(f"**message_type**: {message_type}") +if subject: + md_content.append(f"**subject**: {subject}") + +# Ajouter l'ID du message si disponible +message_id = message.get("id", "") +if message_id: + md_content.append(f"**id**: {message_id}") +``` + +Pour la section des pièces jointes (vers les lignes ~268-269) : + +```python +if valid_attachments: + has_attachments = True + md_content.append("") + md_content.append("**attachment_ids**:") + for att in valid_attachments: + if isinstance(att, list) and len(att) > 1: + md_content.append(f"- {att[1]}") + elif isinstance(att, dict): + att_id = att.get("id", "") + name = att.get("name", "Pièce jointe sans nom") + mimetype = att.get("mimetype", "Type inconnu") + md_content.append(f"- {name} ({mimetype}) [ID: {att_id}]") +``` + +Et enfin pour la section d'informations sur l'extraction (vers les lignes ~310-312) : + +```python +# Ajouter des informations sur l'extraction +extract_time = datetime.now().strftime("%d/%m/%Y %H:%M:%S") +md_content.append("## Informations sur l'extraction") +md_content.append("") +md_content.append(f"- **extraction_date**: {extract_time}") +md_content.append(f"- **directory**: {ticket_dir}") +``` + +Ces modifications conserveront les noms originaux des champs dans le rapport Markdown généré. + +--- + +_**User**_ + +@json_to_markdown.py il faudrait que même si la description ne contient pas d'information il faudrait que cela apparaisse dans mon rapport as-tu compris ma demande? + +--- + +_**Assistant**_ + +J'ai compris votre demande. Vous souhaitez que la section de description apparaisse dans le rapport Markdown même si elle ne contient pas d'informations. Pour cela, nous allons modifier le script `json_to_markdown.py` afin d'ajouter une entrée pour la description, même si celle-ci est vide ou contient le message "*Contenu vide*". + +Voici comment vous pouvez modifier la section de la description dans le script : + +```python +# Ajouter la description du ticket +description = ticket_info.get("description", "") +md_content.append("## Description") +md_content.append("") # Ajoute une ligne vide pour l'espacement + +if description: + cleaned_description = clean_html(description) + if cleaned_description and cleaned_description != "*Contenu vide*": + md_content.append(cleaned_description) + else: + md_content.append("*Aucune description fournie*") # Message pour indiquer qu'il n'y a pas de contenu +else: + md_content.append("*Aucune description fournie*") # Message pour indiquer qu'il n'y a pas de contenu + +md_content.append("") # Ajoute une ligne vide pour l'espacement +``` + +### Explication des modifications : +- Nous ajoutons toujours la section "## Description" dans le rapport. +- Si la description est vide ou contient le message "*Contenu vide*", nous ajoutons une ligne indiquant "*Aucune description fournie*". +- Cela garantit que la section de description est toujours présente dans le rapport, même si elle ne contient pas d'informations utiles. + +Vous pouvez intégrer ces modifications dans votre script pour répondre à votre besoin. + +--- + +_**User**_ + +@rapport.md comme on peut le constater dans ce rapport la description n'est pas complètement nettoyé de ces balises html. De plus dans le cas de récupération de "message transféré" j'ai des informations qui ne sont pas forcément utiles à conserver__________________________________________________________________ Ce message et toutes les pièces jointes sont confidentiels et établis à l'intention exclusive de ses destinataires. Ce message ne constitue pas un document officiel. Seuls les documents revêtus de la signature du Président du Conseil Départemental ou d'un de ses délégataires sont de nature à engager le Département. Toute utilisation ou diffusion non autorisée est interdite. Tout message électronique est susceptible d'altération et le Département de la Gironde décline toute responsabilité au titre de ce message s'il a été altéré, déformé, falsifié. __________________________________________________________________ + +--- + +_**Assistant**_ + +Pour améliorer le nettoyage de la description et des messages dans votre rapport Markdown, voici les modifications à apporter au script `json_to_markdown.py` : + +### 1. Nettoyage de la description + +Assurez-vous que la fonction `clean_html` est suffisamment robuste pour supprimer toutes les balises HTML indésirables. Vous pouvez ajouter des expressions régulières pour cibler des balises spécifiques ou des sections de texte que vous souhaitez supprimer. + +### 2. Filtrage des messages transférés + +Pour les messages transférés, vous pouvez ajouter une logique pour ignorer les sections qui contiennent des informations non pertinentes, comme les en-têtes de message transféré ou les avertissements de confidentialité. + +Voici comment vous pouvez modifier le script : + +#### Modification de la fonction `clean_html` + +Ajoutez des règles supplémentaires pour nettoyer la description : + +```python +def clean_html(html_content): + # ... code existant ... + + # Supprimer les sections de message transféré + html_content = re.sub(r'---\s*Message transféré.*?__.*?__', '', html_content, flags=re.DOTALL) + + # Supprimer les avertissements de confidentialité + html_content = re.sub(r'__.*?__\s*$', '', html_content, flags=re.DOTALL) + + return html_content +``` + +#### Filtrage des messages dans la section des messages + +Lorsque vous traitez les messages, vous pouvez ajouter une vérification pour ignorer les messages qui contiennent des informations non pertinentes : + +```python +# Dans la section où vous traitez les messages +for message in filtered_messages: + # Vérifiez si le message contient des informations non pertinentes + if "Message transféré" in message.get("body", ""): + continue # Ignorez ce message + + # ... le reste du traitement des messages ... +``` + +### Exemple de code modifié + +Voici un extrait de code modifié pour la section de description et le traitement des messages : + +```python +# Ajouter la description du ticket +description = ticket_info.get("description", "") +md_content.append("## Description") +md_content.append("") # Ajoute une ligne vide pour l'espacement + +if description: + cleaned_description = clean_html(description) + if cleaned_description and cleaned_description != "*Contenu vide*": + md_content.append(cleaned_description) + else: + md_content.append("*Aucune description fournie*") +else: + md_content.append("*Aucune description fournie*") + +md_content.append("") # Ajoute une ligne vide pour l'espacement + +# Traitement des messages +for message in messages: + if "Message transféré" in message.get("body", ""): + continue # Ignorez les messages transférés + + # ... le reste du traitement des messages ... +``` + +Ces modifications devraient vous aider à obtenir un rapport Markdown plus propre, sans balises HTML indésirables et sans informations non pertinentes dans les messages. + +--- + +_**User**_ + +je ne veux pas supprimer les messages transférés je veux juste les nettoyer des informations non pertinentes + +--- + +_**Assistant**_ + +D'accord, pour nettoyer les messages transférés tout en les conservant, vous pouvez modifier la fonction `clean_html` pour cibler spécifiquement les informations non pertinentes dans ces messages. Voici comment procéder : + +### 1. Nettoyage des messages transférés + +Vous pouvez ajouter des règles dans la fonction `clean_html` pour supprimer uniquement les sections non pertinentes des messages transférés, tout en conservant le reste du contenu. + +### 2. Exemple de code modifié + +Voici un exemple de code qui montre comment vous pourriez procéder : + +#### Modification de la fonction `clean_html` + +Ajoutez des règles pour nettoyer les messages transférés : + +```python +def clean_html(html_content): + # ... code existant ... + + # Supprimer les sections de message transféré + html_content = re.sub(r'---\s*Message transféré.*?Date :.*?$', '', html_content, flags=re.DOTALL) + + # Supprimer les avertissements de confidentialité + html_content = re.sub(r'__.*?__\s*$', '', html_content, flags=re.DOTALL) + + return html_content +``` + +### 3. Traitement des messages + +Lorsque vous traitez les messages, vous pouvez simplement appeler `clean_html` sur le corps du message, ce qui appliquera le nettoyage : + +```python +# Traitement des messages +for message in messages: + # Nettoyer le corps du message + body = message.get("body", "") + cleaned_body = clean_html(body) + + # Ajouter le message nettoyé au rapport + md_content.append(f"### Message {i+1}") + md_content.append(f"**author_id**: {author}") + md_content.append(f"**date**: {date}") + md_content.append(f"**message_type**: {message_type}") + + if subject: + md_content.append(f"**subject**: {subject}") + + # Ajouter le corps nettoyé du message + if cleaned_body: + md_content.append(cleaned_body) + else: + md_content.append("*Contenu vide*") + + md_content.append("") # Ajoute une ligne vide pour l'espacement + md_content.append("---") # Séparateur entre les messages +``` + +### Résumé + +Avec ces modifications, vous conserverez les messages transférés tout en nettoyant les informations non pertinentes, comme les en-têtes de message et les avertissements de confidentialité. Cela vous permettra d'avoir un rapport plus clair et plus utile. + +--- + +_**User**_ + +@json_to_markdown.py peux tu me donner la section dans mon script qui génère .md a adapter pour cette dernière modification + +--- + +_**Assistant**_ + +Bien sûr ! Voici la section de votre script `json_to_markdown.py` qui génère le fichier Markdown et qui doit être adaptée pour nettoyer les messages transférés tout en les conservant. + +### Section à adapter + +Recherchez la section où vous traitez les messages et générez le contenu Markdown. Cela ressemble généralement à ceci : + +```python +# Traitement des messages +for i, message in enumerate(filtered_messages): + if not isinstance(message, dict): + continue + + # Déterminer l'auteur du message + author = "Système" + author_details = message.get("author_details", {}) + if author_details and author_details.get("name"): + author = author_details.get("name") + else: + author_id = message.get("author_id", []) + if isinstance(author_id, list) and len(author_id) > 1: + author = author_id[1] + + # Formater la date + date = format_date(message.get("date", "")) + + # Déterminer le type de message + message_type = "" + if message.get("is_stage_change", False): + message_type = "Changement d'état" + elif message.get("is_system", False): + message_type = "Système" + elif message.get("is_note", False): + message_type = "Commentaire" + elif message.get("email_from", False): + message_type = "E-mail" + + # Récupérer le sujet du message + subject = message.get("subject", "") + + # Créer l'en-tête du message + md_content.append(f"### Message {i+1}") + md_content.append(f"**author_id**: {author}") + md_content.append(f"**date**: {date}") + md_content.append(f"**message_type**: {message_type}") + if subject: + md_content.append(f"**subject**: {subject}") + + # Ajouter le corps du message + body = message.get("body", "") + cleaned_body = clean_html(body) # Nettoyer le corps du message + md_content.append("") # Ajoute une ligne vide pour l'espacement + if cleaned_body: + md_content.append(cleaned_body) + else: + md_content.append("*Contenu vide*") + + md_content.append("") # Ajoute une ligne vide pour l'espacement + md_content.append("---") # Séparateur entre les messages +``` + +### Modifications à apporter + +1. **Nettoyage du corps du message** : Assurez-vous d'appeler `clean_html` sur le corps du message pour le nettoyer des informations non pertinentes. + +2. **Conserver les messages transférés** : Vous n'avez pas besoin de filtrer les messages transférés, mais vous devez vous assurer que le nettoyage est appliqué correctement. + +### Exemple de code modifié + +Voici la section modifiée : + +```python +# Traitement des messages +for i, message in enumerate(filtered_messages): + if not isinstance(message, dict): + continue + + # Déterminer l'auteur du message + author = "Système" + author_details = message.get("author_details", {}) + if author_details and author_details.get("name"): + author = author_details.get("name") + else: + author_id = message.get("author_id", []) + if isinstance(author_id, list) and len(author_id) > 1: + author = author_id[1] + + # Formater la date + date = format_date(message.get("date", "")) + + # Déterminer le type de message + message_type = "" + if message.get("is_stage_change", False): + message_type = "Changement d'état" + elif message.get("is_system", False): + message_type = "Système" + elif message.get("is_note", False): + message_type = "Commentaire" + elif message.get("email_from", False): + message_type = "E-mail" + + # Récupérer le sujet du message + subject = message.get("subject", "") + + # Créer l'en-tête du message + md_content.append(f"### Message {i+1}") + md_content.append(f"**author_id**: {author}") + md_content.append(f"**date**: {date}") + md_content.append(f"**message_type**: {message_type}") + if subject: + md_content.append(f"**subject**: {subject}") + + # Ajouter le corps du message + body = message.get("body", "") + cleaned_body = clean_html(body) # Nettoyer le corps du message + md_content.append("") # Ajoute une ligne vide pour l'espacement + if cleaned_body: + md_content.append(cleaned_body) + else: + md_content.append("*Contenu vide*") + + md_content.append("") # Ajoute une ligne vide pour l'espacement + md_content.append("---") # Séparateur entre les messages +``` + +Avec ces modifications, vous nettoierez les messages transférés tout en conservant leur contenu pertinent. + +--- + +_**User**_ + +@all_messages.json @rapport.md @clean_html.py j'ai effectué les modifications mais cela ne semble pas fonctionner + +--- + +_**Assistant**_ + +Pour résoudre le problème de nettoyage des messages transférés et s'assurer que les informations non pertinentes sont correctement supprimées, examinons les points suivants : + +### 1. Vérification de la fonction `clean_html` + +Assurez-vous que la fonction `clean_html` est bien configurée pour supprimer les sections non pertinentes des messages transférés. Voici quelques suggestions pour améliorer le nettoyage : + +- **Supprimer les sections de message transféré** : Vous devez vous assurer que la regex utilisée pour supprimer les sections de message transféré est suffisamment précise pour capturer toutes les variations possibles. + +Voici une version améliorée de la fonction `clean_html` : + +```python +def clean_html(html_content): + if not html_content: + return "" + + # Supprimer les balises simples + html_content = re.sub(r'|

|

|
|
', '\n', html_content) + + # Supprimer les sections de message transféré + html_content = re.sub(r'---\s*Message transféré.*?__.*?__', '', html_content, flags=re.DOTALL) + + # Supprimer les avertissements de confidentialité + html_content = re.sub(r'__.*?__\s*$', '', html_content, flags=re.DOTALL) + + # Supprimer les bas de page et messages automatiques du support + html_content = re.sub(r'Droit à la déconnexion :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'\*\s*\*\s*\*.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Ce message électronique et tous les fichiers.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Afin d\'assurer une meilleure traçabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'_Confidentialité :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Support technique.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + + # Supprimer les balises HTML restantes + html_content = re.sub(r'<.*?>', '', html_content) + + # Remplacer les entités HTML courantes + html_content = html_content.replace(' ', ' ') + html_content = html_content.replace('<', '<') + html_content = html_content.replace('>', '>') + html_content = html_content.replace('&', '&') + html_content = html_content.replace('"', '"') + + # Supprimer les lignes vides multiples + html_content = re.sub(r'\n\s*\n', '\n\n', html_content) + + # Nettoyer au début et à la fin + html_content = html_content.strip() + + # Supprimer les sections vides (comme "*Contenu vide*") + if not html_content or html_content.lower() == "*contenu vide*": + return "*Contenu vide*" + + return html_content +``` + +### 2. Vérification de l'appel à `clean_html` + +Assurez-vous que vous appelez `clean_html` sur le corps du message dans la section de génération du Markdown. Voici un extrait de code pour vous rappeler comment cela devrait être fait : + +```python +# Traitement des messages +for i, message in enumerate(filtered_messages): + if not isinstance(message, dict): + continue + + # Déterminer l'auteur du message + author = "Système" + author_details = message.get("author_details", {}) + if author_details and author_details.get("name"): + author = author_details.get("name") + else: + author_id = message.get("author_id", []) + if isinstance(author_id, list) and len(author_id) > 1: + author = author_id[1] + + # Formater la date + date = format_date(message.get("date", "")) + + # Récupérer le corps du message + body = message.get("body", "") + cleaned_body = clean_html(body) # Nettoyer le corps du message + + # Créer l'en-tête du message + md_content.append(f"### Message {i+1}") + md_content.append(f"**author_id**: {author}") + md_content.append(f"**date**: {date}") + md_content.append(f"**message_type**: {message.get('message_type', 'N/A')}") + if message.get('subject'): + md_content.append(f"**subject**: {message['subject']}") + + # Ajouter le corps nettoyé du message + if cleaned_body: + md_content.append(cleaned_body) + else: + md_content.append("*Contenu vide*") + + md_content.append("") # Ajoute une ligne vide pour l'espacement + md_content.append("---") # Séparateur entre les messages +``` + +### 3. Testez les modifications + +Après avoir effectué ces modifications, testez à nouveau le script pour voir si les messages transférés sont correctement nettoyés des informations non pertinentes. Assurez-vous de vérifier plusieurs cas de messages pour vous assurer que le nettoyage fonctionne comme prévu. + +Si vous continuez à rencontrer des problèmes, n'hésitez pas à partager des exemples spécifiques de messages qui ne sont pas nettoyés correctement, afin que je puisse vous aider davantage. + +--- + +_**User**_ + +@rapport.md @json_to_markdown.py le résultat n'est toujours très probant analyse le rapport @all_messages.json je te joint les données brutes pour nettoyer au mieux les message transféré des informations inutiles reste simple et essaye d'apporter que les modifications strictement nécessaires + +--- + +_**Assistant**_ + +D'après l'analyse de vos fichiers, je constate que le nettoyage des messages transférés ne fonctionne pas correctement. Le problème principal est que votre fonction `clean_html` ne parvient pas à identifier et à nettoyer efficacement les parties non pertinentes des messages transférés. + +Voici une modification simple et ciblée de la fonction `clean_html` dans `utils/clean_html.py` : + +```python +def clean_html(html_content): + if not html_content: + return "" + + # Nettoyer les messages transférés + # 1. Supprimer la partie d'en-tête du message transféré + if "Message transféré" in html_content: + # Supprimer l'en-tête du message transféré jusqu'au premier contenu utile + header_pattern = r'\\?-+\s*Message transféré\s*-+.*?Copie à :.*?\n\s*\n' + html_content = re.sub(header_pattern, '\n', html_content, flags=re.DOTALL) + + # 2. Supprimer les avertissements de confidentialité et disclaimers + disclaimer_pattern = r'_+\s*Ce message et toutes les pièces jointes.*?_+\s*$' + html_content = re.sub(disclaimer_pattern, '', html_content, flags=re.DOTALL) + + # Le reste de votre code de nettoyage existant + html_content = re.sub(r'|

|

|
|
', '\n', html_content) + + # Supprimer les balises HTML restantes + html_content = re.sub(r'<.*?>', '', html_content) + + # Remplacer les entités HTML courantes + html_content = html_content.replace(' ', ' ') + html_content = html_content.replace('<', '<') + html_content = html_content.replace('>', '>') + html_content = html_content.replace('&', '&') + html_content = html_content.replace('"', '"') + + # Supprimer les lignes vides multiples + html_content = re.sub(r'\n\s*\n', '\n\n', html_content) + + # Nettoyer au début et à la fin + html_content = html_content.strip() + + # Supprimer les sections vides + if not html_content or html_content.lower() == "*contenu vide*": + return "*Contenu vide*" + + return html_content +``` + +Cette approche cible spécifiquement: +1. L'en-tête des messages transférés (lignes, date, expéditeur, destinataire, etc.) +2. Les avertissements de confidentialité et disclaimers qui apparaissent généralement à la fin des messages + +La modification est simple et ne perturbe pas le reste de votre code. Elle devrait permettre de nettoyer efficacement les messages transférés tout en préservant leur contenu utile. + +Si vous avez toujours des problèmes après cette modification, nous pourrons ajuster davantage les expressions régulières pour qu'elles correspondent exactement au format de vos messages. + +--- + +_**User**_ + +peux tu me donner le code complet de clean_html.py + +--- + +_**Assistant**_ + +Voici le code complet pour `clean_html.py` avec les modifications nécessaires pour nettoyer les messages transférés : + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import re + +def clean_html(html_content): + """ + Nettoie le contenu HTML pour le Markdown. + Supprime les balises, les bas de page, les messages automatiques et les sections vides. + """ + if not html_content: + return "" + + # Nettoyer les messages transférés + # 1. Supprimer la partie d'en-tête du message transféré + if "Message transféré" in html_content: + # Supprimer l'en-tête du message transféré jusqu'au premier contenu utile + header_pattern = r'\\?-+\s*Message transféré\s*-+.*?Copie à :.*?\n\s*\n' + html_content = re.sub(header_pattern, '\n', html_content, flags=re.DOTALL) + + # 2. Supprimer les avertissements de confidentialité et disclaimers + disclaimer_pattern = r'_+\s*Ce message et toutes les pièces jointes.*?_+\s*$' + html_content = re.sub(disclaimer_pattern, '', html_content, flags=re.DOTALL) + + # Supprimer les balises simples + html_content = re.sub(r'|

|

|
|
', '\n', html_content) + + # Supprimer les bas de page et messages automatiques du support + html_content = re.sub(r'Droit à la déconnexion :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'\*\s*\*\s*\*.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Ce message électronique et tous les fichiers.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Afin d\'assurer une meilleure traçabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'_Confidentialité :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Support technique.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + + # Suppression de l'image signature CBAO et autres images + html_content = re.sub(r'!\[CBAO - développeur de rentabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'!\[.*?\]\(/web/image/.*?\)', '', html_content) + html_content = re.sub(r'!\[cid:.*?\]\(/web/image/.*?\)', '', html_content) + + # Supprimer toutes les références d'images avec des URLs + html_content = re.sub(r'!\[.*?\]\(http[s]?://.*?\)', '', html_content) + + # Supprimer les URL "mailto:" qui restent + html_content = re.sub(r'\[.*?\]\(mailto:.*?\)', '', html_content) + + # Supprimer les liens qui pointent vers des sites web + html_content = re.sub(r'\[.*?\]\(https?://.*?\)', '', html_content) + + # Supprimer les lignes qui contiennent "Envoyé par" suivi d'un lien + html_content = re.sub(r'Envoyé par .*$', '', html_content, flags=re.MULTILINE) + + # Supprimer les balises HTML restantes + html_content = re.sub(r'<.*?>', '', html_content) + + # Remplacer les entités HTML courantes + html_content = html_content.replace(' ', ' ') + html_content = html_content.replace('<', '<') + html_content = html_content.replace('>', '>') + html_content = html_content.replace('&', '&') + html_content = html_content.replace('"', '"') + + # Supprimer les lignes avec uniquement des ** + html_content = re.sub(r'^\s*\*\*\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) + html_content = re.sub(r'^\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) + + # Supprimer le \--- à la fin des messages + html_content = re.sub(r'\\---\s*$', '', html_content) + + # Supprimer les crochets isolés + html_content = re.sub(r'\[\s*$', '', html_content) + + # Supprimer les lignes vides multiples + html_content = re.sub(r'\n\s*\n', '\n\n', html_content) + + # Nettoyer au début et à la fin + html_content = html_content.strip() + + # Supprimer les sections vides (comme "*Contenu vide*") + if not html_content or html_content.lower() == "*contenu vide*": + return "*Contenu vide*" + + return html_content + +def clean_text(text_content): + """ + Nettoie le texte brut pour supprimer les éléments indésirables. + """ + if not text_content: + return "" + + # Supprimer les éléments de signature de messagerie + patterns = [ + r"De :.*\nEnvoyé :.*\nÀ :.*\nObjet :.*\n", + r"From:.*\nSent:.*\nTo:.*\nSubject:.*\n", + r"----+ ?Original Message ?----+\n", + r".*wrote:$", + r"^On .* wrote:$" + ] + + for pattern in patterns: + text_content = re.sub(pattern, "", text_content, flags=re.MULTILINE) + + # Supprimer les lignes vides multiples + text_content = re.sub(r'\n\s*\n', '\n\n', text_content) + + # Nettoyer au début et à la fin + text_content = text_content.strip() + + return text_content + +def format_date(date_str): + """ + Formate une date ISO en format lisible. + """ + if not date_str: + return "" + + try: + # Extraire la partie date et heure (ignorer la timezone si présente) + match = re.match(r'(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2})', date_str) + if match: + date_part, time_part = match.groups() + return f"{date_part} {time_part}" + return date_str + except Exception: + return date_str + +if __name__ == "__main__": + # Test simple + html = """

Bonjour,

+

Voici un message avec du HTML et une signature.

+

Cordialement,

+

John Doe

+

Support technique

+

Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, +nous vous invitons à envoyer vos demandes d'assistance technique à support@exemple.fr

+

![CBAO - développeur de rentabilité - www.exemple.fr](data:image/png;base64,ABC123)

+""" + + cleaned = clean_html(html) + print("HTML nettoyé :\n", cleaned) + + text = """Bonjour, + +Voici un message avec une signature. + +Cordialement, +John + +-------- Message d'origine -------- +De : Alice +Envoyé : lundi 18 mars 2025 14:52 +À : John +Objet : Test + +Bonjour John, +Comment vas-tu ? +""" + + cleaned_text = clean_text(text) + print("\nTexte nettoyé :\n", cleaned_text) +``` + +Les principales modifications sont au début de la fonction `clean_html` : + +1. Ajout d'une vérification pour les messages transférés avec une expression régulière qui cible spécifiquement l'en-tête du message. +2. Ajout d'une expression régulière pour supprimer les avertissements de confidentialité et disclaimers à la fin des messages. + +Ces modifications devraient permettre de nettoyer efficacement les messages transférés tout en préservant leur contenu utile. + +--- + +_**User**_ + +@rapport.md @all_messages.json @json_to_markdown.py @clean_html.py j'obtiens toujours le même résultat au niveau de mon rapport analyse plus précisément comment les messages transférés sont récupérés des json et établir une méthode plus éfficace de nettoyer mon rapport + +--- + +_**Assistant**_ + +Après avoir analysé attentivement vos fichiers, je remarque que le problème persiste car il y a une différence entre la façon dont les messages transférés sont stockés dans le JSON et comment ils sont traités dans votre script. + +Le problème principal est que le nettoyage des messages n'est pas appliqué correctement dans `json_to_markdown.py`. Voici une solution plus directe : + +1. Dans `json_to_markdown.py`, identifiez l'endroit où les messages sont traités et où le contenu du message est ajouté au rapport. + +2. À ce stade, ajoutez une logique spécifique pour les messages transférés : + +```python +# Dans la section de traitement des messages de json_to_markdown.py +# Pour chaque message... + +# Récupérer le corps du message +body = message.get("body", "") +is_forwarded = message.get("is_forwarded", False) + +# Appliquer un nettoyage spécial pour les messages transférés +if is_forwarded: + # Supprimer l'en-tête du message transféré + body = re.sub(r'\\?-+\s*Message transféré\s*-+.*?Copie à :.*?\n\s*\n', '', body, flags=re.DOTALL) + # Supprimer les disclaimers de confidentialité + body = re.sub(r'_+.*?Ce message et toutes les pièces jointes.*?_+\s*$', '', body, flags=re.DOTALL) + +# Appliquer le nettoyage standard +cleaned_body = clean_html(body) + +# Ajouter le corps nettoyé au rapport +if cleaned_body: + md_content.append(cleaned_body) +else: + md_content.append("*Contenu vide*") +``` + +Dans votre cas, voici la modification spécifique à apporter à `json_to_markdown.py` : + +1. Localisez la section où le corps du message est traité (recherchez `cleaned_body = clean_html(body)` ou similaire). + +2. Modifiez cette section pour traiter spécialement les messages transférés en vous basant sur la propriété `is_forwarded` qui est présente dans votre JSON. + +3. Si vous ne pouvez pas modifier `json_to_markdown.py` directement, vous pouvez adapter la fonction `clean_html` dans `clean_html.py` pour qu'elle traite spécifiquement le format exact des messages transférés tel qu'ils apparaissent dans votre JSON : + +```python +def clean_html(html_content): + if not html_content: + return "" + + # Détection et nettoyage des messages transférés basés sur le format exact dans le JSON + if "\\-------- Message transféré --------" in html_content: + # Supprimer l'en-tête du message transféré avec le format exact + header_end = html_content.find("Bonjour") + if header_end > 0: + html_content = html_content[header_end:] + + # Supprimer le disclaimer avec le format exact + disclaimer_start = html_content.find("__________________________________________________________________") + if disclaimer_start > 0: + html_content = html_content[:disclaimer_start] + + # Le reste du code de nettoyage... + + return html_content +``` + +Cette approche vise directement le format exact des messages dans votre JSON, ce qui devrait résoudre le problème même si les expressions régulières génériques ne fonctionnent pas correctement. + +--- + +_**User**_ + +peux tu me donner le code complet corrigé de json_to_markdown.py et clean_html.py@json_to_markdown.py @clean_html.py + +--- + +_**Assistant**_ + +Voici le code complet corrigé pour les deux fichiers : + +### 1. clean_html.py + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import re + +def clean_html(html_content): + """ + Nettoie le contenu HTML pour le Markdown. + Supprime les balises, les bas de page, les messages automatiques et les sections vides. + """ + if not html_content: + return "" + + # Traitement spécifique pour les messages transférés + if "\\-------- Message transféré --------" in html_content: + # Localiser le début du contenu réel (après l'en-tête du message transféré) + match = re.search(r'Copie à :.*?\n\s*\n(.*)', html_content, re.DOTALL) + if match: + html_content = match.group(1) + + # Supprimer le disclaimer de confidentialité + html_content = re.sub(r'_+.*?Ce message et toutes.*?_+\s*$', '', html_content, re.DOTALL) + + # Supprimer les balises simples + html_content = re.sub(r'|

|

|
|
', '\n', html_content) + + # Supprimer les bas de page et messages automatiques du support + html_content = re.sub(r'Droit à la déconnexion :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'\*\s*\*\s*\*.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Ce message électronique et tous les fichiers.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Afin d\'assurer une meilleure traçabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'_Confidentialité :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Support technique.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + + # Suppression de l'image signature CBAO et autres images + html_content = re.sub(r'!\[CBAO - développeur de rentabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'!\[.*?\]\(/web/image/.*?\)', '', html_content) + html_content = re.sub(r'!\[cid:.*?\]\(/web/image/.*?\)', '', html_content) + + # Supprimer toutes les références d'images avec des URLs + html_content = re.sub(r'!\[.*?\]\(http[s]?://.*?\)', '', html_content) + + # Supprimer les URL "mailto:" qui restent + html_content = re.sub(r'\[.*?\]\(mailto:.*?\)', '', html_content) + + # Supprimer les liens qui pointent vers des sites web + html_content = re.sub(r'\[.*?\]\(https?://.*?\)', '', html_content) + + # Supprimer les lignes qui contiennent "Envoyé par" suivi d'un lien + html_content = re.sub(r'Envoyé par .*$', '', html_content, flags=re.MULTILINE) + + # Supprimer les balises HTML restantes + html_content = re.sub(r'<.*?>', '', html_content) + + # Remplacer les entités HTML courantes + html_content = html_content.replace(' ', ' ') + html_content = html_content.replace('<', '<') + html_content = html_content.replace('>', '>') + html_content = html_content.replace('&', '&') + html_content = html_content.replace('"', '"') + + # Supprimer les lignes avec uniquement des ** + html_content = re.sub(r'^\s*\*\*\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) + html_content = re.sub(r'^\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) + + # Supprimer le \--- à la fin des messages + html_content = re.sub(r'\\---\s*$', '', html_content) + + # Supprimer les crochets isolés + html_content = re.sub(r'\[\s*$', '', html_content) + + # Supprimer les lignes vides multiples + html_content = re.sub(r'\n\s*\n', '\n\n', html_content) + + # Nettoyer au début et à la fin + html_content = html_content.strip() + + # Supprimer les sections vides (comme "*Contenu vide*") + if not html_content or html_content.lower() == "*contenu vide*": + return "*Contenu vide*" + + return html_content + +def clean_text(text_content): + """ + Nettoie le texte brut pour supprimer les éléments indésirables. + """ + if not text_content: + return "" + + # Supprimer les éléments de signature de messagerie + patterns = [ + r"De :.*\nEnvoyé :.*\nÀ :.*\nObjet :.*\n", + r"From:.*\nSent:.*\nTo:.*\nSubject:.*\n", + r"----+ ?Original Message ?----+\n", + r".*wrote:$", + r"^On .* wrote:$" + ] + + for pattern in patterns: + text_content = re.sub(pattern, "", text_content, flags=re.MULTILINE) + + # Supprimer les lignes vides multiples + text_content = re.sub(r'\n\s*\n', '\n\n', text_content) + + # Nettoyer au début et à la fin + text_content = text_content.strip() + + return text_content + +def format_date(date_str): + """ + Formate une date ISO en format lisible. + """ + if not date_str: + return "" + + try: + # Extraire la partie date et heure (ignorer la timezone si présente) + match = re.match(r'(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2})', date_str) + if match: + date_part, time_part = match.groups() + return f"{date_part} {time_part}" + return date_str + except Exception: + return date_str + +if __name__ == "__main__": + # Test simple + html = """

Bonjour,

+

Voici un message avec du HTML et une signature.

+

Cordialement,

+

John Doe

+

Support technique

+

Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, +nous vous invitons à envoyer vos demandes d'assistance technique à support@exemple.fr

+

![CBAO - développeur de rentabilité - www.exemple.fr](data:image/png;base64,ABC123)

+""" + + cleaned = clean_html(html) + print("HTML nettoyé :\n", cleaned) + + text = """Bonjour, + +Voici un message avec une signature. + +Cordialement, +John + +-------- Message d'origine -------- +De : Alice +Envoyé : lundi 18 mars 2025 14:52 +À : John +Objet : Test + +Bonjour John, +Comment vas-tu ? +""" + + cleaned_text = clean_text(text) + print("\nTexte nettoyé :\n", cleaned_text) +``` + +### 2. json_to_markdown.py (partie modifiée pour le traitement des messages) + +```python +#!/usr/bin/env python3 +""" +Script pour convertir les fichiers JSON de tickets en Markdown formaté. +Ce script prend les données JSON des tickets extraits et crée un fichier Markdown structuré. +""" + +import os +import sys +import json +import argparse +import re +from datetime import datetime +from utils.clean_html import clean_html, format_date + +# [Le reste du code reste inchangé jusqu'à la partie de traitement des messages] + +# Dans la section où vous traitez les messages (environ lignes ~230-270) + for i, message in enumerate(filtered_messages): + if not isinstance(message, dict): + continue + + # Déterminer l'auteur du message + author = "Système" + author_details = message.get("author_details", {}) + if author_details and author_details.get("name"): + author = author_details.get("name") + else: + author_id = message.get("author_id", []) + if isinstance(author_id, list) and len(author_id) > 1: + author = author_id[1] + + # Formater la date + date = format_date(message.get("date", "")) + + # Récupérer le corps du message + body = message.get("body", "") + + # Traitement spécial pour les messages transférés + is_forwarded = message.get("is_forwarded", False) + + if is_forwarded: + # Extraire directement le contenu important du message transféré + match = re.search(r'Bonjour.*?(?=\n\s*_+Ce message)', body, re.DOTALL) + if match: + body = match.group(0) + + # Appliquer le nettoyage standard + cleaned_body = clean_html(body) + + # Déterminer le type de message + message_type = "" + if message.get("is_stage_change", False): + message_type = "Changement d'état" + elif message.get("is_system", False): + message_type = "Système" + elif message.get("is_note", False): + message_type = "Commentaire" + elif message.get("email_from", False): + message_type = "E-mail" + + # Récupérer le sujet du message + subject = message.get("subject", "") + + # Créer l'en-tête du message + md_content.append(f"### Message {i+1}") + md_content.append(f"**author_id**: {author}") + md_content.append(f"**date**: {date}") + md_content.append(f"**message_type**: {message_type}") + if subject: + md_content.append(f"**subject**: {subject}") + + # Ajouter l'ID du message si disponible + message_id = message.get("id", "") + if message_id: + md_content.append(f"**id**: {message_id}") + + # Ajouter le corps nettoyé du message + if cleaned_body: + md_content.append(cleaned_body) + else: + md_content.append("*Contenu vide*") + + # Ajouter les pièces jointes si elles existent + attachment_ids = message.get("attachment_ids", []) + has_attachments = False + + # [Le reste du code reste inchangé] +``` + +Ces modifications apportent les changements suivants : + +1. Dans `clean_html.py` : Ajout d'une logique spécifique pour détecter et nettoyer les messages transférés, en extrayant uniquement le contenu pertinent. + +2. Dans `json_to_markdown.py` : Ajout d'une logique pour traiter spécialement les messages marqués comme "transférés" (`is_forwarded: true` dans le JSON), en extrayant directement la partie utile du message avant même d'appliquer le nettoyage standard. + +Cette double approche devrait résoudre efficacement le problème, car elle cible à la fois la structure des messages dans le JSON et applique un nettoyage spécifique aux messages transférés. + +--- + +_**User**_ + +je viens de m'apercevoir en fait mon script n(utilise peut etre pas la bonne fonction clean_html il y en a une dans son code ce qui n'est pas logique il faut établir laquelle est utilisée actuellement(bonne méthode sauf les dernières modifications que nous venons de voir) et mettre à jour clean_html.py . je voudrai que tu analyses ce problème@clean_html.py @json_to_markdown.py + +--- + +_**Assistant**_ + +Vous avez soulevé un point très important. Examinons ce problème d'utilisation de fonctions `clean_html` en double. + +En analysant vos fichiers, je constate que: + +1. Vous avez un fichier externe `utils/clean_html.py` qui contient une fonction `clean_html()`. +2. Mais dans `json_to_markdown.py`, il semble y avoir une autre fonction `clean_html()` définie directement dans ce fichier. + +Voici comment résoudre ce problème: + +### 1. Vérifiez comment la fonction est importée dans json_to_markdown.py + +Regardez au début de votre fichier `json_to_markdown.py` s'il y a une ligne d'importation comme: +```python +from utils.clean_html import clean_html, format_date +``` +ou +```python +import utils.clean_html +``` + +Si cette importation existe, alors le script utilise probablement le module externe, mais il a peut-être aussi sa propre définition locale qui "écrase" celle importée. + +### 2. Solution proposée: + +1. **Supprimez** la fonction `clean_html()` définie dans `json_to_markdown.py` (si elle existe). + +2. **Assurez-vous** que `json_to_markdown.py` importe correctement la fonction depuis `utils/clean_html.py`: + ```python + from utils.clean_html import clean_html, format_date + ``` + +3. **Mettez à jour** la fonction dans `utils/clean_html.py` avec notre nouvelle implémentation: + ```python + def clean_html(html_content): + if not html_content: + return "" + + # Traitement spécifique pour les messages transférés + if "\\-------- Message transféré --------" in html_content: + # Extraire le contenu principal (entre l'en-tête et le disclaimer) + match = re.search(r'Bonjour.*?(?=\n\s*_+Ce message)', html_content, re.DOTALL) + if match: + return match.group(0).strip() + + # Si le pattern exact n'est pas trouvé, essayer une approche plus générale + match = re.search(r'Copie à :.*?\n\s*\n(.*?)(?=\n\s*_+)', html_content, re.DOTALL) + if match: + return match.group(1).strip() + + # Code standard de nettoyage pour les messages non-transférés + # [le reste de la fonction] + ``` + +### 3. Vérifiez les appels à clean_html dans json_to_markdown.py + +Assurez-vous que tous les appels à `clean_html()` dans `json_to_markdown.py` n'utilisent pas d'arguments spécifiques qui ne seraient pas supportés par la version dans `utils/clean_html.py`. + +### 4. Code complet à vérifier + +Pour vous aider à localiser le problème, recherchez dans `json_to_markdown.py` quelque chose comme: + +```python +def clean_html(html_content): + # Une définition de fonction qui se trouve directement dans json_to_markdown.py + # et qui pourrait être en conflit avec celle importée +``` + +Si vous trouvez une telle définition, supprimez-la et assurez-vous que l'importation depuis le module externe est bien en place. + +Cette approche permettra d'unifier le nettoyage HTML dans un seul endroit, ce qui facilitera la maintenance future et résoudra le problème de nettoyage des messages transférés. + +--- + +_**User**_ + +@clean_html.py peux tu vérifié ces deux scripts et être plus précis dans ton analyse + +--- + +_**Assistant**_ + +J'ai analysé attentivement les deux scripts et je constate que le problème vient d'une duplication de la fonction `clean_html`. Voici mon analyse précise : + +### Problème identifié + +1. Dans `json_to_markdown.py`, il y a une fonction `clean_html` définie aux lignes 9-93 environ. Cette fonction est utilisée directement dans le script. + +2. Parallèlement, vous avez un module séparé `utils/clean_html.py` qui contient également une fonction `clean_html`. + +3. Bien que `json_to_markdown.py` puisse importer des éléments de `utils/clean_html.py`, il semble qu'il utilise sa propre fonction `clean_html` interne, ce qui explique pourquoi vos modifications dans `utils/clean_html.py` n'ont pas d'effet. + +### Solution précise + +1. **Supprimer la fonction `clean_html` de `json_to_markdown.py`** - C'est la source du problème car elle écrase l'importation du module externe. + +2. **Ajouter l'importation correcte au début de `json_to_markdown.py`** : + ```python + from utils.clean_html import clean_html, format_date + ``` + +3. **Assurer que tous les appels à `clean_html` dans `json_to_markdown.py` utilisent bien la fonction importée**. + +### Vérification à faire + +Vérifiez si `json_to_markdown.py` contient également une fonction `format_date`. Si oui, elle devrait aussi être supprimée et remplacée par l'importation de la fonction correspondante de `utils/clean_html.py`. + +### Code à modifier dans json_to_markdown.py + +Cherchez et supprimez cette section au début du fichier : + +```python +def clean_html(html_content): + """ + Nettoie le contenu HTML pour le Markdown. + Supprime les balises, les bas de page, les messages automatiques et les sections vides. + """ + if not html_content: + return "" + + import re + + # ... (tout le code de la fonction) + + return html_content +``` + +Et assurez-vous d'ajouter cette ligne d'importation au début du fichier (après les autres importations) : + +```python +from utils.clean_html import clean_html, format_date +``` + +Si `format_date` est également défini dans `json_to_markdown.py`, supprimez cette fonction aussi. + +### Conclusion + +Le problème est clairement une duplication de fonction. Le script principal `json_to_markdown.py` définit sa propre version de `clean_html` au lieu d'utiliser celle du module externe. En supprimant cette fonction et en ajoutant l'importation correcte, vous permettrez à vos modifications de `utils/clean_html.py` de prendre effet. + +--- + +_**User**_ + +du coup il s'agit donc bien de sa fonction interne qui formatte actuellement mes rapport il faudrait récupéré et adapter ces caractéristique dans clean_html.py avant cela il faut égaelment v"rifier si clean_html.py est utilisé autre part dans mon projet + +--- + +_**Assistant**_ + +Vous avez raison d'être prudent. Voici une approche méthodique pour résoudre ce problème : + +### 1. Vérifier si clean_html.py est utilisé ailleurs dans le projet + +Pour vérifier si `clean_html.py` est utilisé par d'autres modules dans votre projet, vous pouvez rechercher dans tous les fichiers les références à ce module. Utilisez une commande comme : + +```bash +grep -r "from utils.clean_html import" --include="*.py" ./ +``` + +ou + +```bash +grep -r "import utils.clean_html" --include="*.py" ./ +``` + +Si d'autres fichiers importent ce module, vous devrez être prudent lors de la modification de `clean_html.py` pour ne pas perturber la fonctionnalité existante. + +### 2. Adapter la fonction clean_html.py avec les caractéristiques de la version interne + +La stratégie la plus sûre est de : + +1. **Faire une copie de sauvegarde** de `clean_html.py` avant toute modification +2. **Examiner la fonction interne** dans `json_to_markdown.py` pour comprendre son comportement exact +3. **Fusionner les fonctionnalités** en intégrant vos améliorations pour les messages transférés + +### 3. Solution en deux phases + +#### Phase 1 : Ajuster clean_html.py avec la fonction interne de json_to_markdown.py + +Modifiez `clean_html.py` pour qu'il contienne la fonction de `json_to_markdown.py`, plus vos améliorations pour les messages transférés : + +```python +def clean_html(html_content): + """ + Nettoie le contenu HTML pour le Markdown. + Supprime les balises, les bas de page, les messages automatiques et les sections vides. + """ + if not html_content: + return "" + + import re + + # Traitement spécifique pour les messages transférés (VOTRE AMÉLIORATION) + if "\\-------- Message transféré --------" in html_content: + # Extraire le contenu principal (entre l'en-tête et le disclaimer) + match = re.search(r'Bonjour.*?(?=\n\s*_+Ce message)', html_content, re.DOTALL) + if match: + return match.group(0).strip() + + # Si le pattern exact n'est pas trouvé, essayer une approche plus générale + match = re.search(r'Copie à :.*?\n\s*\n(.*?)(?=\n\s*_+)', html_content, re.DOTALL) + if match: + return match.group(1).strip() + + # COPIER ICI LE RESTE DU CODE DE LA FONCTION INTERNE DE json_to_markdown.py + # ... + + return html_content +``` + +#### Phase 2 : Modifier json_to_markdown.py pour utiliser la fonction externe + +Une fois que vous avez adapté `clean_html.py` : + +1. **Supprimez** la fonction `clean_html` de `json_to_markdown.py` +2. **Ajoutez** l'import au début du fichier : + ```python + from utils.clean_html import clean_html, format_date + ``` + +### 4. Test en parallèle + +Pour minimiser les risques : + +1. **Créez une copie** de `json_to_markdown.py` (par exemple `json_to_markdown_new.py`) +2. **Modifiez cette copie** pour utiliser la fonction `clean_html` externe +3. **Testez** cette nouvelle version avant de modifier le fichier original + +Cela vous permettra de vérifier que les résultats sont identiques ou améliorés avant de faire le changement final. + +### 5. Documentation des changements + +Assurez-vous de documenter clairement les modifications pour faciliter la maintenance future : + +```python +# Dans clean_html.py +""" +Fonction clean_html améliorée pour nettoyer le HTML des tickets. +Version fusionnée : intègre la fonctionnalité de base de json_to_markdown.py +avec des améliorations pour le traitement des messages transférés. +""" +``` + +Cette approche prudente vous permettra de consolider le code tout en améliorant le nettoyage des messages transférés, sans risquer de perturber d'autres parties du système. + +--- + +_**User**_ + +peux tu me donner le code complet corrigé de ces deux fichiers + +--- + +_**Assistant**_ + +Voici le code complet corrigé pour les deux fichiers : + +### 1. utils/clean_html.py + +```python +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +Fonctions utilitaires pour nettoyer le HTML et formater les dates. +Version consolidée : intègre la fonctionnalité de base avec des améliorations +pour le traitement des messages transférés. +""" + +import re +from datetime import datetime + +def clean_html(html_content): + """ + Nettoie le contenu HTML pour le Markdown. + Supprime les balises, les bas de page, les messages automatiques et les sections vides. + """ + if not html_content: + return "" + + # Traitement spécifique pour les messages transférés + if "\\-------- Message transféré --------" in html_content: + # Essayer d'extraire le contenu principal entre "Bonjour" et le disclaimer + match = re.search(r'Bonjour.*?(?=\n\s*_+Ce message)', html_content, re.DOTALL) + if match: + html_content = match.group(0).strip() + else: + # Si ce pattern ne fonctionne pas, essayer une approche plus générale + match = re.search(r'Copie à :.*?\n\s*\n(.*?)(?=\n\s*_+|\Z)', html_content, re.DOTALL) + if match: + html_content = match.group(1).strip() + + # Transformer les balises h1 en titres Markdown + html_content = re.sub(r'

(.*?)

', r'### \1', html_content) + + # Transformer les listes à puces + html_content = re.sub(r'
    (.*?)
', r'\1', html_content, flags=re.DOTALL) + html_content = re.sub(r'
  • (.*?)
  • ', r'- **\1**\n', html_content) + html_content = re.sub(r'
  • (.*?)
  • ', r'- \1\n', html_content) + + # Supprimer les balises simples + html_content = re.sub(r'|

    |

    |
    |
    ', '\n', html_content) + + # Supprimer les bas de page et messages automatiques du support + html_content = re.sub(r'Droit à la déconnexion :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'\*\s*\*\s*\*.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Ce message électronique et tous les fichiers.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Afin d\'assurer une meilleure traçabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'_Confidentialité :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'Support technique.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + + # Suppression de l'image signature CBAO et autres images + html_content = re.sub(r'!\[CBAO - développeur de rentabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) + html_content = re.sub(r'!\[.*?\]\(/web/image/.*?\)', '', html_content) + html_content = re.sub(r'!\[cid:.*?\]\(/web/image/.*?\)', '', html_content) + + # Supprimer les balises HTML restantes + html_content = re.sub(r'<.*?>', '', html_content) + + # Remplacer les entités HTML courantes + html_content = html_content.replace(' ', ' ') + html_content = html_content.replace('<', '<') + html_content = html_content.replace('>', '>') + html_content = html_content.replace('&', '&') + html_content = html_content.replace('"', '"') + + # Supprimer les lignes avec uniquement des ** + html_content = re.sub(r'^\s*\*\*\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) + html_content = re.sub(r'^\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) + + # Supprimer le \--- à la fin des messages + html_content = re.sub(r'\\---\s*$', '', html_content) + + # Supprimer les crochets isolés + html_content = re.sub(r'\[\s*$', '', html_content) + + # Supprimer les lignes vides multiples + html_content = re.sub(r'\n\s*\n', '\n\n', html_content) + + # Nettoyer au début et à la fin + html_content = html_content.strip() + + # Supprimer les sections + +--- + --- diff --git a/output/ticket_T0128/T0128_20250404_110108/all_messages.json b/output/ticket_T0128/T0128_20250404_110108/all_messages.json new file mode 100644 index 0000000..24e65f8 --- /dev/null +++ b/output/ticket_T0128/T0128_20250404_110108/all_messages.json @@ -0,0 +1,272 @@ +{ + "ticket_summary": { + "id": 140, + "code": "T0128", + "name": "Bug !!!", + "project_id": 3, + "project_name": "Demandes", + "stage_id": 8, + "stage_name": "Clôturé", + "date_extraction": "2025-04-04T11:01:11.939881" + }, + "metadata": { + "message_count": { + "total": 18, + "processed": 6, + "excluded": 12 + }, + "cleaning_strategy": "standard", + "cleaning_config": { + "preserve_links": true, + "preserve_images": true, + "strategy": "html2text" + } + }, + "messages": [ + { + "id": 10948, + "body": "\\-------- Message transféré -------- Sujet : | Création module essai dégradation de chaussée \n---|--- \nDate : | Mon, 30 Mar 2020 11:18:20 +0200 \nDe : | [d.labourguigne@gironde.fr](mailto:d.labourguigne@gironde.fr) \nPour : | Youness BENDEQ [](mailto:youness.bendeq@cbao.fr) \nCopie à : | [sebastien.goursolle@gironde.fr](mailto:sebastien.goursolle@gironde.fr), [jean-francois.estrade@gironde.fr](mailto:jean-francois.estrade@gironde.fr), [benjamin.derobert@gironde.fr](mailto:benjamin.derobert@gironde.fr) \n \nBonjour Youness,\n\nJ'espère que ça roule pour vous et vos proche.\n\nComme convenu ensemble la semaine dernière, je vous transmet des documents ou extraits de documents afin de voir avec Mr Tidona la possibilité de créer un nouvel essai in-situ pour les Relevés de Dégradations de Chaussée sur la version web.\n\nVous recevrez en 2 ou 3 fois car les PDF sont un peu lourd. \n\nNous restons à votre disposition pour tout renseignements complémentaire sur cette requête. \n\nCordialement \n\n**David LABOURGUIGNE** LABORATOIRE **Direction des Infrastructures** 05.56.99.33.33 - poste 7299 ![](/web/image/31797?access_token=a497138e-fcec-4b54-92db-639179af300b) [► Suivez l'actualité de votre Département, abonnez-vous aux newsletters](https://www.gironde.fr/newsletters) [ ](https://www.gironde.fr/newsletters)\n\n__________________________________________________________________ Ce message et toutes les pièces jointes sont confidentiels et établis à l'intention exclusive de ses destinataires. Ce message ne constitue pas un document officiel. Seuls les documents revêtus de la signature du Président du Conseil Départemental ou d'un de ses délégataires sont de nature à engager le Département. Toute utilisation ou diffusion non autorisée est interdite. Tout message électronique est susceptible d'altération et le Département de la Gironde décline toute responsabilité au titre de ce message s'il a été altéré, déformé, falsifié. __________________________________________________________________", + "date": "2020-03-31 19:37:30", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "Youness BENDEQ ", + "message_type": "email", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 1, + "Discussions" + ], + "subject": "Création module essai dégradation de chaussée", + "tracking_value_ids": [], + "attachment_ids": [ + 31800, + 31799, + 31797 + ], + "is_system": false, + "is_stage_change": false, + "is_forwarded": true, + "is_duplicate": false, + "body_original": "
    \r\n
    \r\n

    \r\n
    \r\n -------- Message transféré --------\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    Sujet :\r\n Création module essai dégradation de chaussée
    Date : Mon, 30 Mar 2020 11:18:20 +0200
    De : d.labourguigne@gironde.fr
    Pour : Youness BENDEQ <youness.bendeq@cbao.fr>
    Copie\r\n à : sebastien.goursolle@gironde.fr,\r\n jean-francois.estrade@gironde.fr,\r\n benjamin.derobert@gironde.fr
    \r\n
    \r\n
    \r\n \r\n
    Bonjour Youness,
    \r\n

    \r\n
    \r\n
    J'espère que ça roule pour vous et vos proche.
    \r\n

    \r\n
    \r\n
    Comme convenu ensemble la semaine dernière, je vous\r\n transmet des documents ou extraits de documents afin de voir\r\n avec Mr Tidona la possibilité de créer un nouvel essai\r\n in-situ pour les Relevés de Dégradations de Chaussée sur la\r\n version web.
    \r\n

    \r\n
    \r\n
    Vous recevrez en 2 ou 3 fois car les PDF sont un peu\r\n lourd.
    \r\n
    \r\n

    \r\n
    \r\n
    Nous restons à votre disposition pour tout\r\n renseignements complémentaire sur cette requête.
    \r\n
    \r\n

    \r\n
    \r\n
    Cordialement
    \r\n
    \r\n
    \r\n \r\n


    \r\n David LABOURGUIGNE
    \r\n LABORATOIRE
    \r\n Direction des Infrastructures
    \r\n 05.56.99.33.33 - poste 7299
    \r\n \r\n \"\"\r\n \r\n
    \r\n
    \r\n ►\r\n Suivez l'actualité de votre Département, abonnez-vous\r\n aux newsletters
    \r\n  
    \r\n

    \r\n

    \r\n
    \r\n
    \r\n __________________________________________________________________
    \r\n
    \r\n
    \r\n
    \r\n Ce message et toutes les pièces jointes sont confidentiels et\r\n établis à l'intention exclusive de ses destinataires. Ce message\r\n ne constitue pas un document officiel. Seuls les documents revêtus\r\n de la signature du Président du Conseil Départemental ou d'un de\r\n ses délégataires sont de nature à engager le Département.
    \r\n
    \r\n Toute utilisation ou diffusion non autorisée est interdite.
    \r\n
    \r\n Tout message électronique est susceptible d'altération et le\r\n Département de la Gironde décline toute responsabilité au titre de\r\n ce message s'il a été altéré, déformé, falsifié.
    \r\n
    \r\n __________________________________________________________________
    \r\n
    \r\n
    \r\n", + "author_details": { + "name": "Youness BENDEQ", + "email": "youness@cbao.fr", + "is_system": false, + "id": 10288, + "phone": false, + "function": "Support technique / Chargé de clientèle", + "company_id": [ + 1, + "CBAO S.A.R.L." + ] + } + }, + { + "id": 10947, + "body": "", + "date": "2020-03-31 19:41:36", + "author_id": [ + 2, + "OdooBot" + ], + "email_from": "\"OdooBot\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 16, + "Task Created" + ], + "subject": false, + "tracking_value_ids": [ + 1379, + 1380, + 1381, + 1382, + 1383 + ], + "attachment_ids": [], + "is_system": true, + "is_stage_change": true, + "is_forwarded": false, + "is_duplicate": false, + "author_details": { + "name": "OdooBot", + "email": "odoobot@example.com", + "is_system": true, + "id": 2, + "phone": false, + "function": false, + "company_id": [ + 1, + "CBAO S.A.R.L." + ] + } + }, + { + "id": 10953, + "body": "", + "date": "2020-03-31 19:59:29", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 1388, + 1389 + ], + "attachment_ids": [], + "is_system": true, + "is_stage_change": true, + "is_forwarded": false, + "is_duplicate": false, + "author_details": { + "name": "Youness BENDEQ", + "email": "youness@cbao.fr", + "is_system": false, + "id": 10288, + "phone": false, + "function": "Support technique / Chargé de clientèle", + "company_id": [ + 1, + "CBAO S.A.R.L." + ] + } + }, + { + "id": 11148, + "body": "", + "date": "2020-04-10 15:24:44", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 1632 + ], + "attachment_ids": [], + "is_system": true, + "is_stage_change": true, + "is_forwarded": false, + "is_duplicate": false, + "author_details": { + "name": "Youness BENDEQ", + "email": "youness@cbao.fr", + "is_system": false, + "id": 10288, + "phone": false, + "function": "Support technique / Chargé de clientèle", + "company_id": [ + 1, + "CBAO S.A.R.L." + ] + } + }, + { + "id": 13130, + "body": "", + "date": "2020-06-10 15:33:11", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 4006 + ], + "attachment_ids": [], + "is_system": true, + "is_stage_change": true, + "is_forwarded": false, + "is_duplicate": false, + "author_details": { + "name": "Youness BENDEQ", + "email": "youness@cbao.fr", + "is_system": false, + "id": 10288, + "phone": false, + "function": "Support technique / Chargé de clientèle", + "company_id": [ + 1, + "CBAO S.A.R.L." + ] + } + }, + { + "id": 15368, + "body": "", + "date": "2020-07-15 14:53:40", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 5986 + ], + "attachment_ids": [], + "is_system": true, + "is_stage_change": true, + "is_forwarded": false, + "is_duplicate": false, + "author_details": { + "name": "Youness BENDEQ", + "email": "youness@cbao.fr", + "is_system": false, + "id": 10288, + "phone": false, + "function": "Support technique / Chargé de clientèle", + "company_id": [ + 1, + "CBAO S.A.R.L." + ] + } + } + ] +} \ No newline at end of file diff --git a/output/ticket_T0128/T0128_20250404_110108/all_messages.txt b/output/ticket_T0128/T0128_20250404_110108/all_messages.txt new file mode 100644 index 0000000..785c7c4 --- /dev/null +++ b/output/ticket_T0128/T0128_20250404_110108/all_messages.txt @@ -0,0 +1,93 @@ +TICKET: T0128 - Bug !!! +Date d'extraction: 2025-04-04 11:01:11 +Nombre de messages: 6 + +================================================================================ + +******************************************************************************** +*** MESSAGE TRANSFÉRÉ *** +******************************************************************************** + +DATE: 2020-03-31 19:37:30 +DE: Youness BENDEQ +OBJET: Création module essai dégradation de chaussée + +\-------- Message transféré -------- Sujet : | Création module essai dégradation de chaussée +---|--- +Date : | Mon, 30 Mar 2020 11:18:20 +0200 +De : | [d.labourguigne@gironde.fr](mailto:d.labourguigne@gironde.fr) +Pour : | Youness BENDEQ [](mailto:youness.bendeq@cbao.fr) +Copie à : | [sebastien.goursolle@gironde.fr](mailto:sebastien.goursolle@gironde.fr), [jean-francois.estrade@gironde.fr](mailto:jean-francois.estrade@gironde.fr), [benjamin.derobert@gironde.fr](mailto:benjamin.derobert@gironde.fr) + +Bonjour Youness, + +J'espère que ça roule pour vous et vos proche. + +Comme convenu ensemble la semaine dernière, je vous transmet des documents ou extraits de documents afin de voir avec Mr Tidona la possibilité de créer un nouvel essai in-situ pour les Relevés de Dégradations de Chaussée sur la version web. + +Vous recevrez en 2 ou 3 fois car les PDF sont un peu lourd. + +Nous restons à votre disposition pour tout renseignements complémentaire sur cette requête. + +Cordialement + +**David LABOURGUIGNE** LABORATOIRE **Direction des Infrastructures** 05.56.99.33.33 - poste 7299 ![](/web/image/31797?access_token=a497138e-fcec-4b54-92db-639179af300b) [► Suivez l'actualité de votre Département, abonnez-vous aux newsletters](https://www.gironde.fr/newsletters) [ ](https://www.gironde.fr/newsletters) + +__________________________________________________________________ Ce message et toutes les pièces jointes sont confidentiels et établis à l'intention exclusive de ses destinataires. Ce message ne constitue pas un document officiel. Seuls les documents revêtus de la signature du Président du Conseil Départemental ou d'un de ses délégataires sont de nature à engager le Département. Toute utilisation ou diffusion non autorisée est interdite. Tout message électronique est susceptible d'altération et le Département de la Gironde décline toute responsabilité au titre de ce message s'il a été altéré, déformé, falsifié. __________________________________________________________________ + +-------------------------------------------------------------------------------- + +******************************************************************************** +*** CHANGEMENT D'ÉTAT *** +******************************************************************************** + +DATE: 2020-03-31 19:41:36 +DE: OdooBot + + + +-------------------------------------------------------------------------------- + +******************************************************************************** +*** CHANGEMENT D'ÉTAT *** +******************************************************************************** + +DATE: 2020-03-31 19:59:29 +DE: Youness BENDEQ + + + +-------------------------------------------------------------------------------- + +******************************************************************************** +*** CHANGEMENT D'ÉTAT *** +******************************************************************************** + +DATE: 2020-04-10 15:24:44 +DE: Youness BENDEQ + + + +-------------------------------------------------------------------------------- + +******************************************************************************** +*** CHANGEMENT D'ÉTAT *** +******************************************************************************** + +DATE: 2020-06-10 15:33:11 +DE: Youness BENDEQ + + + +-------------------------------------------------------------------------------- + +******************************************************************************** +*** CHANGEMENT D'ÉTAT *** +******************************************************************************** + +DATE: 2020-07-15 14:53:40 +DE: Youness BENDEQ + + + +-------------------------------------------------------------------------------- diff --git a/output/ticket_T0128/T0128_20250404_110108/attachments/Extrait_Methode_Essai_degradation_chaussee_1_.pdf b/output/ticket_T0128/T0128_20250404_110108/attachments/Extrait_Methode_Essai_degradation_chaussee_1_.pdf new file mode 100644 index 0000000..99c6b8f --- /dev/null +++ b/output/ticket_T0128/T0128_20250404_110108/attachments/Extrait_Methode_Essai_degradation_chaussee_1_.pdf @@ -0,0 +1,708 @@ + Méthode d' + + Complien~11ent + +,. Catalogue des dégradations + + jj de surface des chaussées + +l. + ' + ____,,,... + +Catalogue des dégradations + de surface des chaussées + + version 1998 + + Méthode d'essai N° 52 + Complément à la méthode d'essai N° 38-2 + Relevé des dégradations de surface des chaussées + + mars 1998 + + LCPC + + Ir\ + + Laboratoire Celltllll des Ponts et Clwssées + + sa, bot.ievad LefeiMe- 1m2 Paris cma '6 + - + 1 + 1 + -i + il : + +- Ce document est disponible + + au prix de 250 F + + au Laboratoire central des Ponts et Chaussées + + 1ST - Diffusion des éditions + + téléphone 01 40 43 52 26, + + télécopie 01 40 43 54 95, + + sur internet http://www.lcpc.fr + + 58, boulevard Lefebvre + + 75732 PARIS CEDEX 15 + + Ce document est propriété de l'Administration + + et ne peut être reproduit, même partiellement, + sais l'autorisation du Directeur du Laboratoire + + central des Ponts et Chaussées + cou de ses représentants autorisés). + + © 1998- LCPC + ISSN 1167-489X + !SBN J-720S•3760-i + Sommaire + + Présentation ...................................................................................-4 + par M.Jean-Francois CORTE + Ingénieur en Chef des Ponts et Chaussées. L.ŒC + + 1. Objectifs du catalogue ..................................................5 + + 2. Conception et réallsatlon + du catalogue...........................................................................7 + + 3. Généralités sur les dégradations.,_ 9 + + 4. Les dégradations des assises + + de chaussées autres + + que les chaussées en béton _ __ 23 + + c.e document a été rédigé par un groupe Chaussées souples traditionnelles, + + de travail du réseau des laboratoires bitumineuses épaisses, à assises traitées + des Ponts et Chaussées composé + de MM.L BERTRAND (Laboratoire régional aux liants hydrauliques, mixtes, inverses + des Ponts et Chaussées de Strasbourg). + M. BOUTONNET (Laboratoire régional FICHES N° 01 A16 _ _ _ _ _ _ _ 24 + des Ponts et Chaussées de Nancy). +J. CAZENEUVE (Laboratoire régional 5. Les dégradations des chaussées +de l'Ouest parisien). en béton .................................................................................-57 +J. CHABROL (Laboratoire régional +des Ponts et Chaussées de Blois). Chaussées en dalles de béton +M. DAUZATS (Laboratoire régional +des Ponts et Chaussées d'Aix-en-Provence). FICHES N° 21 A31 ....................... ............... 58 +J.-F. GRISELIN et A (OQUEREAU (Laboratoire régional +des Ponts et Chaussées d'Angers), Chaussées en béton armé continu +J.P. POILANE (Laboratoire régional +des Ponts et Chaussées d•Autun). Fiches n° 41 à 47.................................................................69 + +B RoBERT (Laboratoire régional 6. Les dégradations des couches + de roulement en béton bitumineux +des Ponts et Chaussées de Saint-Brieuc). et des enduits superficiels d'usure...................77 + +Ph. LEPERT (Laboratoire Central Couches de roulement en béton bitumineux +des Ponts et Chaussées), FICHES N° 51 À 58 ......................_ _...............................78 +M.S1FFERT (Centre coordonnateur de Trappes). Enduits superficiels d'usure + + FICHES N° 61 A67 ...................................................................86 + + 7. Références blbllographiques ................................93 + Il Présentation + +Ill par M.Jean-FrançoisCoRTE +Ill Ingénieur en Chef des Ponts et Chaussées + +Il l...(llC + +Il E, 1971, était P"bllé "" pram~, oatalog"• do dégca- + +•• dation des chaussées. L'objectif était alors de constituer +;, un moyen d'uniformisation du vocabulaire et de l'appré- + ciation portée sur l'établissement du diagnostic sur l'état + d'une chaussée. fions de surface des chaussées. Dans la seconde édition de + ce document, en date de mai 1997, pour chaque mode + L'amélioration, depuis lors, des méthodes de mesure des de relevé,il est indiqué une codification des dégradations + caractéristiques de déformabilité et de la géométrie des selon la nature et le niveau de gravité. De manière à + profils en long et en travers ou l'émergence de nouvelles réduire la part de subjectivité dans l'appréciation de ces + méthodes d'investigation comme les techniques radar dégradations, il était nécessaire de fournir des éléments + n'ont en aucune façon réduit l'importance des relevés de repère, sous la forme d'illustrations typiques de + des dégradations de surface. Afin d'améliorer la fiabilité chaque situation. C'est l'objet du présent catalogue qui + et la précision des informations fournies par ces inspec- constitue donc l'annexe de la méthode d'essai.À la diffé- + tions visuelles, les laboratoires des Ponts et Chaussées se rence de la version de 1971,celle-ci vise à être exhaustive + sont attachés à formaliser les relevés de dégradation. en regard des dégradations identifiées par la méthode + L'aboutissement de ce travail a été l'édition de la d'essai. + méthode d'essai LPC N°38 intitulée Relevé des dégrada- + Ce catalogue n'a pu être réalisé qu'avec une large contri- + bution des laboratoires régionaux des Ponts et Chaussées + et à l'issue d'une analyse et d'un tri critique de l'ensemble + des clichés recueillis. + dat1. ons r,.~\J:~·'_,;.,evP~';a.o>,1r-?,J,v1.· + +3.1. Définitions + des dégradations + +3.1 -1 LES D~FORMATIONS + +Ornière à grand rayon +Déformation permanente longitudinale qui $ crée sous +le passage des roues et dont la largeur est supérieure à +80 cm .Elle peut concerner l'une ou les deux bandes de +roulement. + + d :profondeur d'ornière + Emplacement des bandes de roulement + +Ornière à petit rayon IA•• Rive 1 + +Déformation permanente longitudinale qui $ crée sous // +le passage des roues et dont la largeur est inférieure à +80 cm. Elle peut concerner l'une ou les deux bandes de dr · · - · 7, / +roulement . + + d :amplitude d'ornière + Emplacement des bandesde roulement + JI Catalogue des dégradations de surface des chaussées + +Il Affaissement de rive Rive + 1 Axe +Ill Enfoncement prononcé localisé à la partie de la chaussée +fi comprise entre le bord et la bande de roulement de rive. ~- -_-<.'_,_ _ _ _ _ _ _ _ _ ; ~~":' -$, +fi + d :profondeur de l'affaissement +11 Emplacement des bandes de roulement + +•• Affaissement hors rive (ou flache) Rivf' + +Il Enfoncement ponctuel, prononcé, localisé à gauche ou I"'" + dans la bande de roulement de rive. L'affaissement hors +• rive prend le nom de 'flache" lorsqu'il a une forme ==-YI + circulaire . +lii +Ill 1 ..d :proio--n-de_u_rd-e-l'a-ff-aissement •• 1 +Ill + Emplacement des bandes de roulement +Ill + Gonfle Rive +-- + Soulèvement ponctuel, le plus souvent circulaire, de la . - V L-·:.,-~-~~~----d----.V/ +Il chaussée. + d :amplitude de ta gonfle +1111 Emplacement des bandes de roulement + +li Bourrelet transversal + + Renflement linéaire apparaissant de manière sensible- + ment perpendiculaire à l'axe de la chaussée. + + Décalage de Joint (de dalle ou de bord de fissure) z:__· 1Axe __ 7 + iiL,,,,_--_·' ··- --/; ; + Dénivellation verticale entre les deux lèvres d'un joint de + dalle ou d'une fissure. d + + · + + Rive + + d :amplitude du décalage de dalle + Emplacement des bandes de roulement + Généralités sur les dégradations + +Tôle ondulée + +Ondulation régulière et rapprochée perpendiculaire à +l'axe de la chaussée. + +Flambement + +Renflement localisé par la mise en compression d'un joint +de dalle. + +3.1.2. LES FISSURES + +Une fissure est une ligne de rupture apparaissant à la sur- +face de la chaussée. + +Fissure transversale + +Fissure sensiblement perpendiculaire à l'axe de la chaus- + +sée isolée ou périodique d'espacement variable,intéres- 'A11ir + +sant tout ou partie de la largeur de la chaussée. 1 + + Emplacementdes bandes de roulement + +Fissure longitudinale +dans les bandes de roulement + +Fissure sensiblement parallèle à l'axe de la chaussée +apparaissant exclusivement dans une bande de roule- +ment. + + Emplacement des bandes de roulement + +Fissure longitudinale non spécifique !' Axe __ ,,, J, , ./) ,".--/-... // +aux bandes de roulement 1 + +c~ , F·ssurc sens blemer·t pil1a'lélE- à l'axP (h.i1.,ssée n:ir + +l'r-1i:éc- Jux h;inj('s · ---·-· Ri~e + + Emplacement des bandes de roulement + + l + +Fissure oblique ,· / + 'Aie +Cassure de dalle rejoignant deux côtés adjacents et située 1 +à plus de 50 cm du coin de dalle. + 1 + + ' + + ,, J,_-,L- - - - - - + + R,oe + + Emplacement des bandes de roulement + + 1 -- 1 + + Il + + 1 + Ill + + Catalogue des dégradations de surface des chaussées + +,_ 3.1.3. LES ARRACHEMENTS Écaillage + Désintégration superficielle localisée de la surface du +•- Glaçage béton . +• + Aspect lisse et brillant de la surface de la couche de rou- Épaufrure (de bord de dalle) +Il lement résultant de l'usure des gravillons. Effritement du bord de dalle au niveau du joint. +Il +Il Plumage Découvrement d'armature + Arrachement des gravillons du revêtement. Départ localisé de matériau laissant apparaître une arma- +1 ture (chaussées en béton armé continu). +1 Désenrobage +1 Départ du mastic (liant et fines) autour des granulats 3.1.4. LES MOUVEMENTS DE MATiRIAUX + d'une couche de roulement en enrobés. +1 Ressuage +1 Peignage Remontée du liant à la surface de la chaussée recouvrant +1 Départ de gravillons se développant suivant des sillons tout ou partie des granulats. + parallèles à l'axe de la chaussée. +1 Indentation +1 Dégradation du Joint longitudinal Enfoncement de gravillons dans !'enrobé en période + Départ de gravillons au raccordement longitudinal de chaude sous l'action du trafic. + deux bandes de mise en œuvre d'enduits superficiels. + Remontée de fines + Pelade Apparition d'éléments fins à la surface de la chaussée pro- + Arrachement de la couche de roulement par plaque. venant de l'assise ; ces remontées sont généralement + localisées au droit de défauts de la couche de roulement : + Tête de chat fissure, faïençage, flache.etc. + Pierre dure apparaissant à la surface de la chaussée après + usure de la couche de roulement pour les chaussées clas- Rejet de pompage + siques.ou du mortier pour les chaussées en béton. Éjection de matériaux (eau, boue...) à la surface de la + chaussée lors du passage des véhicules lourds.au niveau + Nid de poule des fissures ou des joints par suite de l'existence de cavi- + Cavité circulaire créée à la surface de la chaussée par tés sous les dalles. + départ de matériaux. + + M + Généralités SU" les dégradations + +3.2. Processus Usure de la couche de roulement se traduisant par le + de dégradat.ion polissage des gravillons, leur arrachement ou ~elui du + mortier sous l'effet du frottement des pneumatiques et + des efforts tangentiels exercés par les charges roulantes. + + des chaussées • Ornière par fluaae dit"à petit rayon· de la couche de rou- + +Ce paragraphe est cohérent avec le guide technique lement ou de son support bitumineux sous l'effet du tra- +Conception et dimensionnement des structures de chaussée fic lourd. +[16). dont il s'inspire. + • Fissuration de la couche de roulement liée à une mau- +3.2.1. PROCESSUSG~N~RAL vaise exécution des joints de construction, au vieillisse- + ment du liant ou à une sensibilité du bitume aux + contraintes thermiques. + +Les chaussées évoluent et se dégradent essentiellement Certaines dégradations ne sont observées en France que +sous l'effet du trafic lourd et des conditions climatiques.La sur quelques types de structures.li s'agit en particulier des +rapidité de cette évolution et les désordres qui apparais- fissures transversales de retrait sur les structures compor- +sent sont également liées à la nature et à l'épaisseurdes tant une assise traitée aux liants hydrauliques. On trouve +matériaux utilisés et à leurs conditions de fabrication et de également des dégradations spécifiques aux chaussées +mise en œuvre. en béton comme l'écaillage lié aux chocs thermiques ou + à une mauvaise mise en œuvre, ou les cassures d'angles +Certains désordres consécutifs à l'instabilité du support consécutives à la fatigue des dalles. +de la chaussée (remblai ou terrain naturel) peuvent appa- +raître indépendamment du trafic et du climat. Pour chaque type de structure,la nature, l'origine et l'évo- + lution des dégradations ont des spécificités qui sont pré- +Les dégradations les plus couramment rencontrées se sentées dans les fiches de dégradations et résumées +classent en deux grandes familles: les dégradations struc- ci-après. +turelles et les dégradations superficielles. Les premières +apparaissentau sein de la structure de chaussée ou de son 3.2.2. SPl!CIFICITl!S PAR TYPE +support et mettent en cause le patrimoine. Les secondes DE STRUCTIJRE +prennent naissance dans la couche de surface de la chaus- +sée et affectent d'abord ses qualités superficielles. 3.2.2.1. Les chaussées souples traditionnelles + +Les principales dégradations de ces deux familles et leurs • Définition +causes sont structurelles ou superficielles. + +Dégradations structurelles On appelle "chaussée souple traditionnelle" une structure + comportant une couverture bitumineuse d'épaisseur + +• Fissuration de fatigue des assises de chaussée ou de la inférieure ou égale à 15 cm et une ou plusieurs couches + +couche de roulement due à la répétition des efforts de de matériaux granulaires non traités. + +traction par flexion au passage des charges.Cette dégra- + +dation apparaît dans les bandes de roulement parallèle- L'épaisseur totale courante varie généralement dans un + +ment à l'axe de la chaussée ; elle évolue vers un intervalle de 20 à 50 cm. + +fa'i'ençage à mailles de plus en plus fines pouvant + +prendre l'aspect, sur certaines structures, d'une fissura- • Fonctionnement +tion en dalles. + + Étant donné la faible épaisseur de matériaux traités, ces + +Déformations structurelles dues à un sol support peu structures de chaussées transmettent les contraintes + +portant et insuffisamment protégé pa~ la chau_s~ée, ou à engendrées par la circulation en ne les atténuant que fai- +des matériaux de chaussée de mauvaise quahte.11 Pe+Jt blement. + +s'agir d'ornière à grand rayon, d'affaissem~ntsde rive ou + +de flache suivant la localisation et l'extension des défor- Dans ces conditions, la répétition de ces contraintes va + +mations. entraîner une déformation plastique de l'assise granulaire 1 + ou du sol et se traduire par des déformations perma- + +Dégradations superficielles nentes en surface. + +Remontées de Hant en excès à la surface de la couche de En période pluvieuse ou de dégel on peut observer une 1 + +roulement lors de périodes chaudes. élévation de la teneur en eau du support localisée sur les + + 1 + + 1 + Catalogue des dégradations de surface des chaussées + +bords de chaussée dans le premier cas, généralisée dans plastiques significatives (entrainant des déformations per- +le second. manentes de la structure) en dehors de circonstances + exceptionnelles comme le dégel ou les périodes très plu- +La faible rigidité de ces chaussées les rend sensibles â 1a vieuses. + +réduction de portance due â l'élévation de la teneur en En contrepartie,les efforts induits par le trafic sont repris +eau du support qui en résulte. en traction-flexion par les couches bitumineuses. En + général c'est la couche bitumineuse la plus profonde qui +La couverture bitumineuse reposant sur un support peu subit les allongements les plus importants et se rompt par +rigide est sollicitée â S:I base par des efforts de traction- fatigue. Une couche située au-dessus d'une interface +flexion. Leur répétition peut conduire â S:1 rupture. décollée peut également se rompre par fatigue. + + • Mode de dégradation • Mode de dégradation + + L'évolution caractéristique des chaussées souples tradi- L'évolution caractéristique des chaussées bitumineuses + tionnelles comporte donc : épaisses comporte donc, en dehors des phénomènes + spécifiques â l'usure et au vieillissement de leur couche + l'apparition de déformations permanentes (flaches, affais- de roulement, les phases suivantes: + sements de rive et ornière â grand rayon) qui croissent + en gravité (amplitude verticale) et en étendue, • l'apparition dans les bandes de roulement d'une fissura- + tion longitudinale qui se ramifie, se dédouble et évolue + • l'apparition d'une fissuration longitudinale dans les vers un faîençage de plus en plus fin ; + bandes de roulement,qui se ramifie, se dédouble et évo- + lue vers un faiençage â mailles fines. • l'apparition de déformations permanentes dans des + conditions exceptionnelles (dégel en particulier). + La fissuration favorise les infiltrations d'eau qui amplifient + la réduction de portance du support en période plu- Pour la première phase qui constitue le processus normal + vieuse, donc aggravent les déformations permanentes ; de dégradation des chaussées bitumineuses épaisses, la +ces infiltrations d'eau accélèrent également l'évolution de fissuration favorise les infiltrations d'eau. Ces infiltrations + la fissuration en provoquant l'épaufrure des bords de fis- provoquent l'épaufrure des bords de fissure et accélèrent +sure, des arrachements puis des nids de poule. le désenrobage des matériaux bitumineux. Bles sont + donc â l'origine de l'aggravation du faïençage puis des +En période de dégel, l'augmentation très rapide des arrachements et des nids de poule. +déformations permanentes peut conduire â la ruine de ce +type de chaussée si des mesures de restriction du trafic 3.2.2.3. Les chaussées à assise traitée aux liants +poids lourds ne sont pas prises. hydrauliques + +3.2.2.2. Les chaussées bitumineuses épaisses • Définition + +• Définition Ces chaussées ont une structure qui se compose d'une +Ces chaussées ont une structure qui comporte une couche couche de roulement bitumineuse sur une assise de +de roulement bitumineuse sur une assise en matériaux chaussée en matériaux traités aux liants hydrauliques. +traités aux liants hydrocarbonés faite d'une ou deux couches L'assise de chaussée peut comporter une ou deux +(base et fondation). couches dont l'épaisseur totale est comprise entre 15 et + 50 cm. L'épaisseur de la couverture bitumineuse est infé- +L'épaisseur des couches d'assise est supérieure â 15 cm. rieure au tiers de l'épaisseur totale de la chaussée. + +Des chaussées souples traditionnelles, après rechargements • Fonctionnement +successifs en enrobés, peuvent appartenir â ce type de +chaussée. La grande rigidité de œs assises s'accompagne d'une + faible capacité â se déformer qui les rend sujettes à la fis- +• fonctionnement +La rigidité et la résistance en traction des couches d'assise suration transversale sous l'effet des retraits de prise et +permettent de diffuser, en les atténuant fortement, les thermique. Pour les chaussées à assise traitée non préfis- +contraintes verticales engendrées par le trafic et trans- surées et suivantle type de climat et les matériaux,l'espa- +mises au support de l'assise.Celui-ci est donc en général cement normal des fissures est compris entre 7 et 15 m. +suffisamment protégé pour ne pas subir de déformations + En raison de leur grande rigidité, ces structures atténuent + fortement les contraintes verticales transmises au sol sup- + Généralités sur les dégradations 1 + + .1 + +3.3 . Tables des dégradations et des chaussées concernées + +3.3.1. LES DaiRADATIONS DES ASSISES DE CHAUSS~ES AUTRES QUE LES CHAUSS~ES EN ettoN + +• Chaussées souples traditionnelles, bitumineuses épaisses, à assises traitées aux liants hydrauliques, mixtes,inverses + +Type de dégradations Numéros de fiches +Ornière à §rand rayon +Affai~sement rh1e 01 +Affaissement hors rive (ou flache) +Bourrelet tran5VerSolll 02 +Gonfle +Fi$!>ure trans\rersale 03 + 04 + +a e 1 su,e a ap a 10n r • n 1 + +J:issutes. .,en dallesw 1 !111'3 + dë111i le~ · 1 +MW +Remontée de fines + +Tête r.techat 14 + 15 +Tôle ondulée 16 + +Nitl. " ·.: ··.:{!:r,;~~,/? + + .-La,·,,, ,..,, ,, ... . . . ,.. , ..... + + .:\~' J + + f.Jl . ,. -~,_:'.-~~- ·, .. - ... .:::.,:._.·._._,_:-::...=·:~-.:,.~·;~. ,.::_._·:. .· + ··>}!(.:~f{~ + ~ ::: ...,:;.! :' .. . ~;; :.! :. : ·. + ·,t:~ + , . . . •• ,,. ', "· l + -~- .:: :·. .:.::·.:; \·i:•::::·~~-:_.-:::;?~}) + + i ~t&.lilm;;)i, ,,;:;:fi~fJit utr,ghitifi),{ititt~¾:~=~ifh~!rft:]f~iti;f.qlt~t~(tf!-l.i1·-i;·•l~?f-~ail(· üf;r!:.~;.\:::'! ;«:·';'.;.:~;'.,:::·,:.·:.:.:,:.;_.::; ft?:·.t •i {-.'i/\ -,-.:1~; , 1 + ..~. t;~f~=~:~t-r-;,:-:. ~·:.:·.:·, :,:.- ·_:_:/; ,. :l/ :·:.;·:~--~:t~;\.~.\!,~;~;t~r~~,fft;;;t~~.; .,,t~~:;zt~î.~,:;~•i~~ / f~ .. ~i\_t1}-t; 1 ~-~ ~ ,1 .. -~.•-1Zt.!l.°,1~..,•..\;.•.;.:..1.•t:1t,.t.-',,...4..,:~,..·,":•..,,~•~....,...•..•.....•·..•··•Î1 + ~:_._:_;_,~ + . .... ' . -. .. • •' . ,- =..!..', -.. ..~ -.-: ,.-.:,·..:~' ,;~·:•,.,•.'· , 1:·~·.•...'•, 1 •. • ,.... . ., . •·.-•·1\ .·•r•.~.. ...-.,.:...r.....,..,.-.1,.•,,.,~.•..~•..~U,, .'.,,~lt-l"•,'.1·~"•~l>W•~,· •~ f~.~-~ ttia'.~\•.1:-\,..":.i..(l,.•.;..,l',11.,:~l,·1•~~~;•~-,•\",I.l••.1~;.,-.·•:• 't•....·. + \ + ,;,•,t•,·{• '\ i •• ' • •• , ~'; . ' 1,t','•1. ........ . . , ' ,._,), ~ ,• •r• + •.• . .••!' !' + }Ji_~,. ~•_'.'. + . . J!1~~?-W(; J/; r!/:,} t}Pl ~t;~mi;i:~!rTI:-E? /\?\. :'1;.t;<;;'. i: :;.'.:':;...·,:.-.· :i (f~IE\{~} ~ -::!:):·/:/ ;;. I.' : ; • + 11 + + _,.r, ;, ')•~ 1 _,,.\ ".,,(\ ! \ + . ! l: r ~ ! ~ ~•.;· ~ .. C,,, + +J + +] + + LCPC + +J MinistèredeI ' ~ des Laboratoire Central \·" .r " + oo Logenm, des Transports et ru TOllisme Ponts et Chaussées + ,. + ' + + 1 + + ! + + Rabriaue Sous rubrique 1 + + Natuœdela Code ludtulé ]b:te11- Fiches CATALOGUE (niveau ;( + fi + ~ 06smatio,u SÎOD. de gravit~) + +Oroiéra11 1 s:i~ticatir prküu. sipouibl~ ml 1(1), 5J (1) 1 + pdit(3!) ou +Affal.uemrnt z p-ave ml 1(l), sz (2} + +de rive et hors rive 3 l"Ù p-1'1C p,,11,t royo,, (Dl) ml 1 ()), s:z (J) 1 + +Gl:lç:1ge, 1 sipiticatil ml 2 (1). 3 (1), 5 (1) +Ressuap + l ,graw ml Z (2), 3 (2), S (2) +AITachettJeat , + 3 ttù sn\'c :ni 1(,),3{3},S(J) +Nid de poule + 1 localisé ml St (1, 2), 61 {I, 2) 1 +Fi$sure +tnJuversale 2 genétallsé ml SI ()), 61 (3) +Joint transversal + l plumage, d<:scrirobasc de Sllrfacc, ml 16 (1). 46 (1), 54 (1, 2), +Joint loaiitudinaJ + pcign&JC 56 (1). 62 (t. 2., 3). 63 (1, 2} 1 +Fissure +loncjtudiD 11~ 'Z pelade:, dacitt0bagc ~fond . ml 14 (I}, 1, (2), 46 (2), 54 (J}, +(Bd.R et hors Bd.R.) + 55 Cl. 2, ll. 56 (2). &4 C1. 2) +FaîenÇ3i::e + 0 réparée nb 6 (0), 41 (O), SJ {O) +(BdR et har, B4R) + l si111i.licllliv~ Ill> 6{1), 4J (1), 53 (l) 1 +lisswu en dalle, + l sravc n'b 4 (1, 2), 6 (Z}, 41 (2}, S.3 (2) +Fissures dlversn + 3 três.gm,1 nb '(l), ' (3 et 4), 41 (]), 53 (J) +Réparation esi BB + 1 ml 44 (1, 2), 67 (l, 2} 1 +sur découpe +Autre Réparation 0 n!puéc ml , (O}, aco>. 42 (O) + + 1 sipificativc, norupécifiq\le BdR ml 1 (l), -42 (1) + + z pave-, IIOll spéclfiqiJC SdR ml 8{2, 3), '2 (2) 1 + + 3 ipéc itiqu.c SclR ml 7 {l, 2, 3) + + 1 lil!IÏticali(, non spœi.fiqui: Bd'R. mt ll(l), 43 {1), 57 (1) + + 2 irav~ mm Spêcifiq11c: BdR. ml l :Z (2), "3 (2), S7 (l, 3) 1 + + 3 Spl!cifiq~ Sdll. ml 11 (1, ?, )) + + 1 sïsnificu!f ml 10(1, 2) i + + l gta'lt: ml 10(3, 4} 1 ~ + + l ftssute ll'adaptatfon ml 9(1, l,.3) + + 2 111111'1! fiS!lll'I ml SS (1, Z, 3), 4' (1, 2). 45 (1, 2), <&7 ( 1) + + 1 pi:1:itelatpu.r <½vole ml + + 2 pleine largeur >½ vole ml 1 + + 1 petitel.aJil'ur < ½vole ml + + 2 pleine largeur >½vole ml + +Méthode LPC N" 38 Version 2.0 + LJ Relevé des dégradations de surface + des chaussées + ~J + ~J Méthode d'essai LPC n° 38 + ~J + (Version 2.0) + ~ + ~ Mai 1997 + + u_r + + ID + + lfJ + + [tJ + +[J + +[~J + +[J + +[J + +[~J + +l0 ~r + + ~CPC + + ~r'\. + La5b8,orbadtoLireefeCbevnretr,aFl d7e5s73P2onPtsareist + Chaussées + Cedex 15 + ► c.e document a été rédigé par : u + +• Louis Bertrand, Ingénieur Institut national des sciences appliquées ! +Adjoint au Directeur +Laboratoire régional des Ponts et Chaussées de Lyon 1 + +• Philippe Lepert, Ingénieur civil des Ponts et Chaussées 1 +Chef de la section Auscultation et gestion des routes 1 +Laboratoire central des Ponts et Chaussées • Centre de Nantes 1 + 1 +All8C la participation de : 1 + 1 + 1 + 1 + 1 + + 1 + +Mme Fonteneau et MM. Marcel Slffert (CC de Trappes), Michel Boutonne! (LRPC de Nancy) ' +Yves Girault (LRPC de Melun), Bernard Robert (LR de St-Brieuc) + +► Diffusion : + +Document disponible au Laboratoire central des Ponts et Chaussées +IST-Bureau de vente +58, boulevard Lefebvre, 75732 Paris Cedex 15 +Tél. : 01 40 43 52 26 • Télécopie : 01 40 43 54 95 +Serveur Internet LCPC : http:/www.lcpc.inrets.fr + +► Prix: 120 FF + f1 Avertissement + +~1 1 +~l +~-1 l Les Projets de méthode d'essai sont mis en application et diffusés, à titre expérimental, + par les Chefs de division ou de service du Laboratoire central des Ponts et Chaussées +L- l (LCPC), après examen par la Direction des programmes et applications (Délégation à la + +C: 1 \ qualité des essais, la normalisation et la réglementation technique). + +f] \ f.J.J bout d'une période, dont la durée est normalement d'un an, les Projets de méthode + +J] l d'essai sont réexaminés pour tenir compte des observations émises par leurs utilisa- + teurs et, éventuellement, des résultats d'études complémentaires (essais interlaboratoi- +r1 res, qualification des matériaux d'essais...). + +El 1 + + [] Selon l'importance des modifications à apporter, ils sont alors reconduits à titre de + projets pour une nouvelle période d'essai, soit transformés en Méthodesd'essa/ LPCou + Ir ] 1 + proposés à I'AFNOR comme projet de norme. + [J + C- ] Les Méthodes d'essai LPC sont approuvées par le Directeur du LCPC après qualifica- + tion par la Délégation à la qualité des essais, la normalisation et la réglementation + tJ technique, et diffusés par la Section des publications du Service de l'information scienti- + fique et technique. + r ·1 + r ·1 + + 11 + + 1-- + + I' 11 + + ... + + "'1 1• + Sommaire + + 1 + +7 Introduction 1 + +9 Indications générales + +Objet de la méthode 1 +Domaine d'application - Contextes + +Les appareillages, leurs performances, + +leurs techniques de mise en œuvre 1 +Formation des personnels pratiquant le relevé des dégradations + +Contenu des modes opératoires + +13 Mode opératoire M1 1 + +17 Mode opératoire M2 + +21 Mode opératoire M3 1 + +25 Mode opératoire M4 + +29 Mode opératoire MS + +33 Mode opératoire M6 + +37 Mode opératoire M7 + +40 Annexe1 1 + ~ +Définitions + +42 Annexe2 + +Information sur la répétabilité +et la reproductibilité des relevés visuels + +44 Annexe3 + + Les appareillages, leurs performances, + leurs techniques de mise en œuvre + +41 Références bibliographiques + +L,__ __ _ __ _ ,_ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _....J + L-J1 Jean-François CORTÉ + Ingénieur en Chef des Ponts et Chaussées +lrj 1 Directeur technique chargé du pôle Chaussées + Laboratoire central des Ponts et Chaussées +!] J + Le contenu des études routières doit toujours être placé dans la perspective de la décision +1-J J qui doit être prise par le gestionnaire. Selon qu'il s'agit d'évaluer l'état d'un réseau à un +l-JJ instant donné, de bâtir un programme pluri-annuel d'entretien, ou de préciser la nature +.1-r J des travaux de renforcement d'une section, les informations utiles et strictement néces- +:r J saires varieront. + Le relevé des dégradations de surface est un élément de base de l'appréciation de l'état +[I J des chaussées. Pour établir un diagnostic et définir les opérations de remise en état, il + peut quelquefois suffire à lui seul. Sinon l'information est à compléter par des résultats +[] d'essais permettant de quantifier les caractéristiques mécaniques de la structure et les +[] caractéristiques de surface. +CJ La méthode LPC n° 38 a été rédigée en 1992 pour assurer l'objectivité, donc la valeur + des informations venant de ces relevés. Publiée en 1993, la première version de cette +LJ méthode a été largement appliquée sur divers réseaux routiers français, dont le réseau de + routes nationales avec l'opération IQRN (Image Qualité des Routes Nationales). +L Compte tenu de l'intérêt démontré par la formalisation de ces relevés, la méthode a été + complétée pour en élargir le domaine d'application aux chaussées en dalles de béton, + tandis que les modalités d'emploi ont été précisées avec l'établissement d'un catalogue + des déiradations de surface des chaussées et d'une méthode de mesure du profil en tra- + vers. A cette occasion, les domaines d'application des différents modes opératoires ont + été recadrés en fonction de l'expérience acquise. + Ces divers compléments et adaptations justifiaient la publication d'une nouvelle version + de la méthode LPC n° 38. + + Nota : L'attention est attirée sur le fait qu'il n'y a pas stricte identité entre les domaines + d'emploi des modes opératoires MI, M2 el M5 de la version 1.0 de février 1993 et ceux + de la présente version. + +t + + 7 + +1, + 1. l J + + 1t r + + ~[J + + 1[ p + + Indications générales l[I + + 1. Objet de la méthode 1f i + + dPdLaeoastuiporcrnchéseasuedqnseustsieéeccmsohnéadtcuahesnorssndéeeelesldec[ésalf]ddinrépieftoodulra'mréftpauartçdéiooecnnsissedrdoreuulartpeiènlrreoaevftsuie.lrreeEvnleilstteurlaesav'lalgeeprrmspa,vueeiintleétleslderuesersndlvdeéoégCgirearaadàtdaalaltaoitoigMonunséestdhdàeoedrsedeuléreLgfvarPeacCre-. 1 Il l + + n° 49 [2], Mesure et interprétation du profil en travers. 1 11 r + + L'objectif du relevé est de localiser les dégradations présentes, en précisant leur type, 11 I + leur gravité et l'extension de chaussée concernée. + + 1 ( r} + + 2. Domaine d'application - Contextes dr + IJ T + mLeosdebsesoopiénrsateonirreesleinvdéiqdueéssddéagnrasdlaetitoanbsleapuoucri-laepsrèést,udseelsonrolu'otibèjreecstisf,onlet sccoounvdeirttisonpsards'eexp-t + ploitation et le type de chaussée. ï! ~ + + Tableau des conditions d'exploltatlon + en fonction des objectifs de l'étude + + Conditions d'Hplol'lation 11 IVP• da chiwsaeo ~J + + 1 (:h•1tHr6H SollplH, s•ml rigld••· lnwrsu, mixlH. 8,u: oa1i.s btlon + + Objectifs de l'étude A.ne c:ampaiin• •t YRU" 1.1'1Nlin r,ors VAU 'Tous slle1o + + F,ortf trafil:t.•• Falbln lrallcs•• Tous traflçs [1 + + 11 M1 ou M2 MS l M7 ~~ + Diagnostic - entretien - 1 - ·- - - M1 MS + renforcement 1 -1 M7 [L + 1' + ~Programmati.on 1.- lJ + + ' M2 M2 ou M3 r .,., + ~-~ - - · - ->-- +1 I Évaluation - surveillance MS r - - - •- 1 r~-1 ,,,, +1 - M3 + Suivi de sections témoins -- - M7 +i + - ·- ·->- -J + + - M5 M5 -- -- --- M5 1 + - - - - -· + - - - Trafics.. : forts fi?. TR), faibles (< T2) +1 VRU' : Vaes Rapides Urbaines ---------------- + +L -------------·---·- ---------- + + 9 + + l + L j [~1 3. Les appareillages, leurs performances, + leurs techniques de mise en œuvre + JJ J + 3.1. Appareils utilisables pour la mesure + 1l des déformations du profil en travers + .L J + Pour ces appareils, on se référera à la Méthode LPC n° 49 [2). + J + _ _ _ 3.2. Appareils utilisables pour le relevé des dégradations + 1lr J autres que les déformations du profil en travers + +rJ ldaaLopéuecgptarrarelaeri,sdelaeiaàlvttsiiéool'n(nadcpseàfpslre1déd0ecléosigacnmrtrgaiièopdtdnrtaeeitosilovn'ipnitsriseuènnseéa.lrulaaetnirrenedse.'uxqTneuoe3uo)spleélaseriasddtaeaénupftorp.raamruLeaaitlriseoslndeesouvliéevfaepinstoptréatpcpeeiprfsemicul,aerttàitloraeunnldoaescptarpaélldiaiseclaiatsobieoulrencàeadtuuetxens + 1 + ___ __ 3.3. Domaines d'emploi des appareils +151 + Appat~II MOOH Optt..olfH +IL- J (••""'pie) +~] M1 M2 a..a M4 MS Mfi M7 + 1Transversoprofilomètre +l=J 1 cl. Méthode LPC n• 49 + +[ILJ { Systime photographique (1) (1) XX - - 1X + Syatime vidéo (2) +[fJ Relevé assisté par ordinateur XX + (RAO) embarqué +tJ Bordereau graphique 1 + +rJ - X )()( XX - 1- XX + +CJ XX XX XX XX - XX XX + +t~ ! + +l e..-, - - - - XX XX (3) + + XX : domaine d'11PPllc8tlon pnJfén,n//e/ de l'8pp11reH + -X : utll/s81J/e + lnapptOpr/8 + : à rh enletJwucarrvsaeudxd'uencs.~un/JeSov1ù,JJ/ltaeelSnr ,dlzeeosin, jef1aIuSvStabllcllsl/RndeAe Odqeunnaesllefpt,ce8/cntl,onsneq/udepealseœdR'ma4so0sdueensldrt e1In8raeSdlelaivcpéutén.lti + /1) : sous des agents + (2) : dans + (3) + + 4. Formation des personnels + pratiquant le relevé des dégradations + + Les opérateurs doivent avoir une qualification suffisante, pour réaliser, dans les condi- + tions préconisées par la méthode, un relevé dont les résultats soient répétables et, le cas + échéant, reproductibles, confonnément aux indications du tableau I de l'annexe 2. + + 10 + 5. Contenu des modes opératoires 7l + + . - 5.1. Domaine d'appllcatlon du mode opératoire ~ + +Ce paragraphe précise le type d'études pour lequel le mode opératoire est conçu et le + +type de route auquel il s'applique. ) + +5.2. Rubriques et sous-rubriques du relevé + +Ce paragraphe donne la liste des rubriques et sous-rubriques qu'il faut renseigner au +cours du relevé. + +La colonne Observations des tableaux précise certains aspects des dégrada_tions relevées. + +5.3. Exécution du relevé + +Relevé des déformations du profil en travers + +Ce paragraphe indique, le cas échéant, le mode opératoire de la Méthode LPC n° 49 [2] à +appliquer pour mesurer les déformations du profil en travers. + +Relevé des dégradations autres que les déformations du profil en travers + +- · Appare1llages +Ce paragraphe indique les appareils utilisables pour la saisie et la transcription des dégra- +dations autres que les déformations du profil en travers, dans le cadre du mode opéra- +toire. + +> Conditions de relevé +Ce paragraphe précise la ou les voies de mesure et le nombre de passages. + +► Préparaüon du relevé + +Ce paragraphe décrit la préparation du relevé qui doit comporter +_ le recueil des informations concernant la chaussée auprès du gestionnaire, +- le repérage des chaussées à relever, +- le découpage en sections, +- le repérage de ces sections. + +► Exécution de la saisie + +Ce paragraphe décrit le déroul:ment de la saisie des dégradations dans une forme telle +qu'elle puisse constituer un gutde pour les opérateurs chargés de ces relevés. + +► Exécution de la transcription +Ce paragraphe décrit le mode de transcription des dégradations. + + 11 + ~g - _ 5.4. Agrégation et présentation des résultats + Ce paragraphe précise : +~] - le pas et le mode d'agrégation des résultats, + - la structure du fichier informatique de présentation des résultats . +r· l + -_ 5.5. Sécurité des équipes +i] + Ce paragraphe rappelle les règles à respecter pour assurer la sécurité des personnes char- +[1 ] gées du relevé et des utilisateurs de la route et ceci conformément au code de la route, à + la norme EN 471, et aux prescriptions des documents (3) et (4). +ÇIJ + + 1 + +_{: J + + 1 + +!= J + +:JJ + +L] + +J[ ] + +.lC J + +lt 1 +lt J + +., + + 1 + ,-----------·-- --- ------ - - - - --- - - - - - - - - - - 7 + + 1. Domaine à'applicatio;1 + +Le présent mode opératoire est applicable aux études de diagnostic, aux études d'entre- + +tien et aux études de renforcement d'un itinéraire ou d'une section d'itinéraire. A ce titre, + +il s'applique à toutes les routes et autoroutes de rase campagne. + +Nota : Pour les chaussées supportant un trafic faible, on peut lui substituer le mode opé- +ratoire M2. + + 2. Bordereau de relevé + +Rub,,qu• Sous-,ubrlq i,e + + l'f•tur• l11fft111t Fl<:hH C•l•ID!IU• +dt la 069radat1on 0::,--.-.110,if + (11i11ffu1C de ;revile) + +T 1Omiérage significatif pnfcls8r, sipossib/8 ml 01 i1i, 5i (1) + grave petit (35) ou ml 01 12). S2 (2) +(1-------- ; très grave grand rayon (01) ml 01 1,3) . 52 13'.• + +1Affaissement de rive 11 significatif rl'll 102 (1t +1 Cil (21 + l! ! grave 1 mr +1Affaissement hors rive . 02!31 + 1 !rés grave ml + !°' (1t + !3 1 rnl Ol !2) + ml + 1 significatif ml 03 !31 + + .,:2 grave + !rés grave + +! Glaça,ge • ressuage 1 localisé mt 51 !I cl Zi. &:Z 11 l•I 2i + :2 généralisé 1 51 (31. ,, (3) +I 54 Il et ?),6)(1 e'I.?) + 1 ml 54 (3), 55 1,1 à 3) + +,l----------t-,-i,~lumage, dé-s-en-ro_b_a-ge-de surface ml JI 111, 33 (11 . 541 (1i + +Arrachement 2 pelade, désenrobage profond rrrl \6 (2) . 4t !2J. 5e 1.~i + +• !Nid de poule •lb 08 (0), 41 (0), 53 (0) + 1 slgnlficalif 0&(11.41!1:. 5311· + ~ 06 (2), 04 (1 et 2), 41 (2), 53 (2) + - t 0 réparéeil grave + ni) +----t--t- + +Fissure transversale • 1 significative nb r-T +joint transversal 2 grave + 1 rtl) r -1 + + -~ - 3 très grave ·--'--~----1 ~ ~ ) , 04- (3), 41 (3), 53 (3) )" L 'J + + 13 f ' ~..!' + [_M_1---l + + ft1.1brlque Sou■ -rubrlque + + Natur• Cod• lnlltul■ .hlel'lllOn Fl,:-he■ Catalogu1 + de la Cljgr■datlon 0 réparé + Obse,vat/ons (n1vnu• œ gravltitl + +1c=1 - - 44 (O~ 67 (0) + +i= J ml + + Joint longitudinal 44 (1 el 2), 67 (1 el 2) + 11 significatif ml · -I 44 (3), 67 (3) + Fissure longitudinale grave mi ' + spécifique bande 2 réparée + de roulement (BdR) 0 significative ml 07 (0) + 1 grave + Fissure longitudinale 2 réparée ml 07 (1) + non spécifique bande 0 significative + de roulement (BdR) 1 grave ml 07 (2 el 3) - + 2 + mi 08 (O~ 42 (0) + + Faîençage spécifique 1 significatif ----~·ml 08 (1), 42 (1) 1 + ml 08 (2 el 3), 42 (2 el 3) + ml 11 (1) + - · bande de roulement (BdR) 2 grave ml · 11 (2 et 3) + + Faîençage non spécifique mi - - ~ 12 (1), 43 (1), 57 (1) + + bande de roulement (BdR) grave .. .•. ml 12 (2 el 3), 43 (2 ~ 3), 57 (2 et _3) + + r-- 1 significative ml 10 (1 et 2) + Fissure en dalles 2 grave + ml 10 (3 et 4) + + . ,_ , Fissure diverse 1 fissure d'adaptation ml 9 (1 à 3) + 2 autre fissure + ~,., 1 mi 45 (1 à 3), 58 (1 â 3), 66 (1 el 2) + isolée - - ~ + nb - 13(1812) + petite largeur < 112 voie + ,e,u,.x,.~riJ1é~ijupe 1 pleine largeu, > ,,, vole ml + 2 + petite largeur< 1'2 voie ml ~ ·- + pleine largeu, > 112 vole + Autre réparation 1 ml 1 + ,2 + ml . + + L'extension Indiquée en melm llnsslm (ml) est la longueur de chaussée a"8ctée par la dégradation ; , + + Il ne s'agit pas de la longueur développée de cette dégmdaf/on. __J + + 3. Exécution du relevé + + _ _ _ 3.1. Relevé des déformations du profil en travers + Les déformations du profil en travers seront mesurées en application du mode opératoire + T2 de la Méthode LPC n° 49. + + __ 3.2. Relevé des dégradations autres que les déformations du profil en travers + + Appareillages + Pour procéder à la saisie des dégradations sur la chaussée, il faut : + _ un véhicule, équipé d'un système RAO, ou d'un système photographique ou d'un sys- + tème vidéo, tels que définis dans l'annexe 3, et ayant une autonomie minimale de 50 km, + _ un compteur de distance précis au 111000 avec un affichage à l'intérieur de l'habitacle. + + 14 + r-----------·-- --- ··---- - - - - --- - - - - - - - - - 7 + + L. + + 1. Domaine d'applicatio:;i + +Le présent mode opératoire est applicable aux études de diagnostic, aux études d'en~re- + +tien et aux études de renforcement d'un itinéraire ou d'une section d'itinéraire. A ce titre, + +il s'applique à toutes les routes et autoroutes de rase campagne. + +Nota : Pour les chaussées supportant un trafic faible, on peut lui substituer le mode opé- +ratoire M2. + + 2. Bordereau de relevé + + RUbrlqLI• c~ l"fltuli S o u ,-rul:lrlq ue Flchn C11111ID!1Ue + OO:,on,•110,i, · l;111en$ton ("hfffUII de ll"Yilé) + t-l11ture + de la CS69radat1on + +' 1 significatif préciser, sipossible ml 01 (1i. 52 (1) + +:omiérage 2 grave petit (35) ou ml 01 12). 52 (2) + 3 trés grave 01 !.3). Sll l3'.• +! significatif grand rayon (01) ml + I' l°2 (11 +1 "'li + 02 (21 +1Affaissement de rive 1 2 , grave 1 mr .OHi! + +\ ! 3 très grave ' ITII I°' (1t + Di(2J + 1 significatif 1nl 03!3► + +1Affaissement hors rive :2 grave 1 ml + .1 très grave + j 11'11 + +IGlaf8ge • ressuage 1 localisé 1 ml $1 !1 <:I 2:,. &:il 11 l•I 2i + 2 généralisé + 1 ml 51 (31. ,, (3j + +jArrachement 1 plumage, désenrobage de surface ml 54 Il et <'l. f> !1 ~ i; + +1 2 pelade, désenrobage profond rrrl 54 [3). 55 ,., à 3) + +lNid de poule 1 significatif ---1~"~' j. "'·.,,~.". •lb 11i1l.l3(11.SI (1i + ~ grave * \f i2J. !2J. ~ l2i +! 0 réparée 1 + +1Fissure transversale • 1 significative rib 06 (11. 41 i1: . SS 11· + joint transversal + 2 grave 1 rlb 06 (2), 04 (1 e1 2), 41 (2), 53 (2) + + .. - -· - -- 3 trés grave -. "~- ~6 (3 e1 4), Q,t (3), 41 (3), 53 (3) + + 13 + + f . ._I + ~• [_M_1 -...J] + '- + Rit~rlq11e Sous-rubrique, +.k 1 +J l~ Natur• Codo, lnlltul ■ hlttlllOrt Flet.. ■ Catalogua + de la Cltgr■da!lon 0 réparé (nlvr■ux de g111vlb,l +:t ) Observations ' + Joint longitudinal +.~J J - ml 44 (O~ ol (0) + +~[] 1 1 significatif ml 44 (1 et 2), 67 (1 et 2) 1 + mi +1J ] 2 grave 44 (3), ol (3) ·- ' + +tL-iJ Fissure longitudinale 0 réparée ml 07 (0) + spécifique bande 1 significative +~l=-] de roulement (BdR) 2 grave ml 07 (1) + 0 réparée +1L-- ] Fissure longitudinale 1 significative ml 07 (2 et 3) - + non spécifique bande 2 grave +1,1 1 de roulement (BdR) mi 08 (O~ 42 (0) + +t] ml 08 (1), 42 (1) + +~] - ~ · - mi 08 (2 et 3), 42 (2 et 3) + +1,?1 Faîençage spécifique 1 significatif ml 11 (1) + +;:r ] ,b..a.n_d.e de roulement (BdR) 2 grave .. · - - - ml · 11 (2 et 3) ~; + +ï[ . J Faîençage non spécifique mi 12 (!), 43 (1), 57 (1) + +~[J ] ,b.a..n.d.e_d.e roulement (BdR) grave .. .. ml 12 (2 et 3), 43 (2 ~ 3), 57 (2 et _3) + : ml 10 (1 el 2) +frJ J Fissure en dalles 1 significative 10 (3 el 4) + 2 grave ml +1 . .,._J + • Fissure diverse 1 fissure d'adaptation ml 9 (1 à 3) + 1- 2 autre fissure mi 45 (1 à 3), 58 (1 à 3), 66 (1 et 2) + +1 1 isolée nb 13(1et2) - + +'1 ~ 1 ~ - • do '"" 1 petite largeur < 1 voie ml + /2 +• l 13 + "e"u'"xÜ(ffi'sf'111~~1jupe 2 pleine largeu, > •,;. voie ml + + 1 petite largeur< 1 voie ml j ~ + /2 + Autre réparation ml . + , 2 pleine largeu, > '12 vole + + L'extension Indiquée en mstre llnéalrt1 (ml) t1sl la longueur de chaussée affectée par la dégradation ; : + + Il ne s'agit pas de la /ongwur dévsloppée de cette dégmdation. ___J + + 1 - - - - 3. Exécution du relevé + + 3.1. Relevé des déformations du profil en travers + + 1 Les déformations du profil en travers seront mesurées en application du mode opératoire + + T2 de la Méthode LPC n° 49. + + __ 3.2. Relevé des dégradations autres que les déformations du profil en travers + + Appare/1/ages + + Pour procéder a la saisie des dégradations sur la chaussée, il faut : + + _ un véhicule, équipé d'un système RAO, ou d'un système photographique ou d'un sys- + tème vidéo, tels que définis dans l'annexe 3, et ayant une autonomie minimale de 50 km, + _ un compteur de distance précis au 111000 avec un affichage à l'intérieur de l'habitacle. + + 14 + ---------------------------- '1 Ji + +Conditions du relevé ½J + +Un relevé concerne toujours une seule voie de circulation. La saisie est effectuée en un ~] +ou deux passages. + 1:r ] +Préparation du relevé + 1rj +En phase préparatoire, il est pris contact avec le service gestionnaire pour + •ri +- localiser le réseau ou l'itinéraire à relever, +- connaître les structures et le revêtement qui seront rencontrés lors du relevé (structures •11 +initiales et travaux d'entretien). + Ill +Le réseau est ensuite découpé en sections identifiées par un point de départ (PR+abscisse +d'origine) et par un point d'arrivée (PR+abscisse de fin) . Ce découpage est conçu en •r1 +fonction des points d'accès au réseau ou à l'itinéraire, des aires de stationnement et de +l'autonomie des appareils de saisie, pour que les appareils spécialisés puissent stationner 1 ~J +en amont du point de départ de chaque section, puis démarrer et prendre la trajectoire +appropriée avant de franchir ce point de départ. Ce sectionnement doit permettre d'effec- ] +tuer le relevé sans changement de support de saisie en cours de section. + tJ +Exécution de la saisie + r1 1 +La saisie est effectuée conformément aux modes opératoires des appareils utilisés. Le +véhicule spécialisé se rend sur l'aire de stationnement repérée en amont du point de r1 J +départ de la section, les opérateurs initialisent les appareils de saisie et chargent, si besoin +est, de nouveaux supports de saisie. Le véhicule rejoint le début de la section où l'opéra- rJ +teur déclenche la saisie sans arrêter le véhicule. Au passage de chaque point de repère +kilométrique (PR) marqué sur la chaussée, l'opérateur déclenche le marquage d'une ins- rJ +cription type, soit directement sur le support de saisie, soit indirectement sur un autre +support, lui-même synchronisé avec le précédent. L'opérateur est prévenu de l'approche r + +de chaque PR par l'afficheur de distance de la cabine. A la fin de la section, l'opérateur + +arrête la saisie des différents appareils. + +Exécution de la transcription + +Les informations saisies sont transcrites, section par section, en temps réel ou différé, sur +un fichier organisé en autant de rubriques que nécessaire (cf. tableau § 2). + +___ .- 4. Agrégation et présentation des résultats + +Les résultats de la transcription sont agrégés par pas de 20 m de chaussée. Cette agréga- +tion est réalisée, sous-rubrique par sous-rubrique, l'extension résultant de l'agrégation est +la somme des extensions relevées pour chaque sous-rubrique dans ce pas de 20 mètres. + +Les résultats sont présentés sur un fichier informatique dont chaque enregistrement repré- +sente un pas de 20 m de chaussée et comprend quarante-deux (42) valeurs entières + +- le PR+abscisse du début du pas, +- l'extension des quarante et une (41) sous-rubriques dans le pas. + +- - ~--------------------------- ·- - + + 15 + L li ,I .- - - - - - - - - - - - - - - - - - - - - - + +IL-~J - · _ ·-- 5. Sécurité des équipes + +1~ 1) ~e ~éhicule spécialisé, le véhicule de protection éventuel et le personnel doivent être +~Lr 1 equ1pés des dispositifs réglementaires en vigueur, et notamment : + + 1 ► Signalisation cil véhicule + +1k J Le véhicule est doté d'une signalisation par bandes biaises, par rampe lumineuse à + cinq feux à éclats et deux gyrophares, ainsi que par un panneau AK5 à trois feux à + ---1. éclats. + +~] Cette signalisation répond aux prescriptions des documents [3] et [4] . + + L1 > Signalisation du personnel + +1-~ ] Lors de leur séjour à l'extérieur du véhicule de mesure, les agents portent un gilet ou + +l- J 1 vêtement conforme au moins à la classe 2 de la norme EN 471. + +~J I ► Protedion de l'ensemble de la zone de mesure +l=J +~J .1 Il est recommandé, sur les réseaux à forte circulation, de mettre en place soit une signali- + +[] sation d'approche par le véhicule d'accompagnement, soit une signalisation posée sur + +[[J l'accotement. Le plan de signalisation sera défini, implanté et géré par le gestionnaire qui + +[J doit, en outre, faire prendre les arrêtés éventuels de restriction de circulation sur le réseau + +[J ausculté. + +[J La signalisation sera conforme aux fiches appropriées du manuel [3], en l'occurrence + +[[ - chaussées à 2 x 2 voies ou plus : Fiche n° CM 143 ou CM 144, + c.-.1. - chaussées bidirectionnelles : Fiche n° CM 42 ou CM 44 ou CM 45 ou CM 46 . + +rr 1 Ces ~~uip~·ments ne reiircnl en rien l;1 rc:spon~ahilit.: du 1:1csrionn:ii~ -- Signalisation dJ véhicule +Le véhicule est doté d'une signalisation par bandes biaises, par rampe lumineuse à +cinq feux à éclats et deux gyrophares, ainsi que par un panneau AKS à trois feux à +éclats. +Cette signalisation répond aux prescriptions des documents (3] et [4]. + + 19 + li + +1 + +1 + + M2 + +l > Signalisation cil personnel + Lors de leur séjour à l'extérieur du véhicule de mesure, les agents portent un gilet ou + vêtement conforme au moins à la classe 2 de la norme EN 471. + + ► Protection de fensemble de la zone de mesure + + li est recommandé, sur les réseaux à forte circulation, de mettre en place soit une signali- + sation d'approche par le véhicule d'accompagnement, soit une signalisation posée sur + l'accotement. Le plan de signalisation sera défini, implanté et géré par le gestionnaire qui + doit, en outre, faire prendre les arrêtés éventuels de restriction de circulation sur le réseau + ausculté. + + La signalisation sera conforme aux fiches appropriées du manuel (3), en l'occurrence + - chaussées à 2 X 2 voies ou plus : Fiche n° CM 143 ou CM 144, + - chaussées bidirectionnelles : Fiche n° CM 42 ou CM 44 ou CM 4S ou CM 46 . + Ces équipements ne retirent en rien la responsabilité du gestionnaire de la route qui doit + être informé des dates et itinéraires du relevé. + +J + +J + + -7 + +JL + +1 L + .,,, . + +._ 1 + --i + + ) L. ·•·-·· + +(_ :~ + + .,, 20 + +~, + lJ + + tl + + M3 \ ~- + + - + ,l- + + 1 + + Mode opératoire M3 1 + + 1. Domaine d'application 1 + +Le présent mode opératoire est applicable aux études d'évaluation ou à la surveillance de 1 +l'état des chaussées des routes de rase campagne. + \ +Nota : Pour les chaussées supportant un trafic faible, on peut lui substituer le mode opé- +ratoire M4. \ + +_ .. 2. Bordereau de relevé \ + +rRubrique Sau-1-rubriqu• + +. ..,w,. !Code! dl 1■ digr•d■llon : lnlil11\é \fxl~•lon\ Fiches Cataloaue + (nl~Hua dt gravit.) +- Déformations (omlérage <~j ml 01 (2), 02 (2), 03 (2), 05 (1), 52 + 1 ObHrv•lions ml 01 (3), 02 (3), 03 (3), 05 (2), 52 (3) + + significatives + +et affaissemen1) 2 graves + + Glaçage - ressuage 1 localisé ml 51 (1 Et 2),61 (1 Et 2) + +- ----·2 généralisé ml 51 (3), 61 (3) 1 + 1 1 plumage, désenrobage de surface ml 54 (1 et 2),62, 63 + Arrachement \ + - - 2 pelade, désenrobage profond , _m_l _ 16, 46, 54 (3) + 0 réparée nb 06 (0), 41 (0), 53 (0) \ + Fissure transversale • 1 significative , 06 (1, 2)·, 41 (1, 2), 53 (1, 2) + joint transversal 3 grave nb + 1 significatives 106 (3Et 4),04 (1 à 3) 1 +t- i nb + \ 07 (1,2),08 (1 à 3),09 (1 ,2), 1 + 1 ml + +1Autres fissures (FL, FAI, \ 12 (1), 42 (1 à 3), 43 (1 à 3), + + fissures diverses, joint \ 44 (1, 2), 45 (1, 2), ST (1, 2), \ + longitudinal) , 58 (1 , 2), 96 (1, 2) + ~ ml +1 2 graves \ 07 (3), 09 (3), 12 (2), 44 (3), 45 (3), + 57 (3), 58 (3) + +jFissure en dalles 1 significative ml I 10 (1 Et 2) + 2 grave ml 10 (3 et 4) + ml -- +t~fNl~ti~Y'èJ1é~~~ j 1 petite largeur < 1/2 voie ml + + 2 pleine largeur > 112 vole + +jAutre réparatton 1 petite largeur < 1/2 vole ml + + 2 pleine largeur > 1'2 voie ml +i,L'extension Indiquée en mètre linéaire (ml} est la longueur \r\n
    \r\n

    \r\n
    \r\n -------- Message transféré --------\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    Sujet :\r\n Création module essai dégradation de chaussée
    Date : Mon, 30 Mar 2020 11:18:20 +0200
    De : d.labourguigne@gironde.fr
    Pour : Youness BENDEQ <youness.bendeq@cbao.fr>
    Copie\r\n à : sebastien.goursolle@gironde.fr,\r\n jean-francois.estrade@gironde.fr,\r\n benjamin.derobert@gironde.fr
    \r\n
    \r\n
    \r\n \r\n
    Bonjour Youness,
    \r\n

    \r\n
    \r\n
    J'espère que ça roule pour vous et vos proche.
    \r\n

    \r\n
    \r\n
    Comme convenu ensemble la semaine dernière, je vous\r\n transmet des documents ou extraits de documents afin de voir\r\n avec Mr Tidona la possibilité de créer un nouvel essai\r\n in-situ pour les Relevés de Dégradations de Chaussée sur la\r\n version web.
    \r\n

    \r\n
    \r\n
    Vous recevrez en 2 ou 3 fois car les PDF sont un peu\r\n lourd.
    \r\n
    \r\n

    \r\n
    \r\n
    Nous restons à votre disposition pour tout\r\n renseignements complémentaire sur cette requête.
    \r\n
    \r\n

    \r\n
    \r\n
    Cordialement
    \r\n
    \r\n
    \r\n \r\n


    \r\n David LABOURGUIGNE
    \r\n LABORATOIRE
    \r\n Direction des Infrastructures
    \r\n 05.56.99.33.33 - poste 7299
    \r\n \r\n \"\"\r\n \r\n
    \r\n
    \r\n ►\r\n Suivez l'actualité de votre Département, abonnez-vous\r\n aux newsletters
    \r\n  
    \r\n

    \r\n

    \r\n
    \r\n
    \r\n __________________________________________________________________
    \r\n
    \r\n
    \r\n
    \r\n Ce message et toutes les pièces jointes sont confidentiels et\r\n établis à l'intention exclusive de ses destinataires. Ce message\r\n ne constitue pas un document officiel. Seuls les documents revêtus\r\n de la signature du Président du Conseil Départemental ou d'un de\r\n ses délégataires sont de nature à engager le Département.
    \r\n
    \r\n Toute utilisation ou diffusion non autorisée est interdite.
    \r\n
    \r\n Tout message électronique est susceptible d'altération et le\r\n Département de la Gironde décline toute responsabilité au titre de\r\n ce message s'il a été altéré, déformé, falsifié.
    \r\n
    \r\n __________________________________________________________________
    \r\n
    \r\n \r\n", + "date": "2020-03-31 19:37:30", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "Youness BENDEQ ", + "message_type": "email", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 1, + "Discussions" + ], + "subject": "Création module essai dégradation de chaussée", + "tracking_value_ids": [], + "attachment_ids": [ + 31800, + 31799, + 31797 + ] + }, + { + "id": 10950, + "body": "", + "date": "2020-03-31 19:41:36", + "author_id": [ + 2, + "OdooBot" + ], + "email_from": "\"OdooBot\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 1385 + ], + "attachment_ids": [] + }, + { + "id": 10947, + "body": "", + "date": "2020-03-31 19:41:36", + "author_id": [ + 2, + "OdooBot" + ], + "email_from": "\"OdooBot\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 16, + "Task Created" + ], + "subject": false, + "tracking_value_ids": [ + 1379, + 1380, + 1381, + 1382, + 1383 + ], + "attachment_ids": [] + }, + { + "id": 10949, + "body": "", + "date": "2020-03-31 19:41:36", + "author_id": [ + 2, + "OdooBot" + ], + "email_from": "\"OdooBot\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 1384 + ], + "attachment_ids": [] + }, + { + "id": 10951, + "body": "", + "date": "2020-03-31 19:50:07", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 1386 + ], + "attachment_ids": [] + }, + { + "id": 10952, + "body": "", + "date": "2020-03-31 19:50:34", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 18, + "Task Ready" + ], + "subject": false, + "tracking_value_ids": [ + 1387 + ], + "attachment_ids": [] + }, + { + "id": 10953, + "body": "", + "date": "2020-03-31 19:59:29", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 1388, + 1389 + ], + "attachment_ids": [] + }, + { + "id": 11027, + "body": "", + "date": "2020-04-03 12:13:59", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 1486 + ], + "attachment_ids": [] + }, + { + "id": 11028, + "body": "", + "date": "2020-04-03 12:17:03", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 1487 + ], + "attachment_ids": [] + }, + { + "id": 11127, + "body": "
    \n

    \n Appeler fait\n par Youness BENDEQ:\n Appeler pour infos\n

    \n

    Demander infos sur les précédentes demandes + tenir au courant de l'état d'avancement de la création de l'essai \"Relevé de dégradation de chaussée\"

    \n \n
    \n ", + "date": "2020-04-10 14:54:06", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 3, + "Activities" + ], + "subject": "Re: [T0128] Création module essai dégradation de chaussée", + "tracking_value_ids": [], + "attachment_ids": [] + }, + { + "id": 11147, + "body": "

    En attente d'un retour de Quentin sur le problème d'insertion d'un fichier Excel à la création d'un nouvel essai dans BRG-LAB WEB.

    ", + "date": "2020-04-10 15:24:43", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "comment", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [], + "attachment_ids": [] + }, + { + "id": 11148, + "body": "", + "date": "2020-04-10 15:24:44", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 1632 + ], + "attachment_ids": [] + }, + { + "id": 11174, + "body": "", + "date": "2020-04-14 10:00:59", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 18, + "Task Ready" + ], + "subject": false, + "tracking_value_ids": [ + 1643 + ], + "attachment_ids": [] + }, + { + "id": 11236, + "body": "", + "date": "2020-04-17 09:27:36", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 1733 + ], + "attachment_ids": [] + }, + { + "id": 11237, + "body": "", + "date": "2020-04-17 09:27:46", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 1734 + ], + "attachment_ids": [] + }, + { + "id": 13130, + "body": "", + "date": "2020-06-10 15:33:11", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 4006 + ], + "attachment_ids": [] + }, + { + "id": 15368, + "body": "", + "date": "2020-07-15 14:53:40", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": [ + 10947, + "[T0128] Création module essai dégradation de chaussée" + ], + "subtype_id": [ + 19, + "Stage Changed" + ], + "subject": false, + "tracking_value_ids": [ + 5986 + ], + "attachment_ids": [] + }, + { + "id": 15464, + "body": "", + "date": "2020-07-16 15:35:34", + "author_id": [ + 10288, + "CBAO S.A.R.L., Youness BENDEQ" + ], + "email_from": "\"Youness BENDEQ\" ", + "message_type": "notification", + "parent_id": false, + "subtype_id": [ + 2, + "Note" + ], + "subject": false, + "tracking_value_ids": [ + 6104 + ], + "attachment_ids": [] + } + ] +} \ No newline at end of file diff --git a/output/ticket_T0128/T0128_20250404_110108/rapport.md b/output/ticket_T0128/T0128_20250404_110108/rapport.md new file mode 100644 index 0000000..c84c44a --- /dev/null +++ b/output/ticket_T0128/T0128_20250404_110108/rapport.md @@ -0,0 +1,53 @@ +# Ticket T0128: Bug !!! + +## Informations du ticket + +- **id**: 140 +- **code**: T0128 +- **name**: Bug !!! +- **project_name**: Demandes +- **stage_name**: Clôturé +- **user_id**: +- **partner_id/email_from**: CONSEIL DEPARTEMENTAL DE LA GIRONDE (33), David LABOURGUIGNE, d.labourguigne@gironde.fr +- **create_date**: 31/03/2020 19:41:34 +- **write_date/last modification**: 03/10/2024 13:10:50 + +- **description**:

    Créer un nouvel essai in-situ pour les Relevés de Dégradations de Chaussée sur la version web.

    Problème avec ZK

    + +Créer un nouvel essai in-situ pour les Relevés de Dégradations de Chaussée sur la version web. + +Problème avec ZK + +## Messages + +### Message 1 +**author_id**: Youness BENDEQ +**date**: 31/03/2020 19:37:30 +**message_type**: E-mail +**subject**: Création module essai dégradation de chaussée +**id**: 10948 +Bonjour Youness, + +J'espère que ça roule pour vous et vos proche. + +Comme convenu ensemble la semaine dernière, je vous transmet des documents ou extraits de documents afin de voir avec Mr Tidona la possibilité de créer un nouvel essai in-situ pour les Relevés de Dégradations de Chaussée sur la version web. + +Vous recevrez en 2 ou 3 fois car les PDF sont un peu lourd. + +Nous restons à votre disposition pour tout renseignements complémentaire sur cette requête. + +Cordialement + +**David LABOURGUIGNE** LABORATOIRE **Direction des Infrastructures** 05.56.99.33.33 - poste 7299 [► Suivez l'actualité de votre Département, abonnez-vous aux newsletters](https://www.gironde.fr/newsletters) [ ](https://www.gironde.fr/newsletters) + +**attachment_ids**: +- technique relevé dégradations des laboratoires 1-1.pdf (application/pdf) [ID: 31800] +- Extrait Méthode Essai dégradation chaussée(1).pdf (application/pdf) [ID: 31799] +- Image.1585559362785.gif (image/gif) [ID: 31797] + +--- + +## Informations sur l'extraction + +- **Date d'extraction**: 04/04/2025 11:01:12 +- **Répertoire**: output/ticket_T0128/T0128_20250404_110108 \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/structure.json b/output/ticket_T0128/T0128_20250404_110108/structure.json similarity index 57% rename from output/ticket_T11067/T11067_20250404_092935/structure.json rename to output/ticket_T0128/T0128_20250404_110108/structure.json index 99fefe7..730ef19 100644 --- a/output/ticket_T11067/T11067_20250404_092935/structure.json +++ b/output/ticket_T0128/T0128_20250404_110108/structure.json @@ -1,9 +1,9 @@ { - "date_extraction": "2025-04-04T09:29:38.023177", - "ticket_id": 11046, - "ticket_code": "T11067", - "ticket_name": "changement nom centrale d'enrobage", - "output_dir": "output/ticket_T11067/T11067_20250404_092935", + "date_extraction": "2025-04-04T11:01:12.924611", + "ticket_id": 140, + "ticket_code": "T0128", + "ticket_name": "Bug !!!", + "output_dir": "output/ticket_T0128/T0128_20250404_110108", "files": { "ticket_info": "ticket_info.json", "ticket_summary": "ticket_summary.json", @@ -11,7 +11,7 @@ "messages_raw": "messages_raw.json", "messages_text": "all_messages.txt", "attachments": "attachments_info.json", - "followers": "followers.json" + "followers": null }, "stats": { "messages_count": 6, diff --git a/output/ticket_T0128/T0128_20250404_110108/ticket_info.json b/output/ticket_T0128/T0128_20250404_110108/ticket_info.json new file mode 100644 index 0000000..e799f4e --- /dev/null +++ b/output/ticket_T0128/T0128_20250404_110108/ticket_info.json @@ -0,0 +1,64 @@ +{ + "id": 140, + "name": "Bug !!!", + "description": "

    Créer un nouvel essai in-situ pour les Relevés de Dégradations de Chaussée sur la version web.

    Problème avec ZK

    ", + "stage_id": [ + 8, + "Clôturé" + ], + "project_id": [ + 3, + "Demandes" + ], + "partner_id": [ + 8819, + "CONSEIL DEPARTEMENTAL DE LA GIRONDE (33), David LABOURGUIGNE" + ], + "user_id": [ + 9, + "Youness BENDEQ" + ], + "date_start": "2020-03-31 19:48:31", + "date_end": false, + "date_deadline": false, + "create_date": "2020-03-31 19:41:34", + "write_date": "2024-10-03 13:10:50", + "tag_ids": [ + 15 + ], + "priority": "0", + "email_from": "d.labourguigne@gironde.fr", + "email_cc": "", + "message_ids": [ + 15464, + 15368, + 13130, + 11237, + 11236, + 11174, + 11148, + 11147, + 11127, + 11028, + 11027, + 10953, + 10952, + 10951, + 10950, + 10949, + 10948, + 10947 + ], + "message_follower_ids": [], + "timesheet_ids": [ + 40 + ], + "attachment_ids": [], + "stage_id_name": "Clôturé", + "project_id_name": "Demandes", + "partner_id_name": "CONSEIL DEPARTEMENTAL DE LA GIRONDE (33), David LABOURGUIGNE", + "user_id_name": "Youness BENDEQ", + "tag_names": [ + "BRG-LAB WEB" + ] +} \ No newline at end of file diff --git a/output/ticket_T0128/T0128_20250404_110108/ticket_summary.json b/output/ticket_T0128/T0128_20250404_110108/ticket_summary.json new file mode 100644 index 0000000..83093c5 --- /dev/null +++ b/output/ticket_T0128/T0128_20250404_110108/ticket_summary.json @@ -0,0 +1,16 @@ +{ + "id": 140, + "code": "T0128", + "name": "Bug !!!", + "description": "

    Créer un nouvel essai in-situ pour les Relevés de Dégradations de Chaussée sur la version web.

    Problème avec ZK

    ", + "stage": "Clôturé", + "project": "Demandes", + "partner": "CONSEIL DEPARTEMENTAL DE LA GIRONDE (33), David LABOURGUIGNE", + "assigned_to": "Youness BENDEQ", + "tags": [ + "BRG-LAB WEB" + ], + "create_date": "2020-03-31 19:41:34", + "write_date": "2024-10-03 13:10:50", + "deadline": false +} \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/all_messages.json b/output/ticket_T11067/T11067_20250404_092935/all_messages.json deleted file mode 100644 index e12e989..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/all_messages.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "ticket_summary": { - "id": 11046, - "code": "T11067", - "name": "changement nom centrale d'enrobage", - "project_id": 3, - "project_name": "Demandes", - "stage_id": 8, - "stage_name": "Clôturé", - "date_extraction": "2025-04-04T09:29:37.789265" - }, - "metadata": { - "message_count": { - "total": 9, - "processed": 6, - "excluded": 3 - }, - "cleaning_strategy": "standard", - "cleaning_config": { - "preserve_links": true, - "preserve_images": true, - "strategy": "html2text" - } - }, - "messages": [ - { - "id": 227725, - "body": "Bonjour, \n\n3 centrales d’enrobage ont changé de nom.\n\nComment faire ce changement sur BRG-LAB ?\n\n(ici ARMOR ENROBÉS devient BREIZH ENROBÉS sur 3 sites)\n\n![](/web/image/144794?access_token=a7ef99b4-5d07-49d7-a098-e5aa712622d4)\n\nBonne réception\n\n**\n\n**\n\n![cid:image004.png@01D8D425.0F95E5B0](/web/image/144792?access_token=91580596-8a81-4e64-831c-0c3023701326)**\n\n**\n\n**\n\n**\n\n**Dominique CARVAL**\n\n**\n\n**\n\n**Responsable du pôle Laboratoire Routier\n\n**\n\nDirection des Infrastructures et des mobilités (DIM)\n\nService d’Appui aux Politiques d’Aménagement / Pôle Laboratoire Routier (SAPA/PLR)\n\n115, rue du commerce – 56000 VANNES\n\n**\n\n**\n\n**tél : 02 97 54 71 14 - mobile : 06 98 32 88 30 –**** _[dominique.carval@morbihan.fr](mailto:dominique.carval@morbihan.fr)_********\n\n**\n\n* * *\n\nDroit à la déconnexion : Si vous recevez ce message en dehors de vos heures de travail ou pendant vos congés, vous n’êtes pas tenu de répondre immédiatement, sauf en cas d’urgence exceptionnelle. \n\n* * *\n\nCe message électronique et tous les fichiers attachés qu'il contient peuvent être confidentiels, contenir des données personnelles ou sensibles et être soumis au secret professionnel. Il est destiné exclusivement à l'usage du ou des destinataires. Si vous recevez ce message par erreur et/ou si vous n'êtes pas le destinataire désigné de ce message, le département du Morbihan vous remercie d'avertir immédiatement l'expéditeur et de le détruire ainsi que toutes les pièces jointes s'y rattachant. La publication, l'usage, la distribution, l'impression ou la copie non autorisée de ce message et des attachements qu'il contient sont strictement interdits. Tout message électronique est susceptible d'altération.", - "date": "2025-03-18 13:18:31", - "author_id": [ - 5144, - "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL" - ], - "email_from": "CARVAL Dominique ", - "message_type": "email", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 1, - "Discussions" - ], - "subject": "changement nom centrale d'enrobage", - "tracking_value_ids": [], - "attachment_ids": [ - 144794, - 144792 - ], - "is_system": false, - "is_stage_change": false, - "is_forwarded": true, - "is_duplicate": false, - "body_original": "

    \r\n\r\n

    \r\n
    \r\n

    Bonjour,\r\n

    \r\n

     

    \r\n

    3 centrales d’enrobage ont changé de nom.

    \r\n

     

    \r\n

    Comment faire ce changement sur BRG-LAB ?

    \r\n

     

    \r\n

    (ici ARMOR ENROBÉS devient BREIZH ENROBÉS sur 3 sites)

    \r\n

     

    \r\n

    \r\n

     

    \r\n

    Bonne réception

    \r\n

     

    \r\n

    \"cid:image004.png@01D8D425.0F95E5B0\"

    \r\n

     

    \r\n

    Dominique CARVAL

    \r\n

     

    \r\n

    Responsable du pôle Laboratoire Routier

    \r\n

    Direction des Infrastructures et des mobilités (DIM)

    \r\n

    Service d’Appui aux Politiques d’Aménagement / Pôle Laboratoire Routier (SAPA/PLR)

    \r\n

    115, rue du commerce – 56000 VANNES

    \r\n

     

    \r\n

    tél : 02 97 54 71 14 - mobile : 06 98 32 88 30 –\r\ndominique.carval@morbihan.fr\r\n 

    \r\n

     

    \r\n

     

    \r\n

     

    \r\n
    \r\n
    \r\n
    Droit à la déconnexion : Si vous recevez ce message en dehors de vos heures de travail ou pendant vos congés, vous n’êtes pas tenu de répondre immédiatement, sauf en cas d’urgence exceptionnelle.\r\n
    \r\nCe message électronique et tous les fichiers attachés qu'il contient peuvent être confidentiels, contenir des données personnelles ou sensibles et être soumis au secret professionnel. Il est destiné exclusivement à l'usage du ou des destinataires. Si vous recevez\r\n ce message par erreur et/ou si vous n'êtes pas le destinataire désigné de ce message, le département du Morbihan vous remercie d'avertir immédiatement l'expéditeur et de le détruire ainsi que toutes les pièces jointes s'y rattachant. La publication, l'usage,\r\n la distribution, l'impression ou la copie non autorisée de ce message et des attachements qu'il contient sont strictement interdits. Tout message électronique est susceptible d'altération.
    \r\n\r\n", - "author_details": { - "name": "Dominique CARVAL", - "email": "dominique.carval@morbihan.fr", - "is_system": false, - "id": 5144, - "phone": "02 97 54 71 14", - "function": "Technicien de laboratoire", - "company_id": [ - 1, - "CBAO S.A.R.L." - ] - } - }, - { - "id": 227724, - "body": "", - "date": "2025-03-18 13:22:28", - "author_id": [ - 2, - "OdooBot" - ], - "email_from": "\"OdooBot\" ", - "message_type": "notification", - "parent_id": false, - "subtype_id": [ - 16, - "Task Created" - ], - "subject": false, - "tracking_value_ids": [ - 177753, - 177754, - 177755, - 177756, - 177757 - ], - "attachment_ids": [], - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false, - "author_details": { - "name": "OdooBot", - "email": "odoobot@example.com", - "is_system": true, - "id": 2, - "phone": false, - "function": false, - "company_id": [ - 1, - "CBAO S.A.R.L." - ] - } - }, - { - "id": 227730, - "body": "", - "date": "2025-03-18 13:42:15", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 16, - "Task Created" - ], - "subject": false, - "tracking_value_ids": [ - 177764 - ], - "attachment_ids": [], - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false, - "author_details": { - "name": "Romuald GRUSON", - "email": "romuald@mail.cbao.fr", - "is_system": false, - "id": 32165, - "phone": false, - "function": false, - "company_id": [ - 1, - "CBAO S.A.R.L." - ] - } - }, - { - "id": 227731, - "body": "Bonjour,\n\nEffectivement, il y a une anomalie lors du changement du nom d'un poste de production. Les mises à jour déployées ce soir et demain devraient vous permettre d’effectuer cette modification.\n\nPour cela, il faut éditer le nom du poste de production d’enrobée, l’enregistrer dans la fiche générale, puis cliquer sur la petite flèche à droite du nom et le modifier.\n\n![image.png](/web/image/144796?access_token=f513eb63-c827-48d5-b69c-7c8d5fa42853)\n\nJe reste à votre entière disposition pour toute information complémentaire.\n\nCordialement,\n\n\\---\n\nSupport technique\n\n[![CBAO - développeur de rentabilité - www.cbao.fr - tél\n +334 68 64 15 31](data:image/png;filename=mail_cbao.png;base64,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)](http://www.cbao.fr)\n\nAfin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, nous vous invitons à envoyer vos demandes d'assistance technique à _[support@cbao.fr](mailto:support@cbao.fr)_ L'objectif du Support Technique est de vous aider : si vous rencontrez une difficulté, ou pour nous soumettre une ou des suggestions d'amélioration de nos logiciels ou de nos méthodes. Notre service est ouvert du lundi au vendredi de 9h à 12h et de 14h à 18h. Dès réception, un technicien prendra en charge votre demande et au besoin vous rappellera.\n\n_Confidentialité : Ce courriel contient des informations confidentielles exclusivement réservées au destinataire mentionné. Si vous deviez recevoir cet e-mail par erreur, merci d’en avertir immédiatement l’expéditeur et de le supprimer de votre système informatique. Au cas où vous ne seriez pas destinataire de ce message, veuillez noter que sa divulgation, sa copie ou tout acte en rapport avec la communication du contenu des informations est strictement interdit._", - "date": "2025-03-18 14:18:51", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "support@cbao.fr", - "message_type": "comment", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 1, - "Discussions" - ], - "subject": "Re: [T11067] - changement nom centrale d'enrobage", - "tracking_value_ids": [], - "attachment_ids": [ - 144796 - ], - "is_system": false, - "is_stage_change": false, - "is_forwarded": true, - "is_duplicate": false, - "body_original": "

    Bonjour,

    Effectivement, il y a une anomalie lors du changement du nom d'un poste de production. Les mises à jour déployées ce soir et demain devraient vous permettre d’effectuer cette modification.

    \n

    Pour cela, il faut éditer le nom du poste de production d’enrobée, l’enregistrer dans la fiche générale, puis cliquer sur la petite flèche à droite du nom et le modifier.

    \"image.png\"


    Je reste à votre entière disposition pour toute information complémentaire.

    Cordialement,

    ---

    Support technique
     

    \n

    \"CBAO

    \n

    Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, nous vous invitons à envoyer vos demandes d'assistance technique à support@cbao.fr
    L'objectif du Support Technique est de vous aider : si vous rencontrez une difficulté, ou pour nous soumettre une ou des suggestions d'amélioration de nos logiciels ou de nos méthodes. Notre service est ouvert du lundi au vendredi de 9h à 12h et de 14h à 18h. Dès réception, un technicien prendra en charge votre demande et au besoin vous rappellera.

    Confidentialité : Ce courriel contient des informations confidentielles exclusivement réservées au destinataire mentionné. Si vous deviez recevoir cet e-mail par erreur, merci d’en avertir immédiatement l’expéditeur et de le supprimer de votre système informatique. Au cas où vous ne seriez pas destinataire de ce message, veuillez noter que sa divulgation, sa copie ou tout acte en rapport avec la communication du contenu des informations est strictement interdit.

    ", - "author_details": { - "name": "Romuald GRUSON", - "email": "romuald@mail.cbao.fr", - "is_system": false, - "id": 32165, - "phone": false, - "function": false, - "company_id": [ - 1, - "CBAO S.A.R.L." - ] - } - }, - { - "id": 227733, - "body": "", - "date": "2025-03-18 14:19:29", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 19, - "Stage Changed" - ], - "subject": false, - "tracking_value_ids": [ - 177766, - 177767 - ], - "attachment_ids": [], - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false, - "author_details": { - "name": "Romuald GRUSON", - "email": "romuald@mail.cbao.fr", - "is_system": false, - "id": 32165, - "phone": false, - "function": false, - "company_id": [ - 1, - "CBAO S.A.R.L." - ] - } - }, - { - "id": 228803, - "body": "", - "date": "2025-04-02 07:16:48", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 19, - "Stage Changed" - ], - "subject": false, - "tracking_value_ids": [ - 178932 - ], - "attachment_ids": [], - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false, - "author_details": { - "name": "Romuald GRUSON", - "email": "romuald@mail.cbao.fr", - "is_system": false, - "id": 32165, - "phone": false, - "function": false, - "company_id": [ - 1, - "CBAO S.A.R.L." - ] - } - } - ] -} \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/all_messages.txt b/output/ticket_T11067/T11067_20250404_092935/all_messages.txt deleted file mode 100644 index b08a923..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/all_messages.txt +++ /dev/null @@ -1,148 +0,0 @@ -TICKET: T11067 - changement nom centrale d'enrobage -Date d'extraction: 2025-04-04 09:29:37 -Nombre de messages: 6 - -================================================================================ - -******************************************************************************** -*** MESSAGE TRANSFÉRÉ *** -******************************************************************************** - -DATE: 2025-03-18 13:18:31 -DE: Dominique CARVAL -OBJET: changement nom centrale d'enrobage - -Bonjour, - -3 centrales d’enrobage ont changé de nom. - -Comment faire ce changement sur BRG-LAB ? - -(ici ARMOR ENROBÉS devient BREIZH ENROBÉS sur 3 sites) - -![](/web/image/144794?access_token=a7ef99b4-5d07-49d7-a098-e5aa712622d4) - -Bonne réception - -** - -** - -![cid:image004.png@01D8D425.0F95E5B0](/web/image/144792?access_token=91580596-8a81-4e64-831c-0c3023701326)** - -** - -** - -** - -**Dominique CARVAL** - -** - -** - -**Responsable du pôle Laboratoire Routier - -** - -Direction des Infrastructures et des mobilités (DIM) - -Service d’Appui aux Politiques d’Aménagement / Pôle Laboratoire Routier (SAPA/PLR) - -115, rue du commerce – 56000 VANNES - -** - -** - -**tél : 02 97 54 71 14 - mobile : 06 98 32 88 30 –**** _[dominique.carval@morbihan.fr](mailto:dominique.carval@morbihan.fr)_******** - -** - -* * * - -Droit à la déconnexion : Si vous recevez ce message en dehors de vos heures de travail ou pendant vos congés, vous n’êtes pas tenu de répondre immédiatement, sauf en cas d’urgence exceptionnelle. - -* * * - -Ce message électronique et tous les fichiers attachés qu'il contient peuvent être confidentiels, contenir des données personnelles ou sensibles et être soumis au secret professionnel. Il est destiné exclusivement à l'usage du ou des destinataires. Si vous recevez ce message par erreur et/ou si vous n'êtes pas le destinataire désigné de ce message, le département du Morbihan vous remercie d'avertir immédiatement l'expéditeur et de le détruire ainsi que toutes les pièces jointes s'y rattachant. La publication, l'usage, la distribution, l'impression ou la copie non autorisée de ce message et des attachements qu'il contient sont strictement interdits. Tout message électronique est susceptible d'altération. - --------------------------------------------------------------------------------- - -******************************************************************************** -*** CHANGEMENT D'ÉTAT *** -******************************************************************************** - -DATE: 2025-03-18 13:22:28 -DE: OdooBot - - - --------------------------------------------------------------------------------- - -******************************************************************************** -*** CHANGEMENT D'ÉTAT *** -******************************************************************************** - -DATE: 2025-03-18 13:42:15 -DE: Romuald GRUSON - - - --------------------------------------------------------------------------------- - -******************************************************************************** -*** MESSAGE TRANSFÉRÉ *** -******************************************************************************** - -DATE: 2025-03-18 14:18:51 -DE: Romuald GRUSON -OBJET: Re: [T11067] - changement nom centrale d'enrobage - -Bonjour, - -Effectivement, il y a une anomalie lors du changement du nom d'un poste de production. Les mises à jour déployées ce soir et demain devraient vous permettre d’effectuer cette modification. - -Pour cela, il faut éditer le nom du poste de production d’enrobée, l’enregistrer dans la fiche générale, puis cliquer sur la petite flèche à droite du nom et le modifier. - -![image.png](/web/image/144796?access_token=f513eb63-c827-48d5-b69c-7c8d5fa42853) - -Je reste à votre entière disposition pour toute information complémentaire. - -Cordialement, - -\--- - -Support technique - -[![CBAO - développeur de rentabilité - www.cbao.fr - tél - +334 68 64 15 31](data:image/png;filename=mail_cbao.png;base64,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)](http://www.cbao.fr) - -Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, nous vous invitons à envoyer vos demandes d'assistance technique à _[support@cbao.fr](mailto:support@cbao.fr)_ L'objectif du Support Technique est de vous aider : si vous rencontrez une difficulté, ou pour nous soumettre une ou des suggestions d'amélioration de nos logiciels ou de nos méthodes. Notre service est ouvert du lundi au vendredi de 9h à 12h et de 14h à 18h. Dès réception, un technicien prendra en charge votre demande et au besoin vous rappellera. - -_Confidentialité : Ce courriel contient des informations confidentielles exclusivement réservées au destinataire mentionné. Si vous deviez recevoir cet e-mail par erreur, merci d’en avertir immédiatement l’expéditeur et de le supprimer de votre système informatique. Au cas où vous ne seriez pas destinataire de ce message, veuillez noter que sa divulgation, sa copie ou tout acte en rapport avec la communication du contenu des informations est strictement interdit._ - --------------------------------------------------------------------------------- - -******************************************************************************** -*** CHANGEMENT D'ÉTAT *** -******************************************************************************** - -DATE: 2025-03-18 14:19:29 -DE: Romuald GRUSON - - - --------------------------------------------------------------------------------- - -******************************************************************************** -*** CHANGEMENT D'ÉTAT *** -******************************************************************************** - -DATE: 2025-04-02 07:16:48 -DE: Romuald GRUSON - - - --------------------------------------------------------------------------------- diff --git a/output/ticket_T11067/T11067_20250404_092935/attachments/image.png b/output/ticket_T11067/T11067_20250404_092935/attachments/image.png deleted file mode 100644 index db688c6..0000000 Binary files a/output/ticket_T11067/T11067_20250404_092935/attachments/image.png and /dev/null differ diff --git a/output/ticket_T11067/T11067_20250404_092935/attachments/image003.png b/output/ticket_T11067/T11067_20250404_092935/attachments/image003.png deleted file mode 100644 index 121eaf8..0000000 Binary files a/output/ticket_T11067/T11067_20250404_092935/attachments/image003.png and /dev/null differ diff --git a/output/ticket_T11067/T11067_20250404_092935/attachments/image004.jpg b/output/ticket_T11067/T11067_20250404_092935/attachments/image004.jpg deleted file mode 100644 index 5c3401d..0000000 Binary files a/output/ticket_T11067/T11067_20250404_092935/attachments/image004.jpg and /dev/null differ diff --git a/output/ticket_T11067/T11067_20250404_092935/attachments_info.json b/output/ticket_T11067/T11067_20250404_092935/attachments_info.json deleted file mode 100644 index 31e7bd7..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/attachments_info.json +++ /dev/null @@ -1,56 +0,0 @@ -[ - { - "id": 144796, - "name": "image.png", - "mimetype": "image/png", - "file_size": 45686, - "create_date": "2025-03-18 14:18:51", - "create_uid": [ - 32, - "Romuald GRUSON" - ], - "description": false, - "res_name": "[T11067] changement nom centrale d'enrobage", - "creator_name": "Romuald GRUSON", - "creator_id": 32, - "download_status": "success", - "local_path": "output/ticket_T11067/T11067_20250404_092935/attachments/image.png", - "error": "" - }, - { - "id": 144794, - "name": "image004.jpg", - "mimetype": "image/jpeg", - "file_size": 63295, - "create_date": "2025-03-18 13:22:27", - "create_uid": [ - 1, - "OdooBot" - ], - "description": "image004.jpg", - "res_name": "[T11067] changement nom centrale d'enrobage", - "creator_name": "OdooBot", - "creator_id": 1, - "download_status": "success", - "local_path": "output/ticket_T11067/T11067_20250404_092935/attachments/image004.jpg", - "error": "" - }, - { - "id": 144792, - "name": "image003.png", - "mimetype": "image/png", - "file_size": 5417, - "create_date": "2025-03-18 13:22:27", - "create_uid": [ - 1, - "OdooBot" - ], - "description": "image003.png", - "res_name": "[T11067] changement nom centrale d'enrobage", - "creator_name": "OdooBot", - "creator_id": 1, - "download_status": "success", - "local_path": "output/ticket_T11067/T11067_20250404_092935/attachments/image003.png", - "error": "" - } -] \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/followers.json b/output/ticket_T11067/T11067_20250404_092935/followers.json deleted file mode 100644 index 3f0661b..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/followers.json +++ /dev/null @@ -1,23 +0,0 @@ -[ - { - "id": 89590, - "partner_id": [ - 28961, - "Fabien LAFAY" - ] - }, - { - "id": 89592, - "partner_id": [ - 32165, - "Romuald GRUSON" - ] - }, - { - "id": 89593, - "partner_id": [ - 5144, - "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL" - ] - } -] \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/messages_raw.json b/output/ticket_T11067/T11067_20250404_092935/messages_raw.json deleted file mode 100644 index 9f50689..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/messages_raw.json +++ /dev/null @@ -1,275 +0,0 @@ -{ - "ticket_id": 11046, - "ticket_code": "T11067", - "message_metadata": { - "227725": { - "is_system": false, - "is_stage_change": false, - "is_forwarded": true, - "is_duplicate": false - }, - "227724": { - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false - }, - "227726": { - "is_system": true, - "is_stage_change": false, - "is_forwarded": false, - "is_duplicate": false, - "excluded": "system_message" - }, - "227728": { - "is_system": true, - "is_stage_change": false, - "is_forwarded": false, - "is_duplicate": false, - "excluded": "system_message" - }, - "227730": { - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false - }, - "227731": { - "is_system": false, - "is_stage_change": false, - "is_forwarded": true, - "is_duplicate": false - }, - "227732": { - "is_system": true, - "is_stage_change": false, - "is_forwarded": false, - "is_duplicate": false, - "excluded": "system_message" - }, - "227733": { - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false - }, - "228803": { - "is_system": true, - "is_stage_change": true, - "is_forwarded": false, - "is_duplicate": false - } - }, - "messages": [ - { - "id": 227725, - "body": "

    \r\n\r\n

    \r\n
    \r\n

    Bonjour,\r\n

    \r\n

     

    \r\n

    3 centrales d’enrobage ont changé de nom.

    \r\n

     

    \r\n

    Comment faire ce changement sur BRG-LAB ?

    \r\n

     

    \r\n

    (ici ARMOR ENROBÉS devient BREIZH ENROBÉS sur 3 sites)

    \r\n

     

    \r\n

    \r\n

     

    \r\n

    Bonne réception

    \r\n

     

    \r\n

    \"cid:image004.png@01D8D425.0F95E5B0\"

    \r\n

     

    \r\n

    Dominique CARVAL

    \r\n

     

    \r\n

    Responsable du pôle Laboratoire Routier

    \r\n

    Direction des Infrastructures et des mobilités (DIM)

    \r\n

    Service d’Appui aux Politiques d’Aménagement / Pôle Laboratoire Routier (SAPA/PLR)

    \r\n

    115, rue du commerce – 56000 VANNES

    \r\n

     

    \r\n

    tél : 02 97 54 71 14 - mobile : 06 98 32 88 30 –\r\ndominique.carval@morbihan.fr\r\n 

    \r\n

     

    \r\n

     

    \r\n

     

    \r\n
    \r\n
    \r\n
    Droit à la déconnexion : Si vous recevez ce message en dehors de vos heures de travail ou pendant vos congés, vous n’êtes pas tenu de répondre immédiatement, sauf en cas d’urgence exceptionnelle.\r\n
    \r\nCe message électronique et tous les fichiers attachés qu'il contient peuvent être confidentiels, contenir des données personnelles ou sensibles et être soumis au secret professionnel. Il est destiné exclusivement à l'usage du ou des destinataires. Si vous recevez\r\n ce message par erreur et/ou si vous n'êtes pas le destinataire désigné de ce message, le département du Morbihan vous remercie d'avertir immédiatement l'expéditeur et de le détruire ainsi que toutes les pièces jointes s'y rattachant. La publication, l'usage,\r\n la distribution, l'impression ou la copie non autorisée de ce message et des attachements qu'il contient sont strictement interdits. Tout message électronique est susceptible d'altération.
    \r\n\r\n", - "date": "2025-03-18 13:18:31", - "author_id": [ - 5144, - "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL" - ], - "email_from": "CARVAL Dominique ", - "message_type": "email", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 1, - "Discussions" - ], - "subject": "changement nom centrale d'enrobage", - "tracking_value_ids": [], - "attachment_ids": [ - 144794, - 144792 - ] - }, - { - "id": 227724, - "body": "", - "date": "2025-03-18 13:22:28", - "author_id": [ - 2, - "OdooBot" - ], - "email_from": "\"OdooBot\" ", - "message_type": "notification", - "parent_id": false, - "subtype_id": [ - 16, - "Task Created" - ], - "subject": false, - "tracking_value_ids": [ - 177753, - 177754, - 177755, - 177756, - 177757 - ], - "attachment_ids": [] - }, - { - "id": 227726, - "body": "", - "date": "2025-03-18 13:22:28", - "author_id": [ - 2, - "OdooBot" - ], - "email_from": "\"OdooBot\" ", - "message_type": "notification", - "parent_id": false, - "subtype_id": [ - 2, - "Note" - ], - "subject": false, - "tracking_value_ids": [ - 177758 - ], - "attachment_ids": [] - }, - { - "id": 227728, - "body": "", - "date": "2025-03-18 13:42:04", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": false, - "subtype_id": [ - 2, - "Note" - ], - "subject": false, - "tracking_value_ids": [ - 177763 - ], - "attachment_ids": [] - }, - { - "id": 227730, - "body": "", - "date": "2025-03-18 13:42:15", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 16, - "Task Created" - ], - "subject": false, - "tracking_value_ids": [ - 177764 - ], - "attachment_ids": [] - }, - { - "id": 227731, - "body": "

    Bonjour,

    Effectivement, il y a une anomalie lors du changement du nom d'un poste de production. Les mises à jour déployées ce soir et demain devraient vous permettre d’effectuer cette modification.

    \n

    Pour cela, il faut éditer le nom du poste de production d’enrobée, l’enregistrer dans la fiche générale, puis cliquer sur la petite flèche à droite du nom et le modifier.

    \"image.png\"


    Je reste à votre entière disposition pour toute information complémentaire.

    Cordialement,

    ---

    Support technique
     

    \n

    \"CBAO

    \n

    Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, nous vous invitons à envoyer vos demandes d'assistance technique à support@cbao.fr
    L'objectif du Support Technique est de vous aider : si vous rencontrez une difficulté, ou pour nous soumettre une ou des suggestions d'amélioration de nos logiciels ou de nos méthodes. Notre service est ouvert du lundi au vendredi de 9h à 12h et de 14h à 18h. Dès réception, un technicien prendra en charge votre demande et au besoin vous rappellera.

    Confidentialité : Ce courriel contient des informations confidentielles exclusivement réservées au destinataire mentionné. Si vous deviez recevoir cet e-mail par erreur, merci d’en avertir immédiatement l’expéditeur et de le supprimer de votre système informatique. Au cas où vous ne seriez pas destinataire de ce message, veuillez noter que sa divulgation, sa copie ou tout acte en rapport avec la communication du contenu des informations est strictement interdit.

    ", - "date": "2025-03-18 14:18:51", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "support@cbao.fr", - "message_type": "comment", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 1, - "Discussions" - ], - "subject": "Re: [T11067] - changement nom centrale d'enrobage", - "tracking_value_ids": [], - "attachment_ids": [ - 144796 - ] - }, - { - "id": 227732, - "body": "", - "date": "2025-03-18 14:19:29", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": false, - "subtype_id": [ - 2, - "Note" - ], - "subject": false, - "tracking_value_ids": [ - 177765 - ], - "attachment_ids": [] - }, - { - "id": 227733, - "body": "", - "date": "2025-03-18 14:19:29", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 19, - "Stage Changed" - ], - "subject": false, - "tracking_value_ids": [ - 177766, - 177767 - ], - "attachment_ids": [] - }, - { - "id": 228803, - "body": "", - "date": "2025-04-02 07:16:48", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "message_type": "notification", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "subtype_id": [ - 19, - "Stage Changed" - ], - "subject": false, - "tracking_value_ids": [ - 178932 - ], - "attachment_ids": [] - } - ] -} \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/rapport.md b/output/ticket_T11067/T11067_20250404_092935/rapport.md deleted file mode 100644 index cb4c1ff..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/rapport.md +++ /dev/null @@ -1,78 +0,0 @@ -# Ticket T11067: changement nom centrale d'enrobage - -## Informations du ticket - -- **ID** (`id`): 11046 -- **Référence** (`code`): T11067 -- **Nom** (`name`): changement nom centrale d'enrobage -- **Projet** (`project_name`): Demandes -- **État** (`stage_name`): Clôturé -- **Assigné à** (`user_id`): -- **Client** (`partner_id`, `email_from`): CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL, CARVAL Dominique -- **Créé le** (`create_date`): 18/03/2025 13:22:27 -- **Dernière modification** (`write_date`): 02/04/2025 07:16:48 -- **Date limite** (`date_deadline`): 02/04/2025 00:00:00 - -## Messages - -### Message 1 -**De** (`author_id`): Dominique CARVAL -**Date** (`date`): 18/03/2025 13:18:31 -**Type** (`message_type`): E-mail -**Sujet** (`subject`): changement nom centrale d'enrobage -**ID** (`id`): 227725 - -Bonjour, - -3 centrales d’enrobage ont changé de nom. - -Comment faire ce changement sur BRG-LAB ? - -(ici ARMOR ENROBÉS devient BREIZH ENROBÉS sur 3 sites) - -Bonne réception - -**Dominique CARVAL - -Direction des Infrastructures et des mobilités (DIM) - -Service d’Appui aux Politiques d’Aménagement / Pôle Laboratoire Routier (SAPA/PLR) - -115, rue du commerce – 56000 VANNES - -**tél : 02 97 54 71 14 - mobile : 06 98 32 88 30 – - -**Pièces jointes** (`attachment_ids`): -- image004.jpg (image/jpeg) [ID: 144794] -- image003.png (image/png) [ID: 144792] - ---- - -### Message 2 -**De** (`author_id`): Romuald GRUSON -**Date** (`date`): 18/03/2025 14:18:51 -**Type** (`message_type`): E-mail -**Sujet** (`subject`): Re: [T11067] - changement nom centrale d'enrobage -**ID** (`id`): 227731 - -Bonjour, - -Effectivement, il y a une anomalie lors du changement du nom d'un poste de production. Les mises à jour déployées ce soir et demain devraient vous permettre d’effectuer cette modification. - -Pour cela, il faut éditer le nom du poste de production d’enrobée, l’enregistrer dans la fiche générale, puis cliquer sur la petite flèche à droite du nom et le modifier. - -Je reste à votre entière disposition pour toute information complémentaire. - -Cordialement, - -\--- - -**Pièces jointes** (`attachment_ids`): -- image.png (image/png) [ID: 144796] - ---- - -## Informations sur l'extraction - -- **Date d'extraction**: 04/04/2025 09:29:38 -- **Répertoire**: output/ticket_T11067/T11067_20250404_092935 \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/ticket_info.json b/output/ticket_T11067/T11067_20250404_092935/ticket_info.json deleted file mode 100644 index 630e13c..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/ticket_info.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "id": 11046, - "name": "changement nom centrale d'enrobage", - "description": "


    ", - "stage_id": [ - 8, - "Clôturé" - ], - "project_id": [ - 3, - "Demandes" - ], - "partner_id": [ - 5144, - "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL" - ], - "user_id": [ - 32, - "Romuald GRUSON" - ], - "date_start": "2025-03-18 13:22:28", - "date_end": false, - "date_deadline": "2025-04-02", - "create_date": "2025-03-18 13:22:27", - "write_date": "2025-04-02 07:16:48", - "tag_ids": [ - 15 - ], - "priority": "0", - "email_from": "CARVAL Dominique ", - "email_cc": "", - "message_ids": [ - 228803, - 227733, - 227732, - 227731, - 227730, - 227728, - 227726, - 227725, - 227724 - ], - "message_follower_ids": [ - 89590, - 89592, - 89593 - ], - "timesheet_ids": [], - "attachment_ids": [], - "stage_id_name": "Clôturé", - "project_id_name": "Demandes", - "partner_id_name": "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL", - "user_id_name": "Romuald GRUSON", - "tag_names": [ - "BRG-LAB WEB" - ] -} \ No newline at end of file diff --git a/output/ticket_T11067/T11067_20250404_092935/ticket_summary.json b/output/ticket_T11067/T11067_20250404_092935/ticket_summary.json deleted file mode 100644 index c7a09a4..0000000 --- a/output/ticket_T11067/T11067_20250404_092935/ticket_summary.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "id": 11046, - "code": "T11067", - "name": "changement nom centrale d'enrobage", - "description": "


    ", - "stage": "Clôturé", - "project": "Demandes", - "partner": "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL", - "assigned_to": "Romuald GRUSON", - "tags": [ - "BRG-LAB WEB" - ], - "create_date": "2025-03-18 13:22:27", - "write_date": "2025-04-02 07:16:48", - "deadline": "2025-04-02" -} \ No newline at end of file diff --git a/utils/__pycache__/clean_html.cpython-312.pyc b/utils/__pycache__/clean_html.cpython-312.pyc index 6c571ee..b500ed3 100644 Binary files a/utils/__pycache__/clean_html.cpython-312.pyc and b/utils/__pycache__/clean_html.cpython-312.pyc differ diff --git a/utils/__pycache__/json_to_markdown.cpython-312.pyc b/utils/__pycache__/json_to_markdown.cpython-312.pyc index c18d89b..7be028b 100644 Binary files a/utils/__pycache__/json_to_markdown.cpython-312.pyc and b/utils/__pycache__/json_to_markdown.cpython-312.pyc differ diff --git a/utils/clean_html.py b/utils/clean_html.py index 128f226..0cdd576 100644 --- a/utils/clean_html.py +++ b/utils/clean_html.py @@ -1,7 +1,14 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +""" +Fonctions utilitaires pour nettoyer le HTML et formater les dates. +Version consolidée : intègre la fonctionnalité de base avec des améliorations +pour le traitement des messages transférés. +""" + import re +from datetime import datetime def clean_html(html_content): """ @@ -11,6 +18,26 @@ def clean_html(html_content): if not html_content: return "" + # Traitement spécifique pour les messages transférés + if "\\-------- Message transféré --------" in html_content: + # Essayer d'extraire le contenu principal entre "Bonjour" et le disclaimer + match = re.search(r'Bonjour.*?(?=\n\s*_+Ce message)', html_content, re.DOTALL) + if match: + html_content = match.group(0).strip() + else: + # Si ce pattern ne fonctionne pas, essayer une approche plus générale + match = re.search(r'Copie à :.*?\n\s*\n(.*?)(?=\n\s*_+|\Z)', html_content, re.DOTALL) + if match: + html_content = match.group(1).strip() + + # Transformer les balises h1 en titres Markdown + html_content = re.sub(r'

    (.*?)

    ', r'### \1', html_content) + + # Transformer les listes à puces + html_content = re.sub(r'
      (.*?)
    ', r'\1', html_content, flags=re.DOTALL) + html_content = re.sub(r'
  • (.*?)
  • ', r'- **\1**\n', html_content) + html_content = re.sub(r'
  • (.*?)
  • ', r'- \1\n', html_content) + # Supprimer les balises simples html_content = re.sub(r'|

    |

    |
    |
    ', '\n', html_content) @@ -27,18 +54,6 @@ def clean_html(html_content): html_content = re.sub(r'!\[.*?\]\(/web/image/.*?\)', '', html_content) html_content = re.sub(r'!\[cid:.*?\]\(/web/image/.*?\)', '', html_content) - # Supprimer toutes les références d'images avec des URLs - html_content = re.sub(r'!\[.*?\]\(http[s]?://.*?\)', '', html_content) - - # Supprimer les URL "mailto:" qui restent - html_content = re.sub(r'\[.*?\]\(mailto:.*?\)', '', html_content) - - # Supprimer les liens qui pointent vers des sites web - html_content = re.sub(r'\[.*?\]\(https?://.*?\)', '', html_content) - - # Supprimer les lignes qui contiennent "Envoyé par" suivi d'un lien - html_content = re.sub(r'Envoyé par .*$', '', html_content, flags=re.MULTILINE) - # Supprimer les balises HTML restantes html_content = re.sub(r'<.*?>', '', html_content) @@ -71,33 +86,6 @@ def clean_html(html_content): return html_content -def clean_text(text_content): - """ - Nettoie le texte brut pour supprimer les éléments indésirables. - """ - if not text_content: - return "" - - # Supprimer les éléments de signature de messagerie - patterns = [ - r"De :.*\nEnvoyé :.*\nÀ :.*\nObjet :.*\n", - r"From:.*\nSent:.*\nTo:.*\nSubject:.*\n", - r"----+ ?Original Message ?----+\n", - r".*wrote:$", - r"^On .* wrote:$" - ] - - for pattern in patterns: - text_content = re.sub(pattern, "", text_content, flags=re.MULTILINE) - - # Supprimer les lignes vides multiples - text_content = re.sub(r'\n\s*\n', '\n\n', text_content) - - # Nettoyer au début et à la fin - text_content = text_content.strip() - - return text_content - def format_date(date_str): """ Formate une date ISO en format lisible. @@ -106,13 +94,9 @@ def format_date(date_str): return "" try: - # Extraire la partie date et heure (ignorer la timezone si présente) - match = re.match(r'(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2})', date_str) - if match: - date_part, time_part = match.groups() - return f"{date_part} {time_part}" - return date_str - except Exception: + dt = datetime.fromisoformat(date_str.replace('Z', '+00:00')) + return dt.strftime("%d/%m/%Y %H:%M:%S") + except (ValueError, TypeError): return date_str if __name__ == "__main__": @@ -130,22 +114,22 @@ nous vous invitons à envoyer vos demandes d'assistance technique à support@exe cleaned = clean_html(html) print("HTML nettoyé :\n", cleaned) - text = """Bonjour, + # Test avec un message transféré + forwarded = """\\-------- Message transféré -------- Sujet : | Test message +---|--- +Date : | Mon, 30 Mar 2020 11:18:20 +0200 +De : | [test@example.com](mailto:test@example.com) +Pour : | John Doe [](mailto:john@example.com) +Copie à : | [other@example.com](mailto:other@example.com) + +Bonjour John, -Voici un message avec une signature. +Voici un message de test. Cordialement, -John +Test User --------- Message d'origine -------- -De : Alice -Envoyé : lundi 18 mars 2025 14:52 -À : John -Objet : Test - -Bonjour John, -Comment vas-tu ? -""" +__________________________________________________________________ Ce message et toutes les pièces jointes sont confidentiels et établis à l'intention exclusive de ses destinataires. __________________________________________________________________""" - cleaned_text = clean_text(text) - print("\nTexte nettoyé :\n", cleaned_text) \ No newline at end of file + cleaned_forwarded = clean_html(forwarded) + print("\nMessage transféré nettoyé :\n", cleaned_forwarded) \ No newline at end of file diff --git a/utils/json_to_markdown.py b/utils/json_to_markdown.py index f1f764e..d8b6a78 100644 --- a/utils/json_to_markdown.py +++ b/utils/json_to_markdown.py @@ -9,85 +9,8 @@ import sys import json import argparse from datetime import datetime - -def clean_html(html_content): - """ - Nettoie le contenu HTML pour le Markdown. - Supprime les balises, les bas de page, les messages automatiques et les sections vides. - """ - if not html_content: - return "" - - import re - - # Transformer les balises h1 en titres Markdown - html_content = re.sub(r'

    (.*?)

    ', r'### \1', html_content) - - # Transformer les listes à puces - html_content = re.sub(r'
      (.*?)
    ', r'\1', html_content, flags=re.DOTALL) - html_content = re.sub(r'
  • (.*?)
  • ', r'- **\1**\n', html_content) - html_content = re.sub(r'
  • (.*?)
  • ', r'- \1\n', html_content) - - # Supprimer les balises simples - html_content = re.sub(r'|

    |

    |
    |
    ', '\n', html_content) - - # Supprimer les bas de page et messages automatiques du support - html_content = re.sub(r'Droit à la déconnexion :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) - html_content = re.sub(r'\*\s*\*\s*\*.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) - html_content = re.sub(r'Ce message électronique et tous les fichiers.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) - html_content = re.sub(r'Afin d\'assurer une meilleure traçabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) - html_content = re.sub(r'_Confidentialité :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) - html_content = re.sub(r'Support technique.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) - - # Suppression de l'image signature CBAO et autres images - html_content = re.sub(r'!\[CBAO - développeur de rentabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL) - html_content = re.sub(r'!\[.*?\]\(/web/image/.*?\)', '', html_content) - html_content = re.sub(r'!\[cid:.*?\]\(/web/image/.*?\)', '', html_content) - - # Supprimer les balises HTML restantes - html_content = re.sub(r'<.*?>', '', html_content) - - # Remplacer les entités HTML courantes - html_content = html_content.replace(' ', ' ') - html_content = html_content.replace('<', '<') - html_content = html_content.replace('>', '>') - html_content = html_content.replace('&', '&') - html_content = html_content.replace('"', '"') - - # Supprimer les lignes avec uniquement des ** - html_content = re.sub(r'^\s*\*\*\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) - html_content = re.sub(r'^\s*\*\*\s*$', '', html_content, flags=re.MULTILINE) - - # Supprimer le \--- à la fin des messages - html_content = re.sub(r'\\---\s*$', '', html_content) - - # Supprimer les crochets isolés - html_content = re.sub(r'\[\s*$', '', html_content) - - # Supprimer les lignes vides multiples - html_content = re.sub(r'\n\s*\n', '\n\n', html_content) - - # Nettoyer au début et à la fin - html_content = html_content.strip() - - # Supprimer les sections vides (comme "*Contenu vide*") - if not html_content or html_content.lower() == "*contenu vide*": - return "*Contenu vide*" - - return html_content - -def format_date(date_str): - """ - Formate une date ISO en format lisible. - """ - if not date_str: - return "" - - try: - dt = datetime.fromisoformat(date_str.replace('Z', '+00:00')) - return dt.strftime("%d/%m/%Y %H:%M:%S") - except (ValueError, TypeError): - return date_str +# Importer les fonctions depuis le module clean_html.py +from utils.clean_html import clean_html, format_date def create_markdown_from_json(json_file, output_file): """ @@ -155,11 +78,11 @@ def create_markdown_from_json(json_file, output_file): md_content.append("") # Ajouter l'ID du ticket ticket_id = ticket_summary.get("id", ticket_info.get("id", "")) - md_content.append(f"- **ID** (`id`): {ticket_id}") - md_content.append(f"- **Référence** (`code`): {ticket_code}") - md_content.append(f"- **Nom** (`name`): {ticket_name}") - md_content.append(f"- **Projet** (`project_name`): {ticket_summary.get('project_name', '')}") - md_content.append(f"- **État** (`stage_name`): {ticket_summary.get('stage_name', '')}") + md_content.append(f"- **id**: {ticket_id}") + md_content.append(f"- **code**: {ticket_code}") + md_content.append(f"- **name**: {ticket_name}") + md_content.append(f"- **project_name**: {ticket_summary.get('project_name', '')}") + md_content.append(f"- **stage_name**: {ticket_summary.get('stage_name', '')}") # Chercher l'utilisateur assigné dans les métadonnées assigned_to = "" @@ -168,7 +91,7 @@ def create_markdown_from_json(json_file, output_file): if isinstance(user_id, list) and len(user_id) > 1: assigned_to = user_id[1] - md_content.append(f"- **Assigné à** (`user_id`): {assigned_to}") + md_content.append(f"- **user_id**: {assigned_to}") # Ajouter le client si disponible partner = "" @@ -186,7 +109,7 @@ def create_markdown_from_json(json_file, output_file): else: partner = partner_email - md_content.append(f"- **Client** (`partner_id`, `email_from`): {partner}") + md_content.append(f"- **partner_id/email_from**: {partner}") # Ajouter les tags s'ils sont disponibles tags = [] @@ -197,32 +120,30 @@ def create_markdown_from_json(json_file, output_file): tags.append(tag[1]) if tags: - md_content.append(f"- **Tags** (`tag_ids`): {', '.join(tags)}") + md_content.append(f"- **tag_ids**: {', '.join(tags)}") # Ajouter les dates - md_content.append(f"- **Créé le** (`create_date`): {format_date(ticket_info.get('create_date', ''))}") - md_content.append(f"- **Dernière modification** (`write_date`): {format_date(ticket_info.get('write_date', ''))}") + md_content.append(f"- **create_date**: {format_date(ticket_info.get('create_date', ''))}") + md_content.append(f"- **write_date/last modification**: {format_date(ticket_info.get('write_date', ''))}") if "date_deadline" in ticket_info and ticket_info.get("date_deadline"): - md_content.append(f"- **Date limite** (`date_deadline`): {format_date(ticket_info.get('date_deadline', ''))}") + md_content.append(f"- **date_deadline**: {format_date(ticket_info.get('date_deadline', ''))}") md_content.append("") # Ajouter la description du ticket description = ticket_info.get("description", "") + md_content.append(f"- **description**: {description}") + md_content.append("") # saut de ligne + if description: cleaned_description = clean_html(description) if cleaned_description and cleaned_description != "*Contenu vide*": - md_content.append("## Description") - md_content.append("") - - # Amélioration du formatage des titres et sections - cleaned_description = cleaned_description.replace("### ", "\n### ") - # Correction du formatage des points importants - import re - cleaned_description = re.sub(r'(###.*?)\n?-', r'\1\n-', cleaned_description) - md_content.append(cleaned_description) - md_content.append("") + else: + md_content.append("*Aucune description fournie*") + else: + md_content.append("*Aucune description fournie*") + md_content.append("") # saut de ligne # Ajouter les messages messages = [] @@ -274,6 +195,15 @@ def create_markdown_from_json(json_file, output_file): # Formater la date date = format_date(message.get("date", "")) + # Récupérer le corps du message + body = message.get("body", "") + + # Déterminer si c'est un message transféré et le traiter spécialement + is_forwarded = message.get("is_forwarded", False) + + # Nettoyer le corps du message (clean_html traite maintenant les messages transférés) + cleaned_body = clean_html(body) + # Déterminer le type de message message_type = "" if message.get("is_stage_change", False): @@ -290,25 +220,22 @@ def create_markdown_from_json(json_file, output_file): # Créer l'en-tête du message md_content.append(f"### Message {i+1}") - md_content.append(f"**De** (`author_id`): {author}") - md_content.append(f"**Date** (`date`): {date}") - md_content.append(f"**Type** (`message_type`): {message_type}") + md_content.append(f"**author_id**: {author}") + md_content.append(f"**date**: {date}") + md_content.append(f"**message_type**: {message_type}") if subject: - md_content.append(f"**Sujet** (`subject`): {subject}") + md_content.append(f"**subject**: {subject}") # Ajouter l'ID du message si disponible message_id = message.get("id", "") if message_id: - md_content.append(f"**ID** (`id`): {message_id}") + md_content.append(f"**id**: {message_id}") - # Ajouter le corps du message - body = message.get("body", "") - cleaned_body = clean_html(body) - md_content.append("") - if not cleaned_body or cleaned_body == "*Contenu vide*": - md_content.append("*Contenu vide*") - else: + # Ajouter le corps nettoyé du message + if cleaned_body: md_content.append(cleaned_body) + else: + md_content.append("*Contenu vide*") # Ajouter les pièces jointes si elles existent attachment_ids = message.get("attachment_ids", []) @@ -339,7 +266,7 @@ def create_markdown_from_json(json_file, output_file): if valid_attachments: has_attachments = True md_content.append("") - md_content.append("**Pièces jointes** (`attachment_ids`):") + md_content.append("**attachment_ids**:") for att in valid_attachments: if isinstance(att, list) and len(att) > 1: md_content.append(f"- {att[1]}")