{"id":216,"date":"2026-03-01T10:00:13","date_gmt":"2026-03-01T10:00:13","guid":{"rendered":"https:\/\/linen-trout-345162.hostingersite.com\/?page_id=216"},"modified":"2026-03-04T21:36:39","modified_gmt":"2026-03-04T21:36:39","slug":"calculator","status":"publish","type":"page","link":"https:\/\/optima-labs.net\/en\/calculator\/","title":{"rendered":"Calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"216\" class=\"elementor elementor-216\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"wd-negative-gap elementor-element elementor-element-df895ea e-flex e-con-boxed e-con e-parent\" data-id=\"df895ea\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-6cf8953 e-flex e-con-boxed e-con e-child\" data-id=\"6cf8953\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-e568d1a e-con-full e-flex e-con e-child\" data-id=\"e568d1a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-06d4757 elementor-widget elementor-widget-html\" data-id=\"06d4757\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"optima-calc\">\n    <div class=\"oc-shell\">\n        <header class=\"oc-header\">\n            <h1 class=\"oc-title\">Calculatrice de dosage<\/h1>\n            <p class=\"oc-subtitle\">Calcul precis de la dose en unites pour seringue insuline<\/p>\n        <\/header>\n\n        <div class=\"oc-grid\">\n            <!-- SECTION 1 : Volume seringue -->\n            <section class=\"oc-card oc-card--syringe\">\n                <div class=\"oc-step\">1<\/div>\n                <h2 class=\"oc-q\">Quel est le volume total de votre seringue ?<\/h2>\n                <p class=\"oc-help\">Determine la capacite maximale (1 ml = 100 unites)<\/p>\n                <div class=\"oc-syringe-list\">\n                    <button type=\"button\" class=\"oc-syr is-active\" data-volume=\"0.3\">\n                        <span class=\"oc-syr-vol\">0.3 ml<\/span>\n                        <span class=\"oc-syr-cap\">30 unites max<\/span>\n                    <\/button>\n                    <button type=\"button\" class=\"oc-syr\" data-volume=\"0.5\">\n                        <span class=\"oc-syr-vol\">0.5 ml<\/span>\n                        <span class=\"oc-syr-cap\">50 unites max<\/span>\n                    <\/button>\n                    <button type=\"button\" class=\"oc-syr\" data-volume=\"1.0\">\n                        <span class=\"oc-syr-vol\">1.0 ml<\/span>\n                        <span class=\"oc-syr-cap\">100 unites max<\/span>\n                    <\/button>\n                <\/div>\n            <\/section>\n\n            <!-- COLONNE DROITE : 3 etapes empilees -->\n            <div class=\"oc-right\">\n                <!-- SECTION 2 : Flacon mg -->\n                <section class=\"oc-card oc-card--vial\">\n                    <div class=\"oc-step\">2<\/div>\n                    <div class=\"oc-card-grid\">\n                        <div class=\"oc-img-wrap\">\n                            <img decoding=\"async\" src=\"https:\/\/optima-labs.net\/wp-content\/uploads\/2026\/05\/reta.png\" alt=\"Flacon\" \/>\n                        <\/div>\n                        <div class=\"oc-card-body\">\n                            <h2 class=\"oc-q\">Combien de mg contient le flacon ?<\/h2>\n                            <div class=\"oc-opts\">\n                                <button type=\"button\" class=\"oc-opt\" data-type=\"vial\" data-value=\"5\">5 mg<\/button>\n                                <button type=\"button\" class=\"oc-opt\" data-type=\"vial\" data-value=\"10\">10 mg<\/button>\n                                <button type=\"button\" class=\"oc-opt\" data-type=\"vial\" data-value=\"15\">15 mg<\/button>\n                                <button type=\"button\" class=\"oc-opt oc-opt--other\" data-type=\"vial\" data-value=\"other\">Autre<\/button>\n                            <\/div>\n                            <div class=\"oc-custom\" id=\"oc-vial-custom\">\n                                <input type=\"number\" step=\"0.1\" min=\"0\" id=\"oc-vial-input\" placeholder=\"mg\" \/>\n                                <span>mg<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/section>\n\n                <!-- SECTION 3 : Eau bact -->\n                <section class=\"oc-card oc-card--water\">\n                    <div class=\"oc-step\">3<\/div>\n                    <div class=\"oc-card-grid\">\n                        <div class=\"oc-img-wrap\">\n                            <img decoding=\"async\" src=\"https:\/\/optima-labs.net\/wp-content\/uploads\/2026\/05\/BW.png\" alt=\"Eau bacteriostatique\" \/>\n                        <\/div>\n                        <div class=\"oc-card-body\">\n                            <h2 class=\"oc-q\">Quelle quantite d'eau bacteriostatique faut-il ajouter ?<\/h2>\n                            <div class=\"oc-opts\">\n                                <button type=\"button\" class=\"oc-opt\" data-type=\"water\" data-value=\"1\">1 ml<\/button>\n                                <button type=\"button\" class=\"oc-opt\" data-type=\"water\" data-value=\"2\">2 ml<\/button>\n                                <button type=\"button\" class=\"oc-opt\" data-type=\"water\" data-value=\"3\">3 ml<\/button>\n                                <button type=\"button\" class=\"oc-opt\" data-type=\"water\" data-value=\"5\">5 ml<\/button>\n                                <button type=\"button\" class=\"oc-opt oc-opt--other\" data-type=\"water\" data-value=\"other\">Autre<\/button>\n                            <\/div>\n                            <div class=\"oc-custom\" id=\"oc-water-custom\">\n                                <input type=\"number\" step=\"0.1\" min=\"0\" id=\"oc-water-input\" placeholder=\"ml\" \/>\n                                <span>ml<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/section>\n\n                <!-- SECTION 4 : Dose desiree -->\n                <section class=\"oc-card oc-card--dose\">\n                    <div class=\"oc-step\">4<\/div>\n                    <h2 class=\"oc-q\">Quelle dose souhaitez-vous mesurer ?<\/h2>\n                    <div class=\"oc-opts\">\n                        <button type=\"button\" class=\"oc-opt\" data-type=\"dose\" data-value=\"0.5\">0.5 mg<\/button>\n                        <button type=\"button\" class=\"oc-opt\" data-type=\"dose\" data-value=\"1\">1 mg<\/button>\n                        <button type=\"button\" class=\"oc-opt\" data-type=\"dose\" data-value=\"2\">2 mg<\/button>\n                        <button type=\"button\" class=\"oc-opt\" data-type=\"dose\" data-value=\"3\">3 mg<\/button>\n                        <button type=\"button\" class=\"oc-opt oc-opt--other\" data-type=\"dose\" data-value=\"other\">Autre<\/button>\n                    <\/div>\n                    <div class=\"oc-custom\" id=\"oc-dose-custom\">\n                        <input type=\"number\" step=\"0.1\" min=\"0\" id=\"oc-dose-input\" placeholder=\"mg\" \/>\n                        <span>mg<\/span>\n                    <\/div>\n                <\/section>\n            <\/div>\n        <\/div>\n\n        <!-- SECTION 5 : Resultat -->\n        <section class=\"oc-result\" id=\"oc-result\">\n            <div class=\"oc-result-empty\" id=\"oc-result-empty\">\n                <div class=\"oc-result-icon\">\u25cb<\/div>\n                <p>Selectionnez un flacon, une quantite d'eau et une dose pour voir le resultat.<\/p>\n            <\/div>\n            <div class=\"oc-result-content\" id=\"oc-result-content\" hidden>\n                <div class=\"oc-result-main\">\n                    <div class=\"oc-result-label\">Pour obtenir<\/div>\n                    <div class=\"oc-result-dose\"><span id=\"oc-r-dose\">\u2014<\/span><\/div>\n                    <div class=\"oc-result-label\">tirez la seringue jusqu'a<\/div>\n                    <div class=\"oc-result-units\"><span id=\"oc-r-units\">\u2014<\/span> <small>unites<\/small><\/div>\n                    <div class=\"oc-result-volume\">soit <strong id=\"oc-r-volume\">\u2014<\/strong> ml<\/div>\n                <\/div>\n                \n                <div class=\"oc-result-bar\">\n                    <div class=\"oc-result-bar-track\">\n                        <div class=\"oc-result-bar-fill\" id=\"oc-r-fill\"><\/div>\n                    <\/div>\n                    <div class=\"oc-result-bar-info\">\n                        <span><span id=\"oc-r-percent\">0<\/span>% de la seringue selectionnee<\/span>\n                        <span><span id=\"oc-r-syrcap\">30<\/span> unites max<\/span>\n                    <\/div>\n                <\/div>\n\n                <div class=\"oc-warning\" id=\"oc-warning\" hidden>\n                    <span class=\"oc-warning-icon\">\u26a0<\/span>\n                    <span class=\"oc-warning-text\" id=\"oc-warning-text\"><\/span>\n                <\/div>\n\n                <div class=\"oc-detail\">\n                    Concentration : <strong><span id=\"oc-r-conc\">\u2014<\/span> mg\/ml<\/strong>\n                <\/div>\n            <\/div>\n        <\/section>\n    <\/div>\n<\/div>\n\n<script>\n(function() {\n    if (window.__optimaCalcLoaded) return;\n    window.__optimaCalcLoaded = true;\n    \n    var state = {\n        syringeVolume: 0.3,\n        vialMg: null,\n        waterMl: null,\n        doseMg: null\n    };\n\n    function $(sel) { return document.querySelector(sel); }\n    function $$(sel) { return document.querySelectorAll(sel); }\n    \n    \/\/ Selection seringue\n    $$('.optima-calc .oc-syr').forEach(function(btn) {\n        btn.addEventListener('click', function() {\n            $$('.optima-calc .oc-syr').forEach(function(b) { b.classList.remove('is-active'); });\n            btn.classList.add('is-active');\n            state.syringeVolume = parseFloat(btn.dataset.volume);\n            update();\n        });\n    });\n\n    \/\/ Selection options (vial \/ water \/ dose)\n    $$('.optima-calc .oc-opt').forEach(function(btn) {\n        btn.addEventListener('click', function() {\n            var type = btn.dataset.type;\n            var value = btn.dataset.value;\n            \/\/ Deselect siblings\n            btn.parentElement.querySelectorAll('.oc-opt').forEach(function(b) { b.classList.remove('is-active'); });\n            btn.classList.add('is-active');\n            \n            var customBox = $('#oc-' + type + '-custom');\n            var customIn = $('#oc-' + type + '-input');\n            \n            if (value === 'other') {\n                customBox.classList.add('is-open');\n                setTimeout(function() { customIn.focus(); }, 50);\n            } else {\n                customBox.classList.remove('is-open');\n                customIn.value = '';\n                var num = parseFloat(value);\n                if (type === 'vial') state.vialMg = num;\n                else if (type === 'water') state.waterMl = num;\n                else if (type === 'dose') state.doseMg = num;\n                update();\n            }\n        });\n    });\n\n    \/\/ Custom inputs\n    ['vial', 'water', 'dose'].forEach(function(type) {\n        var input = $('#oc-' + type + '-input');\n        input.addEventListener('input', function() {\n            var v = parseFloat(input.value);\n            if (!isNaN(v) && v > 0) {\n                if (type === 'vial') state.vialMg = v;\n                else if (type === 'water') state.waterMl = v;\n                else if (type === 'dose') state.doseMg = v;\n                update();\n            }\n        });\n    });\n\n    function fmt(n, d) {\n        d = (d === undefined) ? 2 : d;\n        if (n === Math.floor(n)) return n.toString();\n        return parseFloat(n.toFixed(d)).toString();\n    }\n\n    function update() {\n        var empty = $('#oc-result-empty');\n        var content = $('#oc-result-content');\n        \n        if (!state.vialMg || !state.waterMl || !state.doseMg) {\n            empty.style.display = '';\n            content.hidden = true;\n            return;\n        }\n        \n        empty.style.display = 'none';\n        content.hidden = false;\n        \n        \/\/ CALCULS\n        var concentration = state.vialMg \/ state.waterMl;        \/\/ mg \/ ml\n        var volumeMl = state.doseMg \/ concentration;             \/\/ ml a tirer\n        var unitsInsulin = volumeMl * 100;                       \/\/ unites sur seringue insuline (1 ml = 100 U)\n        var maxUnits = state.syringeVolume * 100;                \/\/ capacite max selon seringue choisie\n        var percent = (unitsInsulin \/ maxUnits) * 100;\n        \n        \/\/ Affichage\n        $('#oc-r-dose').textContent = fmt(state.doseMg) + ' mg';\n        $('#oc-r-units').textContent = fmt(unitsInsulin, 1);\n        $('#oc-r-volume').textContent = fmt(volumeMl, 3);\n        $('#oc-r-conc').textContent = fmt(concentration, 2);\n        $('#oc-r-percent').textContent = fmt(Math.min(percent, 999), 0);\n        $('#oc-r-syrcap').textContent = fmt(maxUnits, 0);\n        \n        \/\/ Barre de progression (cap a 100% pour la largeur)\n        $('#oc-r-fill').style.width = Math.min(percent, 100) + '%';\n        \n        \/\/ Warning si depasse capacite\n        var warningBox = $('#oc-warning');\n        var warningTxt = $('#oc-warning-text');\n        var resultEl = $('#oc-result');\n        \n        if (unitsInsulin > maxUnits) {\n            warningBox.hidden = false;\n            warningTxt.textContent = 'Cette dose necessite ' + fmt(unitsInsulin, 1) + ' unites. Elle depasse la capacite d\\'une seringue de ' + state.syringeVolume + ' ml (' + maxUnits + ' unites max). Choisissez une seringue plus grande, ou divisez le volume en plusieurs injections.';\n            resultEl.classList.add('is-warning');\n            $('#oc-r-fill').classList.add('is-over');\n        } else {\n            warningBox.hidden = true;\n            resultEl.classList.remove('is-warning');\n            $('#oc-r-fill').classList.remove('is-over');\n        }\n    }\n})();\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\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Dosage Calculator Quel est le volume total de votre seringue ? 0.3 ml 0.5 ml 1.0 ml Combien de mg<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-216","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/pages\/216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/comments?post=216"}],"version-history":[{"count":17,"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/pages\/216\/revisions"}],"predecessor-version":[{"id":1171,"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/pages\/216\/revisions\/1171"}],"wp:attachment":[{"href":"https:\/\/optima-labs.net\/en\/wp-json\/wp\/v2\/media?parent=216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}