DefaultMedicationsBo implements MedicationsBo, MedicationFromEhrConverter.MedicationDataProvider { MedicationForWarningsSearchDto buildWarningSearchDtoFromIngredient( final OrderActivity orderActivity, final IngredientCluster ingredient) { if (ingredient.getName() instanceof DvCodedText) { final String definingCode = ((DvCodedText)ingredient.getName()).getDefiningCode().getCodeString(); final Long medicationId = Long.parseLong(definingCode); final IngredientQuantityCluster medicationQuantity = ingredient.getIngredientQuantity(); Double doseAmount = null; String doseUnit = null; if (medicationQuantity != null) { if (medicationQuantity.getQuantity() != null) { doseAmount = medicationQuantity.getQuantity().getMagnitude(); doseUnit = medicationQuantity.getDoseUnit().getDefiningCode().getCodeString(); } else if (medicationQuantity.getRatioNumerator() != null) { doseAmount = medicationQuantity.getRatioNumerator().getAmount().getMagnitude(); doseUnit = medicationQuantity.getRatioNumerator().getDoseUnit().getDefiningCode().getCodeString(); } } final String route = orderActivity.getAdministrationDetails().getRoute().get(0).getDefiningCode().getCodeString(); return buildWarningSearchDto(orderActivity.getMedicationTiming(), medicationId, route, doseAmount, doseUnit); } return null; }  @Autowired void setMedicationsOpenEhrDao(final MedicationsOpenEhrDao medicationsOpenEhrDao); @Autowired void setMedicationsDao(final MedicationsDao medicationsDao); @Autowired void setTaggingOpenEhrDao(final TaggingOpenEhrDao taggingOpenEhrDao); @Autowired void setTherapyDisplayProvider(final TherapyDisplayProvider therapyDisplayProvider); @Autowired void setMedicationsValueHolder(final ValueHolder<Map<Long, MedicationHolderDto>> medicationsValueHolder); @Autowired void setMedicationRoutesValueHolder(final ValueHolder<Map<Long, MedicationRouteDto>> medicationRoutesValueHolder); @Autowired void setMedicationHolderDtoMapper(final MedicationHolderDtoMapper medicationHolderDtoMapper); @Autowired void setMedicationsTasksProvider(final MedicationsTasksProvider medicationsTasksProvider); @Autowired void setMedicationOnAdmissionHandler(final MedicationOnAdmissionHandler medicationOnAdmissionHandler); @Autowired void setAdministrationProvider(final AdministrationProvider administrationProvider); @Override Map<Long, MedicationDataForTherapyDto> getMedicationDataForTherapies(
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> instructionsList,
      @Nullable final String careProviderId); @Override boolean isTherapyModifiedFromLastReview(
      @Nonnull final MedicationInstructionInstruction instruction,
      @Nonnull final List<MedicationActionAction> actionsList,
      @Nonnull final DateTime compositionCreatedTime); @Override int getTherapyConsecutiveDay(
      final DateTime therapyStart,
      final DateTime therapyDay,
      final DateTime currentTime,
      final Integer pastDaysOfTherapy); @Override DateTime getOriginalTherapyStart(
      @Nonnull final String patientId,
      @Nonnull final MedicationOrderComposition composition); @Override Pair<MedicationOrderComposition, MedicationInstructionInstruction> getInstructionFromLink(
      @Nonnull final String patientId,
      @Nonnull final MedicationInstructionInstruction instruction,
      @Nonnull final EhrLinkType linkType,
      final boolean getLatestVersion); @Override Pair<MedicationOrderComposition, MedicationInstructionInstruction> getInstructionFromLink(
      final String patientId,
      final Link link,
      final boolean getLatestVersion); @Override boolean isTherapySuspended(final List<MedicationActionAction> actionsList); @Override void sortTherapyTemplates(final TherapyTemplatesDto templates); @Override int compareTherapiesForSort(final TherapyDto firstTherapy, final TherapyDto secondTherapy, final Collator collator); @Override boolean areInstructionsLinkedByUpdate(
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> instructionPair,
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> compareInstructionPair); @Override boolean doesInstructionHaveLinkToCompareInstruction(
      final MedicationInstructionInstruction instruction,
      final Pair<MedicationOrderComposition, MedicationInstructionInstruction> compareInstructionPair,
      final EhrLinkType linkType); @Override List<Long> getMedicationIds(final OrderActivity orderActivity); @Override List<Long> getMedicationIds(final MedicationActionAction medicationAction); @Override Long getMainMedicationId(final OrderActivity orderActivity); @Override boolean isMentalHealthMedication(final long medicationId); @Override boolean isTherapyActive(
      final List<String> daysOfWeek,
      final Integer dosingDaysFrequency,
      final Interval therapyInterval,
      final DateTime when); @Override boolean isTherapySuspended(final MedicationOrderComposition composition, final MedicationInstructionInstruction instruction); @Override TherapyChangeReasonDto getTherapySuspendReason(
      @Nonnull final MedicationOrderComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction); @Override boolean isTherapyCancelledOrAborted(
      final MedicationOrderComposition composition, final MedicationInstructionInstruction instruction); @Override boolean isMedicationTherapyCompleted(
      final MedicationOrderComposition composition,
      final MedicationInstructionInstruction instruction); @Override MedicationActionAction getInstructionAction(
      final MedicationOrderComposition composition,
      final MedicationInstructionInstruction instruction,
      final MedicationActionEnum searchActionEnum,
      @Nullable final Interval searchInterval); @Override String getTherapyFormattedDisplay(
      final String patientId, final String therapyId, final DateTime when, final Locale locale); @Override TherapyDto getTherapy(
      final String patientId, final String compositionId, final String ehrOrderName, final DateTime when, final Locale locale); @Override TherapyDto convertInstructionToTherapyDto(
      @Nonnull final IspekComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction,
      final DateTime currentTime); @Override TherapyDto convertInstructionToTherapyDtoWithDisplayValues(
      @Nonnull final IspekComposition composition,
      @Nonnull final MedicationInstructionInstruction instruction,
      final Double referenceWeight,
      final Double patientHeight,
      final DateTime currentTime,
      final boolean isToday,
      final Locale locale); @Override void fillDisplayValues(
      @Nonnull final TherapyDto therapy,
      final Double referenceWeight,
      final Double patientHeight,
      final boolean isToday,
      final Locale locale); @Override void fillInfusionFormulaFromRate(
      final ComplexTherapyDto therapy,
      final Double referenceWeight,
      final Double patientHeight); @Override void fillInfusionRateFromFormula(
      final ComplexTherapyDto therapy, final Double referenceWeight, final Double patientHeight); @Override double calculateBodySurfaceArea(final double heightInCm, final double weightInKg); @Override List<MedicationForWarningsSearchDto> getTherapiesForWarningsSearch(final String patientId, final DateTime when); @Override List<TherapyDto> getTherapies(
      final String patientId,
      final String centralCaseId,
      final Double referenceWeight,
      @Nullable final Locale locale,
      final DateTime when); @Override List<TherapyDto> getTherapies(
      final String patientId,
      final Interval searchInterval,
      final Double referenceWeight,
      final Double patientHeight,
      @Nullable final Locale locale,
      final DateTime when); @Override List<MedicationOnDischargeGroupDto> getMedicationOnDischargeGroups(
      final String patientId,
      final DateTime lastHospitalizationStart,
      @Nullable final Interval searchInterval,
      final Double referenceWeight,
      final Double patientHeight, // is this @Nullable ?
      @Nullable final Locale locale,
      final DateTime when); @Override List<MentalHealthTherapyDto> getMentalHealthTherapies(
      final String patientId,
      final Interval searchInterval,
      final DateTime when,
      final Locale locale); @Override List<TherapyDto> getLinkTherapyCandidates(
      @Nonnull final String patientId,
      @Nonnull final Double referenceWeight,
      final Double patientHeight,
      @Nonnull final DateTime when,
      @Nonnull final Locale locale); @Override List<TherapySurgeryReportElementDto> getTherapySurgeryReportElements(
      @Nonnull final String patientId,
      final Double patientHeight,
      @Nonnull final DateTime searchStart,
      @Nonnull final RoundsIntervalDto roundsIntervalDto,
      @Nonnull final Locale locale,
      @Nonnull final DateTime when); @Override List<MedicationForWarningsSearchDto> extractWarningsSearchDtos(
      @Nonnull final List<MedicationOrderComposition> compositions); @Override MedicationDto getMedication(final Long medicationId); @Override DoseFormDto getDoseForm(final String doseFormCode, final DateTime when); @Override DoseFormDto getMedicationDoseForm(final long medicationId); @Override MedicationRouteDto getMedicationRoute(final long routeId); @Override String getOriginalTherapyId(final String patientId, final String compositionUid); @Override String getOriginalTherapyId(@Nonnull final MedicationOrderComposition composition); @Override MedicationReferenceWeightComposition buildReferenceWeightComposition(
      final double weight,
      final DateTime when); @Override void sortTherapiesByMedicationTimingStart(
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> therapies, final boolean descending); @Override void deleteAdministration(final String patientId, final String compositionId, final String comment); @Override DocumentationTherapiesDto findTherapyGroupsForDocumentation(
      final String patientId,
      final String centralCaseId,
      final Interval centralCaseEffective,
      final List<Pair<MedicationOrderComposition, MedicationInstructionInstruction>> instructionPairs,
      final boolean isOutpatient,
      final DateTime when,
      final Locale locale); @Override @Transactional @ServiceMethod(auditing = @Auditing(level = Level.FULL)) DateTime findPreviousTaskForTherapy(
      final String patientId,
      final String compositionUid,
      final String ehrOrderName,
      final DateTime when);  }
@Test public void testBuildWarningSearchDtoFromIngredient() { final DateTime start = DataValueUtils.getDateTime(DataValueUtils.getDateTime(new DateTime(2013, 3, 25, 12, 0, DateTimeZone.UTC))); final Map<Long, MedicationHolderDto> medicationHolderMap = new HashMap<>(); final MedicationHolderDto medicationDto1 = new MedicationHolderDto(); medicationDto1.setId(1L); medicationDto1.setName("Lekadol 20x500mg"); medicationHolderMap.put(1L, medicationDto1); final MedicationHolderDto medicationDto2 = new MedicationHolderDto(); medicationDto2.setId(2L); medicationDto2.setName("Primotren 20x500mg"); medicationHolderMap.put(2L, medicationDto2); final MedicationsValueHolder medicationsValueHolder = mock(MedicationsValueHolder.class); when(medicationsValueHolder.getValue()).thenReturn(medicationHolderMap); medicationsBo.setMedicationsValueHolder(medicationsValueHolder); final MedicationTimingCluster medicationTimingCluster = MedicationsTestUtils.buildMedicationTimingCluster(4L, null, null, null, start, null, null); final IngredientCluster ingredient1 = MedicationsTestUtils.buildTestActiveIngredient("Lekadol", "0001", 500.0, "mg", null, null, null, null); final OrderActivity orderActivity1 = MedicationsTestUtils.buildTestOrderActivity(null, null, null, null, null, null, null, null, 1L, "ORAL", "1", "TBL"); orderActivity1.setMedicationTiming(medicationTimingCluster); final MedicationForWarningsSearchDto warningsSearchDto1 = medicationsBo.buildWarningSearchDtoFromIngredient(orderActivity1, ingredient1); assertEquals((Double)500.0, warningsSearchDto1.getDoseAmount()); assertEquals("mg", warningsSearchDto1.getDoseUnit()); assertEquals("1", warningsSearchDto1.getRouteCode()); final IngredientCluster ingredient2 = MedicationsTestUtils.buildTestActiveIngredient("Primotren", "0002", null, null, 10.0, "mg", 3.0, "mL"); final OrderActivity orderActivity2 = MedicationsTestUtils.buildTestOrderActivity(null, null, null, null, null, null, null, null, 1L, "ORAL", "1", "TBL"); orderActivity2.setMedicationTiming(medicationTimingCluster); final MedicationForWarningsSearchDto warningsSearchDto2 = medicationsBo.buildWarningSearchDtoFromIngredient(orderActivity2, ingredient2); assertEquals((Double)10.0, warningsSearchDto2.getDoseAmount()); assertEquals("mg", warningsSearchDto2.getDoseUnit()); assertEquals("1", warningsSearchDto2.getRouteCode()); }