コード例 #1
0
 def test_risk_profile_incremental_calculation(self):
     yesterday = datetime.now() - timedelta(days=1)
     two_days_ago = yesterday - timedelta(days=1)
     
     # attended
     visit1 = self.importer.update_local_done_visit(
         self.user,
         self.clinic,
         create_instance(DoneVisit, {
             'key_id': '02-123456701', 
             'te_id': self.patient.te_id, 
             'done_date': '2100-07-01 00:00:00'
         }))
     # attended
     visit2 = self.importer.update_local_done_visit(
         self.user,
         self.clinic, 
         create_instance(DoneVisit, {
             'key_id': '02-123456702', 
             'te_id': self.patient.te_id, 
             'done_date': '2100-07-02 00:00:00'
         }))
     # we've attended all our visits, our risk profile should be zero
     self.assertEquals(self.reload_patient().risk_profile, 0.0)
     
     # missed
     visit3 = self.importer.update_local_missed_visit(
         self.user,
         self.clinic, 
         create_instance(MissedVisit, {
             'key_id': '02-123456703', 
             'te_id': self.patient.te_id, 
             'missed_date': yesterday.strftime('%Y-%m-%d 00:00:00')
         }))
     # attended two out of three, 33% risk
     self.assertAlmostEquals(self.reload_patient().risk_profile, 0.33, places=2)
     visit4 = self.importer.update_local_missed_visit(
         self.user,
         self.clinic, 
         create_instance(MissedVisit, {
             'key_id': '02-123456704', 
             'te_id': self.patient.te_id, 
             'missed_date': two_days_ago.strftime('%Y-%m-%d 00:00:00')
         }))
     # attended two out of 4, 50% risk
     self.assertAlmostEquals(self.reload_patient().risk_profile, 0.50, places=2)
コード例 #2
0
 def testInvalidSexImport(self):
     # import an invalid patient record
     self.assertRaises(InvalidValueException,    # exception
         self.importer.update_local_patient,     # callable 
         self.user,                             # args
         create_instance(PatientUpdate, {        
             'te_id': '01-1235', 
             'age': '31', 
             'sex': 'Feale', 
             'celphone': '082123'
         })
     )
コード例 #3
0
 def testCountryCodeMsisdn(self):
     """country code included in 'msisdn'"""
     patient = self.importer.update_local_patient(self.user,
         create_instance(PatientUpdate, {
             'te_id': '03-12345', 
             'age': '55', 
             'sex': 'Male', 
             'celphone': '+27823211234'
         }))
     patient = reload_record(patient)
     self.assertEquals(patient.history.latest().get_history_type_display(), 
                         'Created')
     self.assertEquals(patient.msisdns.latest('id').msisdn, '27823211234')
コード例 #4
0
 def testInvalidImport(self):
     """attempt import of an invalid record"""
     self.assertRaises(Patient.DoesNotExist,         # exception
         self.importer.update_local_coming_visit,    # callback
         self.user,                                  # args
         self.clinic,                                
         create_instance(                            
             ComingVisit, {
             'key_id': '123456789', 
             'te_id': '01-1245', 
             'scheduled_visit_date':'2080-26 00:00:00'
         })
     )
コード例 #5
0
 def testDuplicateMsisdnImport(self):
     """duplicate 'msisdn' import"""
     # new patient, not in fixtures
     patientA = self.importer.update_local_patient(self.user,
         create_instance(PatientUpdate, {
             'te_id': '03-12345', 
             'age': '30', 
             'sex': 'Male', 
             'celphone': '0821111111'
         }))
     
     # existing patient, in fixtures
     patientB = self.importer.update_local_patient(self.user, 
         create_instance(PatientUpdate, {
             'te_id': '01-12345', 
             'age': '30', 
             'sex': 'Male', 
             'celphone': '0821111111'
         }))
     
     patientA = reload_record(patientA)
     patientB = reload_record(patientB)
     
     self.assertEquals(
         patientA.history.latest().get_history_type_display(), 
         'Created'
     )
     
     self.assertEquals(
         patientB.history.latest().get_history_type_display(), 
         'Changed'
     )
     
     # both phone numbers should point to the same MSISDN record 
     # in the database
     self.assertEqual(
         patientA.msisdns.latest('id').id, 
         patientB.msisdns.latest('id').id
     )
コード例 #6
0
 def test_risk_profile_calculation(self):
     today = datetime.now() - timedelta(days=1)
     visit = self.importer.update_local_missed_visit(
         self.user,
         self.clinic, 
         create_instance(MissedVisit, {
         'key_id':'02-123456789', 
         'te_id':self.patient.te_id, 
         'missed_date': today.strftime('%Y-%m-%d 00:00:00')
         })
     )
     self.assertEquals(visit.status, 'm') # make sure it's flagged as missed
                                         # otherwise this won't make sense
     self.assertEquals(self.reload_patient().risk_profile, 1.0)
コード例 #7
0
 def testDelete(self):
     """delete a visit"""
     visit = self.importer.update_local_deleted_visit(self.user, create_instance(DeletedVisit, {
         'key_id': '01-123456789', 
         'te_id': '01-12345'
     }))
     
     self.assertEqual(visit.deleted, True)
     self.assertEqual(visit.history.latest().get_history_type_display(), 
                         'Changed')          # it is Changed because of the soft delete
     self.assertRaises(Visit.DoesNotExist,   # exception
                         Visit.objects.get,  # callback
                         pk=visit.pk         # args
                     )
コード例 #8
0
 def testIndicateNewAttended(self):
     """indicate a new attended visit"""
     visit = self.importer.update_local_done_visit(
         self.user,
         self.clinic,
         create_instance(DoneVisit, {
             'key_id': '02-123456789', 
             'te_id': '01-12345', 
             'done_date': '2100-07-01 00:00:00'
         })
     )
     visit = reload_record(visit)
     self.assertEqual(visit.history.latest().get_history_type_display(), 
                         'Created')
     self.assertEquals(visit.status, 'a')
     self.assertEquals(visit.date, date(2100, 7, 1))
コード例 #9
0
 def testIndicateMissed(self):
     """indicate a missed visit"""
     visit = self.importer.update_local_missed_visit(
         self.user,
         self.clinic, 
         create_instance(MissedVisit, {
             'key_id': '01-123456799', 
             'te_id': '01-12345', 
             'missed_date': date.today().strftime('%Y-%m-%d 00:00:00')
         })
     )
     visit = reload_record(visit)
     # event = importMissedVisit(self.event, self.clinic, {'key_id':'01-123456789', 'te_id':'01-12345', 'missed_date':'2100-06-01 00:00:00'})
     self.assertEqual(visit.history.latest().get_history_type_display(), 
                         'Created')
     self.assertEquals(visit.status, 'm')
     self.assertEquals(visit.date, date.today())
コード例 #10
0
 def testNewVisit(self):
     """import a new visit"""
     visit = self.importer.update_local_coming_visit(
         self.user,
         self.clinic,
         create_instance(ComingVisit, {
             'key_id': '02-123456789', 
             'te_id': '01-12345', 
             'scheduled_visit_date': '2100-06-01 00:00:00'
         })
     )
     visit = reload_record(visit)
     self.assertEqual(visit.history.latest().get_history_type_display(), 
                         'Created')
     self.assertEquals(visit.te_visit_id, '02-123456789')
     self.assertEquals(visit.patient.te_id, '01-12345')
     self.assertEquals(visit.date, date(2100, 6, 1))
コード例 #11
0
 def testMultipleMsisdn(self):
     """multiple 'msisdn' import (ons country code 'msisdn' without plus)"""
     patient = self.importer.update_local_patient(self.user, 
         create_instance(PatientUpdate, {
             'te_id': '03-12345', 
             'age': '18', 
             'sex': 'Female', 
             'celphone': '0821231111/27821232222'
         }))
     patient = reload_record(patient)
     self.assertEquals(patient.history.latest().get_history_type_display(), 
                         'Created')
     
     msisdns = patient.msisdns.all()
     self.assertEqual(len(msisdns), 2)
     self.assertEqual(msisdns[0].msisdn, '27821232222')
     self.assertEqual(msisdns[1].msisdn, '27821231111')
コード例 #12
0
 def testIndicateNewMissed(self):
     # indicate a new attended visit
     yesterday = date.today() - timedelta(days=1)
     visit = self.importer.update_local_missed_visit(
         self.user,
         self.clinic,
         create_instance(MissedVisit, {
             'key_id': '02-123456789', 
             'te_id': '01-12345', 
             'missed_date': yesterday.strftime('%Y-%m-%d 00:00:00')
         })
     )
     visit = reload_record(visit)
     self.assertEqual(visit.history.latest().get_history_type_display(), 
                         'Created')
     self.assertEquals(visit.status, 'm')
     self.assertEquals(visit.date, yesterday)
コード例 #13
0
 def testBasicImport(self):
     """basic patient record import"""
     patient = self.importer.update_local_patient(self.user,
         create_instance(PatientUpdate, {
             'te_id': '03-12345', 
             'age': '25', 
             'sex': 'Male', 
             'celphone': '0821231234'
         }))
     # reload to make sure we have the database values
     patient = reload_record(patient)
     
     self.assertEquals(patient.te_id, '03-12345')
     self.assertEquals(patient.age, 25)
     self.assertEquals(patient.sex, 'm')
     self.assertEquals(patient.msisdns.latest('id').msisdn, '27821231234')
     self.assertEquals(
         patient.history.latest().get_history_type_display(), 
         'Created'
     )
コード例 #14
0
 def testAlterDetails(self):
     """duplicate 'te_id' import with altered details"""
     original_patient = Patient.objects.get(te_id='02-12345')
     original_history_count = original_patient.history.count()
     patient = self.importer.update_local_patient(self.user, 
         create_instance(PatientUpdate, {
             'te_id': '02-12345', 
             'age': '35', 
             'sex': 'Female', 
             'celphone':'0821234321'
         }))
     patient = reload_record(patient)
     self.assertEquals(
         patient.history.latest().get_history_type_display(), 
         'Changed'
     )
     self.assertEquals(patient.age, 35)
     self.assertEquals(patient.sex, 'f')
     self.assertEquals(patient.msisdns.latest('id').msisdn, '27821234321')
     self.assertEquals(patient.history.count(), original_history_count + 1) # this is an update, should have a new history item
コード例 #15
0
 def testIndicateReschedule(self):
     """reschedule a visit"""
     missed_future_date = date(2200,5,1)
     # make sure we have a visit to reschedule
     original_visit = Visit.objects.get(te_visit_id='01-123456789')
     # make sure the updated date is actually in the future
     self.assertTrue(original_visit.date < missed_future_date)
     visit = self.importer.update_local_missed_visit(
         self.user,
         self.clinic,
         create_instance(MissedVisit, {
             'key_id': '01-123456789', 
             'te_id': '01-12345', 
             'missed_date': '%s 00:00:00' % missed_future_date # future date should be seen as a reschedule
         })
     )
     visit = reload_record(visit)
     self.assertEqual(visit.history.latest().get_history_type_display(), 
                         'Changed')
     self.assertEquals(visit.status, 'r')
     self.assertEquals(visit.date, date(2200, 5, 1))
コード例 #16
0
ファイル: importer.py プロジェクト: graemeglass/txtalert
 def test_for_history_duplication(self):
     """
     Test for history duplication happening after numerous imports over time
     
     The data for this test has been gleaned from the txtalert log being 
     used in production. For some reason imports that should be 'missed' 
     are set as 'rescheduled' and eventhough nothing changes in the 
     appointment, a historical visit is still saved.
     """
     
     # create the patient for which we'll get the visits
     patient = Patient.objects.create(te_id='02-82088', age=29, sex='m',
                                         owner=self.user)
     
     # importer
     importer = Importer()
     # [importer] 2010-03-18 08:00:37,705 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-18 08:01:39,354 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-19 08:00:36,876 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-19 08:01:36,747 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-20 08:00:29,600 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-20 08:01:30,926 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-21 08:00:28,052 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-21 08:01:33,909 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-22 08:00:27,711 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-22 08:01:33,549 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-23 08:00:26,453 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-23 08:01:36,731 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-25 09:00:41,774 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-25 09:00:41,850 DEBUG Updating existing Visit: 37361 / ({'date': datetime.date(2010, 3, 24), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36)} vs {'status': u'r', 'comment': u'', 'visit_type': u'', 'deleted': 0, 'created_at': datetime.datetime(2010, 3, 18, 8, 0, 37), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36), 'te_visit_id': u'02-091967084', 'date': datetime.date(2010, 3, 24), 'id': 37361L})
     # [importer] 2010-03-25 09:01:40,902 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     
     visit = patient.visit_set.latest()
     
     self.assertEquals(visit.status, 'm')
     self.assertEquals(visit.history.count(), 1)
     
     done_visit = create_instance(DoneVisit, {'dr_site_name': '', 'dr_site_id': '', 'done_date': '2010-03-24 00:00:00', 'scheduled_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_done_visit = importer.update_local_done_visit(self.user, self.clinic, done_visit)
     
     visit = patient.visit_set.latest()
     self.assertEquals(visit.status, 'a')
     self.assertEquals(visit.history.count(), 2)
コード例 #17
0
    def test_for_history_duplication(self):
        """
        Test for history duplication happening after numerous imports over time
        
        The data for this test has been gleaned from the txtalert log being 
        used in production. For some reason imports that should be 'missed' 
        are set as 'rescheduled' and eventhough nothing changes in the 
        appointment, a historical visit is still saved.
        """

        # create the patient for which we'll get the visits
        patient = Patient.objects.create(te_id='02-82088',
                                         age=29,
                                         sex='m',
                                         owner=self.user)

        # importer
        importer = Importer()
        # [importer] 2010-03-18 08:00:37,705 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-18 08:01:39,354 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-19 08:00:36,876 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-19 08:01:36,747 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-20 08:00:29,600 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-20 08:01:30,926 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-21 08:00:28,052 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-21 08:01:33,909 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-22 08:00:27,711 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-22 08:01:33,549 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-23 08:00:26,453 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-23 08:01:36,731 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-25 09:00:41,774 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-25 09:00:41,850 DEBUG Updating existing Visit: 37361 / ({'date': datetime.date(2010, 3, 24), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36)} vs {'status': u'r', 'comment': u'', 'visit_type': u'', 'deleted': 0, 'created_at': datetime.datetime(2010, 3, 18, 8, 0, 37), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36), 'te_visit_id': u'02-091967084', 'date': datetime.date(2010, 3, 24), 'id': 37361L})
        # [importer] 2010-03-25 09:01:40,902 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)

        visit = patient.visit_set.latest()

        self.assertEquals(visit.status, 'm')
        self.assertEquals(visit.history.count(), 1)

        done_visit = create_instance(
            DoneVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'done_date': '2010-03-24 00:00:00',
                'scheduled_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_done_visit = importer.update_local_done_visit(
            self.user, self.clinic, done_visit)

        visit = patient.visit_set.latest()
        self.assertEquals(visit.status, 'a')
        self.assertEquals(visit.history.count(), 2)