{"id":11927,"date":"2026-06-25T00:43:53","date_gmt":"2026-06-24T22:43:53","guid":{"rendered":"https:\/\/shopini.tn\/?page_id=11927"},"modified":"2026-06-25T06:21:42","modified_gmt":"2026-06-25T04:21:42","slug":"generateur-de-factures-et-devis-gratuit","status":"publish","type":"page","link":"https:\/\/shopini.tn\/ar\/generateur-de-factures-et-devis-gratuit\/","title":{"rendered":"G\u00e9n\u00e9rateur de Factures et Devis Gratuit"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11927\" class=\"elementor elementor-11927\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b8dba0f e-flex e-con-boxed e-con e-parent\" data-id=\"b8dba0f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dd899e3 elementor-widget elementor-widget-html\" data-id=\"dd899e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"si-app\"><\/div>\r\n\r\n<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap');\r\n#si-app,#si-app *,#si-app *::before,#si-app *::after{margin:0;padding:0;box-sizing:border-box}\r\n#si-app{\r\n    --si-bg:#f5f5f3;--si-white:#ffffff;--si-text:#1a1a1a;--si-text-2:#555;\r\n    --si-text-3:#999;--si-text-4:#ccc;--si-border:#e0ddd8;\r\n    --si-orange:#ff6b2c;--si-orange-hover:#e55a1f;--si-orange-light:rgba(255,107,44,.08);\r\n    --si-orange-glow:rgba(255,107,44,.20);--si-dark:#1e1e1e;\r\n    --si-green:#22c55e;--si-green-light:rgba(34,197,94,.10);\r\n    --si-red:#ef4444;--si-red-light:rgba(239,68,68,.08);\r\n    --si-amber:#f59e0b;--si-amber-light:rgba(245,158,11,.10);\r\n    --si-blue:#0288d1;--si-blue-light:rgba(2,136,209,.08);\r\n    --si-r:16px;--si-rm:12px;--si-rs:8px;\r\n    --si-shadow:0 2px 8px rgba(0,0,0,.06),0 8px 24px rgba(0,0,0,.04);\r\n    --si-shadow-lg:0 12px 40px rgba(0,0,0,.10);\r\n    --si-font:'Plus Jakarta Sans',-apple-system,sans-serif;\r\n    --si-mono:'JetBrains Mono',monospace;\r\n    font-family:var(--si-font);font-size:14px;color:var(--si-text);line-height:1.6;\r\n    background:var(--si-bg);border-radius:var(--si-r);overflow:hidden;\r\n    max-width:940px;margin:0 auto;position:relative;\r\n}\r\n#si-app input,#si-app select,#si-app textarea,#si-app button{font-family:var(--si-font)}\r\n#si-hero{background:linear-gradient(135deg,#1a1a1a,#2d2d2d 50%,#1a1a1a);padding:36px 32px 28px;position:relative;overflow:hidden}\r\n#si-hero::before{content:'';position:absolute;top:-80px;right:-60px;width:300px;height:300px;background:radial-gradient(circle,rgba(255,107,44,.15),transparent 60%);pointer-events:none}\r\n.si-hero-top{display:flex;align-items:center;justify-content:space-between;position:relative;z-index:1;margin-bottom:20px}\r\n.si-hero-brand{display:flex;align-items:center;gap:14px}\r\n.si-hero-logo{font-size:28px;font-weight:900;color:#fff;letter-spacing:-.04em}\r\n.si-hero-logo em{font-style:normal;color:var(--si-orange)}\r\n.si-hero-badge{display:inline-flex;align-items:center;gap:5px;padding:5px 14px;background:rgba(255,107,44,.15);border:1px solid rgba(255,107,44,.3);border-radius:20px;font-size:10px;font-weight:700;color:var(--si-orange);text-transform:uppercase;letter-spacing:.08em}\r\n.si-hero-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}\r\n.si-hero-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border:1px solid rgba(255,255,255,.15);border-radius:var(--si-rs);background:rgba(255,255,255,.06);color:rgba(255,255,255,.8);font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap}\r\n.si-hero-btn:hover{border-color:rgba(255,255,255,.3);background:rgba(255,255,255,.12);color:#fff}\r\n.si-hero-btn svg{width:14px;height:14px}\r\n.si-hero-btn--accent{background:var(--si-orange);border-color:var(--si-orange);color:#fff}\r\n.si-hero-btn--accent:hover{background:var(--si-orange-hover);border-color:var(--si-orange-hover);box-shadow:0 4px 20px var(--si-orange-glow)}\r\n.si-hero-sub{font-size:12px;color:rgba(255,255,255,.4);margin-top:12px;position:relative;z-index:1}\r\n#si-toolbar{display:flex;align-items:center;justify-content:space-between;padding:14px 32px;background:var(--si-white);border-bottom:1px solid var(--si-border);gap:12px;flex-wrap:wrap}\r\n.si-tb-left{display:flex;align-items:center;gap:12px}\r\n.si-tb-right{display:flex;align-items:center;gap:8px}\r\n.si-logo-zone{position:relative;width:170px;height:50px;border:2px dashed var(--si-border);border-radius:var(--si-rs);background:var(--si-bg);cursor:pointer;display:flex;align-items:center;justify-content:center;overflow:hidden;transition:all .25s;flex-shrink:0}\r\n.si-logo-zone:hover{border-color:var(--si-orange);background:var(--si-orange-light)}\r\n.si-logo-zone.has-logo{border-style:solid;border-color:var(--si-border);background:var(--si-white)}\r\n.si-logo-zone.has-logo:hover{border-color:var(--si-orange)}\r\n.si-logo-zone input[type=\"file\"]{position:absolute;inset:0;opacity:0;cursor:pointer;z-index:3}\r\n.si-logo-ph{display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--si-text-3);pointer-events:none;z-index:1}\r\n.si-logo-ph svg{width:16px;height:16px;opacity:.5}\r\n.si-logo-ph span{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}\r\n.si-logo-zone.has-logo .si-logo-ph{display:none}\r\n.si-logo-img{display:none;width:100%;height:100%;object-fit:contain;padding:6px 10px;pointer-events:none;z-index:2}\r\n.si-logo-zone.has-logo .si-logo-img{display:block}\r\n.si-logo-hover{position:absolute;inset:0;background:rgba(0,0,0,.55);display:none;align-items:center;justify-content:center;gap:8px;z-index:4;border-radius:6px}\r\n.si-logo-zone.has-logo:hover .si-logo-hover{display:flex}\r\n.si-logo-hover button{width:30px;height:30px;border:none;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}\r\n.si-logo-hover button svg{width:14px;height:14px}\r\n.si-lb-chg{background:rgba(255,255,255,.2);color:#fff}.si-lb-chg:hover{background:rgba(255,255,255,.4)}\r\n.si-lb-rm{background:rgba(239,68,68,.5);color:#fff}.si-lb-rm:hover{background:rgba(239,68,68,.8)}\r\n.si-curr-sel{background:var(--si-white);border:1px solid var(--si-border);border-radius:var(--si-rs);padding:8px 12px;font-size:13px;font-weight:600;color:var(--si-text);cursor:pointer}\r\n.si-curr-sel:focus{outline:none;border-color:var(--si-orange)}\r\n.si-btn{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border:1px solid var(--si-border);border-radius:var(--si-rs);background:var(--si-white);color:var(--si-text);font-size:13px;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap}\r\n.si-btn:hover{border-color:var(--si-orange);color:var(--si-orange);transform:translateY(-1px)}\r\n.si-btn:active{transform:translateY(0)}\r\n.si-btn svg{width:15px;height:15px;flex-shrink:0}\r\n.si-btn--ghost{background:transparent;border-style:dashed;color:var(--si-text-3)}\r\n.si-btn--ghost:hover{color:var(--si-orange);border-color:var(--si-orange);background:var(--si-orange-light)}\r\n.si-card-hd{display:flex;width:100%;border-bottom:1px solid var(--si-border)}\r\n.si-tab{flex:1;padding:18px 28px;border:none;background:var(--si-bg);color:var(--si-text-3);font-size:15px;font-weight:800;text-transform:uppercase;letter-spacing:.12em;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;text-align:center;border-bottom:3px solid transparent}\r\n.si-tab:hover:not(.on){color:var(--si-text-2);background:rgba(255,107,44,.03)}\r\n.si-tab.on{background:var(--si-white);color:var(--si-orange);border-bottom-color:var(--si-orange)}\r\n.si-tab.on::after{content:'';position:absolute;bottom:-3px;left:50%;transform:translateX(-50%);width:40px;height:3px;background:var(--si-orange);border-radius:3px 3px 0 0;box-shadow:0 0 12px var(--si-orange-glow)}\r\n.si-tab-icon{display:block;margin:0 auto 6px;font-size:20px;opacity:.4;transition:all .3s}\r\n.si-tab.on .si-tab-icon{opacity:1;transform:scale(1.1)}\r\n.si-ref-inp{background:var(--si-bg);border:1.5px solid var(--si-border);border-radius:var(--si-rs);padding:8px 14px;font-size:13px;color:var(--si-text);width:160px;font-weight:700;font-family:var(--si-mono);transition:all .2s}\r\n.si-ref-inp:focus{outline:none;border-color:var(--si-orange);box-shadow:0 0 0 3px var(--si-orange-light)}\r\n#si-body{padding:0}\r\n.si-card{background:var(--si-white);margin:24px;border-radius:var(--si-r);box-shadow:var(--si-shadow);overflow:hidden}\r\n.si-sec{padding:28px;border-bottom:1px solid var(--si-border)}.si-sec:last-child{border-bottom:none}\r\n.si-sec-title{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--si-text-2);margin-bottom:18px;display:flex;align-items:center;gap:10px}\r\n.si-sec-title::before{content:'';width:4px;height:16px;background:var(--si-orange);border-radius:3px;flex-shrink:0}\r\n.si-sec-title.si-blue::before{background:var(--si-blue)}\r\n.si-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 24px}.si-grid .si-full{grid-column:1\/-1}\r\n.si-field{display:flex;flex-direction:column;gap:5px}\r\n.si-field label{font-size:10px;font-weight:700;color:var(--si-text-3);text-transform:uppercase;letter-spacing:.08em}\r\n.si-field input,.si-field textarea,.si-field select{background:var(--si-bg);border:1.5px solid transparent;border-radius:var(--si-rs);padding:11px 14px;font-size:13px;color:var(--si-text);transition:all .2s;width:100%}\r\n.si-field input:hover,.si-field textarea:hover{border-color:var(--si-border);background:var(--si-white)}\r\n.si-field input:focus,.si-field textarea:focus,.si-field select:focus{outline:none;border-color:var(--si-orange);background:var(--si-white);box-shadow:0 0 0 3px var(--si-orange-light)}\r\n.si-field input::placeholder{color:var(--si-text-4)}\r\n.si-field textarea{resize:vertical;min-height:60px}\r\n.si-field select{cursor:pointer;appearance:none;background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 12px center}\r\n.si-add-field{display:inline-flex;align-items:center;gap:5px;padding:7px 16px;background:transparent;border:1.5px dashed var(--si-border);border-radius:var(--si-rs);color:var(--si-text-3);font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;margin-top:10px}\r\n.si-add-field:hover{border-color:var(--si-orange);color:var(--si-orange);background:var(--si-orange-light)}\r\n.si-field-wrap{position:relative;display:flex;flex-direction:column;gap:5px;animation:siFadeIn .25s ease}\r\n.si-field-wrap .si-field-rm{position:absolute;top:0;right:0;width:24px;height:24px;border:none;border-radius:6px;background:transparent;color:var(--si-text-4);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;opacity:0}\r\n.si-field-wrap:hover .si-field-rm{opacity:1}\r\n.si-field-wrap .si-field-rm:hover{background:var(--si-red-light);color:var(--si-red)}\r\n@keyframes siFadeIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}\r\n.si-tbl-wrap{overflow-x:auto}\r\n.si-tbl{width:100%;border-collapse:collapse;font-size:13px}\r\n.si-tbl thead th{background:#faf9f7;padding:12px 14px;text-align:left;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--si-text-3);border-bottom:2px solid var(--si-border);white-space:nowrap}\r\n.si-tbl thead th.si-n{text-align:right}\r\n.si-tbl thead th.si-act{text-align:center;width:44px}\r\n.si-tbl tbody td{padding:12px 14px;border-bottom:1px solid var(--si-border);vertical-align:middle}\r\n.si-tbl tbody td.si-n{text-align:right;font-variant-numeric:tabular-nums}\r\n.si-tbl tbody td.si-act{text-align:center;width:44px}\r\n.si-tbl tbody tr{transition:background .15s}\r\n.si-tbl tbody tr:hover{background:rgba(255,107,44,.02)}\r\n.si-tbl .si-row-tot{font-weight:700;text-align:right;color:var(--si-text);font-variant-numeric:tabular-nums;font-family:var(--si-mono);font-size:12px}\r\n.si-tbl [contenteditable]{padding:6px 8px;border-radius:6px;border:1.5px solid transparent;transition:all .15s;min-width:40px}\r\n.si-tbl [contenteditable]:hover{border-color:var(--si-border);background:var(--si-bg)}\r\n.si-tbl [contenteditable]:focus{border-color:var(--si-orange);outline:none;background:var(--si-white);box-shadow:0 0 0 3px var(--si-orange-light)}\r\n.si-ph:empty::before{content:attr(data-ph);color:var(--si-text-4);font-style:italic}\r\n.si-tva-sel{background:var(--si-bg);border:1.5px solid transparent;border-radius:6px;padding:7px 10px;font-size:12px;color:var(--si-text);font-family:var(--si-mono);font-weight:600;cursor:pointer;transition:all .15s;min-width:72px}\r\n.si-tva-sel:hover{border-color:var(--si-border);background:var(--si-white)}\r\n.si-tva-sel:focus{outline:none;border-color:var(--si-orange);box-shadow:0 0 0 3px var(--si-orange-light)}\r\n.si-del{width:30px;height:30px;border:none;border-radius:8px;background:transparent;color:var(--si-text-4);font-size:18px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .15s}\r\n.si-del:hover{background:var(--si-red-light);color:var(--si-red)}\r\n.si-add-row{padding:16px 28px;border-bottom:1px solid var(--si-border)}\r\n.si-totals{display:flex;gap:28px;padding:28px;border-bottom:1px solid var(--si-border);align-items:flex-start}\r\n.si-tva-bk{flex:1;min-width:200px}\r\n.si-tva-tbl{width:100%;border-collapse:collapse;font-size:12px}\r\n.si-tva-tbl th{background:#faf9f7;padding:10px 14px;text-align:left;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--si-text-3);border-bottom:2px solid var(--si-border)}\r\n.si-tva-tbl th.si-n{text-align:right}\r\n.si-tva-tbl td{padding:10px 14px;border-bottom:1px solid var(--si-border);font-variant-numeric:tabular-nums;font-family:var(--si-mono);font-size:12px}\r\n.si-tva-tbl td.si-n{text-align:right;font-weight:500}\r\n.si-sum{width:300px;flex-shrink:0}\r\n.si-sum-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;font-size:13px}\r\n.si-sum-lbl{color:var(--si-text-2);font-weight:600}\r\n.si-sum-val{font-weight:700;font-variant-numeric:tabular-nums;color:var(--si-text);font-family:var(--si-mono);font-size:13px}\r\n.si-sum-hr{border:none;height:1px;background:var(--si-border);margin:4px 0}\r\n.si-timbre-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 16px;background:transparent;border:1.5px dashed var(--si-border);border-radius:var(--si-rs);color:var(--si-text-3);font-size:12px;font-weight:600;cursor:pointer;transition:all .2s;margin-top:8px}\r\n.si-timbre-btn:hover{border-color:var(--si-amber);color:var(--si-amber);background:var(--si-amber-light)}\r\n.si-timbre-btn.on{border-style:solid;border-color:var(--si-green);color:var(--si-green);background:var(--si-green-light);cursor:default}\r\n.si-timbre-row{display:none}.si-timbre-row.show{display:flex}\r\n.si-timbre-row .si-sum-lbl{color:var(--si-amber);font-weight:700}\r\n.si-timbre-row .si-sum-val{color:var(--si-amber);font-weight:800}\r\n.si-grand{padding:16px 20px 10px;background:linear-gradient(135deg,var(--si-orange-light),rgba(255,107,44,.04));margin:10px -20px 0;border-radius:var(--si-rm);border:1.5px solid rgba(255,107,44,.15)}\r\n.si-grand .si-sum-lbl{font-size:16px;font-weight:800;color:var(--si-text)}\r\n.si-grand .si-sum-val{font-size:22px;font-weight:800;color:var(--si-orange);font-family:var(--si-mono)}\r\n.si-ret-box{background:linear-gradient(135deg,var(--si-blue-light),rgba(2,136,209,.03));border:1.5px solid rgba(2,136,209,.15);border-radius:var(--si-rm);padding:24px;margin-top:0}\r\n.si-ret-box .si-sum-row{padding:8px 0}\r\n.si-ret-box .si-grand{background:linear-gradient(135deg,var(--si-blue-light),rgba(2,136,209,.05));border-color:rgba(2,136,209,.2);margin:12px -16px 0}\r\n.si-ret-box .si-grand .si-sum-lbl{font-size:15px}\r\n.si-ret-box .si-grand .si-sum-val{font-size:20px;color:var(--si-blue);font-family:var(--si-mono)}\r\n.si-notes textarea{width:100%;background:var(--si-bg);border:1.5px solid transparent;border-radius:var(--si-rs);padding:14px 16px;font-size:13px;color:var(--si-text);resize:vertical;min-height:80px;font-family:var(--si-font);transition:all .2s}\r\n.si-notes textarea:hover{border-color:var(--si-border);background:var(--si-white)}\r\n.si-notes textarea:focus{outline:none;border-color:var(--si-orange);background:var(--si-white);box-shadow:0 0 0 3px var(--si-orange-light)}\r\n.si-notes textarea::placeholder{color:var(--si-text-4)}\r\n.si-foot-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}\r\n.si-foot-block h4{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--si-text-3);margin-bottom:12px;display:flex;align-items:center;gap:8px}\r\n.si-foot-block h4::before{content:'';width:4px;height:14px;background:var(--si-orange);border-radius:3px}\r\n.si-foot-block [contenteditable]{padding:4px 8px;border:1.5px dashed transparent;border-radius:6px;transition:all .15s;font-size:13px;color:var(--si-text-2);line-height:1.9}\r\n.si-foot-block [contenteditable]:hover{border-color:var(--si-border);background:var(--si-bg)}\r\n.si-foot-block [contenteditable]:focus{border-color:var(--si-orange);outline:none;background:var(--si-white);box-shadow:0 0 0 3px var(--si-orange-light)}\r\n.si-watermark{text-align:center;padding:18px;font-size:11px;color:var(--si-text-3);border-top:1px solid var(--si-border);background:#faf9f7;font-weight:500}\r\n.si-watermark a{color:var(--si-orange);text-decoration:none;font-weight:700}\r\n.si-info-banner{display:flex;align-items:center;gap:10px;padding:12px 18px;background:var(--si-blue-light);border:1px solid rgba(2,136,209,.15);border-radius:var(--si-rs);font-size:12px;color:var(--si-text-2);margin-bottom:18px;line-height:1.5}\r\n.si-info-banner svg{width:16px;height:16px;flex-shrink:0;color:var(--si-blue)}\r\n#si-pdf-ov{position:fixed;inset:0;background:rgba(255,255,255,.95);backdrop-filter:blur(10px);display:none;flex-direction:column;align-items:center;justify-content:center;gap:16px;z-index:99999}\r\n#si-pdf-ov.on{display:flex}\r\n.si-spinner{width:36px;height:36px;border:3px solid var(--si-border);border-top-color:var(--si-orange);border-radius:50%;animation:si-spin .7s linear infinite}\r\n@keyframes si-spin{to{transform:rotate(360deg)}}\r\n#si-pdf-ov p{font-size:13px;color:var(--si-text-3);font-weight:600}\r\n#si-toast{position:fixed;bottom:32px;right:32px;padding:14px 24px;background:var(--si-dark);border:none;border-radius:var(--si-rm);color:#fff;font-size:13px;font-weight:600;box-shadow:var(--si-shadow-lg);transform:translateY(80px);opacity:0;transition:all .35s cubic-bezier(.34,1.56,.64,1);z-index:99999;pointer-events:none}\r\n#si-toast.on{transform:translateY(0);opacity:1}\r\n@media print{.si-np{display:none!important}}\r\n@media(max-width:720px){\r\n    .si-card{margin:14px}.si-sec{padding:20px 18px}\r\n    .si-grid{grid-template-columns:1fr}\r\n    .si-totals{flex-direction:column}.si-sum{width:100%}\r\n    .si-foot-grid{grid-template-columns:1fr}\r\n    #si-hero{padding:24px 18px 20px}\r\n    .si-hero-top{flex-direction:column;gap:12px;align-items:flex-start}\r\n    .si-hero-tools{flex-wrap:wrap}\r\n    #si-toolbar{padding:12px 18px}\r\n    .si-logo-zone{width:130px;height:42px}\r\n    .si-tab{padding:14px 16px;font-size:13px;letter-spacing:.06em}\r\n    .si-tab-icon{font-size:16px}\r\n    .si-ret-box{padding:18px 14px}\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function(){\r\n'use strict';\r\n\r\nvar ST='si_v5',logoData=null,timbreOn=false,docType='Facture',cur='DT';\r\n\r\nvar CUR={\r\n    DT:{s:'DT',p:'a',sp:1,d:3,tva:'19'},DZD:{s:'DA',p:'a',sp:1,d:3,tva:'19'},\r\n    MAD:{s:'MAD',p:'b',sp:1,d:2,tva:'20'},EGP:{s:'EGP',p:'b',sp:1,d:2,tva:'14'},\r\n    MRU:{s:'UM',p:'a',sp:1,d:2,tva:'16'},XOF:{s:'FCFA',p:'a',sp:1,d:0,tva:'18'},\r\n    SAR:{s:'SAR',p:'b',sp:1,d:2,tva:'15'},AED:{s:'AED',p:'b',sp:1,d:2,tva:'5'},\r\n    EUR:{s:'\\u20AC',p:'a',sp:1,d:2,tva:'20'},GBP:{s:'\\u00A3',p:'b',sp:0,d:2,tva:'20'},\r\n    CHF:{s:'CHF',p:'b',sp:1,d:2,tva:'8.1'},TRY:{s:'\\u20BA',p:'b',sp:0,d:2,tva:'20'},\r\n    USD:{s:'$',p:'b',sp:0,d:2,tva:'0'},CAD:{s:'CA$',p:'b',sp:0,d:2,tva:'5'},\r\n    AUD:{s:'A$',p:'b',sp:0,d:2,tva:'10'}\r\n};\r\n\r\nvar TVA_TN=[{v:'19',l:'19% \u2014 Normal'},{v:'13',l:'13% \u2014 Interm\u00e9diaire'},{v:'7',l:'7% \u2014 R\u00e9duit'},{v:'0',l:'0% \u2014 Exon\u00e9r\u00e9'}];\r\n\r\nvar RRATES=[\r\n    {v:'10',l:'10% \u2014 Honoraires, commissions'},{v:'7',l:'7% \u2014 Dirigeants de soci\u00e9t\u00e9s'},\r\n    {v:'5',l:'5% \u2014 Loyers et revenus immobiliers'},{v:'3',l:'3% \u2014 Travaux de construction'},\r\n    {v:'15',l:'15% \u2014 Revenus de capitaux mobiliers'},{v:'20',l:'20% \u2014 Non-r\u00e9sidents'},\r\n    {v:'1',l:'1% \u2014 Cessions de fonds de commerce'},{v:'0.5',l:'0.5% \u2014 Op\u00e9rations boursi\u00e8res'},\r\n    {v:'custom',l:'Autre taux \u2014 Saisie manuelle'}\r\n];\r\n\r\nvar I={\r\npdf:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/><\/svg>',\r\nsave:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\"\/><polyline points=\"17 21 17 13 7 13 7 21\"\/><polyline points=\"7 3 7 8 15 8\"\/><\/svg>',\r\nload:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"1 4 1 10 7 10\"\/><path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\"\/><\/svg>',\r\ntrash:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"3 6 5 6 21 6\"\/><path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"\/><\/svg>',\r\nplus:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"\/><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><\/svg>',\r\nup:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><polyline points=\"17 8 12 3 7 8\"\/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"\/><\/svg>',\r\nedit:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"\/><path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"\/><\/svg>',\r\nx:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg>',\r\nstamp:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\"\/><path d=\"M16 7V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v3\"\/><\/svg>',\r\ninfo:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\/><\/svg>'\r\n};\r\n\r\nvar TIMBRE=1.000;\r\n\r\nfunction fmt(n){\r\n    var c=CUR[cur]||CUR.DT;var v=n.toFixed(c.d);var sp=c.sp?' ':'';\r\n    return c.p==='b'?c.s+sp+v:v+sp+c.s;\r\n}\r\nfunction pN(t){if(!t)return 0;var s=t.replace(\/[^\\d,.\\-]\/g,'').replace(',','.');var v=parseFloat(s);return isNaN(v)?0:v;}\r\nfunction toast(m){var e=document.getElementById('si-toast');if(!e)return;e.textContent=m;e.classList.add('on');clearTimeout(e._t);e._t=setTimeout(function(){e.classList.remove('on');},2800);}\r\n\r\nfunction tvaOpts(sel){\r\n    return TVA_TN.map(function(t){return '<option value=\"'+t.v+'\"'+(t.v===(sel!==undefined?sel:'19')?' selected':'')+'>'+t.l+'<\/option>';}).join('');\r\n}\r\nfunction retOpts(){\r\n    return RRATES.map(function(r){return '<option value=\"'+r.v+'\">'+r.l+'<\/option>';}).join('');\r\n}\r\n\r\nvar root=document.getElementById('si-app');\r\n\r\nfunction build(){\r\n    var t=new Date(),d=new Date();d.setDate(d.getDate()+30);\r\n    var td=t.toLocaleDateString('fr-FR'),dd=d.toLocaleDateString('fr-FR');\r\n\r\n    root.innerHTML=\r\n    '<div id=\"si-pdf-ov\"><div class=\"si-spinner\"><\/div><p>G\\u00e9n\\u00e9ration du PDF\\u2026<\/p><\/div>'\r\n    +'<div id=\"si-hero\" class=\"si-np\"><div class=\"si-hero-top\"><div class=\"si-hero-brand\"><div class=\"si-hero-logo\">Shop<em>ini<\/em><\/div><div class=\"si-hero-badge\">\\ud83c\\uddf5\\ud83c\\uddf3 International<\/div><\/div>'\r\n    +'<div class=\"si-hero-tools\">'\r\n    +'<select class=\"si-curr-sel\" id=\"si-curr\" style=\"background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.15);color:rgba(255,255,255,.8)\">'\r\n    +'<option value=\"DT\" style=\"color:#1a1a1a\">DT \\u2014 Tunisie<\/option><option value=\"DZD\" style=\"color:#1a1a1a\">DA \\u2014 Alg\\u00e9rie<\/option><option value=\"MAD\" style=\"color:#1a1a1a\">MAD \\u2014 Maroc<\/option><option value=\"EGP\" style=\"color:#1a1a1a\">EGP \\u2014 \\u00c9gypte<\/option><option value=\"MRU\" style=\"color:#1a1a1a\">UM \\u2014 Mauritanie<\/option><option value=\"XOF\" style=\"color:#1a1a1a\">FCFA \\u2014 UEMOA<\/option><option value=\"SAR\" style=\"color:#1a1a1a\">SAR \\u2014 Arabie Saoudite<\/option><option value=\"AED\" style=\"color:#1a1a1a\">AED \\u2014 \\u00c9mirats<\/option><option value=\"EUR\" style=\"color:#1a1a1a\">\\u20ac \\u2014 Euro<\/option><option value=\"GBP\" style=\"color:#1a1a1a\">\\u00a3 \\u2014 Livre Sterling<\/option><option value=\"CHF\" style=\"color:#1a1a1a\">CHF \\u2014 Suisse<\/option><option value=\"TRY\" style=\"color:#1a1a1a\">\\u20ba \\u2014 Turquie<\/option><option value=\"USD\" style=\"color:#1a1a1a\">$ \\u2014 Dollar US<\/option><option value=\"CAD\" style=\"color:#1a1a1a\">CA$ \\u2014 Canada<\/option><option value=\"AUD\" style=\"color:#1a1a1a\">A$ \\u2014 Australie<\/option><\/select>'\r\n    +'<button class=\"si-hero-btn si-hero-btn--accent\" id=\"b-pdf\">'+I.pdf+' T\\u00e9l\\u00e9charger PDF<\/button>'\r\n    +'<button class=\"si-hero-btn\" id=\"b-save\">'+I.save+'<\/button>'\r\n    +'<button class=\"si-hero-btn\" id=\"b-load\">'+I.load+'<\/button>'\r\n    +'<button class=\"si-hero-btn\" id=\"b-reset\" style=\"color:rgba(239,68,68,.7)\">'+I.trash+'<\/button>'\r\n    +'<\/div><\/div><div class=\"si-hero-sub\">Factures, devis & certificats de retenue \\u2014 15 devises<\/div><\/div>'\r\n    +'<div id=\"si-toolbar\" class=\"si-np\"><div class=\"si-tb-left\">'\r\n    +'<div class=\"si-logo-zone\" id=\"si-lzone\"><input type=\"file\" accept=\"image\/*\" id=\"si-linput\"><img class=\"si-logo-img\" id=\"si-limg\" alt=\"\"><div class=\"si-logo-ph\">'+I.up+'<span>Logo<\/span><\/div><div class=\"si-logo-hover\"><button class=\"si-lb-chg\" id=\"si-lchg\">'+I.edit+'<\/button><button class=\"si-lb-rm\" id=\"si-lrm\">'+I.x+'<\/button><\/div><\/div>'\r\n    +'<span style=\"font-size:11px;color:var(--si-text-3)\">Logo entreprise<\/span><\/div>'\r\n    +'<div class=\"si-tb-right\"><span style=\"font-size:11px;color:var(--si-text-3);font-weight:600\">R\\u00e9f.<\/span><input type=\"text\" class=\"si-ref-inp\" id=\"i-ref\" value=\"FAC 0001\"><\/div><\/div>'\r\n    +'<div id=\"si-body\"><div class=\"si-card\">'\r\n    +'<div class=\"si-card-hd si-np\"><button class=\"si-tab\" data-t=\"Devis\"><span class=\"si-tab-icon\">\\ud83d\\udccb<\/span>DEVIS<\/button><button class=\"si-tab on\" data-t=\"Facture\"><span class=\"si-tab-icon\">\\ud83d\\udcc4<\/span>FACTURE<\/button><button class=\"si-tab\" data-t=\"Retenue\" id=\"tab-ret\"><span class=\"si-tab-icon\">\\ud83c\\udfdb\\ufe0f<\/span>RETENUE<\/button><\/div>'\r\n\r\n    \/* FACTURE \/ DEVIS *\/\r\n    +'<div id=\"sec-f\"><div class=\"si-sec\"><div class=\"si-sec-title\">Client<\/div><div class=\"si-grid\"><div class=\"si-field\"><label>Raison sociale<\/label><input type=\"text\" id=\"i-cn\" placeholder=\"Nom du client\"><\/div><div class=\"si-field\"><label>Matricule fiscal<\/label><input type=\"text\" id=\"i-mf\" placeholder=\"MF\"><\/div><div class=\"si-field si-full\"><label>Adresse<\/label><input type=\"text\" id=\"i-ca\" placeholder=\"Adresse\"><\/div><div id=\"i-cx\"><\/div><\/div><button class=\"si-add-field si-np\" id=\"b-acf\">'+I.plus+' Champ<\/button><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-sec-title\">Document<\/div><div class=\"si-grid\"><div class=\"si-field\"><label>Date<\/label><input type=\"text\" id=\"i-dc\" value=\"'+td+'\"><\/div><div class=\"si-field\"><label>\\u00c9ch\\u00e9ance<\/label><input type=\"text\" id=\"i-dd\" value=\"'+dd+'\"><\/div><div id=\"i-dx\"><\/div><\/div><button class=\"si-add-field si-np\" id=\"b-adf\">'+I.plus+' Champ<\/button><\/div>'\r\n    +'<div class=\"si-sec\" style=\"padding-bottom:0\"><div class=\"si-sec-title\">Lignes<\/div><\/div>'\r\n    +'<div class=\"si-tbl-wrap\"><table class=\"si-tbl\" id=\"si-tbl\"><thead><tr><th>R\\u00e9f.<\/th><th>D\\u00e9signation<\/th><th class=\"si-n\">Qt\\u00e9<\/th><th class=\"si-n\">Prix U. HT<\/th><th>TVA<\/th><th class=\"si-n\">Total HT<\/th><th class=\"si-act si-np\"><\/th><\/tr><\/thead><tbody id=\"si-tb\"><tr><td contenteditable=\"true\" class=\"si-ph\" data-ph=\"REF\">REF-001<\/td><td contenteditable=\"true\" class=\"si-ph\" data-ph=\"Produit\">Produit \/ Service<\/td><td class=\"si-n\" contenteditable=\"true\">1<\/td><td class=\"si-n\" contenteditable=\"true\">100,000<\/td><td><select class=\"si-tva-sel\">'+tvaOpts()+'<\/select><\/td><td class=\"si-row-tot\">0<\/td><td class=\"si-act si-np\"><button class=\"si-del\">&times;<\/button><\/td><\/tr><\/tbody><\/table><\/div>'\r\n    +'<div class=\"si-add-row si-np\"><button class=\"si-btn si-btn--ghost\" id=\"b-arow\">'+I.plus+' Ligne<\/button><\/div>'\r\n    +'<div class=\"si-totals\"><div class=\"si-tva-bk\"><table class=\"si-tva-tbl\"><thead><tr><th>TVA<\/th><th class=\"si-n\">Base<\/th><th class=\"si-n\">Montant<\/th><\/tr><\/thead><tbody id=\"si-tva-tb\"><\/tbody><\/table><\/div>'\r\n    +'<div class=\"si-sum\"><div class=\"si-sum-row\"><span class=\"si-sum-lbl\">Total HT<\/span><span class=\"si-sum-val\" id=\"v-ht\">0<\/span><\/div><hr class=\"si-sum-hr\"><div class=\"si-sum-row\"><span class=\"si-sum-lbl\">TVA<\/span><span class=\"si-sum-val\" id=\"v-tva\">0<\/span><\/div><div class=\"si-sum-row si-timbre-row\" id=\"r-timbre\"><span class=\"si-sum-lbl\">Timbre<\/span><span class=\"si-sum-val\" id=\"v-timbre\"><\/span><\/div><div class=\"si-np\" style=\"margin-top:8px\"><button class=\"si-timbre-btn\" id=\"b-timbre\">'+I.stamp+' Timbre fiscal ('+fmt(TIMBRE)+')<\/button><\/div><hr class=\"si-sum-hr\"><div class=\"si-sum-row si-grand\"><span class=\"si-sum-lbl\">Net \\u00e0 payer<\/span><span class=\"si-sum-val\" id=\"v-ttc\">0<\/span><\/div><\/div><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-sec-title\">Notes<\/div><div class=\"si-notes\"><textarea id=\"i-notes\" placeholder=\"Notes...\"><\/textarea><\/div><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-foot-grid\"><div class=\"si-foot-block\"><h4>Entreprise<\/h4><div contenteditable=\"true\" class=\"si-ph\" id=\"i-ci\">Soci\\u00e9t\\u00e9 XYZ SARL<br>Tunis, Tunisie<br>MF: 1234567\/A\/M\/000<br>contact@exemple.tn<br>+216 71 000 000<\/div><\/div><div class=\"si-foot-block\"><h4>Banque<\/h4><div class=\"si-field\" style=\"margin-bottom:10px\"><label>Banque<\/label><input type=\"text\" id=\"i-bank\"><\/div><div class=\"si-field\" style=\"margin-bottom:10px\"><label>RIB<\/label><input type=\"text\" id=\"i-rib\"><\/div><div class=\"si-field\"><label>IBAN<\/label><input type=\"text\" id=\"i-iban\"><\/div><\/div><\/div><\/div><\/div>'\r\n\r\n    \/* RETENUE *\/\r\n    +'<div id=\"sec-r\" style=\"display:none\">'\r\n    +'<div class=\"si-sec\"><div class=\"si-info-banner si-np\">'+I.info+'<span>Certificat conforme \\u00e0 la l\\u00e9gislation tunisienne (IRPP \/ IS).<\/span><\/div><div class=\"si-sec-title si-blue\">Redevable (\\u00e9metteur)<\/div><div class=\"si-grid\"><div class=\"si-field\"><label>Raison sociale<\/label><input type=\"text\" id=\"i-rn\"><\/div><div class=\"si-field\"><label>MF<\/label><input type=\"text\" id=\"i-rmf\"><\/div><div class=\"si-field si-full\"><label>Adresse<\/label><input type=\"text\" id=\"i-rad\"><\/div><\/div><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-sec-title si-blue\">B\\u00e9n\\u00e9ficiaire<\/div><div class=\"si-grid\"><div class=\"si-field\"><label>Nom<\/label><input type=\"text\" id=\"i-bn\"><\/div><div class=\"si-field\"><label>MF<\/label><input type=\"text\" id=\"i-bmf\"><\/div><div class=\"si-field si-full\"><label>Adresse<\/label><input type=\"text\" id=\"i-bad\"><\/div><div class=\"si-field\"><label>N\\u00b0 carte\/s\\u00e9jour<\/label><input type=\"text\" id=\"i-bc\"><\/div><div class=\"si-field\"><label>R\\u00e9sidence<\/label><input type=\"text\" id=\"i-br\"><\/div><\/div><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-sec-title si-blue\">Retenue<\/div><div class=\"si-grid\"><div class=\"si-field\"><label>Date<\/label><input type=\"text\" id=\"i-rd\" value=\"'+td+'\"><\/div><div class=\"si-field\"><label>N\\u00b0<\/label><input type=\"text\" id=\"i-rref\" value=\"RET 0001\" style=\"font-family:var(--si-mono);font-weight:700\"><\/div><div class=\"si-field si-full\"><label>Nature<\/label><select id=\"i-rnat\">'+retOpts()+'<\/select><\/div><div class=\"si-field si-full\" id=\"r-cr\" style=\"display:none\"><label>Taux %<\/label><input type=\"text\" id=\"i-rcr\" placeholder=\"12\"><\/div><div class=\"si-field si-full\"><label>Description<\/label><textarea id=\"i-rdesc\" rows=\"2\"><\/textarea><\/div><div class=\"si-field\"><label>R\\u00e9f. facture<\/label><input type=\"text\" id=\"i-rfr\"><\/div><div class=\"si-field\"><label>Exercice<\/label><input type=\"text\" id=\"i-rex\" value=\"'+(new Date().getFullYear())+'\" style=\"font-family:var(--si-mono);font-weight:700\"><\/div><\/div><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-sec-title si-blue\">Montants<\/div><div class=\"si-grid\"><div class=\"si-field\"><label>Brut HT<\/label><input type=\"text\" id=\"i-rbr\" value=\"0,000\" style=\"font-family:var(--si-mono);font-weight:700;font-size:15px\"><\/div><div class=\"si-field\"><label>TVA<\/label><input type=\"text\" id=\"i-rtv\" value=\"0,000\" style=\"font-family:var(--si-mono);font-weight:700;font-size:15px\"><\/div><\/div><\/div>'\r\n    +'<div class=\"si-sec\" style=\"padding-bottom:12px\"><div class=\"si-ret-box\"><div class=\"si-sum-row\"><span class=\"si-sum-lbl\">Brut HT<\/span><span class=\"si-sum-val\" id=\"v-rb\">0<\/span><\/div><div class=\"si-sum-row\"><span class=\"si-sum-lbl\">TVA<\/span><span class=\"si-sum-val\" id=\"v-rt\">0<\/span><\/div><div class=\"si-sum-row\"><span class=\"si-sum-lbl\">TTC<\/span><span class=\"si-sum-val\" id=\"v-rtc\" style=\"font-weight:800\">0<\/span><\/div><hr class=\"si-sum-hr\"><div class=\"si-sum-row\"><span class=\"si-sum-lbl\">Taux<\/span><span class=\"si-sum-val\" id=\"v-rr\" style=\"color:var(--si-blue);font-weight:800\">10%<\/span><\/div><div class=\"si-sum-row\" style=\"color:var(--si-red)\"><span class=\"si-sum-lbl\" style=\"color:var(--si-red);font-weight:700\">Retenue<\/span><span class=\"si-sum-val\" id=\"v-rm\" style=\"color:var(--si-red);font-weight:800\">0<\/span><\/div><hr class=\"si-sum-hr\"><div class=\"si-grand\"><div class=\"si-sum-row\"><span class=\"si-sum-lbl\">Net vers\\u00e9<\/span><span class=\"si-sum-val\" id=\"v-rn\">0<\/span><\/div><\/div><\/div><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-sec-title\">Observations<\/div><div class=\"si-notes\"><textarea id=\"i-rnotes\"><\/textarea><\/div><\/div>'\r\n    +'<div class=\"si-sec\"><div class=\"si-foot-grid\"><div class=\"si-foot-block\"><h4>Signature<\/h4><div contenteditable=\"true\" class=\"si-ph\" id=\"i-rsig\">Le redevable<br><br>Fait \\u00e0 Tunis, le '+td+'<\/div><\/div><div class=\"si-foot-block\"><h4>Infos<\/h4><div class=\"si-field\" style=\"margin-bottom:10px\"><label>Agence<\/label><input type=\"text\" id=\"i-ra\"><\/div><div class=\"si-field\"><label>Quittance<\/label><input type=\"text\" id=\"i-rq\"><\/div><\/div><\/div><\/div><\/div>'\r\n\r\n    +'<div class=\"si-watermark si-np\">Outil gratuit \\u2014 <a href=\"https:\/\/shopini.tn\" target=\"_blank\">Shopini.tn<\/a><\/div><\/div><\/div>';\r\n\r\n    var el=document.createElement('div');el.id='si-toast';document.body.appendChild(el);\r\n    bind();recalc();\r\n}\r\n\r\n\/* \u2550\u2550\u2550 RECALC \u2550\u2550\u2550 *\/\r\nfunction recalc(){\r\n    var tb=document.getElementById('si-tb');if(!tb)return;\r\n    var rows=tb.querySelectorAll('tr'),ht=0,bk={};\r\n    rows.forEach(function(r){\r\n        var c=r.children;if(c.length<6)return;\r\n        var q=pN(c[2].textContent),pr=pN(c[3].textContent);\r\n        var sel=c[4].querySelector('select');\r\n        var rate=sel?parseFloat(sel.value):0;\r\n        var ln=q*pr;ht+=ln;c[5].textContent=fmt(ln);\r\n        if(!bk[rate])bk[rate]={b:0,m:0};bk[rate].b+=ln;bk[rate].m+=ln*rate\/100;\r\n    });\r\n    var vtb=document.getElementById('si-tva-tb');if(!vtb)return;\r\n    vtb.innerHTML='';var tva=0;\r\n    Object.keys(bk).sort(function(a,b){return a-b;}).forEach(function(rate){\r\n        var b=bk[rate];tva+=b.m;\r\n        var label=TVA_TN.find(function(t){return t.v==rate;});\r\n        var tr=document.createElement('tr');\r\n        tr.innerHTML='<td>'+(label?label.label:rate+'%')+'<\/td><td class=\"si-n\">'+fmt(b.b)+'<\/td><td class=\"si-n\">'+fmt(b.m)+'<\/td>';\r\n        vtb.appendChild(tr);\r\n    });\r\n    var tv=timbreOn?TIMBRE:0;\r\n    document.getElementById('v-ht').textContent=fmt(ht);\r\n    document.getElementById('v-tva').textContent=fmt(tva);\r\n    document.getElementById('v-timbre').textContent=fmt(tv);\r\n    document.getElementById('v-ttc').textContent=fmt(ht+tva+tv);\r\n}\r\n\r\nfunction recR(){\r\n    var br=pN(document.getElementById('i-rbr').value),tv=pN(document.getElementById('i-rtv').value),tt=br+tv;\r\n    var ns=document.getElementById('i-rnat'),rv=ns?ns.value:'10',rn;\r\n    if(rv==='custom'){var cr=document.getElementById('i-rcr');rn=cr?parseFloat(cr.value.replace(',','.')):0;}else{rn=parseFloat(rv);}\r\n    if(isNaN(rn))rn=0;\r\n    var mr=br*rn\/100,nv=Math.max(0,tt-mr);\r\n    document.getElementById('v-rb').textContent=fmt(br);document.getElementById('v-rt').textContent=fmt(tv);document.getElementById('v-rtc').textContent=fmt(tt);\r\n    document.getElementById('v-rr').textContent=rn+'%';document.getElementById('v-rm').textContent=fmt(mr);document.getElementById('v-rn').textContent=fmt(nv);\r\n}\r\n\r\n\/* \u2550\u2550\u2550 ROWS \u2550\u2550\u2550 *\/\r\nfunction addRow(d){\r\n    d=d||{};var c=CUR[cur]||CUR.DT;\r\n    var tr=document.createElement('tr');\r\n    tr.innerHTML='<td contenteditable=\"true\" class=\"si-ph\" data-ph=\"REF\">'+(d.r||'')+'<\/td><td contenteditable=\"true\" class=\"si-ph\" data-ph=\"Produit\">'+(d.d||'')+'<\/td><td class=\"si-n\" contenteditable=\"true\">'+(d.q||'1')+'<\/td><td class=\"si-n\" contenteditable=\"true\">'+(d.p||'0,000')+'<\/td><td><select class=\"si-tva-sel\">'+tvaOpts(d.v!==undefined?d.v:c.tva)+'<\/select><\/td><td class=\"si-row-tot\">'+fmt(0)+'<\/td><td class=\"si-act si-np\"><button class=\"si-del\">&times;<\/button><\/td>';\r\n    document.getElementById('si-tb').appendChild(tr);wireRow(tr);recalc();\r\n}\r\nfunction wireRow(tr){\r\n    tr.querySelectorAll('[contenteditable]').forEach(function(el){el.addEventListener('input',recalc);});\r\n    var sel=tr.querySelector('.si-tva-sel');if(sel)sel.addEventListener('change',recalc);\r\n    var del=tr.querySelector('.si-del');if(del)del.addEventListener('click',function(){tr.remove();recalc();});\r\n}\r\n\r\n\/* \u2550\u2550\u2550 EVENTS \u2550\u2550\u2550 *\/\r\nfunction bind(){\r\n    document.querySelectorAll('#si-tb tr').forEach(wireRow);\r\n    document.getElementById('b-arow').addEventListener('click',function(){addRow();});\r\n    document.getElementById('si-curr').addEventListener('change',function(e){\r\n        cur=e.target.value;\r\n        var isDT=cur==='DT';var tR=document.getElementById('tab-ret');\r\n        if(tR)tR.style.display=isDT?'':'none';\r\n        if(!isDT&&docType==='Retenue'){docType='Facture';document.querySelectorAll('.si-tab').forEach(function(t){t.classList.toggle('on',t.dataset.t==='Facture');});showSec('Facture');}\r\n        recalc();recR();\r\n    });\r\n    document.querySelectorAll('.si-tab').forEach(function(t){t.addEventListener('click',function(){\r\n        document.querySelectorAll('.si-tab').forEach(function(x){x.classList.remove('on');});this.classList.add('on');\r\n        docType=this.dataset.t;showSec(docType);\r\n        var ri=document.getElementById('i-ref');\r\n        if(docType==='Devis')ri.value=ri.value.replace('FAC','DEV');\r\n        else if(docType==='Facture')ri.value=ri.value.replace('DEV','FAC').replace('RET','FAC');\r\n        else if(docType==='Retenue')ri.value=ri.value.replace('FAC','RET');\r\n        recalc();recR();\r\n    });});\r\n    if(cur!=='DT'){var tR=document.getElementById('tab-ret');if(tR)tR.style.display='none';}\r\n    document.getElementById('b-timbre').addEventListener('click',function(){timbreOn=!timbreOn;var btn=document.getElementById('b-timbre');var row=document.getElementById('r-timbre');if(timbreOn){btn.classList.add('on');btn.innerHTML=I.stamp+' Timbre activ\\u00e9 \\u2713';row.classList.add('show');}else{btn.classList.remove('on');btn.innerHTML=I.stamp+' Timbre fiscal ('+fmt(TIMBRE)+')';row.classList.remove('show');}recalc();});\r\n    document.getElementById('b-acf').addEventListener('click',function(){aCF('i-cx');});\r\n    document.getElementById('b-adf').addEventListener('click',function(){aCF('i-dx');});\r\n    var li=document.getElementById('si-linput'),lz=document.getElementById('si-lzone'),lim=document.getElementById('si-limg');\r\n    li.addEventListener('change',function(e){var f=e.target.files[0];if(f){var r=new FileReader();r.onload=function(ev){logoData=ev.target.result;lim.src=logoData;lz.classList.add('has-logo');};r.readAsDataURL(f);}});\r\n    document.getElementById('si-lrm').addEventListener('click',function(e){e.preventDefault();e.stopPropagation();logoData=null;lim.src='';lz.classList.remove('has-logo');li.value='';});\r\n    document.getElementById('si-lchg').addEventListener('click',function(e){e.preventDefault();e.stopPropagation();li.click();});\r\n    document.getElementById('b-reset').addEventListener('click',function(){if(confirm('R\\u00e9initialiser ?')){localStorage.removeItem(ST);build();}});\r\n    document.getElementById('b-save').addEventListener('click',saveData);\r\n    document.getElementById('b-load').addEventListener('click',loadData);\r\n    document.getElementById('b-pdf').addEventListener('click',genPDF);\r\n    var ns=document.getElementById('i-rnat');if(ns)ns.addEventListener('change',function(){var cr=document.getElementById('r-cr');if(cr)cr.style.display=this.value==='custom'?'flex':'none';recR();});\r\n    var cr=document.getElementById('i-rcr');if(cr)cr.addEventListener('input',recR);\r\n    var rb=document.getElementById('i-rbr'),rt2=document.getElementById('i-rtv');\r\n    if(rb){rb.addEventListener('input',recR);rb.addEventListener('blur',function(){this.value=pN(this.value).toFixed(3);recR();});}\r\n    if(rt2){rt2.addEventListener('input',recR);rt2.addEventListener('blur',function(){this.value=pN(this.value).toFixed(3);recR();});}\r\n}\r\n\r\nfunction showSec(t){var f=document.getElementById('sec-f'),r=document.getElementById('sec-r');if(t==='Retenue'){if(f)f.style.display='none';if(r)r.style.display='';}else{if(f)f.style.display='';if(r)r.style.display='none';}}\r\nfunction aCF(id){var c=document.getElementById(id);var w=document.createElement('div');w.className='si-field-wrap';w.innerHTML='<button class=\"si-field-rm\">&times;<\/button><div class=\"si-field\"><input type=\"text\" placeholder=\"Libell\\u00e9\" style=\"font-weight:700;font-size:10px;text-transform:uppercase;color:var(--si-text-3);background:transparent;padding:0;border-radius:0;border-bottom:1.5px dashed var(--si-border)\"><input type=\"text\" placeholder=\"Valeur\"><\/div>';c.appendChild(w);w.querySelector('.si-field-rm').addEventListener('click',function(){w.remove();});}\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   PDF \u2014 html2pdf.js DYNAMIQUE + TEMPLATE DOM ATTACH\u00c9\r\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nfunction loadH2P(){\r\n    return new Promise(function(ok,fail){\r\n        if(window.html2pdf)return ok();\r\n        var s=document.createElement('script');\r\n        s.src='https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2pdf.js\/0.10.2\/html2pdf.bundle.min.js';\r\n        s.onload=ok;s.onerror=fail;\r\n        document.head.appendChild(s);\r\n    });\r\n}\r\n\r\nfunction buildInvoiceTemplate(){\r\n    var c=CUR[cur]||CUR.DT;\r\n    var dt2=document.querySelector('.si-tab.on')?document.querySelector('.si-tab.on').dataset.t:'Facture';\r\n    var isD=dt2==='Devis';var ac=isD?'#0288d1':'#ff6b2c';\r\n    var ref=document.getElementById('i-ref').value;\r\n    var cn=document.getElementById('i-cn').value||'\\u2014';\r\n    var mf=document.getElementById('i-mf').value;\r\n    var ca=document.getElementById('i-ca').value;\r\n    var dc=document.getElementById('i-dc').value;\r\n    var dd=document.getElementById('i-dd').value;\r\n    var notes=document.getElementById('i-notes').value;\r\n    var ciHTML=document.getElementById('i-ci').innerHTML;\r\n    var bank=document.getElementById('i-bank').value;\r\n    var rib=document.getElementById('i-rib').value;\r\n    var iban=document.getElementById('i-iban').value;\r\n\r\n    var cf='';document.querySelectorAll('#i-cx .si-field-wrap').forEach(function(w){var l=w.querySelector('label')?w.querySelector('label').textContent:'';var v=w.querySelector('input')?w.querySelector('input').value:'';if(v)cf+='<div style=\"font-size:10px;color:#666;margin-top:2px\"><span style=\"color:#999;font-size:9px;text-transform:uppercase;letter-spacing:.06em\">'+l+':<\/span> '+v+'<\/div>';});\r\n    var df='';document.querySelectorAll('#i-dx .si-field-wrap').forEach(function(w){var l=w.querySelector('label')?w.querySelector('label').textContent:'';var v=w.querySelector('input')?w.querySelector('input').value:'';if(v)df+='<span style=\"margin-right:20px\"><span style=\"color:#999;font-size:9px;text-transform:uppercase;letter-spacing:.06em\">'+l+':<\/span> <strong>'+v+'<\/strong><\/span>';});\r\n\r\n    var rows='';var ri=0;\r\n    document.querySelectorAll('#si-tb tr').forEach(function(r){\r\n        var tds=r.children;if(tds.length<6)return;\r\n        var bg=ri%2===1?'background:#fafaf8;':'';\r\n        var sel=tds[4].querySelector('select');var tl=sel?sel.options[sel.selectedIndex].text:'19%';\r\n        rows+='<tr style=\"'+bg+'border-bottom:1px solid #eee\"><td style=\"padding:10px 14px;font-size:11px;color:#555\">'+tds[0].textContent.trim()+'<\/td><td style=\"padding:10px 14px;font-size:11px;font-weight:600\">'+tds[1].textContent.trim()+'<\/td><td style=\"padding:10px 14px;text-align:right;font-size:11px;font-family:monospace\">'+tds[2].textContent.trim()+'<\/td><td style=\"padding:10px 14px;text-align:right;font-size:11px;font-family:monospace\">'+tds[3].textContent.trim()+'<\/td><td style=\"padding:10px 14px;text-align:center;font-size:10px;color:#888\">'+tl.split('\\u2014')[0].trim()+'<\/td><td style=\"padding:10px 14px;text-align:right;font-size:11px;font-weight:700;font-family:monospace\">'+tds[5].textContent.trim()+'<\/td><\/tr>';ri++;\r\n    });\r\n\r\n    var totHT=document.getElementById('v-ht').textContent;\r\n    var totTVA=document.getElementById('v-tva').textContent;\r\n    var totTTC=document.getElementById('v-ttc').textContent;\r\n    var tvaR='';document.querySelectorAll('#si-tva-tb tr').forEach(function(r){var tds=r.children;tvaR+='<div style=\"display:flex;justify-content:space-between;padding:6px 0;font-size:10px;border-bottom:1px solid #f0f0f0\"><span style=\"color:#888\">'+tds[0].textContent+'<\/span><span style=\"font-family:monospace;font-weight:600\">'+tds[1].textContent.trim()+' \\u2192 '+tds[2].textContent.trim()+'<\/span><\/div>';});\r\n    var timbreH='';if(timbreOn)timbreH='<div style=\"display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #eee;font-size:11px\"><span style=\"color:#f59e0b;font-weight:600\">Timbre fiscal<\/span><span style=\"font-weight:700;color:#f59e0b;font-family:monospace\">'+fmt(TIMBRE)+'<\/span><\/div>';\r\n    var logoH='';if(logoData)logoH='<img decoding=\"async\" src=\"'+logoData+'\" style=\"max-height:55px;max-width:180px;object-fit:contain;display:block;margin-bottom:12px\"\/>';\r\n    var ciL=ciHTML.split(\/<br\\s*\\\/?>\/i);var coN=ciL[0]||'';var coD=ciL.slice(1).join('<br>');\r\n    var bankH='';if(bank)bankH+='<div><strong style=\"color:#555\">Banque :<\/strong> '+bank+'<\/div>';if(rib)bankH+='<div><strong style=\"color:#555\">RIB :<\/strong> '+rib+'<\/div>';if(iban)bankH+='<div><strong style=\"color:#555\">IBAN :<\/strong> '+iban+'<\/div>';if(!bank&&!rib&&!iban)bankH='<span style=\"color:#ccc\">\\u2014<\/span>';\r\n\r\n    var div=document.createElement('div');\r\n    div.innerHTML='<div style=\"width:794px;min-height:1123px;padding:48px 56px;background:#fff;font-family:Arial,Helvetica Neue,sans-serif;color:#1a1a1a;font-size:11px;line-height:1.5;box-sizing:border-box;position:relative\">'\r\n    +'<div style=\"display:flex;justify-content:space-between;align-items:flex-start;padding-bottom:22px;border-bottom:3px solid '+ac+';margin-bottom:30px\"><div style=\"flex:1\">'+logoH+'<div style=\"font-size:17px;font-weight:800;color:#1a1a1a;margin-bottom:6px;line-height:1.3\">'+coN+'<\/div><div style=\"font-size:10px;color:#777;line-height:1.8\">'+coD+'<\/div><\/div><div style=\"text-align:right;min-width:200px\"><div style=\"font-size:30px;font-weight:900;color:'+ac+';text-transform:uppercase;letter-spacing:.06em;line-height:1\">'+dt2+'<\/div><div style=\"margin-top:16px;font-size:11px;color:#555;line-height:2.2\"><div><span style=\"color:#aaa;font-size:9px;text-transform:uppercase;letter-spacing:.08em;display:inline-block;width:80px\">N\\u00b0<\/span><strong style=\"font-family:monospace\">'+ref+'<\/strong><\/div><div><span style=\"color:#aaa;font-size:9px;text-transform:uppercase;letter-spacing:.08em;display:inline-block;width:80px\">\\u00c9mission<\/span><strong>'+dc+'<\/strong><\/div><div><span style=\"color:#aaa;font-size:9px;text-transform:uppercase;letter-spacing:.08em;display:inline-block;width:80px\">\\u00c9ch\\u00e9ance<\/span><strong>'+dd+'<\/strong><\/div>'+(df?'<div style=\"margin-top:4px\">'+df+'<\/div>':'')+'<\/div><\/div><\/div>'\r\n    +'<div style=\"background:#f9f9f7;border-left:4px solid '+ac+';padding:16px 20px;border-radius:0 8px 8px 0;margin-bottom:30px\"><div style=\"font-size:9px;font-weight:700;color:#aaa;text-transform:uppercase;letter-spacing:.12em;margin-bottom:8px\">Destinataire<\/div><div style=\"font-size:15px;font-weight:700;color:#1a1a1a;margin-bottom:3px\">'+cn+'<\/div>'+(mf?'<div style=\"font-size:10px;color:#888;margin-bottom:2px\"><span style=\"text-transform:uppercase;font-size:8px;letter-spacing:.06em;color:#aaa\">MF:<\/span> '+mf+'<\/div>':'')+'<div style=\"font-size:11px;color:#666\">'+(ca||'\\u2014')+'<\/div>'+cf+'<\/div>'\r\n    +'<table style=\"width:100%;border-collapse:collapse;margin-bottom:30px\"><thead><tr><th style=\"background:#1a1a1a;color:#fff;padding:12px 14px;text-align:left;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;border-radius:6px 0 0 0\">R\\u00e9f.<\/th><th style=\"background:#1a1a1a;color:#fff;padding:12px 14px;text-align:left;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em\">D\\u00e9signation<\/th><th style=\"background:#1a1a1a;color:#fff;padding:12px 14px;text-align:right;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em\">Qt\\u00e9<\/th><th style=\"background:#1a1a1a;color:#fff;padding:12px 14px;text-align:right;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em\">P.U. HT<\/th><th style=\"background:#1a1a1a;color:#fff;padding:12px 14px;text-align:center;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em\">TVA<\/th><th style=\"background:#1a1a1a;color:#fff;padding:12px 14px;text-align:right;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;border-radius:0 6px 0 0\">Total HT<\/th><\/tr><\/thead><tbody>'+rows+'<\/tbody><\/table>'\r\n    +'<div style=\"display:flex;gap:30px;margin-bottom:30px;align-items:flex-start\"><div style=\"flex:1\">'+(tvaR?'<div style=\"font-size:9px;font-weight:700;color:#aaa;text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px\">Ventilation TVA<\/div>'+tvaR:'')+'<\/div><div style=\"width:300px\"><div style=\"display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid #eee;font-size:12px\"><span style=\"color:#888\">Total HT<\/span><span style=\"font-weight:700;font-family:monospace\">'+totHT+'<\/span><\/div><div style=\"display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid #eee;font-size:12px\"><span style=\"color:#888\">Total TVA<\/span><span style=\"font-weight:700;font-family:monospace\">'+totTVA+'<\/span><\/div>'+timbreH+'<div style=\"display:flex;justify-content:space-between;padding:16px 20px;background:rgba(255,107,44,.06);border:2px solid rgba(255,107,44,.2);border-radius:10px;margin-top:12px\"><span style=\"font-size:15px;font-weight:900;color:#1a1a1a;text-transform:uppercase;letter-spacing:.04em\">Net \\u00e0 payer<\/span><span style=\"font-size:20px;font-weight:900;color:'+ac+';font-family:monospace\">'+totTTC+'<\/span><\/div><\/div><\/div>'\r\n    +'<div style=\"border-top:3px solid '+ac+';padding-top:20px;display:flex;gap:30px\"><div style=\"flex:1\"><div style=\"font-size:9px;font-weight:700;color:#1a1a1a;text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px\">Notes<\/div><div style=\"font-size:10px;color:#888;line-height:1.9\">'+(notes||'\\u2014')+'<\/div><\/div><div style=\"flex:1\"><div style=\"font-size:9px;font-weight:700;color:#1a1a1a;text-transform:uppercase;letter-spacing:.1em;margin-bottom:8px\">Coordonn\\u00e9es bancaires<\/div><div style=\"font-size:10px;color:#888;line-height:1.9\">'+bankH+'<\/div><\/div><\/div>'\r\n    +'<div style=\"position:absolute;bottom:30px;left:56px;right:56px;text-align:center;font-size:8px;color:#ccc;letter-spacing:.06em;border-top:1px solid #f0f0f0;padding-top:10px\">'+dt2+' '+ref+' \\u2014 '+dc+' \\u2014 '+c.s+'<\/div><\/div>';\r\n    div.style.cssText='position:fixed;left:-9999px;top:0;z-index:-1';\r\n    document.body.appendChild(div);\r\n    return div;\r\n}\r\n\r\nfunction buildRetenueTemplate(){\r\n    var c=CUR[cur]||CUR.DT;\r\n    var ref=document.getElementById('i-rref').value;\r\n    var date=document.getElementById('i-rd').value;\r\n    var exo=document.getElementById('i-rex').value;\r\n    var fRef=document.getElementById('i-rfr').value;\r\n    var eN=document.getElementById('i-rn').value||'\\u2014';\r\n    var eM=document.getElementById('i-rmf').value||'\\u2014';\r\n    var eA=document.getElementById('i-rad').value||'\\u2014';\r\n    var bN=document.getElementById('i-bn').value||'\\u2014';\r\n    var bM=document.getElementById('i-bmf').value||'\\u2014';\r\n    var bA=document.getElementById('i-bad').value||'\\u2014';\r\n    var bC=document.getElementById('i-bc')?document.getElementById('i-bc').value:'';\r\n    var bR=document.getElementById('i-br')?document.getElementById('i-br').value:'';\r\n    var nS=document.getElementById('i-rnat');\r\n    var nV=nS.value,nL=nS.options[nS.selectedIndex].text,rn;\r\n    if(nV==='custom'){var cr=document.getElementById('i-rcr');rn=cr?parseFloat(cr.value.replace(',','.')):0;}else{rn=parseFloat(nV);}\r\n    if(isNaN(rn))rn=0;\r\n    var br=pN(document.getElementById('i-rbr').value);\r\n    var tv=pN(document.getElementById('i-rtv').value);\r\n    var tt=br+tv,mr=br*rn\/100,nv=Math.max(0,tt-mr);\r\n    var desc=document.getElementById('i-rdesc').value||nL;\r\n    var notes=document.getElementById('i-rnotes').value;\r\n    var ag=document.getElementById('i-ra').value;\r\n    var qu=document.getElementById('i-rq').value;\r\n\r\n    var div=document.createElement('div');\r\n    div.innerHTML='<div style=\"width:794px;min-height:1123px;padding:40px 50px;background:#fff;font-family:Arial,Helvetica Neue,sans-serif;color:#1a1a1a;font-size:11px;line-height:1.5;box-sizing:border-box;position:relative\">'\r\n    +'<div style=\"text-align:center;margin-bottom:24px;padding-bottom:18px;border-bottom:3px double #1a1a1a\"><div style=\"font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:3.5px;color:#666;margin-bottom:5px\">R\\u00e9publique Tunisienne<\/div><div style=\"font-size:16px;font-weight:900;text-transform:uppercase;letter-spacing:1.5px;color:#1a1a1a;margin-bottom:3px\">Certificat de Retenue d\\'Imp\\u00f4t<\/div><div style=\"font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:#444;margin-bottom:12px\">sur le Revenu ou d\\'Imp\\u00f4t sur les Soci\\u00e9t\\u00e9s<\/div><div style=\"width:60%;margin:0 auto;height:1px;background:#ddd;margin-bottom:10px\"><\/div><div style=\"font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:2px;color:#999\">Minist\\u00e8re du Plan et des Finances \\u2014 Direction G\\u00e9n\\u00e9rale du Contr\\u00f4le Fiscal<\/div><\/div>'\r\n    +'<div style=\"display:flex;justify-content:space-between;margin-bottom:18px;font-size:12px\"><div><span style=\"color:#999;font-size:9px;text-transform:uppercase;font-weight:800;letter-spacing:.8px\">Retenue effectu\\u00e9e le<\/span><div style=\"font-weight:700;margin-top:3px;font-size:13px\">'+date+'<\/div><\/div>'+(fRef?'<div><span style=\"color:#999;font-size:9px;text-transform:uppercase;font-weight:800;letter-spacing:.8px\">Facture<\/span><div style=\"font-weight:700;margin-top:3px;font-size:13px\">'+fRef+'<\/div><\/div>':'')+'<div><span style=\"color:#999;font-size:9px;text-transform:uppercase;font-weight:800;letter-spacing:.8px\">Exercice<\/span><div style=\"font-weight:700;margin-top:3px;font-size:13px\">'+exo+'<\/div><\/div><div><span style=\"color:#999;font-size:9px;text-transform:uppercase;font-weight:800;letter-spacing:.8px\">N\\u00b0<\/span><div style=\"font-weight:800;margin-top:3px;font-size:13px;color:#0288d1\">'+ref+'<\/div><\/div><\/div>'\r\n    \/* A *\/\r\n    +'<div style=\"border:2px solid #1a1a1a;border-radius:6px;padding:14px 18px;margin-bottom:14px\"><div style=\"font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:1.5px;margin-bottom:10px;padding-bottom:7px;border-bottom:1.5px solid #e0ddd8\">A. \\u2014 Personne ou Organisme Payeur<\/div><table style=\"width:100%;border-collapse:collapse;font-size:12px\"><tr><td style=\"padding:5px 0;width:45%;vertical-align:top;padding-right:20px\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">Matricule Fiscal<\/div><div style=\"font-weight:700;font-size:13px\">'+eM+'<\/div><\/td><td style=\"padding:5px 0;vertical-align:top\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">D\\u00e9nomination<\/div><div style=\"font-weight:700;font-size:13px\">'+eN+'<\/div><\/td><\/tr><tr><td colspan=\"2\" style=\"padding:5px 0\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">Adresse<\/div><div style=\"font-size:12px\">'+eA+'<\/div><\/td><\/tr><\/table><\/div>'\r\n    \/* B *\/\r\n    +'<div style=\"border:2px solid #1a1a1a;border-radius:6px;padding:14px 18px;margin-bottom:14px\"><div style=\"font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:1.5px;margin-bottom:10px;padding-bottom:7px;border-bottom:1.5px solid #e0ddd8\">B. \\u2014 Retenues Effectu\\u00e9es Sur<\/div><table style=\"width:100%;border-collapse:collapse;font-size:12px\"><thead><tr style=\"background:#f5f5f3\"><th style=\"padding:9px 12px;text-align:left;font-size:9px;font-weight:800;text-transform:uppercase;color:#888;border-bottom:2px solid #e0ddd8\">Nature<\/th><th style=\"padding:9px 12px;text-align:right;font-size:9px;font-weight:800;text-transform:uppercase;color:#888;border-bottom:2px solid #e0ddd8\">Montant Brut<\/th><th style=\"padding:9px 12px;text-align:center;font-size:9px;font-weight:800;text-transform:uppercase;color:#888;border-bottom:2px solid #e0ddd8\">Taux<\/th><th style=\"padding:9px 12px;text-align:right;font-size:9px;font-weight:800;text-transform:uppercase;color:#888;border-bottom:2px solid #e0ddd8\">Montant Retenu<\/th><\/tr><\/thead><tbody><tr><td style=\"padding:10px 12px;border-bottom:1px solid #eee;font-size:11px\">'+desc+'<\/td><td style=\"padding:10px 12px;border-bottom:1px solid #eee;text-align:right;font-family:monospace;font-weight:600\">'+br.toFixed(c.d)+' '+c.s+'<\/td><td style=\"padding:10px 12px;border-bottom:1px solid #eee;text-align:center;font-weight:800;color:#0288d1\">'+rn+'%<\/td><td style=\"padding:10px 12px;border-bottom:1px solid #eee;text-align:right;font-family:monospace;font-weight:800;color:#ef4444\">'+mr.toFixed(c.d)+' '+c.s+'<\/td><\/tr><tr style=\"background:#f5f5f3\"><td style=\"padding:10px 12px;font-size:10px;font-weight:900;text-transform:uppercase\">Total G\\u00e9n\\u00e9ral<\/td><td style=\"padding:10px 12px;text-align:right;font-family:monospace;font-weight:900\">'+br.toFixed(c.d)+' '+c.s+'<\/td><td style=\"padding:10px 12px;text-align:center;font-weight:900\">'+rn+'%<\/td><td style=\"padding:10px 12px;text-align:right;font-family:monospace;font-weight:900;color:#ef4444\">'+mr.toFixed(c.d)+' '+c.s+'<\/td><\/tr><\/tbody><\/table>'\r\n    +'<div style=\"margin-top:14px;padding:12px 16px;background:linear-gradient(135deg,rgba(2,136,209,.05),rgba(2,136,209,.02));border-radius:6px;border:1px solid rgba(2,136,209,.1)\"><div style=\"display:flex;justify-content:space-between;font-size:11px;padding:3px 0;color:#666\"><span>Brut TTC<\/span><span style=\"font-family:monospace;font-weight:600\">'+fmt(tt)+'<\/span><\/div><div style=\"display:flex;justify-content:space-between;font-size:12px;padding:3px 0;color:#ef4444\"><span style=\"font-weight:800\">Retenue ('+rn+'%)<\/span><span style=\"font-family:monospace;font-weight:900;font-size:14px\">'+fmt(mr)+'<\/span><\/div><div style=\"display:flex;justify-content:space-between;font-size:14px;padding:10px 16px;margin-top:8px;background:linear-gradient(135deg,rgba(2,136,209,.08),rgba(2,136,209,.03));border-radius:6px;font-weight:900\"><span>Net vers\\u00e9<\/span><span style=\"font-family:monospace;color:#0288d1;font-size:17px\">'+fmt(nv)+'<\/span><\/div><\/div><\/div>'\r\n    \/* C *\/\r\n    +'<div style=\"border:2px solid #1a1a1a;border-radius:6px;padding:14px 18px;margin-bottom:14px\"><div style=\"font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:1.5px;margin-bottom:10px;padding-bottom:7px;border-bottom:1.5px solid #e0ddd8\">C. \\u2014 B\\u00e9n\\u00e9ficiaire<\/div><table style=\"width:100%;border-collapse:collapse;font-size:12px\">'+(bC?'<tr><td colspan=\"2\" style=\"padding:5px 0\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">N\\u00b0 carte \/ s\\u00e9jour<\/div><div style=\"font-weight:700\">'+bC+'<\/div><\/td><\/tr>':'')+'<tr><td style=\"padding:5px 0;width:45%;vertical-align:top;padding-right:20px\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">Matricule Fiscal<\/div><div style=\"font-weight:700;font-size:13px\">'+bM+'<\/div><\/td><td style=\"padding:5px 0;vertical-align:top\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">Nom \/ Raison sociale<\/div><div style=\"font-weight:700;font-size:13px\">'+bN+'<\/div><\/td><\/tr><tr><td colspan=\"2\" style=\"padding:5px 0\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">Adresse professionnelle<\/div><div style=\"font-size:12px\">'+bA+'<\/div><\/td><\/tr>'+(bR?'<tr><td colspan=\"2\" style=\"padding:5px 0\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:2px\">Adresse de r\\u00e9sidence<\/div><div style=\"font-size:12px\">'+bR+'<\/div><\/td><\/tr>':'')+'<\/table><\/div>'\r\n    +(notes?'<div style=\"margin-bottom:12px;font-size:11px;color:#888;line-height:1.7;padding:10px 14px;background:#f8f7f5;border-radius:6px;border:1px solid #eae8e3\"><span style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#bbb;display:block;margin-bottom:3px\">Observations<\/span>'+notes+'<\/div>':'')\r\n    +(ag||qu?'<div style=\"margin-bottom:12px;font-size:11px;color:#555;line-height:1.8\">'+(ag?'<div><span style=\"color:#aaa;font-size:10px;font-weight:700;text-transform:uppercase\">Agence:<\/span> '+ag+'<\/div>':'')+(qu?'<div><span style=\"color:#aaa;font-size:10px;font-weight:700;text-transform:uppercase\">N\\u00b0 quittance:<\/span> <span style=\"font-family:monospace;font-weight:700\">'+qu+'<\/span><\/div>':'')+'<\/div>':'')\r\n    +'<div style=\"margin-top:14px;padding:12px 16px;border:1.5px solid #e0ddd8;border-radius:6px;font-size:11px;color:#555;line-height:1.8;font-style:italic;background:#faf9f7\">Je soussign\\u00e9(e), certifie exacts les renseignements figurant sur le pr\\u00e9sent certificat et m\\'expose aux sanctions pr\\u00e9vues par la loi pour toute inexactitude.<\/div>'\r\n    +'<div style=\"display:flex;justify-content:space-between;align-items:flex-end;margin-top:24px;padding-top:16px\"><div style=\"font-size:12px\"><strong style=\"text-transform:uppercase\">Tunis<\/strong>, le <strong>'+date+'<\/strong><\/div><div style=\"text-align:center\"><div style=\"font-size:9px;font-weight:800;text-transform:uppercase;color:#aaa;margin-bottom:35px\">Cachet et signature du payeur<\/div><div style=\"width:160px;border-top:1.5px solid #ccc;margin:0 auto;padding-top:4px\"><span style=\"font-size:9px;color:#ccc\">Signature<\/span><\/div><\/div><\/div>'\r\n    +'<div style=\"position:absolute;bottom:24px;left:50px;right:50px;padding-top:10px;border-top:1px solid #eee\"><div style=\"font-size:8px;color:#bbb;text-align:center;line-height:1.5\">(1) Le certificat est d\\u00e9livr\\u00e9 \\u00e0 l\\'occasion de chaque paiement. Pour les op\\u00e9rations r\\u00e9p\\u00e9titives, il peut \\u00eatre d\\u00e9livr\\u00e9 trimestriellement.<\/div><\/div><\/div>';\r\n    div.style.cssText='position:fixed;left:-9999px;top:0;z-index:-1';\r\n    document.body.appendChild(div);\r\n    return div;\r\n}\r\n\r\nfunction genPDF(){\r\n    var ov=document.getElementById('si-pdf-ov');ov.classList.add('on');\r\n    loadH2P().then(function(){\r\n        var container=docType==='Retenue'?buildRetenueTemplate():buildInvoiceTemplate();\r\n        var page=container.firstElementChild;\r\n        var ref=document.getElementById('i-ref').value||'document';\r\n        var fn=(docType.toLowerCase()+'_'+ref.replace(\/\\s+\/g,'_')+'.pdf');\r\n\r\n        html2pdf().set({\r\n            margin:0,\r\n            filename:fn,\r\n            image:{type:'jpeg',quality:0.98},\r\n            html2canvas:{scale:2,useCORS:true,backgroundColor:'#ffffff',logging:false},\r\n            jsPDF:{unit:'px',format:[794,1123],orientation:'portrait',hotfixes:['px_scaling']},\r\n            pagebreak:{mode:['avoid-all','css','legacy']}\r\n        }).from(page).save().then(function(){\r\n            container.remove();ov.classList.remove('on');toast('PDF t\\u00e9l\\u00e9charg\\u00e9 : '+fn);\r\n        }).catch(function(e){\r\n            container.remove();ov.classList.remove('on');toast('Erreur PDF');console.error('[PDF]',e);\r\n        });\r\n    }).catch(function(){ov.classList.remove('on');toast('Impossible de charger la librairie PDF.');});\r\n}\r\n\r\n\/* \u2550\u2550\u2550 SAVE \/ LOAD \u2550\u2550\u2550 *\/\r\nfunction saveData(){\r\n    var rows=[];document.querySelectorAll('#si-tb tr').forEach(function(r){var c=r.children;if(c.length<6)return;rows.push({r:c[0].textContent.trim(),d:c[1].textContent.trim(),q:c[2].textContent.trim(),p:c[3].textContent.trim(),v:c[4].querySelector('select')?c[4].querySelector('select').value:'19'});});\r\n    var s={cur:cur,dt:docType,ref:document.getElementById('i-ref').value,cn:document.getElementById('i-cn').value,mf:document.getElementById('i-mf').value,ca:document.getElementById('i-ca').value,dc:document.getElementById('i-dc').value,dd:document.getElementById('i-dd').value,notes:document.getElementById('i-notes').value,ci:document.getElementById('i-ci').innerHTML,bank:document.getElementById('i-bank').value,rib:document.getElementById('i-rib').value,iban:document.getElementById('i-iban').value,logo:logoData,timbre:timbreOn,rows:rows,\r\n    rn:document.getElementById('i-rn').value,rmf:document.getElementById('i-rmf').value,rad:document.getElementById('i-rad').value,bn:document.getElementById('i-bn').value,bmf:document.getElementById('i-bmf').value,bad:document.getElementById('i-bad').value,bc:document.getElementById('i-bc')?document.getElementById('i-bc').value:'',br2:document.getElementById('i-br')?document.getElementById('i-br').value:'',rd:document.getElementById('i-rd').value,rref:document.getElementById('i-rref').value,rnat:document.getElementById('i-rnat').value,rcr:document.getElementById('i-rcr')?document.getElementById('i-rcr').value:'',rdesc:document.getElementById('i-rdesc').value,rfr:document.getElementById('i-rfr').value,rex:document.getElementById('i-rex').value,rbr:document.getElementById('i-rbr').value,rtv:document.getElementById('i-rtv').value,rnotes:document.getElementById('i-rnotes').value,rsig:document.getElementById('i-rsig').innerHTML,ra:document.getElementById('i-ra').value,rq:document.getElementById('i-rq').value,ts:Date.now()};\r\n    try{localStorage.setItem(ST,JSON.stringify(s));toast('Sauvegard\\u00e9');}catch(e){toast('Erreur sauvegarde');}\r\n}\r\nfunction loadData(){\r\n    var raw=localStorage.getItem(ST);if(!raw){toast('Rien \\u00e0 charger');return;}\r\n    try{var s=JSON.parse(raw);cur=s.cur||'DT';docType=s.dt||'Facture';logoData=s.logo;timbreOn=s.timbre||false;\r\n    document.getElementById('si-curr').value=cur;\r\n    document.querySelectorAll('.si-tab').forEach(function(t){t.classList.toggle('on',t.dataset.t===docType);});showSec(docType);\r\n    var isDT=cur==='DT';var tR=document.getElementById('tab-ret');if(tR)tR.style.display=isDT?'':'none';\r\n    document.getElementById('i-ref').value=s.ref||'';document.getElementById('i-cn').value=s.cn||'';document.getElementById('i-mf').value=s.mf||'';document.getElementById('i-ca').value=s.ca||'';document.getElementById('i-dc').value=s.dc||'';document.getElementById('i-dd').value=s.dd||'';document.getElementById('i-notes').value=s.notes||'';document.getElementById('i-ci').innerHTML=s.ci||'';document.getElementById('i-bank').value=s.bank||'';document.getElementById('i-rib').value=s.rib||'';document.getElementById('i-iban').value=s.iban||'';\r\n    if(logoData){document.getElementById('si-limg').src=logoData;document.getElementById('si-lzone').classList.add('has-logo');}else{document.getElementById('si-lzone').classList.remove('has-logo');}\r\n    var btn=document.getElementById('b-timbre');var row=document.getElementById('r-timbre');\r\n    if(timbreOn){btn.classList.add('on');btn.innerHTML=I.stamp+' Timbre activ\\u00e9 \\u2713';row.classList.add('show');}else{btn.classList.remove('on');btn.innerHTML=I.stamp+' Timbre fiscal ('+fmt(TIMBRE)+')';row.classList.remove('show');}\r\n    var tb=document.getElementById('si-tb');tb.innerHTML='';(s.rows||[]).forEach(function(r){addRow(r);});if(!s.rows||!s.rows.length)addRow();\r\n    document.getElementById('i-rn').value=s.rn||'';document.getElementById('i-rmf').value=s.rmf||'';document.getElementById('i-rad').value=s.rad||'';document.getElementById('i-bn').value=s.bn||'';document.getElementById('i-bmf').value=s.bmf||'';document.getElementById('i-bad').value=s.bad||'';\r\n    if(document.getElementById('i-bc'))document.getElementById('i-bc').value=s.bc||'';if(document.getElementById('i-br'))document.getElementById('i-br').value=s.br2||'';\r\n    document.getElementById('i-rd').value=s.rd||'';document.getElementById('i-rref').value=s.rref||'';document.getElementById('i-rnat').value=s.rnat||'10';\r\n    if(document.getElementById('i-rcr'))document.getElementById('i-rcr').value=s.rcr||'';\r\n    var cr=document.getElementById('r-cr');if(cr)cr.style.display=s.rnat==='custom'?'flex':'none';\r\n    document.getElementById('i-rdesc').value=s.rdesc||'';document.getElementById('i-rfr').value=s.rfr||'';document.getElementById('i-rex').value=s.rex||'';document.getElementById('i-rbr').value=s.rbr||'0';document.getElementById('i-rtv').value=s.rtv||'0';document.getElementById('i-rnotes').value=s.rnotes||'';\r\n    if(document.getElementById('i-rsig'))document.getElementById('i-rsig').innerHTML=s.rsig||'';\r\n    document.getElementById('i-ra').value=s.ra||'';document.getElementById('i-rq').value=s.rq||'';\r\n    recalc();recR();toast('Restaur\\u00e9');}catch(e){toast('Erreur');console.error(e);}\r\n}\r\n\r\nif(document.readyState==='loading')document.addEventListener('DOMContentLoaded',build);else build();\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-11927","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/pages\/11927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/comments?post=11927"}],"version-history":[{"count":57,"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/pages\/11927\/revisions"}],"predecessor-version":[{"id":12005,"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/pages\/11927\/revisions\/12005"}],"wp:attachment":[{"href":"https:\/\/shopini.tn\/ar\/wp-json\/wp\/v2\/media?parent=11927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}