Exemplo n.º 1
0
 def required_exclusions(context: Context) -> None:
     if context.member.age >= 66:
         if context.long_term_institution or context.enrolled_in_snp:
             context.required_exclusion = True
         elif context.frailty and (context.advanced_illness
                                   or context.on_dementia_meds):
             context.required_exclusion = True
Exemplo n.º 2
0
    def init_visits(member: dict, context: Context) -> None:

        if 'visits' in member:
            for visit in member['visits']:
                if visit['ServiceDate'] is None:
                    continue
                context.add_encounter(visit)
Exemplo n.º 3
0
    def enrollments(self, context: Context) -> None:

        accumulator = {}
        for enrollment in context.enrollments:

            # check anchor date
            if self.anchor_date in enrollment.dates:
                context.anchor_date_eligibility = True

            # check snp enrollment
            if not enrollment.dates.intersection(self.measurement_year_date_range).empty \
                    and enrollment.payer in ['SN1', 'SN2', 'SN3']:
                context.enrolled_in_snp = True

            if not enrollment.dates.intersection(
                    self.eligible_date_range).empty:
                for ce_date_range in self.ce_date_ranges:
                    ce_intersection = ce_date_range.intersection(
                        enrollment.dates)
                    if not ce_intersection.empty:
                        year = ce_intersection[0].year
                        if year in accumulator:
                            accumulator[
                                year] = accumulator[year] & ce_intersection
                        else:
                            accumulator[year] = ce_intersection

        context.gaps_in_care = self.gaps_in_care(accumulator)
Exemplo n.º 4
0
    def init_member(member: dict, context: Context) -> None:
        from model.member import Member
        from util import natus_util

        context.reset()
        member_id = member['MemberId']
        age = natus_util.age(member['DOB'], context.run_date)
        is_female = True if member['Gender'] == 'F' else False
        context.member = Member(member_id, age, is_female)
Exemplo n.º 5
0
 def start(self, member_id: str):
     ctx = Context(self.run_date)
     if member_id:
         self.process_member(
             self.db_con.find('MemberId', member_id, 'member'), ctx)
     else:
         for member in self.db_con.read('member'):
             self.process_member(member, ctx)
Exemplo n.º 6
0
    def visit(self, context: Context) -> None:

        outpatient_visit_counter = 0
        inpatient_visit_counter = 0
        optional_excl = optional_exclusions.OptionalExclusions()

        for visit in context.visits:
            self.had_bilateral_mastectomy(visit, context, optional_excl)
            if visit.service_date.year == context.run_date.year \
                    and bool(set(visit.codes).intersection(self.frailty_codes)):
                context.frailty = True

            # TODO non acute encounter on different dates
            if visit.service_date.year in [
                    context.run_date.year, context.run_date.year - 1
            ]:
                if (bool(self.outpatient_codes.intersection(visit.codes))
                        or bool(
                            self.observation_codes.intersection(visit.codes))
                        or bool(self.ed_codes.intersection(visit.codes))
                        or bool(
                            self.non_acute_inpatient_codes.intersection(
                                visit.codes))):

                    if bool(
                            self.advanced_illness_codes.intersection(
                                visit.codes)):
                        outpatient_visit_counter += 1

                if (bool(self.acute_inpatient_codes.intersection(visit.codes))
                        and bool(
                            self.advanced_illness_codes.intersection(
                                visit.codes))):

                    inpatient_visit_counter += 1

        if not optional_excl.empty():
            context.optional_exclusions = self.optional_exclusions(
                optional_excl)

        if outpatient_visit_counter >= 2 or inpatient_visit_counter >= 1:
            context.advanced_illness = True
Exemplo n.º 7
0
 def dementia_meds(context: Context) -> None:
     if context.pharm:
         service_year = context.pharm.service_date.year
         if service_year in [
                 context.run_date.year, context.run_date.year - 1
         ]:
             for med_name in context.pharm.dispensed_med_name:
                 med_name_lower = med_name.lower()
                 if 'donepezil' in med_name_lower or 'galantamine' in med_name_lower or \
                         'rivastigmine' in med_name_lower or 'memantine' in med_name_lower:
                     context.on_dementia_meds = True
Exemplo n.º 8
0
	def fromXml(self, tree):
		self._tree = tree
		root = tree
		self.tasks = dict()
		self.tasks_tree = dict()
		self.folders = dict()
		self.folders_tree = dict()
		self.contexts = dict()
		self.contexts_tree = dict()

		for e in root:
			tag = extract_tag(e.tag)
			if tag == 'task':
				task = Task()
				task.fromXmlNode(e)
				self.tasks[task.id] = task
				parent = task.parentRef or task.folderRef or "/"
				if not parent in self.tasks_tree:
					self.tasks_tree[parent] = []
				self.tasks_tree[parent].append(task)
			elif tag == 'folder':
				folder = Folder()
				folder.fromXmlNode(e)
				self.folders[folder.id] = folder
				parent_folder = folder.parentRef or "/"
				if not parent_folder in self.folders_tree:
					self.folders_tree[parent_folder] = []
				self.folders_tree[parent_folder].append(folder)
			elif tag == 'context':
				context = Context()
				context.fromXmlNode(e)
				self.contexts[context.id] = context
				parent_ctx = context.parentRef or "/"
				if not parent_ctx in self.contexts_tree:
					self.contexts_tree[parent_ctx] = []
				self.contexts_tree[parent_ctx].append(context)
Exemplo n.º 9
0
from pyignite import Client

from cache.instance_data import PerperInstanceData
from cache.stream_data import StreamData
from model.state import State
from model.context import Context
from services.serializer import Serializer

serializer = Serializer()
ignite = Client()
ignite.connect('localhost', 10800)
ignite.register_binary_type(StreamData)

instance = PerperInstanceData(ignite, serializer)
state = State(instance, ignite, serializer)
context = Context(instance, None, state, ignite)

context.stream_action()
print("Reading stream")
print(ignite.get_cache_names())
streams_cache = ignite.get_cache("streams")
for el in streams_cache.scan():
    print(el)
Exemplo n.º 10
0
 def mmdf(self, context: Context) -> None:
     for mmdf in context.mmdf:
         if mmdf.run_date in self.measurement_year_date_range and mmdf.lti_flag:
             context.long_term_institution = True
Exemplo n.º 11
0
 def age_eligible(self, context: Context) -> None:
     context.age_eligibility = eval(self.age_rule)
Exemplo n.º 12
0
 def init_mmdf(member: dict, context: Context) -> None:
     if 'HospiceLti' in member:
         mmdfs = member['HospiceLti']
         for mmdf in mmdfs:
             context.add_mmdf(mmdf)
Exemplo n.º 13
0
 def init_pharm(member: dict, context: Context) -> None:
     if 'pharm' in member:
         pharm = member['pharm']
         context.add_pharm(pharm)
Exemplo n.º 14
0
    def init_enrollments(member: dict, context: Context):

        member_enrollments = member['enrollments']
        for member_enrollment in member_enrollments:
            context.add_enrollment(member_enrollment)