""" Génère des documents PDF de démonstration pour NormAssist. Usage : python scripts/generate_samples.py Crée des PDFs simulant des documents techniques industriels (normes, fiches techniques, manuels) à partir de contenu public. """ from pathlib import Path try: import fitz # PyMuPDF except ImportError: print("PyMuPDF requis : pip install pymupdf") raise SystemExit(1) SAMPLE_DIR = Path(__file__).resolve().parent.parent / "data" / "sample" SAMPLE_DIR.mkdir(parents=True, exist_ok=True) def create_pdf(filename: str, title: str, sections: list[dict]): """Crée un PDF structuré avec titre et sections.""" doc = fitz.open() # Page de titre page = doc.new_page(width=595, height=842) # A4 page.insert_text( (72, 200), title, fontsize=22, fontname="helv", color=(0.1, 0.2, 0.5) ) page.insert_text( (72, 240), "Document de démonstration — NormAssist", fontsize=11, fontname="helv", color=(0.4, 0.4, 0.4), ) page.insert_text( (72, 280), "Ce document est généré à des fins de démonstration.", fontsize=10, fontname="helv", color=(0.5, 0.5, 0.5), ) # Sections for section in sections: page = doc.new_page(width=595, height=842) y = 72 # Titre de section page.insert_text( (72, y), section["title"], fontsize=16, fontname="helv", color=(0.1, 0.2, 0.5), ) y += 35 # Corps text = section["body"] # Découper le texte en lignes de ~80 caractères words = text.split() lines = [] current_line = "" for word in words: if len(current_line) + len(word) + 1 > 80: lines.append(current_line) current_line = word else: current_line = f"{current_line} {word}".strip() if current_line: lines.append(current_line) for line in lines: if y > 780: page = doc.new_page(width=595, height=842) y = 72 page.insert_text((72, y), line, fontsize=10, fontname="helv") y += 16 filepath = SAMPLE_DIR / filename doc.save(str(filepath)) doc.close() print(f"✅ Créé : {filepath}") # ── Documents de démonstration ─────────────────────────────────────────────── DOCS = [ { "filename": "norme_qualite_systeme_management.pdf", "title": "Système de Management de la Qualité — Exigences", "sections": [ { "title": "1. Domaine d'application", "body": ( "Le présent document spécifie les exigences relatives au système de management " "de la qualité lorsqu'un organisme doit démontrer son aptitude à fournir " "régulièrement des produits et services conformes aux exigences des clients " "et aux exigences légales et réglementaires applicables. Il vise à accroître " "la satisfaction des clients par l'application efficace du système, y compris " "les processus pour l'amélioration continue du système et l'assurance de la " "conformité aux exigences des clients et aux exigences légales et réglementaires " "applicables. Toutes les exigences du présent document sont génériques et " "prévues pour s'appliquer à tout organisme, quels que soient son type, sa " "taille et les produits et services qu'il fournit." ), }, { "title": "2. Contexte de l'organisme", "body": ( "L'organisme doit déterminer les enjeux externes et internes pertinents par " "rapport à sa finalité et son orientation stratégique, et qui influent sur sa " "capacité à obtenir le ou les résultats attendus de son système de management " "de la qualité. L'organisme doit surveiller et revoir les informations relatives " "à ces enjeux externes et internes. L'organisme doit déterminer les parties " "intéressées qui sont pertinentes dans le cadre du système de management de " "la qualité et les exigences de ces parties intéressées qui sont pertinentes " "dans le cadre du système de management de la qualité." ), }, { "title": "3. Traçabilité", "body": ( "L'organisme doit maîtriser l'identification unique des éléments de sortie " "lorsque la traçabilité est une exigence et doit conserver les informations " "documentées nécessaires à la traçabilité. La traçabilité implique la capacité " "de retracer l'historique, la mise en œuvre ou l'emplacement d'un objet. " "Pour un produit, la traçabilité peut être liée à l'origine des matériaux " "et des pièces, l'historique de réalisation, la distribution et l'emplacement " "du produit après livraison. Les enregistrements de traçabilité doivent inclure " "les numéros de lot, les dates de fabrication, les identifiants uniques des " "composants, et les résultats de contrôle associés. La période de conservation " "des enregistrements de traçabilité est de minimum 10 ans pour les produits " "à caractère sécuritaire et 5 ans pour les produits standards." ), }, { "title": "4. Audit interne", "body": ( "L'organisme doit réaliser des audits internes à des intervalles planifiés " "pour fournir des informations permettant de déterminer si le système de " "management de la qualité est conforme aux propres exigences de l'organisme " "et aux exigences du présent document, et s'il est efficacement mis en œuvre " "et tenu à jour. L'organisme doit planifier, établir, mettre en œuvre et " "maintenir un ou des programmes d'audit couvrant la fréquence, les méthodes, " "les responsabilités, les exigences de planification et de compte rendu. " "La fréquence minimale recommandée est d'un audit complet par an, avec des " "audits partiels trimestriels sur les processus critiques." ), }, ], }, { "filename": "fiche_technique_materiau_epdm.pdf", "title": "Fiche Technique — Élastomère EPDM Grade Industriel", "sections": [ { "title": "1. Identification du matériau", "body": ( "Désignation : EPDM 70 Shore A — Grade Industriel. " "Famille chimique : Éthylène-Propylène-Diène Monomère. " "Norme de référence : conforme aux spécifications techniques " "pour applications d'étanchéité industrielle. " "Couleur : Noir (chargé noir de carbone). " "Densité : 1.15 ± 0.05 g/cm³. " "Code matière interne : EPDM-70-IND-2024." ), }, { "title": "2. Propriétés mécaniques", "body": ( "Dureté Shore A : 70 ± 5. " "Résistance à la traction : ≥ 10 MPa. " "Allongement à la rupture : ≥ 300%. " "Déformation rémanente après compression (DRC) : ≤ 25% " "(72h à 100°C, compression 25%). " "Résistance au déchirement : ≥ 8 kN/m. " "Module d'élasticité : 3.5 MPa (à 100% d'allongement). " "Ces valeurs sont données à titre indicatif et peuvent varier " "selon les conditions de mise en œuvre et de vulcanisation." ), }, { "title": "3. Plage de températures", "body": ( "Température minimale d'utilisation continue : -40°C. " "Température maximale d'utilisation continue : +150°C. " "Température de pointe admissible (courte durée < 1h) : +175°C. " "Fragilisation basse température (TR10) : -55°C. " "ATTENTION : Au-delà de +150°C en utilisation continue, le matériau " "subit une dégradation accélérée avec perte de propriétés mécaniques " "significative. La durée de vie est réduite de 50% pour chaque " "augmentation de 10°C au-dessus de la température maximale recommandée." ), }, { "title": "4. Résistances chimiques", "body": ( "Résistance à l'ozone : Excellente (classement A). " "Résistance aux UV : Bonne avec protection noir de carbone. " "Résistance à la vapeur d'eau : Excellente jusqu'à 180°C. " "Résistance aux acides dilués : Bonne. " "Résistance aux bases : Bonne. " "Résistance aux huiles minérales : Mauvaise — NE PAS UTILISER. " "Résistance aux hydrocarbures : Mauvaise — NE PAS UTILISER. " "Résistance aux fluides de frein DOT 3/4 : Bonne. " "Pour les applications en contact avec des huiles, préférer le NBR ou le FKM." ), }, { "title": "5. Applications typiques", "body": ( "Joints d'étanchéité pour circuits d'eau chaude et vapeur. " "Membranes pour installations de traitement d'eau. " "Joints de portes et fenêtres (bâtiment et automobile). " "Revêtements de rouleaux pour industrie papetière. " "Tuyaux flexibles pour fluides aqueux. " "Isolation électrique basse tension. " "Applications toiture et géomembrane." ), }, ], }, { "filename": "manuel_maintenance_moteur_industriel.pdf", "title": "Manuel de Maintenance — Moteur Asynchrone Triphasé Série MX", "sections": [ { "title": "1. Consignes de sécurité", "body": ( "DANGER : Toute intervention sur le moteur doit être effectuée hors tension. " "Vérifier l'absence de tension avec un détecteur approprié avant toute opération. " "Attendre le refroidissement complet du moteur (température de surface < 40°C). " "Porter les équipements de protection individuelle (EPI) : gants isolants, " "lunettes de protection, chaussures de sécurité. " "Les opérations de maintenance ne doivent être réalisées que par du personnel " "qualifié ayant reçu la formation spécifique. " "Consigner et cadenasser l'installation conformément à la procédure de sécurité " "avant toute intervention." ), }, { "title": "2. Maintenance préventive — Planning", "body": ( "INSPECTION VISUELLE (fréquence : mensuelle) : Vérifier l'état des câbles " "d'alimentation, l'absence de fuites de graisse, l'état du ventilateur de " "refroidissement, le serrage des borniers. Contrôler l'absence de vibrations " "ou bruits anormaux en fonctionnement. Relever la température des paliers " "avec un thermomètre infrarouge (seuil d'alerte : +80°C, seuil d'arrêt : +95°C). " "CONTRÔLE DIMENSIONNEL (fréquence : trimestriel) : Mesurer l'isolement des " "enroulements avec un mégohmmètre (valeur minimale acceptable : 1 MΩ par kV " "de tension nominale + 1 MΩ). Vérifier l'alignement de l'accouplement " "(tolérance : 0.05 mm en radial, 0.02 mm/100mm en angulaire). " "REMPLACEMENT DES ROULEMENTS (fréquence : tous les 20 000 heures de fonctionnement " "ou tous les 3 ans, selon la première échéance). " "REMPLACEMENT DES JOINTS D'ÉTANCHÉITÉ (fréquence : tous les 18 mois ou en cas " "de fuite détectée lors de l'inspection visuelle)." ), }, { "title": "3. Procédure de regraissage des roulements", "body": ( "Graisse préconisée : graisse lithium EP2 haute température. " "Quantité par roulement : selon la formule Q = D × B × 0.005 (en grammes), " "où D est le diamètre extérieur et B la largeur du roulement en mm. " "Procédure : 1) Nettoyer les graisseurs avec un chiffon propre. " "2) Raccorder la pompe à graisse au graisseur. " "3) Injecter la quantité calculée en faisant tourner l'arbre manuellement. " "4) Laisser tourner le moteur à vide pendant 30 minutes pour permettre " "l'évacuation de l'excédent de graisse par le déflecteur. " "5) Vérifier la température des paliers après 2 heures de fonctionnement. " "ATTENTION : Un excès de graisse provoque une surchauffe des roulements." ), }, { "title": "4. Diagnostic des pannes courantes", "body": ( "Le moteur ne démarre pas : Vérifier l'alimentation (tension aux bornes), " "contrôler les protections (disjoncteur, relais thermique), vérifier la " "continuité des enroulements. " "Vibrations excessives : Contrôler l'alignement, vérifier l'équilibrage " "du rotor, inspecter l'état des roulements (mesure de vibration seuil " "d'alerte : 4.5 mm/s RMS, seuil de danger : 7.1 mm/s RMS). " "Surchauffe : Vérifier la charge (ne pas dépasser le courant nominal), " "contrôler la ventilation (nettoyage des ailettes), vérifier l'équilibre " "des phases (déséquilibre max : 2%). " "Bruit anormal : Roulements usés (bruit de roulement), ventilateur endommagé " "(bruit aérodynamique), frottement rotor-stator (bruit de frottement)." ), }, ], }, ] def main(): print("🏭 Génération des documents de démonstration NormAssist\n") for doc_def in DOCS: create_pdf(doc_def["filename"], doc_def["title"], doc_def["sections"]) print(f"\n✅ {len(DOCS)} documents créés dans {SAMPLE_DIR}") if __name__ == "__main__": main()