Nebenwirkungen Tagebuch

Werkzeug · borderline-forum.eu

Nebenwirkungs-Tagebuch

Halte fest, wie du Medikamente verträgst – als Gedächtnisstütze für dich und als Grundlage für das nächste Gespräch mit deiner Ärztin oder deinem Arzt.

🔒
Bleibt nur bei dir. Alle Einträge werden ausschließlich lokal in diesem Browser gespeichert – nichts wird ans Forum oder an einen Server übertragen. Über „Sichern“ kannst du ein Backup erstellen, z. B. um die Daten auf ein anderes Gerät zu übertragen.
⚕️
Kein medizinischer Rat. Dieses Tool dokumentiert nur deine eigenen Beobachtungen und ersetzt keine ärztliche Beratung. Setze Medikamente niemals eigenständig ab – besprich Veränderungen immer mit deiner behandelnden Fachperson.
🆘
Geht es dir akut schlecht? Telefonseelsorge: 0800 111 0 111 (kostenlos, 24/7) · Notruf 112 · Weitere Anlaufstellen

Was hast du beobachtet?

Je konkreter, desto hilfreicher beim Arztgespräch. Pflichtfelder sind nur Symptom und Schweregrad.

Medikament hinzufügen

Lege die Präparate an, die du beobachten möchtest. So musst du beim Erfassen nur noch auswählen.

Noch keine Medikamente angelegt.
Füge oben dein erstes Präparat hinzu.
'; } else { state.meds.forEach(function(m){ var meta = []; if(m.dose) meta.push(''+escapeHtml(m.dose)+''); if(m.since) meta.push("seit "+fmtDate(m.since)); var el = document.createElement("div"); el.className = "med-item"; el.innerHTML = '
'+escapeHtml(m.name)+'
'+ (meta.length ? '
'+meta.join(" ")+'
' : '')+'
'+ ''; el.querySelector("[data-del]").addEventListener("click", function(){ if(confirm('„'+m.name+'“ entfernen? Bereits erfasste Nebenwirkungen bleiben erhalten.')){ state.meds = state.meds.filter(function(x){return x.id!==m.id;}); save(state); renderMeds(); refreshMedSelects(); toast("Medikament entfernt"); } }); list.appendChild(el); }); } $("cnt-med").textContent = state.meds.length; } $("save-med").addEventListener("click", function(){ var name = $("m-name").value.trim(); if(!name){ toast("Bitte einen Namen eingeben"); $("m-name").focus(); return; } state.meds.push({ id: uid(), name: name, dose: $("m-dose").value.trim(), since: $("m-since").value }); save(state); $("m-name").value=""; $("m-dose").value=""; $("m-since").value=""; renderMeds(); refreshMedSelects(); toast("Medikament hinzugefügt"); $("m-name").focus(); }); // Liefert den Medikamentennamen eines Eintrags – unterstützt freien Text (medName) // und alte Einträge, die noch per medId auf ein Präparat verwiesen haben. function logMedName(l){ if(l.medName) return l.medName; if(l.medId){ var m=state.meds.find(function(x){return x.id===l.medId;}); if(m) return m.name; } return null; } // Liefert die hinterlegte Standard-Dosis eines Präparats anhand des Namens. function medDoseByName(name){ if(!name) return ""; var m = state.meds.find(function(x){ return x.name.toLowerCase() === name.toLowerCase(); }); return m && m.dose ? m.dose : ""; } function refreshMedSelects(){ // Vorschläge fürs Textfeld: angelegte Präparate var dl = $("med-suggestions"); dl.innerHTML = state.meds.map(function(m){ return '' + names.map(function(n){ return ''; }).join(""); filt.value = names.indexOf(curF)>=0 ? curF : ""; } // Komfort: Wenn ein bekanntes Präparat gewählt wird und das mg-Feld noch leer ist, // die hinterlegte Dosis als Vorschlag eintragen (überschreibt nichts Eingetipptes). $("f-med").addEventListener("change", function(){ var d = medDoseByName($("f-med").value.trim()); if(d && !$("f-dose").value.trim()){ $("f-dose").value = d; } }); /* ---------- Schnellauswahl-Chips (Mehrfachauswahl) ---------- */ (function(){ var box = $("quick-chips"); QUICK.forEach(function(q){ var b = document.createElement("button"); b.type="button"; b.className="chip"; b.textContent=q; b.setAttribute("aria-pressed","false"); b.addEventListener("click", function(){ b.setAttribute("aria-pressed", b.getAttribute("aria-pressed")==="true" ? "false" : "true"); }); box.appendChild(b); }); })(); /* ---------- Schweregrad ---------- */ var sevVal = 0; $("sev-pick").querySelectorAll("button").forEach(function(b){ b.addEventListener("click", function(){ sevVal = parseInt(b.getAttribute("data-s"),10); $("sev-pick").querySelectorAll("button").forEach(function(x){ x.setAttribute("aria-pressed", x===b ? "true":"false"); }); }); }); /* ---------- Eintrag speichern ---------- */ function resetLogForm(){ $("f-symptom").value=""; $("f-note").value=""; $("f-time").value=""; $("f-med").value=""; $("f-dose").value=""; sevVal=0; $("sev-pick").querySelectorAll("button").forEach(function(x){x.setAttribute("aria-pressed","false");}); $("quick-chips").querySelectorAll(".chip").forEach(function(c){c.setAttribute("aria-pressed","false");}); $("f-date").value = new Date().toISOString().slice(0,10); } $("reset-log").addEventListener("click", resetLogForm); $("save-log").addEventListener("click", function(){ var symptoms = []; $("quick-chips").querySelectorAll('.chip[aria-pressed="true"]').forEach(function(c){ symptoms.push(c.textContent); }); var free = $("f-symptom").value.trim(); if(free) symptoms.push(free); symptoms = symptoms.filter(function(s,i){ return symptoms.indexOf(s)===i; }); // Duplikate raus if(!symptoms.length){ toast("Bitte mindestens eine Beobachtung wählen oder eingeben"); return; } if(!sevVal){ toast("Bitte Schweregrad wählen"); return; } var med = $("f-med").value.trim() || null; var dose = $("f-dose").value.trim(); var date = $("f-date").value || new Date().toISOString().slice(0,10); var time = $("f-time").value; var note = $("f-note").value.trim(); var now = Date.now(); symptoms.forEach(function(s, idx){ state.logs.push({ id: uid(), medName: med, dose: dose, symptom: s, sev: sevVal, date: date, time: time, note: note, created: now + idx }); }); save(state); resetLogForm(); refreshMedSelects(); renderLogs(); toast(symptoms.length===1 ? "Eintrag gespeichert ✓" : symptoms.length + " Einträge gespeichert ✓"); }); /* ---------- Verlauf ---------- */ function sortedLogs(){ return state.logs.slice().sort(function(a,b){ var da=(a.date||"")+(a.time||""), db=(b.date||"")+(b.time||""); if(da===db) return b.created-a.created; return da'+escapeHtml(mn)+''); else meta.push('unklar / mehrere'); if(l.dose) meta.push(''+escapeHtml(l.dose)+''); var el = document.createElement("div"); el.className="log-item"; el.setAttribute("data-s", l.sev); el.innerHTML = '
'+ '
'+escapeHtml(l.symptom)+''+when+'
'+ '
'+meta.join(" ")+' '+SEV[l.sev]+'
'+ (l.note ? '
'+escapeHtml(l.note)+'
' : '')+ '
'+ ''; el.querySelector("[data-del]").addEventListener("click", function(){ if(confirm("Diesen Eintrag löschen?")){ state.logs = state.logs.filter(function(x){return x.id!==l.id;}); save(state); renderLogs(); toast("Eintrag gelöscht"); } }); list.appendChild(el); }); } $("filter-med").addEventListener("change", renderLogs); /* ---------- Export: CSV ---------- */ $("btn-csv").addEventListener("click", function(){ if(!state.logs.length){ toast("Keine Einträge zum Exportieren"); return; } var rows = [["Datum","Uhrzeit","Medikament","Dosis (mg)","Symptom","Schweregrad","Notiz"]]; sortedLogs().forEach(function(l){ rows.push([fmtDate(l.date), l.time||"", logMedName(l)||"unklar/mehrere", l.dose||"", l.symptom, SEV[l.sev], (l.note||"").replace(/\n/g," ")]); }); var csv = "\uFEFF" + rows.map(function(r){ return r.map(function(c){ return '"'+String(c).replace(/"/g,'""')+'"'; }).join(";"); }).join("\r\n"); download(csv, "nebenwirkungen.csv", "text/csv"); toast("CSV exportiert"); }); /* ---------- Backup / Restore ---------- */ $("btn-backup").addEventListener("click", function(){ download(JSON.stringify(state,null,2), "nebenwirkungen-backup.json", "application/json"); toast("Backup gespeichert"); }); $("btn-restore").addEventListener("click", function(){ $("file-restore").click(); }); $("file-restore").addEventListener("change", function(e){ var file = e.target.files[0]; if(!file) return; var r = new FileReader(); r.onload = function(){ try { var d = JSON.parse(r.result); if(!d || !Array.isArray(d.meds) || !Array.isArray(d.logs)) throw new Error(); if(confirm("Backup einspielen? Die aktuellen Daten in diesem Browser werden ersetzt.")){ state = d; save(state); renderAll(); toast("Daten wiederhergestellt"); } } catch(err){ toast("Datei konnte nicht gelesen werden"); } e.target.value=""; }; r.readAsText(file); }); function download(content, filename, type){ var blob = new Blob([content], {type: type+";charset=utf-8"}); var url = URL.createObjectURL(blob); var a = document.createElement("a"); a.href=url; a.download=filename; document.body.appendChild(a); a.click(); document.body.removeChild(a); setTimeout(function(){URL.revokeObjectURL(url);}, 1000); } /* ---------- Druck: Arzt-Übersicht in separatem, sauberem Fenster ---------- Damit landen weder Forum-Header noch -Footer auf dem Papier: gedruckt wird ein eigenständiges Dokument, das nur die Übersicht enthält. */ $("btn-print").addEventListener("click", function(){ if(!state.logs.length){ toast("Keine Einträge zum Drucken"); return; } var medLines = state.meds.map(function(m){ return "
  • "+escapeHtml(m.name)+""+(m.dose?" – "+escapeHtml(m.dose):"")+(m.since?" (seit "+fmtDate(m.since)+")":"")+"
  • "; }).join(""); var rows = sortedLogs().map(function(l){ return ""+fmtDate(l.date)+(l.time?"
    "+l.time+" Uhr":"")+""+ ""+escapeHtml(logMedName(l)||"unklar/mehrere")+""+ ""+escapeHtml(l.dose||"")+""+ ""+escapeHtml(l.symptom)+""+ ""+SEV[l.sev]+""+ ""+escapeHtml(l.note||"")+""; }).join("").replace(//g,''); var doc = ''+ 'Nebenwirkungs-Dokumentation'+ '
    '+ '

    Nebenwirkungs-Dokumentation

    '+ '

    Erstellt am '+new Date().toLocaleDateString("de-DE")+' · Selbstdokumentation, keine ärztliche Beurteilung

    '+ (medLines ? '

    Aktuelle Medikamente

      '+medLines+'
    ' : '')+ '

    Beobachtete Nebenwirkungen

    '+ ''+ ''+rows+'
    DatumMedikamentDosisSymptomSchwereNotiz
    '+ '

    Setze Medikamente niemals eigenständig ab – besprich Veränderungen mit deiner behandelnden Fachperson.

    '+ '
    '; var w = window.open("", "_blank"); if(!w){ toast("Bitte Pop-ups für diese Seite erlauben, um zu drucken"); return; } w.document.open(); w.document.write(doc); w.document.close(); // Erst drucken, wenn Inhalt geladen ist var go = function(){ w.focus(); w.print(); }; if(w.document.readyState === "complete") setTimeout(go, 150); else w.onload = function(){ setTimeout(go, 150); }; }); /* ---------- Init ---------- */ function renderAll(){ renderMeds(); refreshMedSelects(); renderLogs(); } resetLogForm(); renderAll(); })();