Exemple #1
0
def report_ccr(request, record=None, carenet=None):
  """ Export patient data as a Continuity of Care Record (CCR) document.
  
  Will return :http:statuscode:`200` with a CCR on success, 
  :http:statuscode:`400` if neither a record or carenet was passed.

  """

  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  # FIXME: fix these carenet filters to be smarter

  active_status = StatusName.objects.get(name='active')

  medications = carenet_facts_filter(carenet,
                                     Medication.objects.select_related().filter(record=record, document__status=active_status))
  immunizations = carenet_facts_filter(carenet, 
                                       Immunization.objects.select_related().filter(record=record, 
                                                                                    document__status=active_status))
  vitalsigns = carenet_facts_filter(carenet,
                                    VitalSigns.objects.select_related().filter(record=record, 
                                                                           document__status=active_status))


  return render_template('reports/ccr', 
                         {'record': record, 'now': datetime.datetime.utcnow(),
                          'medications': medications,
                          'immunizations' : immunizations,
                          'vitalsigns' : vitalsigns},
                         type="xml")
Exemple #2
0
def report_ccr(request, record=None, carenet=None):
  if carenet:
    record = carenet.record
  if not record:
    return HttpResponseBadRequest()

  # FIXME: fix these carenet filters to be smarter

  active_status = StatusName.objects.get(name='active')

  medications = carenet_facts_filter(carenet,
                                     Medication.objects.select_related().filter(record=record, document__status=active_status))
  immunizations = carenet_facts_filter(carenet, 
                                       Immunization.objects.select_related().filter(record=record, 
                                                                                    document__status=active_status))
  vitalsigns = carenet_facts_filter(carenet,
                                    Vitals.objects.select_related().filter(record=record, 
                                                                           document__status=active_status))


  return render_template('reports/ccr', 
                         {'record': record, 'now': datetime.datetime.utcnow(),
                          'medications': medications,
                          'immunizations' : immunizations,
                          'vitalsigns' : vitalsigns},
                         type="xml")
Exemple #3
0
    def _apply_filters(self, results):
        # Carenet filters.
        # DH 04-07-2011: Moved up front and changed to not evaluate the queryset

        # Need to allow queries with no record or carenet, i.e., Audit, which isn't constrained to a single record
        if self.record:
            results = results.filter(record=self.record)
        results = carenet_facts_filter(self.carenet, results)

        filter_args = {}
        for field, val in self.query_filters.iteritems():
            if self.valid_filters.has_key(field):
                field_type = self.valid_filters[field][1]
                try:
                    parsed_val = EXPOSED_TYPES[field_type](val)
                    filter_args[self.valid_filters[field][0]] = parsed_val
                except:
                    raise ValueError(
                        'Invalid argument type for field %s: expected %s, got %s'
                        % (field, field_type, val))
            else:
                raise ValueError('Invalid filter for fact type %s: %s' %
                                 (self.model.__name__, field))

        if self.date_range:
            if self.valid_filters.has_key(self.date_range['field']):
                field_type = self.valid_filters[self.date_range['field']][1]
                if field_type != DATE:
                    raise ValueError(
                        'Date Ranges may only be calculated over fields of type "date": got %s(%s)'
                        % (self.date_range['field'], field_type))

                if self.date_range['start_date']:
                    filter_args['%s__gte' %
                                (self.valid_filters[self.date_range['field']]
                                 [0])] = self.date_range['start_date']
                if self.date_range['end_date']:
                    filter_args['%s__lte' %
                                (self.valid_filters[self.date_range['field']]
                                 [0])] = self.date_range['end_date']
            else:
                raise ValueError(
                    'Invalid date range filter for fact type %s: %s' %
                    (self.model.__name__, date_range['field']))

        if self.status:
            filter_args['document__status'] = self.status

        if filter_args:
            results = results.filter(**filter_args)

        # Results look like:
        # [obj1, obj2, ...] For every Fact object we haven't filtered out
        return results
    def _apply_filters(self, results):
        # Carenet filters.
        # DH 04-07-2011: Moved up front and changed to not evaluate the queryset

        # Need to allow queries with no record or carenet, i.e., Audit, which isn't constrained to a single record
        if self.record:
            results = results.filter(record=self.record)
        results = carenet_facts_filter(self.carenet, results)

        filter_args = {}
        for field, val in self.query_filters.iteritems():
            if self.valid_filters.has_key(field):
                field_type = self.valid_filters[field][1]
                try:
                    parsed_val = EXPOSED_TYPES[field_type](val)
                    filter_args[self.valid_filters[field][0]] = parsed_val
                except:
                    raise ValueError(
                        "Invalid argument type for field %s: expected %s, got %s" % (field, field_type, val)
                    )
            else:
                raise ValueError("Invalid filter for fact type %s: %s" % (self.model.__name__, field))

        if self.date_range:
            if self.valid_filters.has_key(self.date_range["field"]):
                field_type = self.valid_filters[self.date_range["field"]][1]
                if field_type != DATE:
                    raise ValueError(
                        'Date Ranges may only be calculated over fields of type "date": got %s(%s)'
                        % (self.date_range["field"], field_type)
                    )

                if self.date_range["start_date"]:
                    filter_args["%s__gte" % (self.valid_filters[self.date_range["field"]][0])] = self.date_range[
                        "start_date"
                    ]
                if self.date_range["end_date"]:
                    filter_args["%s__lte" % (self.valid_filters[self.date_range["field"]][0])] = self.date_range[
                        "end_date"
                    ]
            else:
                raise ValueError(
                    "Invalid date range filter for fact type %s: %s" % (self.model.__name__, date_range["field"])
                )

        if self.status:
            filter_args["document__status"] = self.status

        if filter_args:
            results = results.filter(**filter_args)

        # Results look like:
        # [obj1, obj2, ...] For every Fact object we haven't filtered out
        return results