{"id":3466,"date":"2026-08-22T13:13:55","date_gmt":"2026-08-22T13:13:55","guid":{"rendered":"https:\/\/maroczain.com\/?p=3466"},"modified":"2026-08-22T13:13:55","modified_gmt":"2026-08-22T13:13:55","slug":"3466","status":"publish","type":"post","link":"https:\/\/maroczain.com\/en\/2026\/08\/22\/3466\/","title":{"rendered":""},"content":{"rendered":"<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n<title>G\u00e9n\u00e9rateur de co\u00fbts de formation \u2014 Maroc Zain Academy<\/title>\n\n<style>\n:root{\n  --blue:#0b5cab;\n  --sky:#0ea5e9;\n  --gold:#e9c84a;\n  --green:#0f9f6e;\n  --bg:#f4f7fb;\n  --ink:#0f172a;\n  --muted:#64748b;\n  --line:#dbe4ee;\n}\n\n*{\n  box-sizing:border-box;\n}\n\nbody{\n  margin:0;\n  font-family:Arial,Helvetica,sans-serif;\n  color:var(--ink);\n  background:linear-gradient(\n    180deg,\n    #eef6ff,\n    #f7f9fc 45%,\n    #f4f7fb\n  );\n}\n\n.wrap{\n  max-width:1260px;\n  margin:auto;\n  padding:24px;\n}\n\n.hero{\n  padding:30px;\n  border-radius:26px;\n  color:#fff;\n  background:\n  linear-gradient(\n    135deg,\n    #073b73,\n    #0b5cab 55%,\n    #0ea5e9\n  );\n  box-shadow:0 18px 45px rgba(15,23,42,.10);\n}\n\n.brand{\n  font-weight:900;\n  letter-spacing:.08em;\n}\n\n.hero h1{\n  font-size:40px;\n  margin:12px 0 8px;\n}\n\n.hero p{\n  max-width:850px;\n  line-height:1.5;\n  margin:0;\n  opacity:.92;\n}\n\n.tabs{\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:12px;\n  margin:20px 0;\n}\n\n.tab{\n  border:2px solid transparent;\n  background:#fff;\n  border-radius:16px;\n  padding:17px;\n  font-size:16px;\n  font-weight:800;\n  cursor:pointer;\n  box-shadow:0 10px 28px rgba(15,23,42,.07);\n}\n\n.tab.active{\n  border-color:var(--blue);\n  color:var(--blue);\n  background:#eef7ff;\n}\n\n.layout{\n  display:grid;\n  grid-template-columns:1.4fr .85fr;\n  gap:20px;\n}\n\n.card{\n  background:#fff;\n  border:1px solid var(--line);\n  border-radius:22px;\n  padding:22px;\n  box-shadow:0 15px 35px rgba(15,23,42,.06);\n}\n\n.card h2{\n  margin-top:0;\n}\n\n.form-grid{\n  display:grid;\n  grid-template-columns:repeat(2,1fr);\n  gap:14px;\n}\n\n.field{\n  display:flex;\n  flex-direction:column;\n  gap:6px;\n}\n\n.field.full{\n  grid-column:1\/-1;\n}\n\nlabel{\n  font-size:13px;\n  color:#475569;\n  font-weight:700;\n}\n\ninput,\nselect,\ntextarea{\n  border:1px solid var(--line);\n  border-radius:11px;\n  padding:11px 12px;\n  font:inherit;\n}\n\ntextarea{\n  min-height:88px;\n  resize:vertical;\n}\n\n.section{\n  margin:20px 0 10px;\n  color:var(--blue);\n  font-size:13px;\n  font-weight:900;\n  text-transform:uppercase;\n  letter-spacing:.08em;\n}\n\ntable{\n  width:100%;\n  border-collapse:collapse;\n}\n\nth,\ntd{\n  padding:9px 7px;\n  border-bottom:1px solid #edf2f7;\n  text-align:left;\n}\n\nth{\n  font-size:12px;\n  color:var(--muted);\n  text-transform:uppercase;\n}\n\ntd input{\n  width:100%;\n}\n\n.results{\n  background:#eff7ff;\n  border:1px solid #cfe2f5;\n  border-radius:16px;\n  padding:14px;\n}\n\n.row{\n  display:flex;\n  justify-content:space-between;\n  gap:20px;\n  padding:9px 0;\n  border-bottom:1px dashed #cbd5e1;\n}\n\n.row:last-child{\n  border-bottom:0;\n}\n\n.big{\n  margin-top:14px;\n  background:linear-gradient(\n    135deg,\n    #073b73,\n    #0b5cab\n  );\n  color:white;\n  border-radius:16px;\n  padding:18px;\n}\n\n.big .amount{\n  font-size:32px;\n  font-weight:900;\n  margin-top:5px;\n}\n\n.ofppt{\n  margin-top:14px;\n  background:#ecfdf5;\n  border:1px solid #a7f3d0;\n  border-radius:16px;\n  padding:15px;\n}\n\n.ofppt h3{\n  margin:0 0 10px;\n  color:#087a53;\n}\n\n.actions{\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:10px;\n  margin-top:14px;\n}\n\nbutton.action{\n  border:0;\n  border-radius:11px;\n  padding:12px;\n  font-weight:800;\n  cursor:pointer;\n}\n\n.primary{\n  background:var(--blue);\n  color:#fff;\n}\n\n.gold{\n  background:var(--gold);\n  color:#1f2937;\n}\n\n.soft{\n  background:#eaf3fb;\n  color:var(--blue);\n}\n\n.green{\n  background:#dff7ec;\n  color:#087a53;\n}\n\n.devis{\n  margin-top:20px;\n  background:#fff;\n  border:1px solid var(--line);\n  border-radius:22px;\n  padding:25px;\n}\n\n.devis-head{\n  display:flex;\n  justify-content:space-between;\n  gap:20px;\n}\n\n.devis-title{\n  font-size:27px;\n  font-weight:900;\n  color:var(--blue);\n}\n\n.right{\n  text-align:right;\n}\n\n.muted{\n  color:var(--muted);\n  font-size:13px;\n}\n\n.hidden{\n  display:none;\n}\n\n.info{\n  padding:12px;\n  border-radius:12px;\n  background:#fff8dc;\n  border:1px solid #f4df8a;\n  font-size:13px;\n  line-height:1.5;\n}\n\n.footer{\n  text-align:center;\n  color:var(--muted);\n  font-size:12px;\n  padding:22px;\n}\n\n@media(max-width:900px){\n\n  .layout{\n    grid-template-columns:1fr;\n  }\n\n  .tabs{\n    grid-template-columns:1fr;\n  }\n\n  .form-grid{\n    grid-template-columns:1fr;\n  }\n\n}\n\n@media print{\n\n  .hero,\n  .tabs,\n  .layout,\n  .footer,\n  .print-hide{\n    display:none!important;\n  }\n\n  body{\n    background:#fff;\n  }\n\n  .wrap{\n    max-width:none;\n    padding:0;\n  }\n\n  .devis{\n    border:0;\n    display:block!important;\n  }\n\n}\n<\/style>\n\n<\/head>\n\n<body>\n\n<div class=\"wrap\">\n\n<section class=\"hero\">\n\n<div class=\"brand\">\nMAROC ZAIN ACADEMY\n<\/div>\n\n<h1>\nG\u00e9n\u00e9rateur de co\u00fbts de formation\n<\/h1>\n\n<p>\nCandidat, entreprise ou \u00e9cole \u2014 avec dossier OFPPT,\nsimulation de prise en charge \u00e0 70 %, calcul de la marge,\ndu prix par participant et du reste \u00e0 charge.\n<\/p>\n\n<\/section>\n\n\n<div class=\"tabs\">\n\n<button\nclass=\"tab active\"\ndata-type=\"candidat\">\n\ud83d\udc64 Candidat\n<\/button>\n\n<button\nclass=\"tab\"\ndata-type=\"entreprise\">\n\ud83c\udfe2 Entreprise\n<\/button>\n\n<button\nclass=\"tab\"\ndata-type=\"ecole\">\n\ud83c\udf93 \u00c9cole \/ Institut\n<\/button>\n\n<\/div>\n\n\n<div class=\"layout\">\n\n<section class=\"card\">\n\n<h2>Dossier formation<\/h2>\n\n\n<!-- CANDIDAT -->\n\n<div id=\"candidat\" class=\"profile\">\n\n<div class=\"form-grid\">\n\n<div class=\"field\">\n<label>Nom et pr\u00e9nom<\/label>\n<input id=\"candNom\">\n<\/div>\n\n<div class=\"field\">\n<label>T\u00e9l\u00e9phone<\/label>\n<input id=\"candTel\">\n<\/div>\n\n<div class=\"field\">\n<label>Email<\/label>\n<input id=\"candEmail\">\n<\/div>\n\n<div class=\"field\">\n<label>Formation choisie<\/label>\n<input\nid=\"candFormation\"\nvalue=\"Agent d'escale\">\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n<!-- ENTREPRISE -->\n\n<div id=\"entreprise\"\nclass=\"profile hidden\">\n\n<div class=\"form-grid\">\n\n<div class=\"field\">\n<label>Raison sociale<\/label>\n<input id=\"entNom\">\n<\/div>\n\n<div class=\"field\">\n<label>ICE \/ IF<\/label>\n<input id=\"entIce\">\n<\/div>\n\n<div class=\"field\">\n<label>Responsable RH \/ Formation<\/label>\n<input id=\"entResp\">\n<\/div>\n\n<div class=\"field\">\n<label>Email<\/label>\n<input id=\"entEmail\">\n<\/div>\n\n<div class=\"field\">\n<label>Formation demand\u00e9e<\/label>\n<input\nid=\"entFormation\"\nvalue=\"Formation professionnelle\">\n<\/div>\n\n<div class=\"field\">\n\n<label>Type de formation<\/label>\n\n<select id=\"entType\">\n\n<option>\nIntra-entreprise\n<\/option>\n\n<option>\nInter-entreprises\n<\/option>\n\n<option>\nSur mesure\n<\/option>\n\n<\/select>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n<!-- ECOLE -->\n\n<div\nid=\"ecole\"\nclass=\"profile hidden\">\n\n<div class=\"form-grid\">\n\n<div class=\"field\">\n<label>\u00c9tablissement<\/label>\n<input id=\"ecoNom\">\n<\/div>\n\n<div class=\"field\">\n<label>Responsable p\u00e9dagogique<\/label>\n<input id=\"ecoResp\">\n<\/div>\n\n<div class=\"field\">\n<label>Email<\/label>\n<input id=\"ecoEmail\">\n<\/div>\n\n<div class=\"field\">\n\n<label>\nProgramme \/ Formation\n<\/label>\n\n<input\nid=\"ecoFormation\"\nvalue=\"M\u00e9tiers de l'a\u00e9roport\">\n\n<\/div>\n\n<div class=\"field\">\n\n<label>\nNombre de groupes\n<\/label>\n\n<input\nid=\"ecoGroupes\"\ntype=\"number\"\nvalue=\"1\"\nmin=\"1\">\n\n<\/div>\n\n<div class=\"field\">\n\n<label>\nVolume horaire\n<\/label>\n\n<input\nid=\"ecoHeures\"\ntype=\"number\"\nvalue=\"20\"\nmin=\"1\">\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n<div class=\"section\">\nParam\u00e8tres commerciaux\n<\/div>\n\n<div class=\"form-grid\">\n\n<div class=\"field\">\n\n<label>\nParticipants\n<\/label>\n\n<input\nid=\"participants\"\ntype=\"number\"\nvalue=\"1\"\nmin=\"1\">\n\n<\/div>\n\n<div class=\"field\">\n\n<label>\nDur\u00e9e (jours)\n<\/label>\n\n<input\nid=\"jours\"\ntype=\"number\"\nvalue=\"1\"\nmin=\"0.5\"\nstep=\"0.5\">\n\n<\/div>\n\n<div class=\"field\">\n\n<label>\nMarge cible (%)\n<\/label>\n\n<input\nid=\"marge\"\ntype=\"number\"\nvalue=\"35\"\nmin=\"0\"\nmax=\"95\">\n\n<\/div>\n\n<div class=\"field\">\n\n<label>\nTVA (%)\n<\/label>\n\n<input\nid=\"tva\"\ntype=\"number\"\nvalue=\"20\"\nmin=\"0\">\n\n<\/div>\n\n<div class=\"field\">\n\n<label>\nRemise (%)\n<\/label>\n\n<input\nid=\"remise\"\ntype=\"number\"\nvalue=\"0\"\nmin=\"0\"\nmax=\"100\">\n\n<\/div>\n\n<div class=\"field\">\n\n<label>\nModalit\u00e9s de paiement\n<\/label>\n\n<select id=\"paiement\">\n\n<option>\n100% \u00e0 la commande\n<\/option>\n\n<option>\n50% commande \/ 50% avant formation\n<\/option>\n\n<option>\nSelon convention\n<\/option>\n\n<\/select>\n\n<\/div>\n\n<\/div>\n\n\n<div class=\"section\">\nDossier OFPPT \/ prise en charge\n<\/div>\n\n\n<div class=\"form-grid\">\n\n<div class=\"field\">\n\n<label>\nPrise en charge OFPPT\n<\/label>\n\n<select id=\"ofpptActif\">\n\n<option value=\"non\">\nNon\n<\/option>\n\n<option value=\"oui\">\nOui\n<\/option>\n\n<\/select>\n\n<\/div>\n\n\n<div class=\"field\">\n\n<label>\nTaux de prise en charge (%)\n<\/label>\n\n<input\nid=\"ofpptTaux\"\ntype=\"number\"\nvalue=\"70\"\nmin=\"0\"\nmax=\"100\">\n\n<\/div>\n\n\n<div class=\"field\">\n\n<label>\nBase \u00e9ligible\n<\/label>\n\n<select id=\"baseEligible\">\n\n<option value=\"ht\">\nPrix HT final\n<\/option>\n\n<option value=\"ttc\">\nPrix TTC\n<\/option>\n\n<option value=\"cout\">\nCo\u00fbt total\n<\/option>\n\n<\/select>\n\n<\/div>\n\n\n<div class=\"field\">\n\n<label>\nPlafond \u00e9ligible OFPPT (MAD)\n<\/label>\n\n<input\nid=\"plafondOfppt\"\ntype=\"number\"\nvalue=\"0\"\nmin=\"0\"\nplaceholder=\"0 = aucun plafond\">\n\n<\/div>\n\n\n<div class=\"field full\">\n\n<label>\nR\u00e9f\u00e9rence \/ N\u00b0 dossier OFPPT\n<\/label>\n\n<input\nid=\"refOfppt\"\nplaceholder=\"Ex. CSF-2026-001\">\n\n<\/div>\n\n<\/div>\n\n\n<div class=\"info\">\n\nLe taux OFPPT est pr\u00e9rempli \u00e0\n<strong>70 %<\/strong>.\n\nLe calcul est une simulation.\nLe montant effectivement pris en charge d\u00e9pend\nde l&rsquo;\u00e9ligibilit\u00e9 du dossier, des plafonds applicables\net de son acceptation.\n\n<\/div>\n\n\n<div class=\"section\">\nCo\u00fbts de la formation\n<\/div>\n\n\n<table>\n\n<thead>\n\n<tr>\n\n<th>\nPoste\n<\/th>\n\n<th>\nMontant MAD\n<\/th>\n\n<\/tr>\n\n<\/thead>\n\n\n<tbody>\n\n<tr>\n\n<td>\nHonoraires formateur\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"6000\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nLocation salle\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"2000\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nSupports p\u00e9dagogiques\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"1250\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nPauses \/ restauration\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"1500\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nTransport\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"0\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nH\u00e9bergement\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"0\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nExamens \/ QCM \/ certificats\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"0\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nAdministration \/ coordination\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"750\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nAutres\n<\/td>\n\n<td>\n<input\nclass=\"cost\"\ntype=\"number\"\nvalue=\"0\">\n<\/td>\n\n<\/tr>\n\n<\/tbody>\n\n<\/table>\n\n\n<div class=\"section\">\nObservations\n<\/div>\n\n<textarea\nid=\"observations\"\nplaceholder=\"Lieu, horaires, conditions particuli\u00e8res...\">\n<\/textarea>\n\n<\/section>\n\n\n<!-- RESULTATS -->\n\n<aside class=\"card\">\n\n<h2>\nR\u00e9sultats\n<\/h2>\n\n\n<div class=\"results\">\n\n\n<div class=\"row\">\n\n<span>\nCo\u00fbt total\n<\/span>\n\n<strong id=\"rCout\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nPrix HT avant remise\n<\/span>\n\n<strong id=\"rBase\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nRemise\n<\/span>\n\n<strong id=\"rRemise\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nPrix HT final\n<\/span>\n\n<strong id=\"rHT\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nTVA\n<\/span>\n\n<strong id=\"rTVA\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nMarge brute\n<\/span>\n\n<strong id=\"rMarge\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nPrix \/ participant TTC\n<\/span>\n\n<strong id=\"rPart\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n<\/div>\n\n\n<div class=\"big\">\n\n<div>\nPrix total TTC\n<\/div>\n\n<div\nclass=\"amount\"\nid=\"rTTC\">\n\n0 MAD\n\n<\/div>\n\n<\/div>\n\n\n<!-- OFPPT -->\n\n<div\nid=\"ofpptBox\"\nclass=\"ofppt hidden\">\n\n<h3>\nParticipation OFPPT\n<\/h3>\n\n\n<div class=\"row\">\n\n<span>\nBase \u00e9ligible retenue\n<\/span>\n\n<strong id=\"rEligible\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nPrise en charge OFPPT\n<\/span>\n\n<strong id=\"rOfppt\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nReste \u00e0 charge client\n<\/span>\n\n<strong id=\"rReste\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n\n<div class=\"row\">\n\n<span>\nReste \/ participant\n<\/span>\n\n<strong id=\"rRestePart\">\n0 MAD\n<\/strong>\n\n<\/div>\n\n<\/div>\n\n\n<div class=\"actions\">\n\n<button\nclass=\"action primary\"\nonclick=\"calculate()\">\n\nCalculer\n\n<\/button>\n\n\n<button\nclass=\"action gold\"\nonclick=\"generateQuote()\">\n\nG\u00e9n\u00e9rer devis\n\n<\/button>\n\n\n<button\nclass=\"action soft\"\nonclick=\"window.print()\">\n\nImprimer \/ PDF\n\n<\/button>\n\n\n<button\nclass=\"action green\"\nonclick=\"saveLocal()\">\n\nEnregistrer dossier\n\n<\/button>\n\n<\/div>\n\n\n<\/aside>\n\n<\/div>\n\n\n<!-- DEVIS -->\n\n<section\nid=\"devis\"\nclass=\"devis hidden\">\n\n\n<div class=\"devis-head\">\n\n<div>\n\n<div\nclass=\"brand\"\nstyle=\"color:#0b5cab\">\n\nMAROC ZAIN ACADEMY\n\n<\/div>\n\n<div class=\"devis-title\">\nDEVIS DE FORMATION\n<\/div>\n\n<div class=\"muted\">\nFormation professionnelle &#038; d\u00e9veloppement des comp\u00e9tences\n<\/div>\n\n<\/div>\n\n\n<div class=\"right\">\n\n<strong id=\"quoteRef\">\n<\/strong>\n\n<br>\n\n<span\nid=\"quoteDate\"\nclass=\"muted\">\n<\/span>\n\n<\/div>\n\n<\/div>\n\n\n<hr\nstyle=\"border:0;border-top:1px solid #dbe4ee;margin:22px 0;\">\n\n\n<div class=\"form-grid\">\n\n<div>\n\n<strong>\nClient\n<\/strong>\n\n<p id=\"quoteClient\">\n<\/p>\n\n<\/div>\n\n\n<div>\n\n<strong>\nFormation\n<\/strong>\n\n<p id=\"quoteTraining\">\n<\/p>\n\n<\/div>\n\n<\/div>\n\n\n<table>\n\n<thead>\n\n<tr>\n\n<th>\n\u00c9l\u00e9ment\n<\/th>\n\n<th>\nValeur\n<\/th>\n\n<\/tr>\n\n<\/thead>\n\n\n<tbody>\n\n<tr>\n\n<td>\nParticipants\n<\/td>\n\n<td id=\"qParticipants\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nDur\u00e9e\n<\/td>\n\n<td id=\"qJours\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nPrix HT\n<\/td>\n\n<td id=\"qHT\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nTVA\n<\/td>\n\n<td id=\"qTVA\">\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\n<strong>\nTotal TTC\n<\/strong>\n<\/td>\n\n<td>\n<strong id=\"qTTC\">\n<\/strong>\n<\/td>\n\n<\/tr>\n\n\n<tr\nid=\"qOfpptRow\"\nclass=\"hidden\">\n\n<td>\nParticipation OFPPT simul\u00e9e\n<\/td>\n\n<td id=\"qOfppt\">\n<\/td>\n\n<\/tr>\n\n\n<tr\nid=\"qResteRow\"\nclass=\"hidden\">\n\n<td>\n<strong>\nReste \u00e0 charge client\n<\/strong>\n<\/td>\n\n<td>\n\n<strong id=\"qReste\">\n<\/strong>\n\n<\/td>\n\n<\/tr>\n\n\n<tr>\n\n<td>\nModalit\u00e9s de paiement\n<\/td>\n\n<td id=\"qPaiement\">\n<\/td>\n\n<\/tr>\n\n<\/tbody>\n\n<\/table>\n\n\n<p\nid=\"qOfpptNote\"\nclass=\"hidden\">\n\n<strong>\nDossier OFPPT :\n<\/strong>\n\n<span id=\"qOfpptRef\">\n<\/span>\n\n\u2014\n\nSimulation sur la base d&rsquo;un taux de\n\n<span id=\"qOfpptTaux\">\n<\/span> %.\n\n<\/p>\n\n\n<p>\n\n<strong>\nObservations :\n<\/strong>\n\n<span id=\"qObs\">\n\u2014\n<\/span>\n\n<\/p>\n\n\n<div\nstyle=\"display:grid;grid-template-columns:1fr 1fr;gap:50px;margin-top:45px;\">\n\n<div\nstyle=\"border-top:1px solid #cbd5e1;padding-top:8px;\">\n\nMaroc Zain Academy\n\n<\/div>\n\n\n<div\nstyle=\"border-top:1px solid #cbd5e1;padding-top:8px;\">\n\nBon pour accord \u2014 Client\n\n<\/div>\n\n<\/div>\n\n\n<div\nclass=\"print-hide\"\nstyle=\"margin-top:20px\">\n\n<button\nclass=\"action primary\"\nonclick=\"window.print()\">\n\nImprimer \/ Enregistrer en PDF\n\n<\/button>\n\n<\/div>\n\n<\/section>\n\n\n<div class=\"footer\">\n\n\u00a9 2026 Maroc Zain Academy \u2014\nG\u00e9n\u00e9rateur de co\u00fbts de formation\n\n<\/div>\n\n<\/div>\n\n\n<script>\n\nlet currentType = 'candidat';\n\n\n\/* =========================\n   CHANGEMENT DE PROFIL\n========================= *\/\n\ndocument\n.querySelectorAll('.tab')\n.forEach(btn => {\n\nbtn.addEventListener(\n'click',\n() => {\n\ndocument\n.querySelectorAll('.tab')\n.forEach(\nb => b.classList.remove('active')\n);\n\nbtn.classList.add('active');\n\ncurrentType = btn.dataset.type;\n\n\ndocument\n.querySelectorAll('.profile')\n.forEach(\nx => x.classList.add('hidden')\n);\n\n\ndocument\n.getElementById(currentType)\n.classList.remove('hidden');\n\n\nif(\ncurrentType === 'entreprise'\n&& +participants.value === 1\n){\n\nparticipants.value = 10;\n\n}\n\n\nif(\ncurrentType === 'ecole'\n&& +participants.value === 1\n){\n\nparticipants.value = 20;\n\n}\n\n\ncalculate();\n\n});\n\n});\n\n\n\/* =========================\n   OUTILS\n========================= *\/\n\nfunction n(id){\n\nreturn parseFloat(\ndocument.getElementById(id).value\n) || 0;\n\n}\n\n\nfunction money(v){\n\nreturn new Intl.NumberFormat(\n'fr-FR',\n{\nminimumFractionDigits:2,\nmaximumFractionDigits:2\n}\n).format(v)\n+ ' MAD';\n\n}\n\n\n\/* =========================\n   CALCUL\n========================= *\/\n\nfunction calculate(){\n\nlet cost = 0;\n\n\ndocument\n.querySelectorAll('.cost')\n.forEach(i => {\n\ncost += parseFloat(i.value) || 0;\n\n});\n\n\nconst margin =\nn('marge') \/ 100;\n\n\nconst discount =\nn('remise') \/ 100;\n\n\nconst vat =\nn('tva') \/ 100;\n\n\nconst people =\nMath.max(\n1,\nn('participants')\n);\n\n\n\/* Prix de vente calcul\u00e9\n   \u00e0 partir de la marge cible *\/\n\nconst base =\nmargin >= 1\n?\ncost\n:\ncost \/ (1 - margin);\n\n\n\/* Remise *\/\n\nconst discountAmount =\nbase * discount;\n\n\n\/* HT *\/\n\nconst ht =\nbase - discountAmount;\n\n\n\/* TVA *\/\n\nconst vatAmount =\nht * vat;\n\n\n\/* TTC *\/\n\nconst ttc =\nht + vatAmount;\n\n\n\/* Marge brute *\/\n\nconst gross =\nht - cost;\n\n\n\/* Prix par participant *\/\n\nconst per =\nttc \/ people;\n\n\n\/* AFFICHAGE *\/\n\nrCout.textContent =\nmoney(cost);\n\nrBase.textContent =\nmoney(base);\n\nrRemise.textContent =\nmoney(discountAmount);\n\nrHT.textContent =\nmoney(ht);\n\nrTVA.textContent =\nmoney(vatAmount);\n\nrMarge.textContent =\nmoney(gross);\n\nrTTC.textContent =\nmoney(ttc);\n\nrPart.textContent =\nmoney(per);\n\n\n\n\/* =========================\n   CALCUL OFPPT\n========================= *\/\n\nlet eligible = 0;\n\nlet ofppt = 0;\n\nlet reste = ttc;\n\n\nif(\nofpptActif.value === 'oui'\n){\n\n\/* Base \u00e9ligible *\/\n\nif(\nbaseEligible.value === 'ht'\n){\n\neligible = ht;\n\n}\n\nelse if(\nbaseEligible.value === 'ttc'\n){\n\neligible = ttc;\n\n}\n\nelse{\n\neligible = cost;\n\n}\n\n\n\/* Plafond \u00e9ventuel *\/\n\nconst plafond =\nn('plafondOfppt');\n\n\nif(\nplafond > 0\n){\n\neligible =\nMath.min(\neligible,\nplafond\n);\n\n}\n\n\n\/* Participation OFPPT *\/\n\nofppt =\neligible\n*\n(\nn('ofpptTaux') \/ 100\n);\n\n\n\/* Reste \u00e0 charge *\/\n\nreste =\nMath.max(\n0,\nttc - ofppt\n);\n\n\nofpptBox\n.classList\n.remove('hidden');\n\n\nrEligible.textContent =\nmoney(eligible);\n\n\nrOfppt.textContent =\nmoney(ofppt);\n\n\nrReste.textContent =\nmoney(reste);\n\n\nrRestePart.textContent =\nmoney(\nreste \/ people\n);\n\n}\n\nelse{\n\nofpptBox\n.classList\n.add('hidden');\n\n}\n\n\nreturn{\n\ncost,\nbase,\ndiscountAmount,\nht,\nvatAmount,\nttc,\ngross,\nper,\neligible,\nofppt,\nreste\n\n};\n\n}\n\n\n\/* recalcul automatique *\/\n\ndocument\n.querySelectorAll(\n'input,select,textarea'\n)\n.forEach(el => {\n\nel.addEventListener(\n'input',\ncalculate\n);\n\n});\n\n\n\/* =========================\n   INFORMATIONS CLIENT\n========================= *\/\n\nfunction clientData(){\n\nif(\ncurrentType === 'candidat'\n){\n\nreturn{\n\nclient:\n(candNom.value || 'Candidat individuel')\n\n+\n(\ncandEmail.value\n?\n' \u2014 ' + candEmail.value\n:\n''\n),\n\ntraining:\ncandFormation.value\n||\n'Formation'\n\n};\n\n}\n\n\nif(\ncurrentType === 'entreprise'\n){\n\nreturn{\n\nclient:\n\n(entNom.value || 'Entreprise')\n\n+\n\n(\nentIce.value\n?\n' \u2014 ICE\/IF : ' + entIce.value\n:\n''\n)\n\n+\n\n(\nentResp.value\n?\n' \u2014 Responsable : ' + entResp.value\n:\n''\n),\n\ntraining:\n\n(entFormation.value || 'Formation')\n\n+\n' \u2014 '\n+\nentType.value\n\n};\n\n}\n\n\n\/* ECOLE *\/\n\nreturn{\n\nclient:\n\n(ecoNom.value || '\u00c9cole \/ Institut')\n\n+\n\n(\necoResp.value\n?\n' \u2014 Responsable : '\n+\necoResp.value\n:\n''\n),\n\ntraining:\n\n(ecoFormation.value || 'Programme')\n\n+\n' \u2014 '\n+\n(ecoGroupes.value || 1)\n+\n' groupe(s) \u2014 '\n+\n(ecoHeures.value || 0)\n+\n' h'\n\n};\n\n}\n\n\n\/* =========================\n   GENERATION DU DEVIS\n========================= *\/\n\nfunction generateQuote(){\n\nconst r =\ncalculate();\n\n\nconst d =\nclientData();\n\n\nconst now =\nnew Date();\n\n\nquoteRef.textContent =\n\n'R\u00e9f. MZA-'\n+\nnow.getFullYear()\n+\n'-'\n+\nString(\nDate.now()\n)\n.slice(-6);\n\n\nquoteDate.textContent =\n\n'Date : '\n+\nnow.toLocaleDateString(\n'fr-FR'\n);\n\n\nquoteClient.textContent =\nd.client;\n\n\nquoteTraining.textContent =\nd.training;\n\n\nqParticipants.textContent =\nparticipants.value;\n\n\nqJours.textContent =\njours.value\n+\n' jour(s)';\n\n\nqHT.textContent =\nmoney(r.ht);\n\n\nqTVA.textContent =\nmoney(r.vatAmount);\n\n\nqTTC.textContent =\nmoney(r.ttc);\n\n\nqPaiement.textContent =\npaiement.value;\n\n\nqObs.textContent =\nobservations.value\n||\n'\u2014';\n\n\n\n\/* OFPPT SUR LE DEVIS *\/\n\nif(\nofpptActif.value === 'oui'\n){\n\nqOfpptRow\n.classList\n.remove('hidden');\n\n\nqResteRow\n.classList\n.remove('hidden');\n\n\nqOfpptNote\n.classList\n.remove('hidden');\n\n\nqOfppt.textContent =\nmoney(r.ofppt);\n\n\nqReste.textContent =\nmoney(r.reste);\n\n\nqOfpptRef.textContent =\nrefOfppt.value\n||\n'\u00e0 compl\u00e9ter';\n\n\nqOfpptTaux.textContent =\nofpptTaux.value;\n\n}\n\nelse{\n\nqOfpptRow\n.classList\n.add('hidden');\n\n\nqResteRow\n.classList\n.add('hidden');\n\n\nqOfpptNote\n.classList\n.add('hidden');\n\n}\n\n\ndevis\n.classList\n.remove('hidden');\n\n\ndevis.scrollIntoView({\nbehavior:'smooth'\n});\n\n}\n\n\n\/* =========================\n   SAUVEGARDE DOSSIER\n========================= *\/\n\nfunction saveLocal(){\n\nconst r =\ncalculate();\n\n\nconst d =\nclientData();\n\n\nconst data = {\n\ntype:\ncurrentType,\n\nclient:\nd.client,\n\nformation:\nd.training,\n\nparticipants:\nparticipants.value,\n\njours:\njours.value,\n\nmarge:\nmarge.value,\n\ntva:\ntva.value,\n\nremise:\nremise.value,\n\n\nofppt:{\n\nactif:\nofpptActif.value,\n\ntaux:\nofpptTaux.value,\n\nbase:\nbaseEligible.value,\n\nplafond:\nplafondOfppt.value,\n\nreference:\nrefOfppt.value,\n\nsimulation:\nr.ofppt,\n\nreste:\nr.reste\n\n},\n\n\npaiement:\npaiement.value,\n\n\nobservations:\nobservations.value,\n\n\nresultats:\nr,\n\n\ndate:\nnew Date().toISOString()\n\n};\n\n\n\/* historique *\/\n\nconst historique =\nJSON.parse(\nlocalStorage.getItem(\n'mza_formations'\n)\n||\n'[]'\n);\n\n\nhistorique.push(\ndata\n);\n\n\nlocalStorage.setItem(\n'mza_formations',\nJSON.stringify(\nhistorique\n)\n);\n\n\nalert(\n'Dossier enregistr\u00e9 sur cet appareil.'\n);\n\n}\n\n\n\/* premier calcul *\/\n\ncalculate();\n\n<\/script>\n\n<\/body>\n<\/html>","protected":false},"excerpt":{"rendered":"<p>G\u00e9n\u00e9rateur de co\u00fbts de formation \u2014 Maroc Zain Academy MAROC ZAIN ACADEMY G\u00e9n\u00e9rateur de co\u00fbts de formation Candidat, entreprise ou \u00e9cole \u2014 avec dossier OFPPT, simulation de prise en charge \u00e0 70 %, calcul de la marge, du prix par participant et du reste \u00e0 charge. \ud83d\udc64 Candidat \ud83c\udfe2 Entreprise \ud83c\udf93 \u00c9cole \/ Institut Dossier [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-3466","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/3466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/comments?post=3466"}],"version-history":[{"count":1,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/3466\/revisions"}],"predecessor-version":[{"id":3467,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/posts\/3466\/revisions\/3467"}],"wp:attachment":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/media?parent=3466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/categories?post=3466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/tags?post=3466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}