{"id":26335,"date":"2026-08-30T22:07:31","date_gmt":"2026-08-30T22:07:31","guid":{"rendered":"https:\/\/maroczain.com\/?page_id=26335"},"modified":"2026-08-30T22:13:02","modified_gmt":"2026-08-30T22:13:02","slug":"amadeus-center-2","status":"publish","type":"page","link":"https:\/\/maroczain.com\/en\/amadeus-center-2\/","title":{"rendered":"amadeus center"},"content":{"rendered":"\n<!doctype html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>MZA AMADEUS Training Center \u2014 Grand \u00c9cran<\/title>\n<style>\n:root{\n  --navy:#071827;--blue:#0e4167;--blue2:#0a2f4b;--gold:#e9c84a;\n  --ink:#17324d;--muted:#718395;--panel:#0b1722;--terminal:#051019;\n  --green:#9ff5a9;--white:#fff;--line:#1d3140;\n}\n*{box-sizing:border-box}\nhtml,body{margin:0;min-height:100%;background:\nradial-gradient(circle at 10% 0%,rgba(14,65,103,.35),transparent 30%),\nlinear-gradient(180deg,#06111c,#0b1d2b 55%,#07131e);font-family:Inter,Arial,sans-serif;color:#fff}\nbody{min-height:100vh}\n.app{min-height:100vh;padding:18px;display:grid;grid-template-rows:auto 1fr auto;gap:16px}\n.topbar{display:grid;grid-template-columns:1.2fr 2fr auto;gap:16px;align-items:center;background:rgba(10,28,43,.9);\nborder:1px solid rgba(255,255,255,.08);border-radius:22px;padding:16px 20px;backdrop-filter:blur(14px);box-shadow:0 18px 50px rgba(0,0,0,.28)}\n.brand{display:flex;gap:14px;align-items:center}.logo{width:58px;height:58px;border-radius:16px;\ndisplay:grid;place-items:center;background:linear-gradient(145deg,var(--gold),#f7e48a);color:#082d49;font-weight:1000;font-size:20px}\n.brand h1{font-size:21px;margin:0}.brand small{display:block;color:#9cb1c3;margin-top:4px}\n.center-title{text-align:center}.center-title strong{display:block;font-size:25px;letter-spacing:.03em}.center-title span{color:#9fb4c6;font-size:13px}\n.kpis{display:flex;gap:10px}.kpi{min-width:110px;padding:10px 13px;border-radius:14px;background:#0d2233;border:1px solid rgba(255,255,255,.08);text-align:center}\n.kpi b{display:block;font-size:22px;color:var(--gold)}.kpi small{color:#9db2c2}\n.workspace{display:grid;grid-template-columns:270px minmax(0,1fr) 320px;gap:16px;min-height:0}\n.sidebar,.rightbar,.terminal-wrap{border:1px solid rgba(255,255,255,.08);border-radius:22px;background:rgba(8,24,36,.92);\nbox-shadow:0 18px 50px rgba(0,0,0,.22);overflow:hidden}\n.sidebar{padding:16px}.section-title{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:#87a2b6;margin:4px 0 10px}\n.navbtn{width:100%;text-align:left;border:1px solid rgba(255,255,255,.06);background:#0b2031;color:#fff;border-radius:14px;\npadding:14px 14px;margin-bottom:9px;font-weight:800;cursor:pointer;transition:.2s}\n.navbtn:hover,.navbtn.active{transform:translateX(3px);background:linear-gradient(90deg,#123a58,#0e4167);border-color:rgba(233,200,74,.4)}\n.navbtn span{display:block;color:#8fa7ba;font-size:11px;font-weight:500;margin-top:3px}\n.terminal-wrap{display:grid;grid-template-rows:auto 1fr auto;min-height:0}\n.term-head{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:#102333;border-bottom:1px solid var(--line)}\n.term-head b{font-size:13px;letter-spacing:.08em}.live{color:var(--gold);font-size:12px;font-weight:900}\n.screen{margin:0;padding:24px;background:\nlinear-gradient(rgba(255,255,255,.018) 1px,transparent 1px),\nlinear-gradient(90deg,rgba(255,255,255,.018) 1px,transparent 1px),\nvar(--terminal);\nbackground-size:24px 24px;color:var(--green);font:17px\/1.5 Consolas,Monaco,monospace;white-space:pre-wrap;overflow:auto;min-height:0}\n.commandbar{display:grid;grid-template-columns:34px 1fr 150px;gap:10px;align-items:center;padding:14px;background:#0c1c29;border-top:1px solid var(--line)}\n.prompt{font:700 20px Consolas;color:var(--green)}\n#cmd{width:100%;border:1px solid #2b4355;border-radius:12px;background:#07131d;color:white;padding:14px 15px;font:16px Consolas;outline:none}\n#run{border:0;border-radius:12px;background:var(--gold);color:#082d49;padding:14px 18px;font-weight:1000;cursor:pointer}\n.rightbar{padding:16px;display:flex;flex-direction:column;gap:14px}\n.card{background:#0b2031;border:1px solid rgba(255,255,255,.07);border-radius:16px;padding:15px}\n.card h3{margin:0 0 9px;font-size:15px}.card p{margin:0;color:#9db2c2;font-size:13px;line-height:1.5}\n.progress{height:10px;background:#07131d;border-radius:999px;overflow:hidden;margin-top:10px}\n.progress i{display:block;width:36%;height:100%;background:linear-gradient(90deg,var(--gold),#fff0a3)}\n.quick{display:grid;grid-template-columns:1fr 1fr;gap:9px}\n.quick button{border:0;border-radius:12px;background:#14314a;color:#fff;padding:12px 8px;font-size:12px;font-weight:800;cursor:pointer}\n.quick button:hover{background:#194363}\n.footer{display:grid;grid-template-columns:1fr auto;align-items:center;gap:16px;color:#8ea4b5;font-size:12px;padding:0 5px}\n.notice{color:#d6dfE6}.badge{display:inline-block;padding:6px 9px;border-radius:999px;background:rgba(233,200,74,.12);color:var(--gold);border:1px solid rgba(233,200,74,.22);font-weight:800}\n@media(max-width:1200px){.workspace{grid-template-columns:220px 1fr}.rightbar{display:none}.topbar{grid-template-columns:1fr auto}.center-title{display:none}}\n@media(max-width:760px){.app{padding:8px}.topbar{grid-template-columns:1fr}.kpis{justify-content:flex-start}.workspace{grid-template-columns:1fr}.sidebar{display:none}.screen{font-size:14px}.commandbar{grid-template-columns:28px 1fr}.commandbar button{grid-column:1\/-1}.kpi{min-width:90px}}\n<\/style>\n<\/head>\n<body>\n<div class=\"app\">\n  <header class=\"topbar\">\n    <div class=\"brand\">\n      <div class=\"logo\">MZA<\/div>\n      <div><h1>Maroc Zain Academy<\/h1><small>Learning Cockpit \u2022 Travel &#038; Aviation<\/small><\/div>\n    <\/div>\n    <div class=\"center-title\">\n      <strong>AMADEUS TRAINING CENTER<\/strong>\n      <span>Apprendre \u2022 Simuler \u2022 R\u00e9server \u2022 Tarifer \u2022 \u00c9mettre \u2022 Certifier<\/span>\n    <\/div>\n    <div class=\"kpis\">\n      <div class=\"kpi\"><b id=\"score\">0<\/b><small>Score<\/small><\/div>\n      <div class=\"kpi\"><b id=\"level\">N1<\/b><small>Niveau<\/small><\/div>\n    <\/div>\n  <\/header>\n\n  <main class=\"workspace\">\n    <aside class=\"sidebar\">\n      <div class=\"section-title\">Op\u00e9rations<\/div>\n      <button class=\"navbtn active\" data-cmd=\"HELP\">Terminal<span>Commandes et aide<\/span><\/button>\n      <button class=\"navbtn\" data-cmd=\"AN29AUGCMNCDG\">Disponibilit\u00e9s<span>Availability display<\/span><\/button>\n      <button class=\"navbtn\" data-cmd=\"NM1KIAL\/MOHAMMED\">PNR<span>Cr\u00e9er le passager<\/span><\/button>\n      <button class=\"navbtn\" data-cmd=\"SS1Y1\">R\u00e9servation<span>Sell segment<\/span><\/button>\n      <button class=\"navbtn\" data-cmd=\"FXP\">Tarification<span>Pricing \/ Fare<\/span><\/button>\n      <button class=\"navbtn\" data-cmd=\"TTP\">Ticketing<span>\u00c9mission simul\u00e9e<\/span><\/button>\n      <button class=\"navbtn\" data-cmd=\"SRVGML\">SSR \/ OSI<span>Services sp\u00e9ciaux<\/span><\/button>\n      <div class=\"section-title\" style=\"margin-top:18px\">\u00c9valuation<\/div>\n      <button class=\"navbtn\" data-cmd=\"SCENARIO\">Sc\u00e9narios m\u00e9tier<span>Cas complexes<\/span><\/button>\n      <button class=\"navbtn\" data-cmd=\"EXAM\">Mode examen<span>Chronom\u00e9tr\u00e9<\/span><\/button>\n    <\/aside>\n\n    <section class=\"terminal-wrap\">\n      <div class=\"term-head\">\n        <b>MZA \/ AMADEUS TRAINING TERMINAL<\/b>\n        <span class=\"live\">\u25cf TRAINING MODE<\/span>\n      <\/div>\n      <pre id=\"screen\" class=\"screen\">WELCOME TO MZA AMADEUS TRAINING CENTER\n\nMODE : PEDAGOGICAL SIMULATION\nAUCUNE TRANSACTION REELLE N'EST EFFECTUEE.\n\nCOMMANDES RAPIDES\n-----------------\nHELP               Aide\nAN29AUGCMNCDG      Disponibilit\u00e9\nNM1KIAL\/MOHAMMED   Ajouter passager\nSS1Y1              Vendre segment\nFXP                 Tarifier\nTTP                 Emission simul\u00e9e\nRT                  Afficher PNR\nER                  Fin PNR\nSRVGML              SSR repas\n\n&gt;<\/pre>\n      <div class=\"commandbar\">\n        <div class=\"prompt\">&gt;<\/div>\n        <input id=\"cmd\" autocomplete=\"off\" placeholder=\"Saisissez une commande AMADEUS p\u00e9dagogique\">\n        <button id=\"run\">EX\u00c9CUTER<\/button>\n      <\/div>\n    <\/section>\n\n    <aside class=\"rightbar\">\n      <div class=\"card\">\n        <h3>Progression<\/h3>\n        <p>Objectif : ma\u00eetriser le cycle complet de r\u00e9servation, de la disponibilit\u00e9 \u00e0 l\u2019\u00e9mission.<\/p>\n        <div class=\"progress\"><i id=\"progressbar\"><\/i><\/div>\n      <\/div>\n      <div class=\"card\">\n        <h3>Commandes rapides<\/h3>\n        <div class=\"quick\">\n          <button data-cmd=\"AN29AUGCMNCDG\">AN<\/button>\n          <button data-cmd=\"RT\">RT<\/button>\n          <button data-cmd=\"FXP\">FXP<\/button>\n          <button data-cmd=\"TTP\">TTP<\/button>\n          <button data-cmd=\"ER\">ER<\/button>\n          <button data-cmd=\"HELP\">HELP<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"card\">\n        <h3>Sc\u00e9nario actif<\/h3>\n        <p>Client souhaite Casablanca \u2192 Paris, 1 adulte, classe \u00e9conomique. Cr\u00e9ez le dossier, tarifez puis simulez l\u2019\u00e9mission.<\/p>\n      <\/div>\n      <div class=\"card\">\n        <h3>Objectifs de session<\/h3>\n        <p>Disponibilit\u00e9 \u2022 Passager \u2022 Segment \u2022 Fare \u2022 Ticketing \u2022 SSR \u2022 Cl\u00f4ture PNR<\/p>\n      <\/div>\n    <\/aside>\n  <\/main>\n\n  <footer class=\"footer\">\n    <div class=\"notice\">Simulateur p\u00e9dagogique MZA \u2014 ce terminal n\u2019est pas connect\u00e9 au syst\u00e8me officiel Amadeus.<\/div>\n    <div class=\"badge\">GRAND \u00c9CRAN<\/div>\n  <\/footer>\n<\/div>\n\n<script>\nconst screenEl=document.getElementById('screen'), cmdEl=document.getElementById('cmd'), scoreEl=document.getElementById('score'), levelEl=document.getElementById('level'), progressBar=document.getElementById('progressbar');\nlet score=0, signedIn=false, availability=[];\nconst db={pnrs:{}};\nfunction blankPNR(){return {locator:null,names:[],segments:[],contacts:[],ticketing:null,rf:null,ssr:[],osi:[],seats:[],remarks:[],tst:null,ticket:null,history:[],status:'WORKING'}}\nlet pnr=blankPNR();\nconst flights=[\n {no:'AT760',date:'10MAR',from:'CMN',to:'CDG',dep:'06:30',arr:'10:35'},\n {no:'AT764',date:'10MAR',from:'CMN',to:'CDG',dep:'12:10',arr:'16:15'},\n {no:'AT770',date:'10MAR',from:'CMN',to:'CDG',dep:'18:20',arr:'22:25'},\n {no:'AT772',date:'10MAR',from:'CMN',to:'ORY',dep:'08:15',arr:'12:10'},\n {no:'AT774',date:'10MAR',from:'CMN',to:'ORY',dep:'15:35',arr:'19:30'}\n];\nfunction R(t,b='',p=0){return [t+(b?'\\n'+b:''),p]}\nfunction hist(cmd,detail=''){pnr.history.push({cmd,detail,at:new Date().toISOString()})}\nfunction locator(){let x;do{x=Math.random().toString(36).slice(2,8).toUpperCase()}while(db.pnrs[x]);return x}\nfunction normalize(raw){return (raw||'').toUpperCase().trim().replace(\/\\s+\/g,'')}\nfunction displayPNR(){let x=`RP\/CMN1A0980\/CMN1A0980\\n${pnr.locator||'---'}\\n`,n=1;pnr.names.forEach(v=>x+=`${n++}.${v}\\n`);pnr.segments.forEach(v=>x+=`${n++} ${v.no} ${v.cls} ${v.date} ${v.from}${v.to} HK${v.qty} ${v.dep} ${v.arr}\\n`);pnr.contacts.forEach(v=>x+=`${n++} AP ${v}\\n`);if(pnr.ticketing)x+=`${n++} ${pnr.ticketing.raw}\\n`;if(pnr.rf)x+=`RF ${pnr.rf}\\n`;pnr.ssr.forEach(v=>x+=`${n++} SR ${v}\\n`);pnr.osi.forEach(v=>x+=`${n++} OS ${v}\\n`);pnr.seats.forEach(v=>x+=`${n++} ST ${v}\\n`);pnr.remarks.forEach(v=>x+=`${n++} RM ${v}\\n`);if(pnr.tst)x+=`TST ${pnr.tst.total} MAD \/ ${pnr.tst.fareBasis}\\n`;if(pnr.ticket)x+=`FA ${pnr.ticket}\\n`;return x.trim()}\nfunction missing(){let m=[];if(!pnr.names.length)m.push('NAME');if(!pnr.segments.length)m.push('ITINERARY');if(!pnr.contacts.length)m.push('CONTACT');if(!pnr.ticketing)m.push('TICKETING ARRANGEMENT');if(!pnr.rf)m.push('RECEIVED FROM');return m}\nconst handlers={\n JI(c){signedIn=true;return R('SIGN-IN ACCEPTED '+(c.slice(2)||'001AA\/SU')+' - TRAINING MODE')},\n JO(){signedIn=false;return R('SIGN-OUT COMPLETE')},\n HE(){return R('MZA AMADEUS TRAINING MASTER v7',`JI001AA\/SU  SIGN IN\\nSN10MARCMNPAR SCHEDULE\\nSS1J1 SELL\\nNM1KIAL\/MOHAMMED NAME\\nAP0600000000 CONTACT\\nTKOK \/ TKTL10MAR TICKETING\\nRFKI RECEIVED FROM\\nSRVGML SSR | OSAT VIP OSI | ST12A SEAT\\nFXP PRICE | TQT TST | TTP ISSUE\\nER\/ET SAVE | RT DISPLAY | RH HISTORY\\nXE2 CANCEL ELEMENT | IG IGNORE\\nQE\/QT\/QS QUEUES`)},\n SN(c){let m=c.match(\/^SN(\\d{2}[A-Z]{3})([A-Z]{3})([A-Z]{3})$\/);if(!m)return R('FORMAT ERROR','TRY SN10MARCMNPAR');availability=flights;return R(`SCHEDULE ${m[1]} ${m[2]}-${m[3]}\\n${m[3]==='PAR'?'PAR = CITY CODE \/ CDG + ORY\\n':''}`+flights.map((f,i)=>`${i+1} ${f.no} J4 C4 D4 I4 Y9 B9 M9 K9 ${f.from} ${f.to} ${f.dep} ${f.arr}`).join('\\n'))},\n AN(c){return handlers.SN(c.replace(\/^AN\/,'SN'))},\n SS(c){let m=c.match(\/^SS(\\d+)([A-Z])(\\d+)$\/);if(!m)return R('FORMAT ERROR','TRY SS1J1');let f=availability[+m[3]-1];if(!f)return R('CHECK LINE NUMBER');let seg={...f,qty:+m[1],cls:m[2]};pnr.segments.push(seg);hist(c);return R(`${f.no} ${seg.cls} HK${seg.qty} ${f.from}-${f.to}`)},\n NM(c){let m=c.match(\/^NM(\\d+)([A-Z'-]+)\\\/([A-Z'-]+)(MR|MRS|MS|CHD|INF)?$\/);if(!m)return R('FORMAT ERROR','TRY NM1KIAL\/MOHAMMED');for(let i=0;i<+m[1];i++)pnr.names.push(`${m[2]}\/${m[3]} ${m[4]||'MR'}`);hist(c);return R('NAME ELEMENT ACCEPTED')},\n AP(c){let v=c.slice(2)||'CONTACT ON FILE';pnr.contacts.push(v);hist(c);return R('CONTACT ELEMENT ACCEPTED',v)},\n TK(c){if(c==='TKOK'){pnr.ticketing={type:'OK',value:'OK',raw:'TKOK'}}else if(\/^TKTL\/.test(c)){pnr.ticketing={type:'TL',value:c.slice(4),raw:c}}else if(\/^TKXL\/.test(c)){pnr.ticketing={type:'XL',value:c.slice(4),raw:c}}else return R('FORMAT ERROR','TKOK \/ TKTL10MAR \/ TKXL10MAR');hist(c);return R('TICKETING ARRANGEMENT ACCEPTED',c)},\n RF(c){let v=c.slice(2);if(!v)return R('FORMAT ERROR');pnr.rf=v;hist(c);return R('RECEIVED FROM ACCEPTED',v)},\n SR(c){let v=c.slice(2);if(!v)return R('FORMAT ERROR');pnr.ssr.push(v);hist(c);return R('SSR ACCEPTED',v)},\n OS(c){let v=c.slice(2);if(!v)return R('FORMAT ERROR');pnr.osi.push(v);hist(c);return R('OSI ACCEPTED',v)},\n ST(c){let v=c.slice(2);if(!v)return R('FORMAT ERROR');pnr.seats.push(v);hist(c);return R('SEAT REQUEST ACCEPTED',v)},\n RM(c){pnr.remarks.push(c.slice(2));hist(c);return R('REMARK ACCEPTED')},\n FXP(){if(!pnr.names.length||!pnr.segments.length)return R('UNABLE TO PRICE','NAME \/ AIR SEGMENT REQUIRED');pnr.tst={base:2450,taxes:890,total:3340,fareBasis:'YOWMZA'};hist('FXP');return R('FARE QUOTE \/ TST CREATED','BASE FARE 2450 MAD\\nTAXES 890 MAD\\nTOTAL 3340 MAD\\nFARE BASIS YOWMZA',10)},\n FXX(){return R('INFORMATIVE PRICING','BASE FARE 2450 MAD\\nTAXES 890 MAD\\nTOTAL 3340 MAD')},\n FXR(){return R('BEST PRICER SIMULATION','LOWER FARE OPTION: 3120 MAD\\nTRAINING DATA ONLY')},\n FXQ(){if(!pnr.segments.length)return R('REPRICING REJECTED','AIR SEGMENT REQUIRED');return R('REPRICING \/ EXCHANGE SIMULATION','CURRENT ITINERARY ANALYSED\\nTRAINING DIFFERENCE \/ PENALTY CALCULATION READY')},\n FXA(){return R('ALTERNATIVE FARES','1 YFFMA 4460 MAD\\n2 MFFMA 3880 MAD\\n3 KFFMA 3270 MAD\\nTRAINING DATA ONLY')},\n FXB(){if(!pnr.segments.length)return R('BEST BUY REJECTED','AIR SEGMENT REQUIRED');pnr.segments[0].cls='K';pnr.tst={base:2190,taxes:1080,total:3270,fareBasis:'KFFMA'};hist('FXB');return R('BEST BUY REBOOKED','CLASS K\\nFARE BASIS KFFMA\\nTOTAL 3270 MAD\\nTST CREATED')},\n FQD(c){return R('FARE DISPLAY','AT J JFFMA 9250 MAD\\nAT C CFFMA 7480 MAD\\nAT Y YFFMA 4460 MAD\\nAT M MFFMA 3880 MAD\\nAT K KFFMA 3270 MAD\\nTRAINING DATA ONLY')},\n FQN(c){return R('FARE RULE DISPLAY','RULES \/ CONDITIONS - TRAINING DATA\\nCHANGE \/ REFUND CONDITIONS SIMULATED')},\n TTH(){return pnr.history.length?R('TST \/ PNR HISTORY',pnr.history.map((h,i)=>`${i+1} ${h.cmd}`).join('\\n')):R('NO HISTORY')},\n TTK(){if(!pnr.tst)return R('NO TST RECORD');hist('TTK');return R('TST UPDATED - TRAINING MODE')},\n TWD(){return pnr.ticket?R('E-TICKET DISPLAY',pnr.ticket+'\\n*** TRAINING DOCUMENT ***'):R('NO E-TICKET RECORD')},\n TRF(){return pnr.ticket?R('REFUND SIMULATION','DOCUMENT '+pnr.ticket+'\\nREFUND RECORD PREPARED - TRAINING ONLY'):R('NO DOCUMENT FOR REFUND')},\n LL(c){return R('FLIGHT LIST \/ LOAD SIMULATION',c+'\\nLOAD INDICATOR: Y 72% \/ J 41%\\nCHECK-IN STATUS: OPEN - TRAINING MODE')},\n SO(c){return R('OPERATIONAL STATUS',c+'\\nFLIGHT STATUS: SCHEDULED\\nCHECK-IN: OPEN\\nTRAINING DATA ONLY')},\n TQT(){return pnr.tst?R('TST DISPLAY',`BASE ${pnr.tst.base} MAD\\nTAX ${pnr.tst.taxes} MAD\\nTOTAL ${pnr.tst.total} MAD\\nFARE BASIS ${pnr.tst.fareBasis}`):R('NO TST')},\n ER(){let m=missing();if(m.length)return R('WARNING: MANDATORY ELEMENTS MISSING',m.join(' \/ '));if(!pnr.locator)pnr.locator=locator();pnr.status='SAVED';hist('ER');db.pnrs[pnr.locator]=JSON.parse(JSON.stringify(pnr));return R('END OF TRANSACTION COMPLETE','RECORD LOCATOR '+pnr.locator+'\\n'+displayPNR(),7)},\n ET(){return handlers.ER()},\n RT(c){let key=c.slice(2).replace(\/^\\\/\/,'');if(key){if(db.pnrs[key]){pnr=JSON.parse(JSON.stringify(db.pnrs[key]))}else{let found=Object.keys(db.pnrs).find(k=>(db.pnrs[k].names||[]).some(n=>n.startsWith(key+'\/')||n.startsWith(key+' ')));if(!found)return R('NO PNR FOUND',key);pnr=JSON.parse(JSON.stringify(db.pnrs[found]))}}if(!pnr.names.length&&!pnr.segments.length)return R('NO ACTIVE PNR');return R('PNR DISPLAY',displayPNR(),3)},\n RH(){if(!pnr.history.length)return R('NO HISTORY');return R('PNR HISTORY',pnr.history.map((h,i)=>`${i+1} ${h.cmd} ${h.detail||''}`).join('\\n'))},\n IG(){pnr=blankPNR();return R('IGNORE COMPLETE','TRAINING WORK AREA CLEARED')},\n XE(c){let idx=+c.slice(2),els=[];pnr.names.forEach((v,i)=>els.push(['names',i]));pnr.segments.forEach((v,i)=>els.push(['segments',i]));pnr.contacts.forEach((v,i)=>els.push(['contacts',i]));if(pnr.ticketing)els.push(['ticketing',0]);pnr.ssr.forEach((v,i)=>els.push(['ssr',i]));pnr.osi.forEach((v,i)=>els.push(['osi',i]));pnr.seats.forEach((v,i)=>els.push(['seats',i]));pnr.remarks.forEach((v,i)=>els.push(['remarks',i]));if(!els[idx-1])return R('CHECK ELEMENT NUMBER');let [k,i]=els[idx-1];if(k==='ticketing')pnr.ticketing=null;else pnr[k].splice(i,1);hist(c);return R('ELEMENT CANCELLED','ELEMENT '+idx)},\n TTP(){if(!pnr.locator)return R('TICKETING REJECTED','END TRANSACTION \/ RECORD LOCATOR REQUIRED');if(!pnr.tst)return R('TICKETING REJECTED','NO VALID TST - PRICE WITH FXP');if(pnr.ticket)return R('TICKETING REJECTED','DOCUMENT ALREADY ISSUED');pnr.ticket='MZA-'+Date.now().toString().slice(-10);hist('TTP');db.pnrs[pnr.locator]=JSON.parse(JSON.stringify(pnr));return R('TRAINING E-TICKET ISSUED',`${pnr.ticket}\\nTOTAL ${pnr.tst.total} MAD\\n*** NO REAL TICKET CREATED ***`,15)},\n QE(c){return R('QUEUE SIMULATION',c+'\\nTRAINING QUEUE OPERATION ACCEPTED')}, QT(c){return handlers.QE(c)}, QS(c){return handlers.QE(c)}\n};\nfunction family(c){for(const k of ['FXP','FXX','FXR','FXQ','FXA','FXB','FQD','FQN','TQT','TTH','TTK','TTP','TWD','TRF'])if(c.startsWith(k))return k;for(const k of ['JI','JO','HE','SN','AN','SS','NM','AP','TK','RF','SR','OSI','OS','ST','RM','ER','ET','RT','RH','IG','XE','QE','QT','QS','LL','SO'])if(c.startsWith(k))return k;return null}\nfunction responseFor(raw){const c=normalize(raw);if(!c)return R('ENTER COMMAND');let f=family(c);if(!f)return R('TRANSACTION FAMILY NOT YET ENABLED',c);if(f==='OSI')f='OS';if(!signedIn&&!['JI','HE'].includes(f))return R('SIGN-IN REQUIRED','ENTER JI001AA\/SU');return handlers[f](c)}\nfunction run(cmd){cmd=(cmd||'').trim();if(!cmd)return;let [resp,pts=0]=responseFor(cmd);screenEl.textContent+='\\n> '+cmd.toUpperCase()+'\\n'+resp+'\\n';score+=pts;scoreEl.textContent=score;progressBar.style.width=Math.min(100,score)+'%';levelEl.textContent=score>=70?'N3':score>=35?'N2':'N1';screenEl.scrollTop=screenEl.scrollHeight;cmdEl.value='';cmdEl.focus()}\ndocument.getElementById('run').onclick=()=>run(cmdEl.value);cmdEl.addEventListener('keydown',e=>{if(e.key==='Enter')run(cmdEl.value)});document.querySelectorAll('[data-cmd]').forEach(b=>b.onclick=()=>run(b.dataset.cmd));cmdEl.focus();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>MZA AMADEUS Training Center \u2014 Grand \u00c9cran MZA Maroc Zain Academy Learning Cockpit \u2022 Travel &#038; Aviation AMADEUS TRAINING CENTER Apprendre \u2022 Simuler \u2022 R\u00e9server \u2022 Tarifer \u2022 \u00c9mettre \u2022 Certifier 0Score N1Niveau Op\u00e9rations TerminalCommandes et aide Disponibilit\u00e9sAvailability display PNRCr\u00e9er le passager R\u00e9servationSell segment TarificationPricing \/ Fare Ticketing\u00c9mission simul\u00e9e SSR \/ OSIServices sp\u00e9ciaux \u00c9valuation Sc\u00e9narios [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-26335","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/26335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/types\/page"}],"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=26335"}],"version-history":[{"count":3,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/26335\/revisions"}],"predecessor-version":[{"id":26343,"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/pages\/26335\/revisions\/26343"}],"wp:attachment":[{"href":"https:\/\/maroczain.com\/en\/wp-json\/wp\/v2\/media?parent=26335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}