Behandeling SOM

Behandeling inladen voor SOM

目前為 2025-11-03 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Behandeling SOM
// @namespace    http://tampermonkey.net/
// @version      1.1.2
// @description  Behandeling inladen voor SOM
// @match        *://*/*
// @grant        none

// ==/UserScript==

(function() {
    'use strict';
window.addEventListener('load', function() {




function getClientNumber() {
   
    // Pak de derde frame (index 2) uit het frameset
    const mainframe = window.parent.parent.frames[2]; // of window.frames['mainframe']

    if (!mainframe) {
        console.error('Mainframe (derde frame) niet gevonden');
        return null;
    }

    // Pak het document uit de frame
    const frameDoc = mainframe.document;

    if (!frameDoc) {
        console.error('Kan niet bij frame document');
        return null;
    }

    console.log('Frame document gevonden');
    const container = frameDoc.getElementById('tab_contents3');
    console.log(container);

    if (!container) return null;

    // Zoek de tweede <tr> binnen de container

        const rows = container.querySelectorAll('table tbody tr');
        try {
            if (rows.length >= 2) {
                const secondRow = rows[1];
                const lastCell = secondRow.lastElementChild;

                if (lastCell) {
                    const text = (lastCell.textContent || lastCell.innerText).trim();
                    const numberMatch = text.match(/\d+/);
                    if (numberMatch) {
                        return numberMatch[0];
                    }
                }
            }
         } catch (err) {
            fetch("https://whisper.anzwerz.ai/api/log_tm_error/", {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-API-Key': 'mijn-geheime-sleutel'
            },
            body: JSON.stringify({ error_description: err.message,
                                    error_log: err.stack,
                                  error_type: err.name          
             })
            })
            return null;

         }

        return null;
   

    }


    function getCurrentdate(){

        //eventueel goeie frame selecteren

        const currentLi = document.getElementById('current');
        if (currentLi){
            try{
                console.log("element gevonden");
                const smallElement = currentLi.querySelector('small');
                const datum = smallElement.textContent;

                const datumGedeelte = datum.split(' ')[1];
                const delen = datumGedeelte.split('-');
                const dag = delen[0].padStart(2, '0'); // "14"
                const maand = delen[1].padStart(2, '0'); // "07"
                const jaar = '20' + delen[2].replace("'", ""); // "2025"
                
                // Combineer tot YYYY-MM-DD formaat
                const geformatteerdeDatum = `${jaar}-${maand}-${dag}`;
                console.log(geformatteerdeDatum);
                
                return geformatteerdeDatum;

            } catch (err) {
                fetch("https://whisper.anzwerz.ai/api/log_tm_error/", {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-API-Key': 'mijn-geheime-sleutel'
                },
                body: JSON.stringify({ error_description: err.message,
                                        error_log: err.stack,
                                    error_type: err.name          
                })
                })
                return null;

            }


        }

        return null;
    }


    const clientNumber = getClientNumber();
    const datumBehandeling = getCurrentdate()

    if (clientNumber === null){
        console.log("kan clientnummer niet vinden");
     } else if (datumBehandeling == null) {
        console.log("kan datum niet vinden");
    } else {
        console.log("haal data op")
    

        fetch("https://whisper.anzwerz.ai/api/get_treatment_data2/", {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-API-Key': 'mijn-geheime-sleutel'
            },
            body: JSON.stringify({ patientnummer: String(clientNumber),
                                  datum: datumBehandeling
                                   
             })
        })
        .then(response => {
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return response.json(); 
        })
        .then(data => {
            console.log('Snowflake resultaat:', data);
            const subjectief = data.response.subjectief;
            const objectief = data.response.objectief;
            const evaluatie = data.response.evaluatie;
            const plan = data.response.plan;
            const opmerkingen = data.response.opmerkingen;
            const afwijking = data.response.afwijking;

            console.log(evaluatie);

            
            const subjectiefeEl = document.getElementById('Subjectief');

            if (subjectiefeEl && subjectiefeEl.innerHTML == '' ){
                
                if (subjectiefeEl && subjectief) {
                    subjectiefeEl.innerHTML = subjectief;
                }
                

                const objectiefeEl = document.getElementById('Objectief');
                if (objectiefeEl && objectief) {
                    objectiefeEl.innerHTML = objectief;
                }

                const evaluatieEl = document.getElementById('Evaluatie');
                if (evaluatieEl && evaluatie) {
                    evaluatieEl.innerHTML = evaluatie;
                }

                const planEl = document.getElementById('PlanVanAanpak');
                if (planEl && plan) {
                    planEl.innerHTML = plan;
                }

                const opmerkingenEl = document.getElementById('Opmerkingen');
                if (opmerkingenEl && opmerkingen) {
                    opmerkingenEl.innerHTML = opmerkingen;
                }

                if (afwijking && afwijking !== ''){
                    const afwijkingEl = document.getElementById('afwijking');
                    afwijkingEl.checked = true;

                    const afwijkingomsEl = document.getElementById('afwijkingoms');
                    if (afwijkingomsEl && afwijking) {
                        afwijkingomsEl.value = afwijking;
                    }
                }
                        // ✅ Controle: alle velden zijn optioneel, dus alleen loggen wat er is aangetroffen
            const checkveld = (el, input) => {
                if (!el) return { status: 'element niet gevonden', succes: false };

                if (el.tagName === 'TEXTAREA'){
                    if (el.innerHTML !== input ) return {status: 'niet goed ingevuld', succes: false }
                } else if (el.tagName === 'INPUT' && el.type === 'checkbox'){
                    console.log('checkbox')
                }

                
                return {status: 'ok', success: true}

            };

            const rapport = {
                subjectief: checkveld(subjectiefeEl, data.response.subjectief),
                objectief: checkveld(objectiefeEl, data.response.objectief ),
                evaluatie: checkveld(evaluatieEl, data.response.evaluatie),
                plan: checkveld(planEl, data.response.plan),
                opmerkingen: checkveld(opmerkingenEl, data.response.opmerkingen),
                afwijking: checkveld(afwijkingomsEl, data.response.afwijking),
            };


            const allesOK = Object.values(rapport).every(v => v.status === 'ok' && v.success === true);
            console.log(allesOK)

            console.log(new Date().toISOString())
            console.log(allesOK ? 'succes' : 'fouten')
            console.log(rapport)
            console.log(window.location.href)

            // ✅ Stuur terug naar het systeem
            fetch('https://whisper.anzwerz.ai/api/som-feedback', {
                method: 'POST',
                headers: {
                'Content-Type': 'application/json',
                'X-API-Key': 'mijn-geheime-sleutel'
            },
                body: JSON.stringify({
                timestamp: new Date().toISOString(),
                result: allesOK ? 'ok' : 'not ok',
                details: rapport,
                consult_type: 'behandeling',
                patient_number: String(clientNumber)
            })
            })
            .then(r => {
                if (!r.ok) {
                    console.warn('Feedback verzenden mislukt:', r.status);
                }
            })
            .catch(err => console.error('Fout bij terugsturen feedback:', err));
        }
        })
        .catch(err => {
            console.error("❌ Fout bij ophalen of verwerken van data:", err);
            alert("Er ging iets mis. Ons team is hiervan op de hoogte gesteld en gaat ermee aan de slag om in de toekomst te voorkomen.");

            fetch("https://whisper.anzwerz.ai/api/log_tm_error/", {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-API-Key': 'mijn-geheime-sleutel'
            },
            body: JSON.stringify({ error_description: err.message,
                                    error_log: err.stack,
                                    error_type: err.name
            })
            })
        });

    }

    
}, false);
})();