def tearDown(self):
        """Restore state from any setUp or test steps"""
        log.info("Purge test records from the database")

        DBUtil.execute \
        (   """delete from patient_item 
            where clinical_item_id in 
            (   select clinical_item_id
                from clinical_item as ci, clinical_item_category as cic
                where ci.clinical_item_category_id = cic.clinical_item_category_id
                and cic.source_table = '%s'
            );
            """ % TEST_SOURCE_TABLE
        )
        DBUtil.execute \
        (   """delete from clinical_item 
            where clinical_item_category_id in 
            (   select clinical_item_category_id 
                from clinical_item_category 
                where source_table = '%s'
            );
            """ % TEST_SOURCE_TABLE
        )
        DBUtil.execute(
            "delete from clinical_item_category where source_table = '%s';" %
            TEST_SOURCE_TABLE)

        query = SQLQuery()
        query.delete = True
        query.addFrom("stride_patient")
        query.addWhere("pat_id < 0")
        DBUtil.execute(query)

        DBTestCase.tearDown(self)
Esempio n. 2
0
    def tearDown(self):
        """Restore state from any setUp or test steps"""
        log.info("Purge test records from the database")

        DBUtil.execute \
        (   """delete from patient_item
            where clinical_item_id in
            (   select clinical_item_id
                from clinical_item as ci, clinical_item_category as cic
                where ci.clinical_item_category_id = cic.clinical_item_category_id
                and cic.source_table = '%s'
            );
            """ % TEST_SOURCE_TABLE
        )
        DBUtil.execute \
        (   """delete from clinical_item
            where clinical_item_category_id in
            (   select clinical_item_category_id
                from clinical_item_category
                where source_table = '%s'
            );
            """ % TEST_SOURCE_TABLE
        )
        DBUtil.execute(
            "delete from clinical_item_category where source_table = '%s';" %
            TEST_SOURCE_TABLE)

        query = SQLQuery()
        query.delete = True
        query.addFrom("stride_dx_list")
        query.addWhereIn("pat_id", self.patientIdStrList)
        DBUtil.execute(query)

        query = SQLQuery()
        query.delete = True
        query.addFrom("stride_icd9_cm")
        query.addWhereIn("cui", self.icd9CUIdStrList)
        DBUtil.execute(query)

        query = SQLQuery()
        query.delete = True
        query.addFrom("stride_icd10_cm")
        query.addWhereIn("order_number", self.icd10_order_number_str_list)
        DBUtil.execute(query)

        DBTestCase.tearDown(self)
Esempio n. 3
0
    def tearDown(self):
        """Restore state from any setUp or test steps"""
        log.info("Purge test records from the database")
        query = SQLQuery()
        query.delete = True
        query.addFrom("access_log")
        query.addWhereIn("user_id", self.testUserIDs)
        DBUtil.execute(query)

        query = SQLQuery()
        query.delete = True
        query.addFrom("user")
        query.addWhereIn("user_id", self.testUserIDs)
        DBUtil.execute(query)

        DBUtil.execute("drop table %s;" % TEST_SOURCE_TABLE)
        DBTestCase.tearDown(self)
Esempio n. 4
0
    def signOrders(self,
                   userId,
                   patientId,
                   currentTime,
                   orderItemIds,
                   discontinuePatientOrderIds=None,
                   conn=None):
        """Commit new order item IDs for the given patient and starting now,
        and discontinue (set end date) for any existing orders specified.
        
        Record any patient state transitions the orders would trigger
        """
        extConn = True
        if conn is None:
            conn = self.connFactory.connection()
            extConn = False
        try:
            # Denormalized recording of current patient state to facilitate easy retrieval linked to orders later
            patientInfo = self.loadPatientInfo([patientId],
                                               currentTime,
                                               conn=conn)[0]
            stateId = patientInfo["sim_state_id"]
            postStateIdByItemId = patientInfo["postStateIdByItemId"]

            orderItemIdSet = set(
                orderItemIds)  # Ensure unique and facilitate set operations

            insertDict = {
                "sim_user_id": userId,
                "sim_patient_id": patientId,
                "sim_state_id": stateId,
                "relative_time_start": currentTime
            }
            for itemId in orderItemIdSet:
                insertDict["clinical_item_id"] = itemId
                DBUtil.insertRow("sim_patient_order", insertDict, conn=conn)

            # See if any of these new orders triggered state transitions
            triggerItemIds = postStateIdByItemId.viewkeys() & orderItemIdSet
            while triggerItemIds:  # Found a trigger item
                triggerItemId = None
                if len(
                        triggerItemIds
                ) > 1:  # Found multiple. Weird. Arbitrarily act on the one that appeared first in the input list
                    for itemId in orderItemIds:
                        if itemId in triggerItemIds:
                            triggerItemId = itemId
                            break
                else:
                    triggerItemId = triggerItemIds.pop()
                postStateId = postStateIdByItemId[triggerItemId]

                # Record the state transition
                self.recordStateTransition(patientId,
                                           stateId,
                                           postStateId,
                                           currentTime,
                                           conn=conn)

                # Reload patientInfo to reflect new patient state
                patientInfo = self.loadPatientInfo([patientId],
                                                   currentTime,
                                                   conn=conn)[0]
                stateId = patientInfo["sim_state_id"]
                postStateIdByItemId = patientInfo["postStateIdByItemId"]

                orderItemIdSet.discard(
                    triggerItemId
                )  # Don't keep looking for this one, important to avoid infinite loop
                triggerItemIds = postStateIdByItemId.viewkeys(
                ) & orderItemIdSet

            if discontinuePatientOrderIds is not None:
                updateDict = {"relative_time_end": currentTime}
                for patientOrderId in discontinuePatientOrderIds:
                    DBUtil.updateRow("sim_patient_order",
                                     updateDict,
                                     patientOrderId,
                                     conn=conn)
                # If order is discontinued/cancelled at the same (or before) time of entry,
                #   take that as a signal to cleanup and delete the record altogether
                #   (effectively there was no time at which the order was ever allowed to exist)
                deleteQuery = SQLQuery()
                deleteQuery.delete = True
                deleteQuery.addFrom("sim_patient_order")
                deleteQuery.addWhereEqual("sim_patient_id", patientId)
                deleteQuery.addWhere(
                    "relative_time_end <= relative_time_start")
                DBUtil.execute(deleteQuery, conn=conn)
        finally:
            conn.commit()
            if not extConn:
                conn.close()