{"id":23756,"date":"2025-12-28T00:36:48","date_gmt":"2025-12-28T00:36:48","guid":{"rendered":"https:\/\/ctavi.com\/?page_id=23756"},"modified":"2025-12-28T00:36:49","modified_gmt":"2025-12-28T00:36:49","slug":"calmed","status":"publish","type":"page","link":"https:\/\/ctavi.com\/en_ca\/calmed\/","title":{"rendered":"CalMed"},"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.0\">\n    <title>Outil Infirmier Complet &#8211; Doses, Conversions, BSA &#038; Plus<\/title>\n    <style>\n        body {\n            font-family: 'Segoe UI', Arial, sans-serif;\n            max-width: 1000px;\n            margin: 0 auto;\n            padding: 20px;\n            background: #f8fafc;\n            color: #2d3748;\n        }\n        h1 {\n            text-align: center;\n            color: #2c3e50;\n            margin-bottom: 10px;\n        }\n        h2 {\n            color: #2c3e50;\n            border-bottom: 2px solid #3498db;\n            padding-bottom: 8px;\n        }\n        .container {\n            background: white;\n            padding: 30px;\n            border-radius: 12px;\n            box-shadow: 0 6px 20px rgba(0,0,0,0.08);\n            margin-bottom: 30px;\n        }\n        label {\n            display: block;\n            margin-top: 15px;\n            font-weight: 600;\n            color: #4a5568;\n        }\n        input, select {\n            width: 100%;\n            padding: 12px;\n            margin-top: 6px;\n            border: 1px solid #cbd5e0;\n            border-radius: 8px;\n            font-size: 16px;\n            box-sizing: border-box;\n        }\n        button {\n            margin-top: 30px;\n            padding: 14px 24px;\n            background: #3498db;\n            color: white;\n            border: none;\n            border-radius: 8px;\n            font-size: 16px;\n            font-weight: bold;\n            cursor: pointer;\n            transition: background 0.3s;\n        }\n        button:hover {\n            background: #2980b9;\n        }\n        .result {\n            margin-top: 30px;\n            padding: 20px;\n            background: #e6f4ff;\n            border-left: 5px solid #3498db;\n            border-radius: 8px;\n            font-size: 18px;\n            line-height: 1.6;\n        }\n        .hidden {\n            display: none;\n        }\n        nav {\n            text-align: center;\n            margin: 30px 0;\n        }\n        nav button {\n            margin: 8px;\n            padding: 12px 20px;\n            background: #ecf0f1;\n            color: #2c3e50;\n        }\n        nav button.active {\n            background: #3498db;\n            color: white;\n        }\n        .note {\n            font-size: 0.9em;\n            color: #718096;\n            font-style: italic;\n            margin-top: 5px;\n        }\n        .grid-2 {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 20px;\n        }\n        @media (max-width: 768px) {\n            .grid-2 {\n                grid-template-columns: 1fr;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <h1>Outil Infirmier Professionnel<\/h1>\n    <p style=\"text-align:center; color:#718096;\">Calculateur de doses \u2022 Conversions \u2022 Surface corporelle \u2022 Clairance cr\u00e9atinine<\/p>\n\n    <nav>\n        <button class=\"active\" onclick=\"showSection('doses')\">Doses<\/button>\n        <button onclick=\"showSection('conversions')\">Conversions<\/button>\n        <button onclick=\"showSection('bsa')\">BSA<\/button>\n        <button onclick=\"showSection('clairance')\">Clairance Cr\u00e9at.<\/button>\n    <\/nav>\n\n    <!-- 1. Calculateur de Doses -->\n    <div id=\"doses\" class=\"container\">\n        <h2>Calculateur de Doses M\u00e9dicamenteuses<\/h2>\n        <label for=\"typeDose\">Type d&rsquo;administration :<\/label>\n        <select id=\"typeDose\">\n            <option value=\"\">S\u00e9lectionnez&#8230;<\/option>\n            <option value=\"pilule\">Pilule \/ Comprim\u00e9<\/option>\n            <option value=\"liquide\">Solution liquide orale<\/option>\n            <option value=\"iv\">Perfusion IV<\/option>\n            <option value=\"bsaDose\">Dose selon BSA (mg\/m\u00b2)<\/option>\n        <\/select>\n\n        <div id=\"piluleFields\" class=\"hidden\">\n            <label>Dose prescrite (mg) :<\/label>\n            <input type=\"number\" id=\"dosePilule\" step=\"0.01\" placeholder=\"ex: 500\">\n            <label>Force du comprim\u00e9 (mg par unit\u00e9) :<\/label>\n            <input type=\"number\" id=\"forcePilule\" step=\"0.01\" placeholder=\"ex: 250\">\n        <\/div>\n\n        <div id=\"liquideFields\" class=\"hidden\">\n            <label>Dose prescrite (mg) :<\/label>\n            <input type=\"number\" id=\"doseLiquide\" step=\"0.01\">\n            <label>Concentration (mg\/ml) :<\/label>\n            <input type=\"number\" id=\"concLiquide\" step=\"0.01\" placeholder=\"ex: 20\">\n        <\/div>\n\n        <div id=\"ivFields\" class=\"hidden\">\n            <label>Volume total \u00e0 perfuser (ml) :<\/label>\n            <input type=\"number\" id=\"volIV\" step=\"0.1\" placeholder=\"ex: 1000\">\n            <label>Dur\u00e9e de perfusion (heures) :<\/label>\n            <input type=\"number\" id=\"dureeIV\" step=\"0.1\" placeholder=\"ex: 8\">\n            <label>Facteur de goutte :<\/label>\n            <select id=\"facteurIV\">\n                <option value=\"20\">20 gouttes\/ml (macro)<\/option>\n                <option value=\"60\">60 gouttes\/ml (micro)<\/option>\n            <\/select>\n        <\/div>\n\n        <div id=\"bsaDoseFields\" class=\"hidden\">\n            <label>Dose prescrite (mg\/m\u00b2) :<\/label>\n            <input type=\"number\" id=\"doseParM2\" step=\"0.01\" placeholder=\"ex: 50\">\n            <label>Surface corporelle (m\u00b2) :<\/label>\n            <input type=\"number\" id=\"bsaInput\" step=\"0.01\" placeholder=\"ex: 1.8 (ou calculer dans l'onglet BSA)\">\n        <\/div>\n\n        <button type=\"button\" onclick=\"calculerDose()\">Calculer<\/button>\n        <div id=\"resultDoses\" class=\"result\"><\/div>\n    <\/div>\n\n    <!-- 2. Convertisseur d'Unit\u00e9s -->\n    <div id=\"conversions\" class=\"container hidden\">\n        <h2>Convertisseur d&rsquo;Unit\u00e9s M\u00e9dicales<\/h2>\n        <label for=\"convertType\">Type de conversion :<\/label>\n        <select id=\"convertType\" onchange=\"majChampsConversion()\">\n            <option value=\"\">Choisissez&#8230;<\/option>\n            <option value=\"masse\">Masse (g \u2194 mg \u2194 \u00b5g)<\/option>\n            <option value=\"volume\">Volume (L \u2194 ml \u2194 \u00b5l)<\/option>\n            <option value=\"concentration\">Concentration (mg\/ml \u2194 \u00b5g\/ml \u2194 %)<\/option>\n            <option value=\"debit\">D\u00e9bit IV (ml\/h \u2194 gouttes\/min)<\/option>\n            <option value=\"temperature\">Temp\u00e9rature (\u00b0C \u2194 \u00b0F)<\/option>\n            <option value=\"poids\">Poids (kg \u2194 lbs)<\/option>\n        <\/select>\n\n        <div id=\"convertFields\"><\/div>\n        <button type=\"button\" onclick=\"convertir()\">Convertir<\/button>\n        <div id=\"resultConvert\" class=\"result\"><\/div>\n    <\/div>\n\n    <!-- 3. Surface Corporelle (BSA) -->\n    <div id=\"bsa\" class=\"container hidden\">\n        <h2>Calculateur de Surface Corporelle (BSA)<\/h2>\n        <div class=\"grid-2\">\n            <div>\n                <label>Poids (kg) :<\/label>\n                <input type=\"number\" id=\"poidsBSA\" step=\"0.1\" placeholder=\"ex: 70\">\n            <\/div>\n            <div>\n                <label>Taille (cm) :<\/label>\n                <input type=\"number\" id=\"tailleBSA\" step=\"0.1\" placeholder=\"ex: 170\">\n            <\/div>\n        <\/div>\n\n        <label>Formule :<\/label>\n        <select id=\"formuleBSA\">\n            <option value=\"mosteller\">Mosteller (recommand\u00e9e)<\/option>\n            <option value=\"dubois\">Du Bois<\/option>\n            <option value=\"haycock\">Haycock (p\u00e9diatrie)<\/option>\n        <\/select>\n\n        <button type=\"button\" onclick=\"calculerBSA()\">Calculer la BSA<\/button>\n        <div id=\"resultBSA\" class=\"result\"><\/div>\n    <\/div>\n\n    <!-- 4. Clairance Cr\u00e9atinine (Cockcroft-Gault) -->\n    <div id=\"clairance\" class=\"container hidden\">\n        <h2>Estimation de la Clairance de la Cr\u00e9atinine (Cockcroft-Gault)<\/h2>\n        <div class=\"grid-2\">\n            <div>\n                <label>\u00c2ge (ann\u00e9es) :<\/label>\n                <input type=\"number\" id=\"ageClr\" min=\"18\" placeholder=\"ex: 65\">\n            <\/div>\n            <div>\n                <label>Poids (kg) :<\/label>\n                <input type=\"number\" id=\"poidsClr\" step=\"0.1\" placeholder=\"ex: 70\">\n            <\/div>\n        <\/div>\n        <div class=\"grid-2\">\n            <div>\n                <label>Cr\u00e9atinin\u00e9mie (\u00b5mol\/L) :<\/label>\n                <input type=\"number\" id=\"creatinine\" step=\"0.1\" placeholder=\"ex: 90\">\n                <p class=\"note\">ou en mg\/dL \u2192 convertir avant (1 mg\/dL = 88.4 \u00b5mol\/L)<\/p>\n            <\/div>\n            <div>\n                <label>Sexe :<\/label>\n                <select id=\"sexeClr\">\n                    <option value=\"homme\">Homme<\/option>\n                    <option value=\"femme\">Femme<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n\n        <button type=\"button\" onclick=\"calculerClairance()\">Calculer<\/button>\n        <div id=\"resultClairance\" class=\"result\"><\/div>\n    <\/div>\n\n    <script>\n        \/\/ Navigation\n        function showSection(section) {\n            document.querySelectorAll('.container').forEach(c => c.classList.add('hidden'));\n            document.getElementById(section).classList.remove('hidden');\n            document.querySelectorAll('nav button').forEach(b => b.classList.remove('active'));\n            document.querySelector(`nav button[onclick=\"showSection('${section}')\"]`).classList.add('active');\n        }\n\n        \/\/ 1. Calculateur de doses\n        document.getElementById('typeDose').addEventListener('change', function() {\n            document.querySelectorAll('#piluleFields, #liquideFields, #ivFields, #bsaDoseFields').forEach(el => el.classList.add('hidden'));\n            if (this.value === 'pilule') document.getElementById('piluleFields').classList.remove('hidden');\n            if (this.value === 'liquide') document.getElementById('liquideFields').classList.remove('hidden');\n            if (this.value === 'iv') document.getElementById('ivFields').classList.remove('hidden');\n            if (this.value === 'bsaDose') document.getElementById('bsaDoseFields').classList.remove('hidden');\n        });\n\n        function calculerDose() {\n            const type = document.getElementById('typeDose').value;\n            let result = '';\n\n            if (type === 'pilule') {\n                const dose = parseFloat(document.getElementById('dosePilule').value);\n                const force = parseFloat(document.getElementById('forcePilule').value);\n                if (isNaN(dose) || isNaN(force) || force <= 0) return afficherResult('resultDoses', 'Valeurs invalides', 'red');\n                result = `Administrer <strong>${(dose \/ force).toFixed(2)}<\/strong> comprim\u00e9(s)`;\n            } else if (type === 'liquide') {\n                const dose = parseFloat(document.getElementById('doseLiquide').value);\n                const conc = parseFloat(document.getElementById('concLiquide').value);\n                if (isNaN(dose) || isNaN(conc) || conc <= 0) return afficherResult('resultDoses', 'Valeurs invalides', 'red');\n                result = `Volume \u00e0 administrer : <strong>${(dose \/ conc).toFixed(2)} ml<\/strong>`;\n            } else if (type === 'iv') {\n                const vol = parseFloat(document.getElementById('volIV').value);\n                const dur = parseFloat(document.getElementById('dureeIV').value);\n                const fact = parseFloat(document.getElementById('facteurIV').value);\n                if (isNaN(vol) || isNaN(dur) || vol <= 0 || dur <= 0) return afficherResult('resultDoses', 'Valeurs invalides', 'red');\n                const mlh = vol \/ dur;\n                const gttmin = (mlh * fact) \/ 60;\n                result = `D\u00e9bit pompe : <strong>${mlh.toFixed(1)} ml\/h<\/strong><br>\n                          D\u00e9bit manuel : <strong>${Math.round(gttmin)} gouttes\/min<\/strong> (${fact} gtt\/ml)`;\n            } else if (type === 'bsaDose') {\n                const doseM2 = parseFloat(document.getElementById('doseParM2').value);\n                const bsa = parseFloat(document.getElementById('bsaInput').value);\n                if (isNaN(doseM2) || isNaN(bsa) || bsa <= 0) return afficherResult('resultDoses', 'Valeurs invalides', 'red');\n                result = `Dose totale \u00e0 administrer : <strong>${(doseM2 * bsa).toFixed(1)} mg<\/strong><br>\n                          (pour une BSA de ${bsa} m\u00b2)`;\n            } else {\n                return afficherResult('resultDoses', 'Veuillez s\u00e9lectionner un type', 'red');\n            }\n            afficherResult('resultDoses', result);\n        }\n\n        \/\/ 2. Conversions\n        function majChampsConversion() {\n            const type = document.getElementById('convertType').value;\n            const champs = document.getElementById('convertFields');\n            champs.innerHTML = '';\n\n            if (!type) return;\n\n            let html = '<label>Valeur :<\/label><input type=\"number\" id=\"valConv\" step=\"any\">';\n\n            if (['masse', 'volume', 'concentration'].includes(type)) {\n                html += '<label>De :<\/label><select id=\"fromUnit\"><\/select>';\n                html += '<label>Vers :<\/label><select id=\"toUnit\"><\/select>';\n            } else if (type === 'debit') {\n                html += '<label>De :<\/label><select id=\"fromDebit\"><option value=\"mlh\">ml\/h<\/option><option value=\"gttmin\">gouttes\/min<\/option><\/select>';\n                html += '<label>Facteur goutte :<\/label><select id=\"facteurConv\"><option value=\"20\">20<\/option><option value=\"60\">60<\/option><\/select>';\n            }\n\n            \/\/ Remplir les unit\u00e9s\n            if (type === 'masse') {\n                ['g', 'mg', '\u00b5g'].forEach(u => {\n                    document.getElementById('fromUnit').innerHTML += `<option value=\"${u}\">${u}<\/option>`;\n                    document.getElementById('toUnit').innerHTML += `<option value=\"${u}\">${u}<\/option>`;\n                });\n            } else if (type === 'volume') {\n                ['L', 'ml', '\u00b5l'].forEach(u => {\n                    document.getElementById('fromUnit').innerHTML += `<option value=\"${u}\">${u}<\/option>`;\n                    document.getElementById('toUnit').innerHTML += `<option value=\"${u}\">${u}<\/option>`;\n                });\n            } else if (type === 'concentration') {\n                ['mg\/ml', '\u00b5g\/ml', '%'].forEach(u => {\n                    document.getElementById('fromUnit').innerHTML += `<option value=\"${u}\">${u}<\/option>`;\n                    document.getElementById('toUnit').innerHTML += `<option value=\"${u}\">${u}<\/option>`;\n                });\n            }\n\n            champs.innerHTML = html;\n        }\n\n        function convertir() {\n            const type = document.getElementById('convertType').value;\n            const val = parseFloat(document.getElementById('valConv')?.value || 0);\n            if (isNaN(val)) return afficherResult('resultConvert', 'Valeur invalide', 'red');\n\n            let result = '';\n            if (type === 'masse') {\n                let mg = val;\n                if (document.getElementById('fromUnit').value === 'g') mg *= 1000;\n                if (document.getElementById('fromUnit').value === '\u00b5g') mg \/= 1000;\n                let res = mg;\n                const to = document.getElementById('toUnit').value;\n                if (to === 'g') res \/= 1000;\n                if (to === '\u00b5g') res *= 1000;\n                result = `<strong>${val} ${document.getElementById('fromUnit').value} = ${res.toFixed(6)} ${to}<\/strong>`;\n            } else if (type === 'volume') {\n                let ml = val;\n                if (document.getElementById('fromUnit').value === 'L') ml *= 1000;\n                if (document.getElementById('fromUnit').value === '\u00b5l') ml \/= 1000;\n                let res = ml;\n                const to = document.getElementById('toUnit').value;\n                if (to === 'L') res \/= 1000;\n                if (to === '\u00b5l') res *= 1000;\n                result = `<strong>${val} ${document.getElementById('fromUnit').value} = ${res.toFixed(6)} ${to}<\/strong>`;\n            } else if (type === 'concentration') {\n                let mgml = val;\n                if (document.getElementById('fromUnit').value === '\u00b5g\/ml') mgml \/= 1000;\n                if (document.getElementById('fromUnit').value === '%') mgml *= 10;\n                let res = mgml;\n                const to = document.getElementById('toUnit').value;\n                if (to === '\u00b5g\/ml') res *= 1000;\n                if (to === '%') res \/= 10;\n                result = `<strong>${val} ${document.getElementById('fromUnit').value} = ${res.toFixed(4)} ${to}<\/strong>`;\n            } else if (type === 'debit') {\n                let mlh = val;\n                const from = document.getElementById('fromDebit').value;\n                const fact = parseFloat(document.getElementById('facteurConv').value);\n                if (from === 'gttmin') mlh = (val * 60) \/ fact;\n                const gtt = (mlh * fact) \/ 60;\n                result = `<strong>${val} ${from} = ${mlh.toFixed(1)} ml\/h<br>= ${Math.round(gtt)} gouttes\/min<\/strong> (facteur ${fact})`;\n            } else if (type === 'temperature') {\n                const c = val;\n                const f = (c * 9\/5) + 32;\n                result = `<strong>${c} \u00b0C = ${f.toFixed(1)} \u00b0F<\/strong>`;\n            } else if (type === 'poids') {\n                const kg = val;\n                const lbs = kg * 2.20462;\n                result = `<strong>${kg} kg = ${lbs.toFixed(2)} lbs<\/strong>`;\n            }\n            afficherResult('resultConvert', result);\n        }\n\n        \/\/ 3. BSA\n        function calculerBSA() {\n            const poids = parseFloat(document.getElementById('poidsBSA').value);\n            const taille = parseFloat(document.getElementById('tailleBSA').value);\n            const formule = document.getElementById('formuleBSA').value;\n\n            if (isNaN(poids) || isNaN(taille) || poids <= 0 || taille <= 0) {\n                return afficherResult('resultBSA', 'Poids et taille requis', 'red');\n            }\n\n            let bsa = 0;\n            let nom = '';\n            if (formule === 'mosteller') {\n                bsa = Math.sqrt((poids * taille) \/ 3600);\n                nom = 'Mosteller';\n            } else if (formule === 'dubois') {\n                bsa = 0.007184 * Math.pow(poids, 0.425) * Math.pow(taille, 0.725);\n                nom = 'Du Bois';\n            } else if (formule === 'haycock') {\n                bsa = 0.024265 * Math.pow(poids, 0.5378) * Math.pow(taille, 0.3964);\n                nom = 'Haycock';\n            }\n\n            afficherResult('resultBSA', `\n                <strong>Surface Corporelle = ${bsa.toFixed(3)} m\u00b2<\/strong><br>\n                Formule : <strong>${nom}<\/strong><br>\n                (Poids: ${poids} kg | Taille: ${taille} cm)\n            `);\n        }\n\n        \/\/ 4. Clairance cr\u00e9atinine\n        function calculerClairance() {\n            const age = parseFloat(document.getElementById('ageClr').value);\n            const poids = parseFloat(document.getElementById('poidsClr').value);\n            const creat = parseFloat(document.getElementById('creatinine').value);\n            const sexe = document.getElementById('sexeClr').value;\n\n            if (isNaN(age) || isNaN(poids) || isNaN(creat) || age < 18 || creat <= 0) {\n                return afficherResult('resultClairance', 'V\u00e9rifiez les valeurs saisies', 'red');\n            }\n\n            let clr = (140 - age) * poids \/ (creat * 0.8136);\n            if (sexe === 'femme') clr *= 0.85;\n\n            let interpretation = '';\n            if (clr > 90) interpretation = 'Fonction r\u00e9nale normale';\n            else if (clr > 60) interpretation = 'Insuffisance r\u00e9nale l\u00e9g\u00e8re';\n            else if (clr > 30) interpretation = 'Insuffisance r\u00e9nale mod\u00e9r\u00e9e';\n            else interpretation = 'Insuffisance r\u00e9nale s\u00e9v\u00e8re';\n\n            afficherResult('resultClairance', `\n                <strong>Clairance estim\u00e9e = ${clr.toFixed(1)} ml\/min<\/strong><br>\n                (${sexe === 'femme' ? 'Femme' : 'Homme'}, ${age} ans, ${poids} kg, cr\u00e9at. ${creat} \u00b5mol\/L)<br><br>\n                <strong>${interpretation}<\/strong>\n            `);\n        }\n\n        \/\/ Fonction utilitaire\n        function afficherResult(id, texte, couleur = '#27ae60') {\n            const div = document.getElementById(id);\n            div.innerHTML = `<div style=\"color:${couleur};\">${texte}<\/div>`;\n            div.style.borderLeftColor = couleur;\n        }\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Outil Infirmier Complet &#8211; Doses, Conversions, BSA &#038; Plus Outil Infirmier Professionnel Calculateur de doses \u2022 Conversions \u2022 Surface corporelle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-23756","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/pages\/23756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/comments?post=23756"}],"version-history":[{"count":1,"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/pages\/23756\/revisions"}],"predecessor-version":[{"id":23757,"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/pages\/23756\/revisions\/23757"}],"wp:attachment":[{"href":"https:\/\/ctavi.com\/en_ca\/wp-json\/wp\/v2\/media?parent=23756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}