from pathlib import Path
import json
from pptx import Presentation
from pptx.util import Inches,Pt
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE
from pptx.oxml.xmlchemy import OxmlElement
from doc_helpers import base,title,p,heading,save

ROOT=Path(__file__).resolve().parents[1];OUT=ROOT/'ESP_00VB_Livrables';CAP=ROOT/'_fabrication_00VB'/'captures'
NAVY='16324F';TEAL='007D8A';GOLD='D6A649';LIGHT='EEF4F8';GRAY='526477'
S=[
('Décider sur des données fiables','Réorganisation du travail administratif',60,
 [('Un dossier commun','Messages, rendez-vous et facturation'),('Des règles explicites','Rabais de 5 % et lettres personnalisées'),('Un suivi vérifiable','Portrait mensuel et bilan annuel')],
 "Madame Bonmarché, madame Sauvageau, bonjour. Je m’appelle [prénom et nom] et je vous présente le plan de réorganisation du travail de bureau. L’objectif est de vous donner des renseignements cohérents pour suivre l’activité, facturer les bons services aux bonnes personnes et communiquer avec la clientèle. La proposition s’appuie sur Word et Excel et sur les responsabilités de l’équipe déjà en place. Je présenterai les difficultés observées, les outils, les résultats des essais et un déploiement progressif. Les personnes et les montants des démonstrations sont fictifs. Les choix qui vous concernent portent surtout sur les règles, les responsables et les conditions de mise en service. À la fin, nous reviendrons sur les décisions nécessaires pour lancer le pilote.\nANIMATION : regarder la caméra; marquer une pause après les objectifs. Transition : commençons par vos besoins respectifs."),
('Deux directrices, des besoins complémentaires','Le mandat',80,
 [('Direction générale','Portrait mensuel • bilan • anniversaire'),('Comptabilité','Heures exactes • rabais • accès au classeur'),('Équipe de bureau','Méthode commune • messages suivis')],
 "Madame Bonmarché, vous souhaitez un portrait mensuel automatisé et son insertion dans le bilan annuel sans erreur de retranscription. Vous souhaitez aussi une communication unique pour les cinq ans de l’organisme et l’offre de fidélité de la sexologue. Madame Sauvageau, votre priorité est une facturation fidèle aux services rendus, qui n’oublie pas le rabais et reste accessible pendant que d’autres personnes travaillent. Ces besoins sont liés : un portrait fiable dépend d’heures correctement saisies et une facture correcte dépend du même journal. Le travail porte donc sur la circulation de l’information autant que sur les calculs. La secrétaire et la réceptionniste doivent pouvoir utiliser les outils selon une procédure commune. Les professionnels demeurent responsables de confirmer les durées réalisées. Les logiciels organisent et réutilisent les données, tandis que les responsables conservent leur rôle de validation.\nANIMATION : désigner les deux blocs correspondant aux directrices. Transition : les erreurs actuelles apparaissent précisément aux passages entre ces personnes."),
('Les erreurs naissent lors des transmissions','Le diagnostic',80,
 [('Appels','Papier égaré ou mauvais fichier'),('Heures','Mauvais client ou ressaisie'),('Bilan et lettres','Chiffres recopiés • styles variables')],
 "Trois chaînes de travail présentent des ruptures. Pour les appels, un message peut être pris sur papier, puis saisi dans Word ou Excel, avec le risque de le perdre ou de choisir le mauvais service. Pour les heures, les renseignements sont transmis oralement ou dans des fichiers différents, sans identifiant commun. Une durée peut alors être associée au mauvais client. Enfin, le bilan exige une nouvelle saisie des chiffres et les lettres utilisent des styles différents. La cause commune déduite du scénario est l’absence d’une méthode partagée et d’une source administrative stable. Cette interprétation devra être confirmée avec l’équipe au démarrage. Ajouter une nouvelle feuille de papier ne supprimerait pas les retranscriptions. Des fichiers séparés par service compliqueraient aussi le suivi des personnes qui consultent plusieurs professionnels. La solution retenue doit donc rendre chaque information réutilisable et attribuer clairement la responsabilité de sa vérification.\nANIMATION : suivre les trois blocs de gauche à droite. Transition : voici le circuit proposé."),
('Une personne, un identifiant, une seule saisie','Le circuit proposé',80,
 [('Clients → RendezVous','Nom, service, dates et heures'),('RendezVous → Excel','Facture et portrait calculés'),('Excel → Word','Lettre conditionnelle et bilan lié')],
 "La feuille Clients contient une ligne par personne et un identifiant stable. Lorsqu’une consultation est inscrite, cet identifiant permet de retrouver le nom sans le retaper. Le service choisi retrouve le professionnel et le tarif de démonstration. Les heures prévues servent à suivre les réservations; les heures réellement effectuées servent à la facturation et au portrait d’activité. Cette distinction répond au problème de promotion d’un service déjà occupé. La feuille Fusion reprend une seule ligne par personne, même si elle utilise deux services. Le registre Messages est également centralisé, mais reste limité aux renseignements nécessaires au rappel et à l’orientation. Il n’inclut pas de notes de consultation. Le principal bénéfice attendu est la réduction des ressaisies. Il reste nécessaire de confirmer les informations à l’entrée et de traiter les alertes. Le prototype prépare cinquante lignes de clients et trois cents lignes pour les rendez-vous et les messages.\nANIMATION : montrer le chemin d’une consultation jusqu’au bilan. Transition : les automatisations Excel soutiennent ce circuit."),
('Excel : cinq automatisations utiles','Les outils',100,
 [('Saisir correctement','Validation de données et RECHERCHEV'),('Appliquer les règles','SI imbriqués et alertes visuelles'),('Retrouver les outils','Liens depuis l’accueil')],
 "Cinq catégories d’automatisation reconnues par les consignes sont intégrées au classeur. Les listes de validation limitent les services et les statuts possibles. Les recherches exactes retrouvent le client, le professionnel et les renseignements de la facture. Les conditions imbriquées appliquent le rabais dans les situations autorisées. La mise en forme conditionnelle fait ressortir les incohérences, les messages à relancer et l’occupation des services. Enfin, les liens de l’accueil facilitent la navigation pour les utilisatrices qui ont peu de temps. Les cellules jaunes sont destinées à la saisie; les cellules bleues se calculent. Les formules sont protégées contre une modification accidentelle, sans mot de passe. Cette protection ne remplace pas les autorisations d’accès au dossier. Le registre calcule aussi le responsable d’un message, mais la réception doit réellement le transmettre. Une couleur ne remplace donc ni une action ni une validation.\nDÉMONSTRATION, 25 secondes : ouvrir Accueil, puis Messages; montrer M001 et son responsable. Revenir à la présentation. Transition : examinons la règle qui a le plus d’effet sur la facturation."),
('5 % uniquement lorsque les conditions sont réunies','La règle du rabais',100,
 [('Historique admissible','Consultation de sexologie réalisée durant l’année de référence'),('Nouveau service admissible','Sexologie réalisée pendant la promotion'),('Exemple','100,00 $ − 5,00 $ = 95,00 $ HT')],
 "La première condition concerne l’historique : la personne doit avoir utilisé le service de sexologie pendant l’année de référence. Dans le jeu d’essai, cette année va du premier septembre 2025 au trente et un août 2026. Une réservation ou une annulation ne rend pas admissible. La deuxième condition concerne la nouvelle prestation : elle doit être réalisée, relever de la sexologie et se situer dans la période de promotion, du premier septembre 2026 au trente et un août 2027 inclusivement. Les dates sont des hypothèses à confirmer. Le montant brut est arrondi au cent, puis le rabais est arrondi au cent et soustrait. Pour une heure à cent dollars, le total hors taxes est donc de quatre-vingt-quinze dollars. Un client qui utilise aussi la psychologie ne reçoit pas de réduction pour cette autre consultation. Cette distinction évite de confondre l’admissibilité d’une personne avec l’admissibilité de chacune de ses prestations.\nINTERACTION, 15 secondes : proposer le cas d’un client fidèle qui consulte la psychologue et laisser identifier le tarif normal. Transition : la facture reprend directement ces résultats."),
('La facture reprend les données du rendez-vous','Démonstration R014',100,
 [('Sélectionner','Choisir R014 dans Facture!C6'),('Contrôler','Client • durée • rabais • numéro'),('Conserver','Valider puis archiver un PDF')],
 "Madame Sauvageau, la facture se construit à partir de l’identifiant du rendez-vous. Il n’est pas nécessaire de ressaisir le nom, les heures ou le montant du rabais. Pour R014, le client est C001, la consultation est une heure de sexologie et le total est de quatre-vingt-quinze dollars hors taxes. Avant émission, le professionnel confirme la durée et la comptabilité contrôle les montants. Un numéro unique est attribué au rendez-vous, puis la facture est conservée en PDF. Les taxes ne sont pas définies dans le scénario : leur traitement devra être paramétré avant un usage réel. Le classeur indique si une ligne présente une alerte, mais il ne peut empêcher matériellement toute impression. La procédure de validation reste donc importante. Une période clôturée doit aussi être archivée avant une modification des tarifs, car le prototype relit le catalogue.\nDÉMONSTRATION, 30 secondes : afficher la facture; pointer le brut, le rabais et le net. Expliquer que le test de changement de durée a été effectué sur une copie temporaire. Transition : les mêmes prestations alimentent le portrait."),
('Le portrait distingue activité et réservations','Pilotage mensuel',80,
 [('21,25 h','Prestations réalisées en 2026 dans le jeu fictif'),('2 521,25 $','Montant net annuel hors taxes'),('Deux lectures','Activité réalisée et occupation réservée')],
 "Le portrait annuel du jeu de démonstration présente vingt et une heures et quart de prestations réalisées et un montant net de deux mille cinq cent vingt et un dollars et vingt-cinq cents. Ces chiffres servent uniquement à vérifier le fonctionnement des outils. Ils ne représentent pas l’activité réelle de l’organisme. Le tableau mensuel répartit les heures par service et calcule le brut, les réductions et le net. Un autre tableau compare les heures réservées à la capacité paramétrée du mois. Cette seconde lecture aide Pierre Tremblay à apprécier les services à promouvoir. Elle doit être complétée par la consultation des dates des rendez-vous : une faible occupation mensuelle ne garantit pas un créneau particulier. Le portrait inclut également les prestations réalisées dont la facture est encore en brouillon; il ne mesure donc pas des encaissements. La comptabilité peut rapprocher les heures réalisées et les heures émises pour identifier les dossiers restant à traiter.\nANIMATION : montrer les deux indicateurs, puis les distinguer de la capacité. Transition : le bilan Word reprend ces données."),
('Word : quatre automatisations reconnues','Correspondance et bilan',100,
 [('Modèles .dotx','Deux signatures professionnelles distinctes'),('Publipostage avec règle','Offre présente ou absente selon le client'),('Calculs et navigation','Rapprochement des montants • signets et liens')],
 "Les quatre catégories Word sont les modèles, le publipostage avancé avec règle, les champs calculés personnalisés et les liens hypertextes avec signets dans le bilan. Les deux modèles de lettres conservent une présentation commune et comportent les noms de Micheline Champagne et de Julie Grandmaison dans des signatures visuelles distinctes. Leurs coordonnées réelles restent à inscrire, puisqu’elles ne sont pas fournies. Le publipostage utilise une condition sur le champ Admissible. Le bilan possède des liaisons vers les cellules d’Excel et un tableau qui recalcule le montant net, puis le compare au net provenant du classeur. L’écart attendu est de zéro dollar. Les signets facilitent l’accès au portrait et au contrôle des montants. Les liaisons constituent un complément utile, sans être ajoutées artificiellement au nombre de catégories exigées. Les fichiers contiennent les mécanismes prévus, mais leur exécution dans Word doit être testée sur un poste équipé.\nDÉMONSTRATION, 20 secondes : ouvrir le modèle de psychologie ou l’aperçu; montrer l’objet et la signature. Transition : regardons le résultat attendu du publipostage."),
('Une seule lettre par personne','Anniversaire et fidélité',80,
 [('Tous les destinataires','Cinq ans d’existence de l’organisme'),('Six personnes admissibles','Un paragraphe supplémentaire sur le rabais'),('Contrôle de la liste','12 lettres attendues • aucun doublon')],
 "La lettre commune annonce le cinquième anniversaire et remercie la clientèle. Le paragraphe de l’offre est ajouté seulement lorsque le champ Admissible vaut Oui. Les autres destinataires ne lisent aucune offre de réduction. La source comprend une ligne par client, ce qui évite qu’une personne utilisant plusieurs services reçoive deux lettres. Dans la démonstration, douze lettres sont attendues : six avec l’offre et six sans l’offre. Le ciblage inclut les clients actuels et les personnes admissibles à la fidélité, même si elles n’ont plus de rendez-vous courant. Cette interprétation devra être confirmée au cadrage. Avant diffusion, Nicole vérifie les adresses, applique le filtre Envoyer égal à Oui, regarde les deux variantes et fusionne dans un nouveau document. Le dossier contient des exemples attendus, mais ces exemples ne constituent pas une preuve de fusion dans Word. Aucun message n’a été envoyé à des clients pendant la préparation.\nANIMATION : opposer les deux exemples en montrant seulement l’emplacement du paragraphe ajouté. Transition : la qualité de ces outils doit être démontrée par des essais."),
('Des calculs vérifiés, des essais Office à terminer','La validation',80,
 [('Recalcul réussi','Cas limites, totaux et changement d’heures'),('Alertes vérifiées','Doublon de rendez-vous et client inconnu'),('Réception à compléter','Word • coédition • essai du guide')],
 "Les contrôles du classeur ont été exécutés dans LibreOffice Calc, qui a ouvert et recalculé le fichier Excel. Les cas de rabais aux dates limites, l’exclusion d’un autre service, les annulations et l’arrondi réussissent. Aucune cellule en erreur n’a été détectée. Un essai a fait passer la durée de R014 d’une à deux heures : le montant du rendez-vous et celui de la facture sont passés à cent quatre-vingt-dix dollars, tandis que le portrait annuel augmentait du même montant supplémentaire. Les données ont ensuite été rétablies. Des erreurs introduites volontairement ont produit les alertes attendues pour un doublon et un client inconnu. En revanche, Word et Excel ne sont pas installés sur le poste de préparation. Il faut donc terminer la fusion, la mise à jour des liaisons et la navigation dans Microsoft Office, puis essayer la coédition avec deux comptes. Les résultats humains, comme le gain de temps ou l’autonomie, restent aussi à mesurer.\nANIMATION : distinguer calmement les contrôles accomplis et les essais de réception. Transition : le calendrier réserve du temps à ces vérifications."),
('Implanter sur vingt jours ouvrables','Le calendrier',80,
 [('J1–J8','Cadrage • données • outils'),('J9–J15','Tests • pilote • formation'),('J16–J20','Corrections • mise en service • suivi')],
 "Le déploiement proposé couvre vingt jours ouvrables. Les deux premiers jours servent à confirmer les paramètres et les responsabilités. La liste des clients et l’historique sont ensuite nettoyés, pendant que la technicienne paramètre les outils. Les modèles sont validés avec les professionnelles. Les jours neuf et dix sont consacrés aux essais de calcul et aux contrôles Word. Le pilote des jours onze à treize comprend l’accès simultané au classeur. La formation et l’essai du guide interviennent après cette première utilisation. Les corrections précèdent la mise en service, puis deux jours sont réservés à la stabilisation. Cette séquence permet de corriger un problème avant qu’il touche toute l’équipe. Si la coédition n’est pas disponible, un éditeur temporaire peut être désigné et un portrait exporté fourni à la comptabilité. Il s’agit d’une mesure de transition, car elle ne répond pas encore à l’objectif d’accès simultané. Une copie datée de la version précédente permet le retour arrière.\nANIMATION : parcourir la ligne du temps. Transition : chaque étape a un responsable."),
('Chacun sait quoi saisir et quoi valider','Les responsabilités',80,
 [('Réception et secrétariat','Saisies • messages • lettres'),('Professionnels et comptabilité','Heures confirmées • factures validées'),('Technicienne et direction','Anomalies • formation • décisions')],
 "Sandra Fontaine inscrit les appels et les rendez-vous et suit les messages non traités. Nicole Bourassa maintient les coordonnées et prépare les lettres à partir des modèles. Chaque professionnel confirme la prestation et sa durée. Pierre Tremblay rapproche les heures et vérifie les informations utilisées pour promouvoir les services. Anne-Marie Sauvageau contrôle les montants et les factures, puis conserve les pièces émises. La technicienne en bureautique coordonne les méthodes, traite les anomalies, met à jour le guide et soutient les remplacements. Henriette Bonmarché confirme la campagne, valide les orientations et autorise la mise en service à l’issue du pilote. Ce partage évite que l’outil soit perçu comme la responsabilité d’une seule personne. Il permet aussi de distinguer la saisie, la confirmation et l’approbation. Les droits d’accès doivent correspondre aux besoins réels du travail. Le classeur reste administratif et ne contient pas de notes cliniques.\nANIMATION : illustrer un passage de la réception à la comptabilité. Transition : comment saurons-nous que le changement est utile ?"),
('Mesurer les effets dans le travail réel','Le suivi',60,
 [('Avant et après','Temps du portrait • factures corrigées'),('Tous les jours','Messages en attente • anomalies de saisie'),('À trente jours','Résultats du pilote et révision du guide')],
 "La réussite ne sera pas jugée seulement sur l’existence des fichiers. Avant le pilote, il faut mesurer le temps de production du portrait, les corrections de factures et les messages introuvables. Les mêmes mesures seront relevées pendant le pilote et après trente jours. La cible du portrait est de moins de dix minutes après validation des données, mais ce gain n’a pas encore été mesuré. Deux utilisatrices réaliseront cinq tâches avec le guide : le résultat attendu est cinq réussites sur cinq. Les hésitations indiqueront les consignes à améliorer. Chaque mois, la technicienne vérifiera les paramètres, les plages disponibles et le journal des corrections. Ce suivi permet d’ajuster les outils en fonction des difficultés observées.\nANIMATION : ralentir le débit sur la distinction entre une cible et un résultat mesuré. Transition : je termine par les décisions proposées."),
('Confirmer les règles, puis lancer le pilote','Conclusion',40,
 [('À confirmer','Dates • coordonnées • tarifs • responsabilités'),('À vérifier','Office et coédition avant mise en service'),('Résultat recherché','Une information cohérente et réutilisable')],
 "La proposition réunit les données administratives, réduit les ressaisies et applique des règles communes aux lettres, à la facturation et au bilan. Les calculs de démonstration ont été vérifiés. Les prochaines décisions concernent les paramètres réels, les responsables et l’environnement de travail partagé. Après les essais Office et le pilote, l’équipe pourra décider de la mise en service sur la base de résultats observés. Je vous remercie de votre attention et je suis disponible pour préciser un outil ou une étape de validation.\nANIMATION : regarder la caméra, faire une pause, puis accueillir les questions. Les questions peuvent suivre les vingt minutes selon les modalités de l’évaluation.")]

def text(slide,x,y,w,h,txt,size=24,bold=False,color=NAVY):
    box=slide.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h));tf=box.text_frame;tf.word_wrap=True
    for i,line in enumerate(txt.split('\n')):
        p=tf.paragraphs[0] if i==0 else tf.add_paragraph();p.text=line;p.font.name='Calibri';p.font.size=Pt(size);p.font.bold=bold;p.font.color.rgb=RGBColor.from_string(color);p.space_after=Pt(8)
    return box
def box(slide,x,y,w,h,color):
    sh=slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,Inches(x),Inches(y),Inches(w),Inches(h));sh.fill.solid();sh.fill.fore_color.rgb=RGBColor.from_string(color);sh.line.fill.background();return sh
def build():
    prs=Presentation();prs.slide_width=Inches(13.333);prs.slide_height=Inches(7.5)
    elapsed=0;script=base('Notes de présentation — 20 minutes');title(script,'Notes pour la présentation orale','15 diapositives • 20 minutes prévues')
    p(script,'Remplacer [prénom et nom] et répéter avec un chronomètre. Les durées incluent les pauses, les interactions et les démonstrations. Le minutage est un canevas de préparation, pas une répétition déjà effectuée.')
    for idx,(tit,sub,seconds,cards,notes) in enumerate(S,1):
        sl=prs.slides.add_slide(prs.slide_layouts[6]);dark=idx in [1,15]
        sl.background.fill.solid();sl.background.fill.fore_color.rgb=RGBColor.from_string(NAVY if dark else 'FFFFFF')
        text(sl,.65,.35,11,.4,sub.upper(),13,True,GOLD if dark else TEAL)
        text(sl,.65,1.03,12,1.25,tit,34,True,'FFFFFF' if dark else NAVY)
        for ci,(head,body) in enumerate(cards):
            x=.65+ci*4.18;box(sl,x,2.65,3.95,2.75,'244762' if dark else LIGHT)
            text(sl,x+.25,2.92,3.45,.78,head,25,True,GOLD if dark else TEAL)
            text(sl,x+.25,3.86,3.45,1.30,body,22,False,'FFFFFF' if dark else NAVY)
        if idx==7:text(sl,.85,5.83,11.7,.6,'R014   |   1 h × 100 $   |   rabais : 5 $   |   net : 95 $',23,True,TEAL)
        elif idx==6:text(sl,.85,5.83,11.7,.6,'Période de démonstration : du 1er septembre 2026 au 31 août 2027',20,False,GRAY)
        elif idx==11:text(sl,.85,5.83,11.7,.6,'Les essais dans LibreOffice ne remplacent pas la validation dans Microsoft Office.',19,False,GRAY)
        else:text(sl,.85,5.87,11.7,.55,'Données de démonstration • Outils Word et Excel • ESP 00VB',15,False,'C5D6E1' if dark else GRAY)
        text(sl,.65,7.03,10,.25,'TECHNIQUES DE BUREAUTIQUE  /  PLAN D’ACTION',10,False,'C5D6E1' if dark else GRAY);text(sl,12.1,7.0,.55,.3,f'{idx:02}',12,True,GOLD if dark else TEAL)
        transition=OxmlElement('p:transition');transition.set('spd','slow');transition.append(OxmlElement('p:fade'))
        # Transition follows cSld and clrMapOvr, before timing/extLst.
        sl._element.append(transition)
        start=f'{elapsed//60:02}:{elapsed%60:02}';elapsed+=seconds;end=f'{elapsed//60:02}:{elapsed%60:02}'
        full=f'DURÉE : {seconds} s | REPÈRE : {start}–{end}\n\n'+notes
        sl.notes_slide.notes_text_frame.text=full
        heading(script,f'{idx}. {tit}',2);p(script,f'{start}–{end} • {seconds} secondes');p(script,notes)
    assert elapsed==1200
    prs.core_properties.title='Réorganisation administrative — Présentation de 20 minutes';prs.core_properties.author='[Nom à compléter]';prs.save(OUT/'09_Presentation_orale_20min.pptx')
    save(script,'09_Notes_presentation_orale.docx')
    print(f'{len(S)} diapositives; {elapsed} secondes; '+str(sum(len(x[4].split()) for x in S))+' mots dans les notes.')

if __name__=='__main__':build()
