Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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))
Ejemplo n.º 3
0
    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())
Ejemplo n.º 4
0
    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')")
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
    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, '')
Ejemplo n.º 8
0
    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())
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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\\')
Ejemplo n.º 11
0
    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\\')
Ejemplo n.º 12
0
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
Ejemplo n.º 13
0
    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())