def initialize_table_defaults(g: Graph, opts: Namespace) -> None: """ Initialize all of the table defaults :param g: Graph containing fhir.ttl :param opts: input options """ # TODO: This is kind of messy -- we've refactored so we should be able to consolidate this CommonDimension.graph = g ConceptDimension._clear() ConceptDimension.sourcesystem_cd = opts.sourcesystem ConceptDimension.update_date = opts.updatedate ConceptDimensionRoot._clear() ConceptDimensionRoot.sourcesystem_cd = opts.sourcesystem ConceptDimensionRoot.update_date = opts.updatedate ModifierDimension._clear() ModifierDimension.sourcesystem_cd = opts.sourcesystem ModifierDimension.update_date = opts.updatedate OntologyEntry._clear() OntologyEntry.sourcesystem_cd = opts.sourcesystem OntologyEntry.update_date = opts.updatedate OntologyRoot._clear() OntologyRoot.sourcesystem_cd = opts.sourcesystem OntologyRoot.update_date = opts.updatedate
def test_ontology_root(self): from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyRoot, OntologyEntry OntologyRoot._clear() OntologyEntry._clear() o = OntologyRoot("FHIR") OntologyRoot.update_date = datetime.datetime(2017, 5, 25, 13, 0) self.assertEqual(('0\t\\FHIR\\\tFHIR\tN\tCA \t\tFHIR:\t\t\t\t' '\tT\t\t\t\t\t@\t2017-05-25 13:00:00\t2017-05-25 ' '13:00:00\t2017-05-25 13:00:00\tFHIR\t\t\t\t'), repr(o))
def test_modifier_ontology_entry(self): from i2fhirb2.fhir.fhirspecific import FHIR from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry, ModifierOntologyEntry OntologyEntry._clear() navigational_path = '\\FHIR\\administrative\\individual\\Patient\\' modifier_path = "\\FHIRMod\\Patient\\active\\" OntologyEntry.graph = shared_graph OntologyEntry.sourcesystem_cd = "STU3" OntologyEntry.update_date = datetime.datetime(2017, 5, 25, 13, 0) subj = FHIR.Patient mod = FHIR.Patient.active o = ModifierOntologyEntry(1, subj, mod, modifier_path, navigational_path, True, mod, FHIR.boolean) self.assertEqual( OrderedDict([ ('c_hlevel', 1), ('c_fullname', '\\FHIRMod\\Patient\\active\\'), ('c_name', 'active'), ('c_synonym_cd', 'N'), ('c_visualattributes', 'RA '), ('c_totalnum', None), ('c_basecode', 'FHIR:Patient.active'), ('c_metadataxml', '<?xml version="1.0"?>\n' '<ValueMetadata>\n' ' <Version>3.02</Version>\n' ' <CreationDateTime>2017-05-25 13:00:00</CreationDateTime>\n' ' <TestID>FHIR:Patient.active</TestID>\n' ' <TestName>active</TestName>\n' ' <DataType>Enum</DataType>\n' ' <Flagstouse/>\n' ' <Oktousevalues>Y</Oktousevalues>\n' ' <EnumValues>\n' ' <Val description="True value">True</Val>\n' ' <Val description="False value">False</Val>\n' ' </EnumValues>\n' ' <UnitValues/>\n' '</ValueMetadata>'), ('c_facttablecolumn', 'modifier_cd'), ('c_tablename', 'modifier_dimension'), ('c_columnname', 'modifier_path'), ('c_columndatatype', 'T'), ('c_operator', 'like'), ('c_dimcode', '\\FHIR\\Patient\\active\\'), ('c_comment', 'Whether this patient record is in active use.'), ('c_tooltip', "Whether this patient's record is in active use"), ('m_applied_path', '\\FHIR\\administrative\\individual\\Patient\\'), ('update_date', datetime.datetime(2017, 5, 25, 13, 0)), ('download_date', datetime.datetime(2017, 5, 25, 13, 0)), ('import_date', datetime.datetime(2017, 5, 25, 13, 0)), ('sourcesystem_cd', 'STU3'), ('valuetype_cd', None), ('m_exclusion_cd', None), ('c_path', None), ('c_symbol', None) ]), o._freeze())
def test_patient_query(self): from i2fhirb2.i2b2model.metadata.i2b2ontologyquery import PatientQuery from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry q = PatientQuery('patient_num', '=', 12345) self.assertEqual( "SELECT patient_num\nFROM patient_dimension\nWHERE patient_num = 12345", str(q)) pq = PatientQuery( 'birth_date', 'BETWEEN', "(CURRENT_DATE - INTERVAL '731.5 day') AND" " (CURRENT_DATE - INTERVAL '366.25 day')") self.assertEqual( "SELECT patient_num\nFROM patient_dimension\n" "WHERE birth_date BETWEEN " "(CURRENT_DATE - INTERVAL '731.5 day') AND " "(CURRENT_DATE - INTERVAL '366.25 day')", str(pq)) o = OntologyEntry("\\PATH\\subpath\\", pq, None, "Q117.3") self.assertEqual(o.c_facttablecolumn, 'patient_num') self.assertEqual(o.c_tablename, 'patient_dimension') self.assertEqual(o.c_columndatatype, 'N') self.assertEqual(o.c_columnname, 'birth_date') self.assertEqual(o.c_operator, 'BETWEEN') self.assertEqual( o.c_dimcode, "(CURRENT_DATE - INTERVAL '731.5 day') " "AND (CURRENT_DATE - INTERVAL '366.25 day')")
def setUp(self): super().setUp() from i2fhirb2.i2b2model.metadata import dimensionmetadata ref_datetime = datetime(2017, 5, 25, 13, 0) dimensionmetadata.creation_date = ref_datetime from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry OntologyEntry._clear() OntologyEntry.update_date = OntologyRoot.update_date = ref_datetime from i2fhirb2.i2b2model.metadata.i2b2modifierdimension import ModifierDimension ModifierDimension._clear() ModifierDimension.update_date = ref_datetime ModifierDimension.graph = shared_graph from i2fhirb2.i2b2model.metadata.i2b2conceptdimension import ConceptDimension ConceptDimension._clear() ConceptDimension.update_date = ConceptDimension.import_date = ConceptDimension.download_date = \ ref_datetime ConceptDimension.graph = shared_graph
def tst_output(self, dimensions: Tuple[List[OntologyEntry], List[ConceptDimension], List[ModifierDimension]], resource_name: str) -> None: """ Test the output of FHIROntologyTable.dimension_list as generated against resource :param dimensions: ontology, concept and modifier dimension entries :param resource_name: name of specific test file (e.g. 'observation', 'domain_resource', etc.) """ self.set_sourcesystem_cds() self.tst_dimension(OntologyEntry._header(), dimensions[0], 'fhir_ontology_' + resource_name) self.tst_dimension(ConceptDimension._header(), dimensions[1], 'fhir_concept_dimension_' + resource_name) self.tst_dimension(ModifierDimension._header(), dimensions[2], 'fhir_modifier_dimension_' + resource_name)
def test_empty_query(self): from i2fhirb2.i2b2model.metadata.i2b2ontologyquery import EmptyQuery from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry q = EmptyQuery() self.assertEqual("NO QUERY", str(q)) o = OntologyEntry("\\PATH\\subpath\\", EmptyQuery(), None, "74400008") self.assertEqual(o.c_facttablecolumn, '') self.assertEqual(o.c_tablename, '') self.assertEqual(o.c_columndatatype, 'T') self.assertEqual(o.c_columnname, '') self.assertEqual(o.c_operator, '') self.assertEqual(o.c_dimcode, '')
def test_basics(self): from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry from i2fhirb2.i2b2model.metadata.i2b2ontologyquery import ConceptQuery OntologyEntry.download_date = datetime.datetime(2017, 5, 25) OntologyEntry.sourcesystem_cd = "FHIR" OntologyEntry.import_date = datetime.datetime(2017, 5, 25) OntologyEntry.update_date = datetime.datetime(2001, 12, 1) ontrec = OntologyEntry('\\X\\Y\\Z\\', ConceptQuery('\\X\\Y\\Z\\'), None, "17400008") self.assertEqual( 'c_hlevel\tc_fullname\tc_name\tc_synonym_cd\tc_visualattributes\t' 'c_totalnum\tc_basecode\tc_metadataxml\tc_facttablecolumn\tc_tablename\t' 'c_columnname\tc_columndatatype\tc_operator\tc_dimcode\tc_comment\t' 'c_tooltip\tm_applied_path\tupdate_date\tdownload_date\t' 'import_date\tsourcesystem_cd\tvaluetype_cd\tm_exclusion_cd\tc_path\tc_symbol', ontrec._header()) # Note that hierarchy level is zero based self.assertEqual( OrderedDict([('c_hlevel', 2), ('c_fullname', '\\X\\Y\\Z\\'), ('c_name', 'Z'), ('c_synonym_cd', 'N'), ('c_visualattributes', 'FAE'), ('c_totalnum', None), ('c_basecode', '17400008'), ('c_metadataxml', None), ('c_facttablecolumn', 'concept_cd'), ('c_tablename', 'concept_dimension'), ('c_columnname', 'concept_path'), ('c_columndatatype', 'T'), ('c_operator', '='), ('c_dimcode', '\\X\\Y\\Z\\'), ('c_comment', None), ('c_tooltip', None), ('m_applied_path', '@'), ('update_date', datetime.datetime(2001, 12, 1, 0, 0)), ('download_date', datetime.datetime(2017, 5, 25, 0, 0)), ('import_date', datetime.datetime(2017, 5, 25, 0, 0)), ('sourcesystem_cd', 'FHIR'), ('valuetype_cd', None), ('m_exclusion_cd', None), ('c_path', None), ('c_symbol', None)]), ontrec._freeze())
def test_visit_query(self): from i2fhirb2.i2b2model.metadata.i2b2ontologyquery import VisitQuery from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry vq = VisitQuery('length_of_stay', '>', 10) self.assertEqual( "SELECT encounter_num\nFROM visit_dimension\nWHERE length_of_stay > 10", str(vq)) o = OntologyEntry("\\PATH\\subpath\\", vq, None, "Q117.3") self.assertEqual(o.c_facttablecolumn, 'encounter_num') self.assertEqual(o.c_tablename, 'visit_dimension') self.assertEqual(o.c_columndatatype, 'N') self.assertEqual(o.c_columnname, 'length_of_stay') self.assertEqual(o.c_operator, '>') self.assertEqual(o.c_dimcode, 10)
def test_modifier_query(self): from i2fhirb2.i2b2model.metadata.i2b2ontologyquery import ModifierQuery from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry q = ModifierQuery("foo") self.assertEqual( "SELECT modifier_cd\nFROM modifier_dimension\nWHERE modifier_path like 'foo'", str(q)) o = OntologyEntry("\\PATH\\subpath\\", ModifierQuery('\\PATH\\subpath\\'), None, "74400008") self.assertEqual(o.c_facttablecolumn, 'modifier_cd') self.assertEqual(o.c_tablename, 'modifier_dimension') self.assertEqual(o.c_columndatatype, 'T') self.assertEqual(o.c_columnname, 'modifier_path') self.assertEqual(o.c_operator, 'like') self.assertEqual(o.c_dimcode, '\\PATH\\subpath\\')
def test_concept_query(self): from i2fhirb2.i2b2model.metadata.i2b2ontologyquery import ConceptQuery from i2fhirb2.i2b2model.metadata.i2b2ontology import OntologyEntry q = ConceptQuery("foo") self.assertEqual( "SELECT concept_cd\nFROM concept_dimension\nWHERE concept_path = 'foo'", str(q)) q.where_obj = '\\path\\%' self.assertEqual( "SELECT concept_cd\nFROM concept_dimension\nWHERE concept_path = '\\path\\%'", str(q)) o = OntologyEntry("\\PATH\\subpath\\", ConceptQuery('\\PATH\\subpath\\'), None, "74400008") self.assertEqual(o.c_facttablecolumn, 'concept_cd') self.assertEqual(o.c_tablename, 'concept_dimension') self.assertEqual(o.c_columndatatype, 'T') self.assertEqual(o.c_columnname, 'concept_path') self.assertEqual(o.c_operator, '=') self.assertEqual(o.c_dimcode, '\\PATH\\subpath\\')
def output_ontology(opts: Namespace, output: List[OntologyEntry]) -> bool: """ Generate the i2b2 ontology output if required :param opts: input options :param output: set of ontology entries :return: success indicator """ table_name = i2b2tablenames.ontology_table if not opts.table or opts.table == table_name: if opts.outdir: return write_tsv(opts.outdir, table_name, OntologyEntry._header(), output) else: table = opts.tables.ontology_table change_column_length(table, table.c.c_basecode, 200, opts.tables.ont_engine) # MedicationStatement is 1547 long change_column_length(table, table.c.c_tooltip, 1600, opts.tables.ont_engine) return update_dimension_table( output, opts, table, 'c_basecode', [opts.base.replace('\\', '') + ':', 'W5']) else: return True
def test_concept_ontology_entry(self): from i2fhirb2.fhir.fhirspecific import FHIR from i2fhirb2.i2b2model.metadata.i2b2ontology import ConceptOntologyEntry, OntologyEntry OntologyEntry._clear() navigational_path = '\\FHIR\\administrative\\individual\\Patient\\' ontology_path = "\\FHIR\\Patient\\" OntologyEntry.graph = shared_graph OntologyEntry.sourcesystem_cd = "STU3" OntologyEntry.update_date = datetime.datetime(2017, 5, 25, 13, 0) subj = FHIR.Patient o = ConceptOntologyEntry(subj, navigational_path, ontology_path, True) self.assertEqual( OrderedDict([ ('c_hlevel', 3), ('c_fullname', '\\FHIR\\administrative\\individual\\Patient\\'), ('c_name', 'Patient'), ('c_synonym_cd', 'N'), ('c_visualattributes', 'LA '), ('c_totalnum', None), ('c_basecode', 'FHIR:Patient'), ('c_metadataxml', None), ('c_facttablecolumn', 'concept_cd'), ('c_tablename', 'concept_dimension'), ('c_columnname', 'concept_path'), ('c_columndatatype', 'T'), ('c_operator', '='), ('c_dimcode', '\\FHIR\\Patient\\'), ('c_comment', 'Demographics and other administrative information about an ' 'individual or animal receiving care or other health-related ' 'services.'), ('c_tooltip', 'Demographics and other administrative information about an ' 'individual or animal receiving care or other health-related ' 'services.'), ('m_applied_path', '@'), ('update_date', datetime.datetime(2017, 5, 25, 13, 0)), ('download_date', datetime.datetime(2017, 5, 25, 13, 0)), ('import_date', datetime.datetime(2017, 5, 25, 13, 0)), ('sourcesystem_cd', 'STU3'), ('valuetype_cd', None), ('m_exclusion_cd', None), ('c_path', None), ('c_symbol', None) ]), o._freeze()) o = ConceptOntologyEntry(subj, navigational_path, ontology_path, False) self.assertEqual( OrderedDict([ ('c_hlevel', 3), ('c_fullname', '\\FHIR\\administrative\\individual\\Patient\\'), ('c_name', 'Patient'), ('c_synonym_cd', 'N'), ('c_visualattributes', 'FA '), ('c_totalnum', None), ('c_basecode', 'FHIR:Patient'), ('c_metadataxml', None), ('c_facttablecolumn', 'concept_cd'), ('c_tablename', 'concept_dimension'), ('c_columnname', 'concept_path'), ('c_columndatatype', 'T'), ('c_operator', '='), ('c_dimcode', '\\FHIR\\Patient\\'), ('c_comment', 'Demographics and other administrative information about an ' 'individual or animal receiving care or other health-related ' 'services.'), ('c_tooltip', 'Demographics and other administrative information about an ' 'individual or animal receiving care or other health-related ' 'services.'), ('m_applied_path', '@'), ('update_date', datetime.datetime(2017, 5, 25, 13, 0)), ('download_date', datetime.datetime(2017, 5, 25, 13, 0)), ('import_date', datetime.datetime(2017, 5, 25, 13, 0)), ('sourcesystem_cd', 'STU3'), ('valuetype_cd', None), ('m_exclusion_cd', None), ('c_path', None), ('c_symbol', None) ]), o._freeze())