Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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)),
     ]
Ejemplo n.º 3
0
 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(),
             })
     ]
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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)]
Ejemplo n.º 12
0
 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
Ejemplo n.º 13
0
 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
Ejemplo n.º 14
0
 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
Ejemplo n.º 15
0
 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
Ejemplo n.º 16
0
 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
Ejemplo n.º 17
0
 def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]:
     if not self.is_complete():
         return []
     return [SnomedExpression(req.snomed(SnomedLookup.QOL_SCALE))]
Ejemplo n.º 18
0
 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
Ejemplo n.º 19
0
 def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]:
     codes = [SnomedExpression(req.snomed(SnomedLookup.BPRS1962_SCALE))]
     return codes
Ejemplo n.º 20
0
    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
Ejemplo n.º 21
0
 def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]:
     codes = [
         SnomedExpression(req.snomed(SnomedLookup.PROGRESS_NOTE_PROCEDURE))
     ]  # noqa
     return codes
Ejemplo n.º 22
0
 def get_snomed_codes(self, req: CamcopsRequest) -> List[SnomedExpression]:
     codes = [
         SnomedExpression(
             req.snomed(SnomedLookup.PSYCHIATRIC_ASSESSMENT_PROCEDURE))
     ]  # noqa
     return codes