private void mergeDateOfBirth(Patient preferred, Patient notPreferred, PersonMergeLogData mergedData) { mergedData.setPriorDateOfBirth(preferred.getBirthdate()); mergedData.setPriorDateOfBirthEstimated(preferred.getBirthdateEstimated()); if (preferred.getBirthdate() == null || (preferred.getBirthdateEstimated() && !notPreferred.getBirthdateEstimated())) { preferred.setBirthdate(notPreferred.getBirthdate()); preferred.setBirthdateEstimated(notPreferred.getBirthdateEstimated()); } }
/** * @see org.openmrs.validator.PersonValidator#validate(Object,Errors) */ @Test public void shouldNotSetDeathBeforeBirth() { Patient pa = new Patient(1); Calendar birth = Calendar.getInstance(); birth.setTime(new Date()); birth.add(Calendar.YEAR, +5); pa.setBirthdate(birth.getTime()); Calendar death = Calendar.getInstance(); death.setTime(new Date()); pa.setDeathDate(death.getTime()); Errors errors = new BindException(pa, "patient"); validator.validate(pa, errors); Assert.assertTrue(errors.hasFieldErrors("deathDate")); }
@Test public void validate_shouldPassValidationIfVisitDateAfterBirthDate() { Visit visit = new Visit(); Patient patient = new Patient(); calendar.set(1974, 4, 8); patient.setBirthdate(calendar.getTime()); patient.setBirthdateEstimated(false); visit.setPatient(patient); calendar.set(1974, 4, 9); visit.setStartDatetime(calendar.getTime()); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertThat(errors, not(hasFieldErrors("startDatetime"))); }
/** * @see PersonValidator#validate(Object,Errors) */ @Test public void validate_shouldFailValidationIfBirthdateIsAFutureDate() { Patient pa = new Patient(1); Calendar birth = Calendar.getInstance(); birth.setTime(new Date()); birth.add(Calendar.YEAR, 20); pa.setBirthdate(birth.getTime()); Errors errors = new BindException(pa, "patient"); validator.validate(pa, errors); Assert.assertTrue(errors.hasFieldErrors("birthdate")); }
@Test public void validate_shouldPassValidationIfVisitDateOnBirthDate() { Visit visit = new Visit(); Patient patient = new Patient(); calendar.set(1974, 4, 8); patient.setBirthdate(calendar.getTime()); patient.setBirthdateEstimated(false); visit.setPatient(patient); calendar.set(1974, 4, 8); visit.setStartDatetime(calendar.getTime()); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertThat(errors, not(hasFieldErrors("startDatetime"))); }
/** * @see PersonValidator#validate(Object,Errors) */ @Test public void validate_shouldFailValidationIfBirthdateMakesPatientOlderThat120YearsOld() { Patient pa = new Patient(1); Calendar birth = Calendar.getInstance(); birth.setTime(new Date()); birth.add(Calendar.YEAR, -125); pa.setBirthdate(birth.getTime()); Errors errors = new BindException(pa, "patient"); validator.validate(pa, errors); Assert.assertTrue(errors.hasFieldErrors("birthdate")); }
@Test public void validate_shouldPassValidationIfVisitDateOnEstimatedBirthDatesGracePeriod() { Visit visit = new Visit(); Patient patient = new Patient(); calendar.set(2000, 7, 25); patient.setBirthdate(calendar.getTime()); patient.setBirthdateEstimated(true); calendar.set(2010, 7, 25); patient.setDeathDate(calendar.getTime()); visit.setPatient(patient); calendar.set(1995, 7, 25); visit.setStartDatetime(calendar.getTime()); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertThat(errors, not(hasFieldErrors("startDatetime"))); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorDateOfBirth() throws Exception { //retrieve preferred patient and set a date of birth GregorianCalendar cDate = new GregorianCalendar(); cDate.setTime(new Date()); //milliseconds are not serialized into the database. they will be ignored in the test cDate.set(Calendar.MILLISECOND, 0); Patient preferred = patientService.getPatient(999); preferred.setBirthdate(cDate.getTime()); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertEquals("prior date of birth was not audited", cDate.getTime(), audit.getPersonMergeLogData() .getPriorDateOfBirth()); }
@Test public void validate_shouldPassValidationIfVisitDateOnEstimatedBirthDatesMinimumOneYearGracePeriod() { Visit visit = new Visit(); Patient patient = new Patient(); calendar.set(2000, 7, 25); patient.setBirthdate(calendar.getTime()); patient.setBirthdateEstimated(true); calendar.set(2000, 8, 25); patient.setDeathDate(calendar.getTime()); visit.setPatient(patient); calendar.set(1999, 7, 25); visit.setStartDatetime(calendar.getTime()); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertThat(errors, not(hasFieldErrors("startDatetime"))); }
/** * @return a new VelocityFunctions instance for the given patientId */ private VelocityFunctions setupFunctionsForPatient(Integer patientId) throws Exception { HtmlForm htmlform = new HtmlForm(); Form form = new Form(); form.setEncounterType(new EncounterType(1)); htmlform.setForm(form); htmlform.setDateChanged(new Date()); htmlform.setXmlData("<htmlform></htmlform>"); Patient p = new Patient(patientId); String[] datePattern = {"yyyy.MM.dd"}; p.setBirthdate(DateUtils.parseDate("1970.01.01",datePattern )); measureAgeInDaysAndMonths(new Date(), p.getBirthdate()); FormEntrySession session = new FormEntrySession(p, htmlform, null); return new VelocityFunctions(session); }
@Test public void validate_shouldFailValidationIfVisitDateBeforeBirthDate() { Visit visit = new Visit(); Patient patient = new Patient(); calendar.set(1974, 4, 8); patient.setBirthdate(calendar.getTime()); patient.setBirthdateEstimated(false); visit.setPatient(patient); calendar.set(1974, 4, 7); visit.setStartDatetime(calendar.getTime()); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertThat(errors, hasFieldErrors("startDatetime", "Visit.startDateCannotFallBeforeTheBirthDateOfTheSamePatient")); }
@Test public void validate_shouldFailValidationIfVisitDateBeforeEstimatedBirthDatesMinimumOneYearGracePeriod() { Visit visit = new Visit(); Patient patient = new Patient(); calendar.set(2000, 7, 25); patient.setBirthdate(calendar.getTime()); patient.setBirthdateEstimated(true); calendar.set(2000, 8, 25); patient.setDeathDate(calendar.getTime()); visit.setPatient(patient); calendar.set(1999, 7, 24); visit.setStartDatetime(calendar.getTime()); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertThat(errors, hasFieldErrors("startDatetime", "Visit.startDateCannotFallBeforeTheBirthDateOfTheSamePatient")); } }
@Test public void validate_shouldFailValidationIfVisitDateBeforeEstimatedBirthDatesGracePeriod() { Visit visit = new Visit(); Patient patient = new Patient(); calendar.set(2000, 7, 25); patient.setBirthdate(calendar.getTime()); patient.setBirthdateEstimated(true); calendar.set(2010, 7, 25); patient.setDeathDate(calendar.getTime()); visit.setPatient(patient); calendar.set(1995, 7, 24); visit.setStartDatetime(calendar.getTime()); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertThat(errors, hasFieldErrors("startDatetime", "Visit.startDateCannotFallBeforeTheBirthDateOfTheSamePatient")); }
/** * @see PatientService#mergePatients(Patient,Patient) */ @Test public void mergePatients_shouldAuditPriorDateOfBirthEstimated() throws Exception { //retrieve preferred patient and set a date of birth GregorianCalendar cDate = new GregorianCalendar(); cDate.setTime(new Date()); Patient preferred = patientService.getPatient(999); preferred.setBirthdate(cDate.getTime()); preferred.setBirthdateEstimated(true); preferred.addName(new PersonName("givenName", "middleName", "familyName")); patientService.savePatient(preferred); Patient notPreferred = patientService.getPatient(7); voidOrders(Collections.singleton(notPreferred)); PersonMergeLog audit = mergeAndRetrieveAudit(preferred, notPreferred); Assert.assertTrue("prior estimated date of birth was not audited", audit.getPersonMergeLogData() .isPriorDateOfBirthEstimated()); }
throw new HL7Exception("Missing birth date in the PID segment"); patient.setBirthdate(tsToDate(dateOfBirth));
patient.setBirthdate(new Date()); patient.setBirthdateEstimated(true); patient.setDeathDate(new Date());
patient.setAddresses(pAddressList); patient.addAddress(pAddress); patient.setBirthdate(new Date()); patient.setBirthdateEstimated(true); patient.setDeathDate(new Date());
patient.setBirthdate(new Date()); patient.setBirthdateEstimated(true); patient.setDeathDate(new Date());
mergedData.setPriorDateOfBirthEstimated(preferred.getBirthdateEstimated()); if (preferred.getBirthdate() == null || (preferred.getBirthdateEstimated() && !notPreferred.getBirthdateEstimated())) { preferred.setBirthdate(notPreferred.getBirthdate()); preferred.setBirthdateEstimated(notPreferred.getBirthdateEstimated());
public Patient buildOpenMrsPatient(MRSPatient patient, PatientIdentifierType patientIdentifierType, Location location, List<PersonAttributeType> allPersonAttributeTypes) { final Patient openMRSPatient = new Patient(createPersonWithNames(patient)); openMRSPatient.addIdentifier(new PatientIdentifier(patient.getMotechId(), patientIdentifierType, location)); openMRSPatient.setGender(patient.getPerson().getGender()); openMRSPatient.setBirthdate(patient.getPerson().getDateOfBirth().toDate()); openMRSPatient.setBirthdateEstimated(patient.getPerson().getBirthDateEstimated()); openMRSPatient.setDead(patient.getPerson().isDead()); if (patient.getPerson().getDeathDate() != null) { openMRSPatient.setDeathDate(patient.getPerson().getDeathDate().toDate()); } setPatientAddress(openMRSPatient, patient.getPerson().getAddress()); setPersonAttributes(patient, openMRSPatient, allPersonAttributeTypes); return openMRSPatient; }