def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: procedure = req.snomed(SnomedLookup.PHQ15_PROCEDURE) codes = [SnomedExpression(procedure)] if self.is_complete(): scale = req.snomed(SnomedLookup.PHQ15_SCALE) score = req.snomed(SnomedLookup.PHQ15_SCORE) codes.append(SnomedExpression(scale, {score: self.total_score()})) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: if not self.is_complete(): return [] return [ SnomedExpression(req.snomed(SnomedLookup.PHOTOGRAPH_PROCEDURE)), SnomedExpression( req.snomed(SnomedLookup.PHOTOGRAPH_PHYSICAL_OBJECT)), ]
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: if not self.is_complete(): return [] return [ SnomedExpression( req.snomed(SnomedLookup.PDSS_SCALE), { req.snomed(SnomedLookup.PDSS_SCORE): self.total_score(), }) ]
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [SnomedExpression(req.snomed(SnomedLookup.GAD7_PROCEDURE_ASSESSMENT))] # noqa if self.is_complete(): codes.append(SnomedExpression( req.snomed(SnomedLookup.GAD7_SCALE), { req.snomed(SnomedLookup.GAD7_SCORE): self.total_score(), } )) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: refinement = {} # type: Dict[SnomedConcept, str] if self.note: refinement[req.snomed(SnomedLookup.CLINICAL_NOTE)] = self.note codes = [ SnomedExpression( req.snomed(SnomedLookup.PROGRESS_NOTE_PROCEDURE), refinement=refinement or None, ) ] return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression( req.snomed(SnomedLookup.ACE_R_PROCEDURE_ASSESSMENT)) ] # noqa # add(SnomedLookup.ACE_R_PROCEDURE_ASSESSMENT_SUBSCALE_ATTENTION_ORIENTATION) # noqa # add(SnomedLookup.ACE_R_PROCEDURE_ASSESSMENT_SUBSCALE_MEMORY) # add(SnomedLookup.ACE_R_PROCEDURE_ASSESSMENT_SUBSCALE_FLUENCY) # add(SnomedLookup.ACE_R_PROCEDURE_ASSESSMENT_SUBSCALE_LANGUAGE) # add(SnomedLookup.ACE_R_PROCEDURE_ASSESSMENT_SUBSCALE_VISUOSPATIAL) if self.is_complete(): # could refine: is each subscale complete? a = self.attn_score() m = self.mem_score() f = self.fluency_score() lang = self.lang_score() v = self.vsp_score() t = a + m + f + lang + v codes.append( SnomedExpression( req.snomed(SnomedLookup.ACE_R_SCALE), { req.snomed(SnomedLookup.ACE_R_SCORE): t, req.snomed(SnomedLookup.ACE_R_SUBSCORE_ATTENTION_ORIENTATION): a, # noqa req.snomed(SnomedLookup.ACE_R_SUBSCORE_MEMORY): m, req.snomed(SnomedLookup.ACE_R_SUBSCORE_FLUENCY): f, req.snomed(SnomedLookup.ACE_R_SUBSCORE_LANGUAGE): lang, req.snomed(SnomedLookup.ACE_R_SUBSCORE_VISUOSPATIAL): v, })) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: # The BADLS is ALWAYS carer-rated, so it's appropriate to put the # SNOMED-CT codes in. codes = [ SnomedExpression( req.snomed(SnomedLookup.BADLS_PROCEDURE_ASSESSMENT)) ] if self.is_complete(): codes.append( SnomedExpression( req.snomed(SnomedLookup.BADLS_SCALE), {req.snomed(SnomedLookup.BADLS_SCORE): self.total_score()}, )) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression(req.snomed( SnomedLookup.NART_PROCEDURE_ASSESSMENT)) ] # noqa if self.is_complete(): codes.append( SnomedExpression( req.snomed(SnomedLookup.NART_SCALE), { # Best value debatable: req.snomed(SnomedLookup.NART_SCORE): self.nelson_full_scale_iq(), # noqa })) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: expressions = [] # type: List[SnomedExpression] procedure_bmi = req.snomed(SnomedLookup.BMI_PROCEDURE_MEASUREMENT) unit = req.snomed(SnomedLookup.UNIT_OF_MEASURE) if self.is_complete(): kg = req.snomed(SnomedLookup.KILOGRAM) m = req.snomed(SnomedLookup.METRE) kg_per_sq_m = req.snomed(SnomedLookup.KG_PER_SQ_M) qty_bmi = req.snomed(SnomedLookup.BMI_OBSERVABLE) qty_height = req.snomed(SnomedLookup.BODY_HEIGHT_OBSERVABLE) qty_weight = req.snomed(SnomedLookup.BODY_WEIGHT_OBSERVABLE) expressions.append( SnomedExpression( procedure_bmi, [ SnomedAttributeGroup( {qty_bmi: self.bmi(), unit: kg_per_sq_m} ), SnomedAttributeGroup( {qty_weight: self.mass_kg, unit: kg} ), SnomedAttributeGroup( {qty_height: self.height_m, unit: m} ), ], ) ) else: expressions.append(SnomedExpression(procedure_bmi)) if self.waist_cm is not None: procedure_waist = req.snomed( SnomedLookup.WAIST_CIRCUMFERENCE_PROCEDURE_MEASUREMENT ) cm = req.snomed(SnomedLookup.CENTIMETRE) qty_waist_circum = req.snomed( SnomedLookup.WAIST_CIRCUMFERENCE_OBSERVABLE ) expressions.append( SnomedExpression( procedure_waist, [ SnomedAttributeGroup( {qty_waist_circum: self.waist_cm, unit: cm} ) ], ) ) return expressions
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression(req.snomed( SnomedLookup.HADS_PROCEDURE_ASSESSMENT)) ] # noqa if self.is_complete(): codes.append( SnomedExpression( req.snomed(SnomedLookup.HADS_SCALE), { req.snomed(SnomedLookup.HADS_ANXIETY_SCORE): self.anxiety_score(), # noqa req.snomed(SnomedLookup.HADS_DEPRESSION_SCORE): self.depression_score(), # noqa })) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: procedure = req.snomed(SnomedLookup.BMI_PROCEDURE_MEASUREMENT) if self.is_complete(): unit = req.snomed(SnomedLookup.UNIT_OF_MEASURE) kg = req.snomed(SnomedLookup.KILOGRAM) m = req.snomed(SnomedLookup.METRE) kg_per_sq_m = req.snomed(SnomedLookup.KG_PER_SQ_M) qty_bmi = req.snomed(SnomedLookup.BMI_OBSERVABLE) qty_height = req.snomed(SnomedLookup.BODY_HEIGHT_OBSERVABLE) qty_weight = req.snomed(SnomedLookup.BODY_WEIGHT_OBSERVABLE) return [ SnomedExpression(procedure, [ SnomedAttributeGroup({ qty_bmi: self.bmi(), unit: kg_per_sq_m, }), SnomedAttributeGroup({ qty_weight: self.mass_kg, unit: kg, }), SnomedAttributeGroup({ qty_height: self.height_m, unit: m, }), ]) ] else: return [SnomedExpression(procedure)]
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: scale_lookup = SnomedLookup.BDI_SCALE if self.bdi_scale in (SCALE_BDI_I, SCALE_BDI_IA): score_lookup = SnomedLookup.BDI_SCORE proc_lookup = SnomedLookup.BDI_PROCEDURE_ASSESSMENT elif self.bdi_scale == SCALE_BDI_II: score_lookup = SnomedLookup.BDI_II_SCORE proc_lookup = SnomedLookup.BDI_II_PROCEDURE_ASSESSMENT else: return [] codes = [SnomedExpression(req.snomed(proc_lookup))] if self.is_complete(): codes.append( SnomedExpression( req.snomed(scale_lookup), {req.snomed(score_lookup): self.total_score()}, )) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: procedure = req.snomed( SnomedLookup.PHQ9_PROCEDURE_DEPRESSION_SCREENING) codes = [SnomedExpression(procedure)] if self.is_complete(): scale = req.snomed(SnomedLookup.PHQ9_SCALE) score = req.snomed(SnomedLookup.PHQ9_SCORE) screen_negative = req.snomed( SnomedLookup.PHQ9_FINDING_NEGATIVE_SCREENING_FOR_DEPRESSION) screen_positive = req.snomed( SnomedLookup.PHQ9_FINDING_POSITIVE_SCREENING_FOR_DEPRESSION) if self.is_mds() or self.is_ods(): # Threshold debatable, but if you have "other depressive # syndrome", it seems wrong to say you've screened negative for # depression. procedure_result = screen_positive else: procedure_result = screen_negative codes.append(SnomedExpression(scale, {score: self.total_score()})) codes.append(SnomedExpression(procedure_result)) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression(req.snomed( SnomedLookup.WSAS_PROCEDURE_ASSESSMENT)) ] if self.is_complete(): d = { req.snomed(SnomedLookup.WSAS_SCORE): self.total_score(), req.snomed(SnomedLookup.WSAS_HOME_MANAGEMENT_SCORE): self.q2, req.snomed(SnomedLookup.WSAS_SOCIAL_LEISURE_SCORE): self.q3, req.snomed(SnomedLookup.WSAS_PRIVATE_LEISURE_SCORE): self.q4, req.snomed(SnomedLookup.WSAS_RELATIONSHIPS_SCORE): self.q5, } if not self.retired_etc: d[req.snomed(SnomedLookup.WSAS_WORK_SCORE)] = self.q1 codes.append( SnomedExpression(req.snomed(SnomedLookup.WSAS_SCALE), d)) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression( req.snomed(SnomedLookup.EQ5D5L_PROCEDURE_ASSESSMENT)) ] # noqa if self.is_complete(): codes.append( SnomedExpression( req.snomed(SnomedLookup.EQ5D5L_SCALE), { # SnomedLookup.EQ5D5L_INDEX_VALUE: not used; see docstring above # noqa req.snomed(SnomedLookup.EQ5D5L_MOBILITY_SCORE): self.q1, req.snomed(SnomedLookup.EQ5D5L_SELF_CARE_SCORE): self.q2, req.snomed(SnomedLookup.EQ5D5L_USUAL_ACTIVITIES_SCORE): self.q3, # noqa req.snomed(SnomedLookup.EQ5D5L_PAIN_DISCOMFORT_SCORE): self.q4, # noqa req.snomed(SnomedLookup.EQ5D5L_ANXIETY_DEPRESSION_SCORE): self.q5, # noqa })) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression( req.snomed(SnomedLookup.HONOSCA_PROCEDURE_ASSESSMENT)) ] # noqa if self.is_complete(): a = self.section_a_score() b = self.section_b_score() total = a + b codes.append( SnomedExpression( req.snomed(SnomedLookup.HONOSCA_SCALE), { req.snomed(SnomedLookup.HONOSCA_SCORE): total, req.snomed(SnomedLookup.HONOSCA_SECTION_A_SCORE): a, req.snomed(SnomedLookup.HONOSCA_SECTION_B_SCORE): b, req.snomed(SnomedLookup.HONOSCA_SECTION_A_PLUS_B_SCORE): total, # noqa })) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: if not self.is_complete(): return [] return [SnomedExpression(req.snomed(SnomedLookup.QOL_SCALE))]
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression( req.snomed(SnomedLookup.HONOSWA_PROCEDURE_ASSESSMENT)) ] # noqa if self.is_complete(): codes.append( SnomedExpression( req.snomed(SnomedLookup.HONOSWA_SCALE), { req.snomed(SnomedLookup.HONOSWA_SCORE): self.total_score(), req.snomed(SnomedLookup.HONOSWA_1_OVERACTIVE_SCORE): self.q1, # noqa req.snomed(SnomedLookup.HONOSWA_2_SELFINJURY_SCORE): self.q2, # noqa req.snomed(SnomedLookup.HONOSWA_3_SUBSTANCE_SCORE): self.q3, # noqa req.snomed(SnomedLookup.HONOSWA_4_COGNITIVE_SCORE): self.q4, # noqa req.snomed(SnomedLookup.HONOSWA_5_PHYSICAL_SCORE): self.q5, req.snomed(SnomedLookup.HONOSWA_6_PSYCHOSIS_SCORE): self.q6, # noqa req.snomed(SnomedLookup.HONOSWA_7_DEPRESSION_SCORE): self.q7, # noqa req.snomed(SnomedLookup.HONOSWA_8_OTHERMENTAL_SCORE): self.q8, # noqa req.snomed(SnomedLookup.HONOSWA_9_RELATIONSHIPS_SCORE): self.q9, # noqa req.snomed(SnomedLookup.HONOSWA_10_ADL_SCORE): self.q10, req.snomed(SnomedLookup.HONOSWA_11_LIVINGCONDITIONS_SCORE): self.q11, # noqa req.snomed(SnomedLookup.HONOSWA_12_OCCUPATION_SCORE): self.q12, # noqa })) return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [SnomedExpression(req.snomed(SnomedLookup.BPRS1962_SCALE))] return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: refinement = {} # type: Dict[SnomedConcept, str] def add(snomed_lookup: str, contents: Optional[str]) -> None: if not contents: return nonlocal refinement concept = req.snomed(snomed_lookup) refinement[concept] = contents # not location # not contact type add(SnomedLookup.PSYCLERK_REASON_FOR_REFERRAL, self.reason_for_contact) add(SnomedLookup.PSYCLERK_PRESENTING_ISSUE, self.presenting_issue) add(SnomedLookup.PSYCLERK_SYSTEMS_REVIEW, self.systems_review) add(SnomedLookup.PSYCLERK_COLLATERAL_HISTORY, self.collateral_history) add( SnomedLookup.PSYCLERK_PAST_MEDICAL_SURGICAL_MENTAL_HEALTH_HISTORY, self.diagnoses_medical, ) add( SnomedLookup.PSYCLERK_PAST_MEDICAL_SURGICAL_MENTAL_HEALTH_HISTORY, self.diagnoses_psychiatric, ) add(SnomedLookup.PSYCLERK_PROCEDURES, self.operations_procedures) add( SnomedLookup.PSYCLERK_ALLERGIES_ADVERSE_REACTIONS, self.allergies_adverse_reactions, ) add(SnomedLookup.PSYCLERK_MEDICATIONS_MEDICAL_DEVICES, self.medications) add( SnomedLookup.PSYCLERK_DRUG_SUBSTANCE_USE, self.recreational_drug_use, ) add(SnomedLookup.PSYCLERK_FAMILY_HISTORY, self.family_history) add( SnomedLookup.PSYCLERK_DEVELOPMENTAL_HISTORY, self.developmental_history, ) add( SnomedLookup.PSYCLERK_SOCIAL_PERSONAL_HISTORY, self.personal_history, ) add(SnomedLookup.PSYCLERK_PERSONALITY, self.premorbid_personality) add( SnomedLookup.PSYCLERK_PRISON_RECORD_CRIMINAL_ACTIVITY, self.forensic_history, ) add( SnomedLookup.PSYCLERK_SOCIAL_HISTORY_BASELINE, self.current_social_situation, ) add(SnomedLookup.PSYCLERK_MSE_APPEARANCE, self.mse_appearance_behaviour) # duplication add(SnomedLookup.PSYCLERK_MSE_BEHAVIOUR, self.mse_appearance_behaviour) # duplication add(SnomedLookup.PSYCLERK_MSE_MOOD, self.mse_mood_subjective) # close add(SnomedLookup.PSYCLERK_MSE_AFFECT, self.mse_mood_objective) # ... Logic here: "objective mood" is certainly affect (emotional # weather). "Subjective mood" is both mood (emotional climate) and # affect. Not perfect, but reasonable. add(SnomedLookup.PSYCLERK_MSE_THOUGHT, self.mse_thought_form) add(SnomedLookup.PSYCLERK_MSE_THOUGHT, self.mse_thought_content) # ... No way of disambiguating the two in SNOMED-CT. add(SnomedLookup.PSYCLERK_MSE_PERCEPTION, self.mse_perception) add(SnomedLookup.PSYCLERK_MSE_COGNITION, self.mse_cognition) add(SnomedLookup.PSYCLERK_MSE_INSIGHT, self.mse_insight) add( SnomedLookup.PSYCLERK_PHYSEXAM_GENERAL, self.physical_examination_general, ) add( SnomedLookup.PSYCLERK_PHYSEXAM_CARDIOVASCULAR, self.physical_examination_cardiovascular, ) add( SnomedLookup.PSYCLERK_PHYSEXAM_RESPIRATORY, self.physical_examination_respiratory, ) add( SnomedLookup.PSYCLERK_PHYSEXAM_ABDOMINAL, self.physical_examination_abdominal, ) add( SnomedLookup.PSYCLERK_PHYSEXAM_NEUROLOGICAL, self.physical_examination_neurological, ) add(SnomedLookup.PSYCLERK_ASSESSMENT_SCALES, self.assessment_scales) add( SnomedLookup.PSYCLERK_INVESTIGATIONS_RESULTS, self.investigations_results, ) add(SnomedLookup.PSYCLERK_SAFETY_ALERTS, self.safety_alerts) add(SnomedLookup.PSYCLERK_RISK_ASSESSMENT, self.risk_assessment) add( SnomedLookup.PSYCLERK_RELEVANT_LEGAL_INFORMATION, self.relevant_legal_information, ) add(SnomedLookup.PSYCLERK_CURRENT_PROBLEMS, self.current_problems) add( SnomedLookup.PSYCLERK_PATIENT_CARER_CONCERNS, self.patient_carer_concerns, ) add(SnomedLookup.PSYCLERK_CLINICAL_NARRATIVE, self.impression) add(SnomedLookup.PSYCLERK_MANAGEMENT_PLAN, self.management_plan) add(SnomedLookup.PSYCLERK_INFORMATION_GIVEN, self.information_given) codes = [ SnomedExpression( req.snomed( SnomedLookup.DIAGNOSTIC_PSYCHIATRIC_INTERVIEW_PROCEDURE), refinement=refinement or None, ) ] return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression(req.snomed(SnomedLookup.PROGRESS_NOTE_PROCEDURE)) ] # noqa return codes
def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]: codes = [ SnomedExpression( req.snomed(SnomedLookup.PSYCHIATRIC_ASSESSMENT_PROCEDURE)) ] # noqa return codes