def get_task_html(self): h = self.get_standard_clinician_block(True, self.comments) + u""" <div class="summary"> <table class="summary"> """ + self.get_is_complete_tr() h += tr_qa(WSTRING("date_pertains_to"), format_datetime_string(self.date_pertains_to, DATEFORMAT.LONG_DATE, default=None)) h += tr_qa(WSTRING("meets_criteria"), get_yes_no_none(self.meets_criteria())) h += u""" </table> </div> <table class="taskdetail"> <tr> <th width="80%">Question</th> <th width="20%">Answer</th> </tr> """ h += self.text_row("icd10schizotypal_a") for i in range(1, Icd10Schizotypal.N_A + 1): h += self.get_twocol_bool_row_true_false( "a" + str(i), WSTRING("icd10schizotypal_a" + str(i))) h += self.get_twocol_bool_row_true_false( "b", WSTRING("icd10schizotypal_b")) h += u""" </table> """ + ICD10_COPYRIGHT_DIV return h
def get_task_html(self): h = ( self.get_standard_clinician_block() + u""" <table class="taskdetail"> <tr> <td width="33%">Location:</td> <td width="67%"><b>{}</b></td> </tr> """.format( ws.webify(self.location) ) ) h += tr_qa("Start:", format_datetime_string(self.start, DATEFORMAT.SHORT_DATETIME, None)) h += tr_qa("End:", format_datetime_string(self.end, DATEFORMAT.SHORT_DATETIME, None)) h += tr(italic("Calculated duration (hours:minutes)"), italic(get_duration_h_m(self.start, self.end))) h += tr_qa("Patient contact?", get_yes_no_none(self.patient_contact)) h += tr_qa("Staff liaison?", get_yes_no_none(self.staff_liaison)) h += tr_qa("Other liaison?", get_yes_no_none(self.other_liaison)) h += tr_qa("Comment:", ws.webify(self.comment)) return h
def get_clinical_text(self): if not self.is_complete(): return CTV_DICTLIST_INCOMPLETE dl = [{ "content": "Pertains to: {}. Category: {}.".format( format_datetime_string(self.date_pertains_to, DATEFORMAT.LONG_DATE), self.get_description() ) }] if self.comments: dl.append({"content": ws.webify(self.comments)}) return dl
def get_clinical_text(self): if not self.is_complete(): return CTV_DICTLIST_INCOMPLETE c = self.meets_general_criteria() if c is None: category = "Unknown if met or not met" elif c: category = "Met" else: category = "Not met" dl = [{ "content": "Pertains to: {}. General criteria for " "schizophrenia: {}.".format( format_datetime_string(self.date_pertains_to, DATEFORMAT.LONG_DATE), category) }] if self.comments: dl.append({"content": ws.webify(self.comments)}) return dl
def get_task_html(self): h = self.get_standard_clinician_block() + u""" <div class="summary"> <table class="summary"> {} </table> </div> <table class="taskdetail"> <col width="25%"> <col width="75%"> """.format( self.get_is_complete_tr(), ) h += tr_qa( WSTRING("cpft_lps_rc_to"), format_datetime_string(self.reset_start_time_to, DATEFORMAT.LONG_DATETIME_WITH_DAY, default=None)) h += tr_qa(WSTRING("cpft_lps_rc_reason"), self.reason) h += u""" </table> """ return h
def get_task_html(self): h = self.get_standard_clinician_block(True, self.comments) + u""" <div class="summary"> <table class="summary"> """ + self.get_is_complete_tr() h += tr_qa(WSTRING("date_pertains_to"), format_datetime_string(self.date_pertains_to, DATEFORMAT.LONG_DATE, default=None)) h += tr_qa(WSTRING("category") + u" <sup>[1,2]</sup>", self.get_description()) h += tr_qa(WSTRING("icd10manic_psychotic_symptoms") + u" <sup>[2]</sup>", get_present_absent_none(self.psychosis_present())) h += u""" </table> </div> <div class="explanation"> """ h += WSTRING("icd10_symptomatic_disclaimer") h += u""" </div> <table class="taskdetail"> <tr> <th width="80%">Question</th> <th width="20%">Answer</th> </tr> """ h += self.text_row("icd10manic_core") for x in Icd10Manic.CORE_NAMES: h += self.row_true_false(x) h += self.text_row("icd10manic_hypomania_mania") for x in Icd10Manic.HYPOMANIA_MANIA_NAMES: h += self.row_true_false(x) h += self.text_row("icd10manic_other_mania") for x in Icd10Manic.MANIA_NAMES: h += self.row_true_false(x) h += self.text_row("icd10manic_other_criteria") for x in Icd10Manic.OTHER_CRITERIA_NAMES: h += self.row_true_false(x) h += subheading_spanning_two_columns(WSTRING("icd10manic_psychosis")) for x in Icd10Manic.PSYCHOSIS_NAMES: h += self.row_true_false(x) h += u""" </table> <div class="footnotes"> [1] Hypomania: elevated/irritable mood + sustained for ≥4 days + at least 3 of the “other hypomania” symptoms + some interference with functioning. Mania: elevated/irritable mood + sustained for ≥7 days or hospital admission required + at least 3 of the “other mania/hypomania” symptoms (4 if mood only irritable) + severe interference with functioning. [2] ICD-10 nonpsychotic mania requires mania without hallucinations/delusions. ICD-10 psychotic mania requires mania plus hallucinations/delusions other than those that are “typically schizophrenic”. ICD-10 does not clearly categorize mania with only schizophreniform psychotic symptoms; however, Schneiderian first-rank symptoms can occur in manic psychosis (e.g. Conus P et al., 2004, PMID 15337330.). </div> """ + ICD10_COPYRIGHT_DIV return h
def get_task_html(self): h = self.get_standard_clinician_block(True, self.comments) + u""" <div class="summary"> <table class="summary"> """ + self.get_is_complete_tr() h += tr_qa(WSTRING("date_pertains_to"), format_datetime_string(self.date_pertains_to, DATEFORMAT.LONG_DATE, default=None)) h += tr_qa(WSTRING("icd10pd_meets_general_criteria"), get_yes_no_none(self.hasPD())) h += tr_qa(WSTRING("icd10_paranoid_pd_title"), get_yes_no_none(self.hasParanoidPD())) h += tr_qa(WSTRING("icd10_schizoid_pd_title"), get_yes_no_none(self.hasSchizoidPD())) h += tr_qa(WSTRING("icd10_dissocial_pd_title"), get_yes_no_none(self.hasDissocialPD())) h += tr_qa(WSTRING("icd10_eu_pd_i_title"), get_yes_no_none(self.hasEUPD_I())) h += tr_qa(WSTRING("icd10_eu_pd_b_title"), get_yes_no_none(self.hasEUPD_B())) h += tr_qa(WSTRING("icd10_histrionic_pd_title"), get_yes_no_none(self.hasHistrionicPD())) h += tr_qa(WSTRING("icd10_anankastic_pd_title"), get_yes_no_none(self.hasAnankasticPD())) h += tr_qa(WSTRING("icd10_anxious_pd_title"), get_yes_no_none(self.hasAnxiousPD())) h += tr_qa(WSTRING("icd10_dependent_pd_title"), get_yes_no_none(self.hasDependentPD())) h += u""" </table> </div> <div> <p><i>Vignette:</i></p> <p>{}</p> </div> <table class="taskdetail"> <tr> <th width="80%">Question</th> <th width="20%">Answer</th> </tr> """.format( answer(ws.webify(self.vignette), default_for_blank_strings=True) ) # General h += subheading_spanning_two_columns(WSTRING("icd10pd_general")) h += self.get_twocol_bool_row_true_false("g1", WSTRING("icd10pd_G1")) h += self.pd_b_text("icd10pd_G1b") for i in range(1, Icd10SpecPD.N_GENERAL_1 + 1): h += self.get_twocol_bool_row_true_false( "g1_" + str(i), WSTRING("icd10pd_G1_" + str(i))) for i in range(2, Icd10SpecPD.N_GENERAL + 1): h += self.get_twocol_bool_row_true_false( "g" + str(i), WSTRING("icd10pd_G" + str(i))) # Paranoid, etc. h += self.standard_pd_html("paranoid", Icd10SpecPD.N_PARANOID) h += self.standard_pd_html("schizoid", Icd10SpecPD.N_SCHIZOID) h += self.standard_pd_html("dissocial", Icd10SpecPD.N_DISSOCIAL) # EUPD is special h += self.pd_heading("icd10_eu_pd_title") h += self.pd_skiprow("eu") h += self.pd_general_criteria_bits() h += self.pd_subheading("icd10_eu_pd_i_title") h += self.pd_b_text("icd10_eu_pd_i_B") for i in range(1, Icd10SpecPD.N_EUPD_I + 1): h += self.pd_basic_row("eu", i) h += self.pd_subheading("icd10_eu_pd_b_title") h += self.pd_b_text("icd10_eu_pd_b_B") for i in range(Icd10SpecPD.N_EUPD_I + 1, Icd10SpecPD.N_EU + 1): h += self.pd_basic_row("eu", i) # Back to plain ones h += self.standard_pd_html("histrionic", Icd10SpecPD.N_HISTRIONIC) h += self.standard_pd_html("anankastic", Icd10SpecPD.N_ANANKASTIC) h += self.standard_pd_html("anxious", Icd10SpecPD.N_ANXIOUS) h += self.standard_pd_html("dependent", Icd10SpecPD.N_DEPENDENT) # Done h += u""" </table> """ + ICD10_COPYRIGHT_DIV return h
def get_task_html(self): h = self.get_standard_clinician_block(True, self.comments) + u""" <div class="summary"> <table class="summary"> """ + self.get_is_complete_tr() h += tr_qa(WSTRING("date_pertains_to"), format_datetime_string(self.date_pertains_to, DATEFORMAT.LONG_DATE, default=None)) h += tr_qa(WSTRING("icd10sz_meets_general_criteria") + u" <sup>[1]</sup>", get_true_false_none(self.meets_general_criteria())) h += u""" </table> </div> <div class="explanation"> """ h += WSTRING("icd10sz_comments") h += u""" </div> <table class="taskdetail"> <tr> <th width="80%">Question</th> <th width="20%">Answer</th> </tr> """ h += self.heading_row("icd10sz_core", " <sup>[2]</sup>") for x in Icd10Schizophrenia.A_NAMES: h += self.row_present_absent(x) h += self.heading_row("icd10sz_other_positive") for x in Icd10Schizophrenia.B_NAMES: h += self.row_present_absent(x) h += self.heading_row("icd10sz_negative_title") for x in Icd10Schizophrenia.C_NAMES: h += self.row_present_absent(x) h += self.heading_row("icd10sz_other_criteria") for x in Icd10Schizophrenia.D_NAMES: h += self.row_true_false(x) h += self.text_row("icd10sz_duration_comment") for x in Icd10Schizophrenia.E_NAMES: h += self.row_true_false(x) h += self.text_row("icd10sz_affective_comment") for x in Icd10Schizophrenia.F_NAMES: h += self.row_true_false(x) h += self.heading_row("icd10sz_simple_title") for x in Icd10Schizophrenia.G_NAMES: h += self.row_present_absent(x) h += self.heading_row("icd10sz_subtypes") for x in Icd10Schizophrenia.H_NAMES: h += self.row_present_absent(x) h += u""" </table> <div class="footnotes"> [1] All of: (a) at least one core symptom, or at least two of the other positive or negative symptoms; (b) present for a month (etc.); (c) if also manic/depressed, schizophreniform psychosis came first; (d) not attributable to organic brain disease or psychoactive substances. [2] Symptom definitions from: (a) Oyebode F (2008). Sims’ Symptoms in the Mind: An Introduction to Descriptive Psychopathology. Fourth edition, Saunders, Elsevier, Edinburgh. (b) Pawar AV & Spence SA (2003), PMID 14519605. </div> """ + ICD10_COPYRIGHT_DIV return h
def get_task_html(self): h = self.get_standard_clinician_block() + u""" <div class="summary"> <table class="summary"> {} </table> </div> <table class="taskdetail"> <col width="40%"> <col width="60%"> """.format( self.get_is_complete_tr(), ) h += tr_qa(WSTRING("cpft_lps_dis_discharge_date"), format_datetime_string(self.discharge_date, DATEFORMAT.LONG_DATE_WITH_DAY, default=None), "") h += tr_qa(WSTRING("cpft_lps_dis_discharge_reason"), self.get_discharge_reason(), "") h += tr_qa( WSTRING("cpft_lps_dis_leaflet_or_discharge_card_given"), get_yes_no_none(self.leaflet_or_discharge_card_given), "") h += tr_qa(WSTRING("cpft_lps_dis_frequent_attender"), get_yes_no_none(self.frequent_attender), "") h += tr_qa( WSTRING("cpft_lps_dis_patient_wanted_copy_of_letter"), self.patient_wanted_copy_of_letter, "") h += tr_qa(WSTRING("cpft_lps_dis_gaf_at_first_assessment"), self.gaf_at_first_assessment, "") h += tr_qa(WSTRING("cpft_lps_dis_gaf_at_discharge"), self.gaf_at_discharge, "") h += subheading_spanning_two_columns( WSTRING("cpft_lps_dis_referral_reason_t")) h += tr_span_col(answer(", ".join(self.get_referral_reasons())), cols=2) h += tr_qa( WSTRING("cpft_lps_dis_referral_reason_transplant_organ"), self.referral_reason_transplant_organ, "") h += tr_qa( WSTRING("cpft_lps_dis_referral_reason_other_detail"), self.referral_reason_other_detail, "") h += subheading_spanning_two_columns( WSTRING("cpft_lps_dis_diagnoses_t")) h += tr_qa(WSTRING("cpft_lps_dis_psychiatric_t"), "<br>".join(self.get_psychiatric_diagnoses()), "") h += tr_qa(WSTRING("cpft_lps_dis_medical_t"), "<br>".join(self.get_medical_diagnoses()), "") h += subheading_spanning_two_columns( WSTRING("cpft_lps_dis_management_t")) h += tr_span_col(answer(", ".join(self.get_managements())), cols=2) h += tr_qa(WSTRING("cpft_lps_dis_management_other_detail"), self.management_other_detail, "") h += subheading_spanning_two_columns(WSTRING("cpft_lps_dis_outcome_t")) h += tr_qa(WSTRING("cpft_lps_dis_outcome_t"), self.outcome, "") h += tr_qa( WSTRING("cpft_lps_dis_outcome_hospital_transfer_detail"), self.outcome_hospital_transfer_detail, "") h += tr_qa(WSTRING("cpft_lps_dis_outcome_other_detail"), self.outcome_other_detail, "") h += u""" </table> """ return h
def get_task_html(self): PERSON_MARITAL_STATUS = get_nhs_dd_person_marital_status() ETHNIC_CATEGORY_CODE = get_nhs_dd_ethnic_category_code() if self.lps_division == "G": banner_class = "banner_referral_general_adult" division_name = WSTRING("cpft_lps_service_G") elif self.lps_division == "O": banner_class = "banner_referral_old_age" division_name = WSTRING("cpft_lps_service_O") elif self.lps_division == "S": banner_class = "banner_referral_substance_misuse" division_name = WSTRING("cpft_lps_service_S") else: banner_class = "" division_name = None if self.referral_priority == "R": priority_name = WSTRING("cpft_lps_referral_priority_R") elif self.referral_priority == "U": priority_name = WSTRING("cpft_lps_referral_priority_U") elif self.referral_priority == "E": priority_name = WSTRING("cpft_lps_referral_priority_E") else: priority_name = None potential_admission_reasons = [ "admission_reason_overdose", "admission_reason_self_harm_not_overdose", "admission_reason_confusion", "admission_reason_trauma", "admission_reason_falls", "admission_reason_infection", "admission_reason_poor_adherence", "admission_reason_other", ] admission_reasons = [] for r in potential_admission_reasons: if getattr(self, r): admission_reasons.append(WSTRING("cpft_lps_referral_f_" + r)) h = u""" <div class="banner {}">{} referral at {}</div> <div class="summary"> <table class="summary"> {} </table> </div> <table class="taskdetail"> <col width="25%"> <col width="25%"> <col width="25%"> <col width="25%"> """.format( banner_class, answer(division_name, default_for_blank_strings=True), answer(format_datetime_string( self.referral_date_time, DATEFORMAT.SHORT_DATETIME_WITH_DAY_NO_TZ, default=None)), self.get_is_complete_tr(), ) h += subheading_spanning_four_columns( WSTRING("cpft_lps_referral_t_about_referral")) h += u""" <tr> <td>{}</td><td>{}</td> <td>{}</td><td class="highlight">{}</td> </tr> """.format( WSTRING("cpft_lps_referral_f_referral_method"), answer(self.referral_method), WSTRING("cpft_lps_referral_f_referral_priority"), answer(self.referral_priority, default_for_blank_strings=True) + ": " + answer(priority_name) ) h += self.four_column_row( WSTRING("cpft_lps_referral_f_referrer_name"), self.referrer_name, WSTRING("cpft_lps_referral_f_referring_specialty"), self.referring_specialty ) h += self.four_column_row( WSTRING("cpft_lps_referral_f_referrer_contact_details"), self.referrer_contact_details, WSTRING("cpft_lps_referral_f_referring_specialty_other"), self.referring_specialty_other ) h += self.four_column_row( WSTRING("cpft_lps_referral_f_referring_consultant"), self.referring_consultant, "", "" ) h += subheading_spanning_four_columns( WSTRING("cpft_lps_referral_t_patient")) h += u""" <tr> <td>{}</td><td>{}</td> <td>{}</td><td class="highlight">{}</td> </tr> """.format( WSTRING("cpft_lps_referral_f_admission_date"), answer(format_datetime_string(self.admission_date, DATEFORMAT.LONG_DATE, default=None), ""), WSTRING("cpft_lps_referral_f_patient_location"), answer(self.patient_location) ) h += self.four_column_row( WSTRING("cpft_lps_referral_f_estimated_discharge_date"), format_datetime_string(self.estimated_discharge_date, DATEFORMAT.LONG_DATE, ""), WSTRING("cpft_lps_referral_f_patient_aware_of_referral"), get_yes_no_none(self.patient_aware_of_referral) ) h += self.four_column_row( WSTRING("cpft_lps_referral_f_marital_status"), PERSON_MARITAL_STATUS.get(self.marital_status_code, INVALID_VALUE), WSTRING("cpft_lps_referral_f_interpreter_required"), get_yes_no_none(self.interpreter_required) ) h += self.four_column_row( WSTRING("cpft_lps_referral_f_ethnic_category"), ETHNIC_CATEGORY_CODE.get(self.ethnic_category_code, INVALID_VALUE), WSTRING("cpft_lps_referral_f_sensory_impairment"), get_yes_no_none(self.sensory_impairment) ) h += subheading_spanning_four_columns( WSTRING("cpft_lps_referral_t_admission_reason")) h += tr_span_col(answer(u", ".join(admission_reasons), ""), cols=4) h += subheading_spanning_four_columns( WSTRING("cpft_lps_referral_t_other_people")) h += self.tr_qa( WSTRING("cpft_lps_referral_f_existing_psychiatric_teams"), self.existing_psychiatric_teams, "") h += self.tr_qa( WSTRING("cpft_lps_referral_f_care_coordinator"), self.care_coordinator, "") h += self.tr_qa( WSTRING("cpft_lps_referral_f_other_contact_details"), self.other_contact_details, "") h += subheading_spanning_four_columns( WSTRING("cpft_lps_referral_t_referral_reason")) h += tr_span_col(answer(self.referral_reason, ""), cols=4) h += u""" </table> """ return h
def get_task_html(self): h = self.get_standard_clinician_block(True, self.comments) + u""" <div class="summary"> <table class="summary"> """ + self.get_is_complete_tr() h += tr_qa(WSTRING("date_pertains_to"), format_datetime_string(self.date_pertains_to, DATEFORMAT.LONG_DATE, default=None)) h += tr_qa(WSTRING("category") + u" <sup>[1,2]</sup>", self.get_full_description()) h += tr(WSTRING("icd10depressive_n_core"), answer(self.n_core()) + " / 3") h += tr(WSTRING("icd10depressive_n_total"), answer(self.n_total()) + " / 10") h += tr(WSTRING("icd10depressive_n_somatic"), answer(self.n_somatic()) + " / 8") h += tr(WSTRING("icd10depressive_psychotic_symptoms_or_stupor") + u" <sup>[2]</sup>", answer(get_present_absent_none(self.is_psychotic_or_stupor()))) h += u""" </table> </div> <div class="explanation"> """ h += WSTRING("icd10_symptomatic_disclaimer") h += u""" </div> <table class="taskdetail"> <tr> <th width="80%">Question</th> <th width="20%">Answer</th> </tr> """ h += self.text_row("icd10depressive_duration_text") h += self.row_true_false("duration_at_least_2_weeks") h += self.text_row("icd10depressive_core") for x in Icd10Depressive.CORE_NAMES: h += self.row_present_absent(x) h += self.text_row("icd10depressive_additional") for x in Icd10Depressive.ADDITIONAL_NAMES: h += self.row_present_absent(x) h += self.text_row("icd10depressive_clinical_text") h += self.row_true_false("severe_clinically") h += self.text_row("icd10depressive_somatic") for x in Icd10Depressive.SOMATIC_NAMES: h += self.row_present_absent(x) h += self.text_row("icd10depressive_psychotic") for x in Icd10Depressive.PSYCHOSIS_NAMES: h += self.row_present_absent(x) h += u""" </table> <div class="footnotes"> [1] Mild depression requires ≥2 core symptoms and ≥4 total diagnostic symptoms. Moderate depression requires ≥2 core and ≥6 total. Severe depression requires 3 core and ≥8 total. All three require a duration of ≥2 weeks. In addition, the diagnosis of severe depression is allowed with a clinical impression of “severe” in a patient unable/unwilling to describe symptoms in detail. [2] ICD-10 nonpsychotic severe depression requires severe depression without hallucinations/delusions/depressive stupor. ICD-10 psychotic depression requires severe depression plus hallucinations/delusions other than those that are “typically schizophrenic”, or stupor. ICD-10 does not clearly categorize severe depression with only schizophreniform psychotic symptoms; however, such symptoms can occur in severe depression with psychosis (e.g. Tandon R & Greden JF, 1987, PMID 2884810). Moreover, psychotic symptoms can occur in mild/moderate depression (Maj M et al., 2007, PMID 17915981). </div> """ + ICD10_COPYRIGHT_DIV return h