Search in sources :

Example 1 with DataRequirementCodeFilterComponent

use of org.hl7.fhir.r4b.model.DataRequirement.DataRequirementCodeFilterComponent in project eCRNow by drajer-health.

the class PlanDefinitionProcessor method processTriggerDefinitions.

private void processTriggerDefinitions(List<TriggerDefinition> tdlist, AbstractAction act) {
    if (tdlist != null && !tdlist.isEmpty()) {
        for (TriggerDefinition triggerDefinition : tdlist) {
            if (triggerDefinition.getType() != TriggerType.NAMEDEVENT && triggerDefinition.getType() != TriggerType.PERIODIC && triggerDefinition.hasData()) {
                logger.info(" Identified Data Trigger for Act {}", act.getActionId());
                List<DataRequirement> dr = triggerDefinition.getData();
                for (DataRequirement d : dr) {
                    // Create ActionData object
                    ActionData ad = new ActionData();
                    ad.setTriggerType(triggerDefinition.getType());
                    ad.setFhirDataType(FHIRAllTypes.valueOf(d.getType().toUpperCase()));
                    if (d.hasProfile())
                        ad.setProfiles(d.getProfile());
                    if (d.hasCodeFilter()) {
                        DataRequirementCodeFilterComponent cf = d.getCodeFilterFirstRep();
                        if (cf.hasPath()) {
                            ad.setPath(d.getType() + "." + cf.getPath());
                            logger.info(" Evaluation Path = {}", ad.getPath());
                        }
                        if (cf.hasValueSet())
                            ad.setValueSet(cf.getValueSetElement());
                    }
                    act.addActionData(ad);
                }
            } else if (triggerDefinition.getType() == TriggerType.PERIODIC) {
                if (triggerDefinition.hasTimingTiming()) {
                    Timing t = triggerDefinition.getTimingTiming();
                    if (t.hasRepeat()) {
                        TimingSchedule ts = getTimingSchedule(t, triggerDefinition.getType());
                        if (ts != null) {
                            act.addTimingData(ts);
                        }
                    }
                } else {
                // Not handling the others for eCR
                }
            } else {
            // Ignore other types for eCR
            }
        }
    }
}
Also used : TriggerDefinition(org.hl7.fhir.r4.model.TriggerDefinition) DataRequirement(org.hl7.fhir.r4.model.DataRequirement) ActionData(com.drajer.eca.model.ActionData) Timing(org.hl7.fhir.r4.model.Timing) DataRequirementCodeFilterComponent(org.hl7.fhir.r4.model.DataRequirement.DataRequirementCodeFilterComponent) TimingSchedule(com.drajer.eca.model.TimingSchedule)

Example 2 with DataRequirementCodeFilterComponent

use of org.hl7.fhir.r4b.model.DataRequirement.DataRequirementCodeFilterComponent in project org.hl7.fhir.core by hapifhir.

the class DataRenderer method renderDataRequirement.

public void renderDataRequirement(XhtmlNode x, DataRequirement dr) throws FHIRFormatError, DefinitionException, IOException {
    XhtmlNode tbl = x.table("grid");
    XhtmlNode tr = tbl.tr();
    XhtmlNode td = tr.td().colspan("2");
    td.b().tx("Type");
    td.tx(": ");
    StructureDefinition sd = context.getWorker().fetchTypeDefinition(dr.getType().toCode());
    if (sd != null && sd.hasUserData("path")) {
        td.ah(sd.getUserString("path")).tx(dr.getType().toCode());
    } else {
        td.tx(dr.getType().toCode());
    }
    if (dr.hasProfile()) {
        td.tx(" (");
        boolean first = true;
        for (CanonicalType p : dr.getProfile()) {
            if (first)
                first = false;
            else
                td.tx(" | ");
            sd = context.getWorker().fetchResource(StructureDefinition.class, p.getValue());
            if (sd != null && sd.hasUserData("path")) {
                td.ah(sd.getUserString("path")).tx(sd.present());
            } else {
                td.tx(p.asStringValue());
            }
        }
        td.tx(")");
    }
    if (dr.hasSubject()) {
        tr = tbl.tr();
        td = tr.td().colspan("2");
        td.b().tx("Subject");
        if (dr.hasSubjectReference()) {
            renderReference(td, dr.getSubjectReference());
        } else {
            renderCodeableConcept(td, dr.getSubjectCodeableConcept());
        }
    }
    if (dr.hasCodeFilter() || dr.hasDateFilter()) {
        tr = tbl.tr().backgroundColor("#efefef");
        tr.td().tx("Filter");
        tr.td().tx("Value");
    }
    for (DataRequirementCodeFilterComponent cf : dr.getCodeFilter()) {
        tr = tbl.tr();
        if (cf.hasPath()) {
            tr.td().tx(cf.getPath());
        } else {
            tr.td().tx("Search on " + cf.getSearchParam());
        }
        if (cf.hasValueSet()) {
            td = tr.td();
            td.tx("In ValueSet ");
            render(td, cf.getValueSetElement());
        } else {
            boolean first = true;
            td = tr.td();
            td.tx("One of these codes: ");
            for (Coding c : cf.getCode()) {
                if (first)
                    first = false;
                else
                    td.tx(", ");
                render(td, c);
            }
        }
    }
    for (DataRequirementDateFilterComponent cf : dr.getDateFilter()) {
        tr = tbl.tr();
        if (cf.hasPath()) {
            tr.td().tx(cf.getPath());
        } else {
            tr.td().tx("Search on " + cf.getSearchParam());
        }
        render(tr.td(), cf.getValue());
    }
    if (dr.hasSort() || dr.hasLimit()) {
        tr = tbl.tr();
        td = tr.td().colspan("2");
        if (dr.hasLimit()) {
            td.b().tx("Limit");
            td.tx(": ");
            td.tx(dr.getLimit());
            if (dr.hasSort()) {
                td.tx(", ");
            }
        }
        if (dr.hasSort()) {
            td.b().tx("Sort");
            td.tx(": ");
            boolean first = true;
            for (DataRequirementSortComponent p : dr.getSort()) {
                if (first)
                    first = false;
                else
                    td.tx(" | ");
                td.tx(p.getDirection() == SortDirection.ASCENDING ? "+" : "-");
                td.tx(p.getPath());
            }
        }
    }
}
Also used : StructureDefinition(org.hl7.fhir.r5.model.StructureDefinition) Coding(org.hl7.fhir.r5.model.Coding) DataRequirementSortComponent(org.hl7.fhir.r5.model.DataRequirement.DataRequirementSortComponent) CanonicalType(org.hl7.fhir.r5.model.CanonicalType) DataRequirementCodeFilterComponent(org.hl7.fhir.r5.model.DataRequirement.DataRequirementCodeFilterComponent) DataRequirementDateFilterComponent(org.hl7.fhir.r5.model.DataRequirement.DataRequirementDateFilterComponent) XhtmlNode(org.hl7.fhir.utilities.xhtml.XhtmlNode)

Example 3 with DataRequirementCodeFilterComponent

use of org.hl7.fhir.r4b.model.DataRequirement.DataRequirementCodeFilterComponent in project org.hl7.fhir.core by hapifhir.

the class DataRenderer method renderDataRequirement.

public void renderDataRequirement(XhtmlNode x, DataRequirement dr) throws FHIRFormatError, DefinitionException, IOException {
    XhtmlNode tbl = x.table("grid");
    XhtmlNode tr = tbl.tr();
    XhtmlNode td = tr.td().colspan("2");
    td.b().tx("Type");
    td.tx(": ");
    StructureDefinition sd = context.getWorker().fetchTypeDefinition(dr.getType().toCode());
    if (sd != null && sd.hasUserData("path")) {
        td.ah(sd.getUserString("path")).tx(dr.getType().toCode());
    } else {
        td.tx(dr.getType().toCode());
    }
    if (dr.hasProfile()) {
        td.tx(" (");
        boolean first = true;
        for (CanonicalType p : dr.getProfile()) {
            if (first)
                first = false;
            else
                td.tx(" | ");
            sd = context.getWorker().fetchResource(StructureDefinition.class, p.getValue());
            if (sd != null && sd.hasUserData("path")) {
                td.ah(sd.getUserString("path")).tx(sd.present());
            } else {
                td.tx(p.asStringValue());
            }
        }
        td.tx(")");
    }
    if (dr.hasSubject()) {
        tr = tbl.tr();
        td = tr.td().colspan("2");
        td.b().tx("Subject");
        if (dr.hasSubjectReference()) {
            renderReference(td, dr.getSubjectReference());
        } else {
            renderCodeableConcept(td, dr.getSubjectCodeableConcept());
        }
    }
    if (dr.hasCodeFilter() || dr.hasDateFilter()) {
        tr = tbl.tr().backgroundColor("#efefef");
        tr.td().tx("Filter");
        tr.td().tx("Value");
    }
    for (DataRequirementCodeFilterComponent cf : dr.getCodeFilter()) {
        tr = tbl.tr();
        if (cf.hasPath()) {
            tr.td().tx(cf.getPath());
        } else {
            tr.td().tx("Search on " + cf.getSearchParam());
        }
        if (cf.hasValueSet()) {
            td = tr.td();
            td.tx("In ValueSet ");
            render(td, cf.getValueSetElement());
        } else {
            boolean first = true;
            td = tr.td();
            td.tx("One of these codes: ");
            for (Coding c : cf.getCode()) {
                if (first)
                    first = false;
                else
                    td.tx(", ");
                render(td, c);
            }
        }
    }
    for (DataRequirementDateFilterComponent cf : dr.getDateFilter()) {
        tr = tbl.tr();
        if (cf.hasPath()) {
            tr.td().tx(cf.getPath());
        } else {
            tr.td().tx("Search on " + cf.getSearchParam());
        }
        render(tr.td(), cf.getValue());
    }
    if (dr.hasSort() || dr.hasLimit()) {
        tr = tbl.tr();
        td = tr.td().colspan("2");
        if (dr.hasLimit()) {
            td.b().tx("Limit");
            td.tx(": ");
            td.tx(dr.getLimit());
            if (dr.hasSort()) {
                td.tx(", ");
            }
        }
        if (dr.hasSort()) {
            td.b().tx("Sort");
            td.tx(": ");
            boolean first = true;
            for (DataRequirementSortComponent p : dr.getSort()) {
                if (first)
                    first = false;
                else
                    td.tx(" | ");
                td.tx(p.getDirection() == SortDirection.ASCENDING ? "+" : "-");
                td.tx(p.getPath());
            }
        }
    }
}
Also used : StructureDefinition(org.hl7.fhir.r4b.model.StructureDefinition) Coding(org.hl7.fhir.r4b.model.Coding) DataRequirementSortComponent(org.hl7.fhir.r4b.model.DataRequirement.DataRequirementSortComponent) CanonicalType(org.hl7.fhir.r4b.model.CanonicalType) DataRequirementCodeFilterComponent(org.hl7.fhir.r4b.model.DataRequirement.DataRequirementCodeFilterComponent) DataRequirementDateFilterComponent(org.hl7.fhir.r4b.model.DataRequirement.DataRequirementDateFilterComponent) XhtmlNode(org.hl7.fhir.utilities.xhtml.XhtmlNode)

Example 4 with DataRequirementCodeFilterComponent

use of org.hl7.fhir.r4b.model.DataRequirement.DataRequirementCodeFilterComponent in project eCRNow by drajer-health.

the class ValueSetServiceImpl method createPlanDefinitionAction.

@Override
public void createPlanDefinitionAction(TriggerDefinition triggerDefinition) {
    List<DataRequirement> datareqs = triggerDefinition.getData();
    Set<ValueSet> grouperToValueSets = new HashSet<>();
    Set<ValueSet> grouperToCovidValueSets = new HashSet<>();
    for (DataRequirement d : datareqs) {
        DataRequirementCodeFilterComponent codeFilter = d.getCodeFilterFirstRep();
        logger.debug(" Getting Value Set List for Grouper {}", codeFilter.getValueSet());
        List<CanonicalType> valueSetIdList = ApplicationUtils.getValueSetListFromGrouper(codeFilter.getValueSet());
        logger.debug(" Size of valueSetIdList = {}", ((valueSetIdList == null) ? "Null" : valueSetIdList.size()));
        grouperToValueSets = ApplicationUtils.getValueSetByIds(valueSetIdList);
        logger.debug(" Size of Value Sets for Grouper : {}", grouperToValueSets.size());
        grouperToCovidValueSets = ApplicationUtils.getCovidValueSetByIds(valueSetIdList);
        logger.debug(" Size of Covid Value Sets for Grouper : {}", grouperToCovidValueSets.size());
    }
    DataRequirement dataRequirement = triggerDefinition.getDataFirstRep();
    DataRequirementCodeFilterComponent codeFilter = dataRequirement.getCodeFilterFirstRep();
    List<CanonicalType> valueSetIdList = ApplicationUtils.getValueSetListFromGrouper(codeFilter.getValueSet());
    Set<ValueSet> valueSets = ApplicationUtils.getValueSetByIds(valueSetIdList);
    ValueSet valuSetGrouper = ApplicationUtils.getValueSetGrouperFromId(codeFilter.getValueSet());
    String path = dataRequirement.getType() + "." + codeFilter.getPath();
    logger.debug(" Trigger Path to Grouper Map {} , Grouper {}", path, valuSetGrouper == null ? "NULL" : valuSetGrouper.getId());
    ValueSetSingleton.getInstance().getTriggerPathToValueSetsMap().put(path, valueSets);
    if (ValueSetSingleton.getInstance().getTriggerPathToGrouperMap().containsKey(path)) {
        logger.debug(" Found Path in Grouper Map for {}", path);
        if (Boolean.FALSE.equals(ApplicationUtils.isSetContainsValueSet(ValueSetSingleton.getInstance().getTriggerPathToGrouperMap().get(path), valuSetGrouper))) {
            ValueSetSingleton.getInstance().getTriggerPathToGrouperMap().get(path).add(valuSetGrouper);
        }
    } else {
        logger.debug(" Did not Find Path in Grouper Map for {}", path);
        Set<ValueSet> vs = new HashSet<>();
        vs.add(valuSetGrouper);
        ValueSetSingleton.getInstance().getTriggerPathToGrouperMap().put(path, vs);
    }
    if (valuSetGrouper != null) {
        logger.debug(" Adding Grouper Id {} to map", codeFilter.getValueSet());
        ValueSetSingleton.getInstance().addGrouperToValueSetMap(valuSetGrouper.getId(), grouperToValueSets);
        ValueSetSingleton.getInstance().addGrouperToCovidValueSetMap(valuSetGrouper.getId(), grouperToCovidValueSets);
    }
}
Also used : DataRequirement(org.hl7.fhir.r4.model.DataRequirement) ValueSet(org.hl7.fhir.r4.model.ValueSet) DataRequirementCodeFilterComponent(org.hl7.fhir.r4.model.DataRequirement.DataRequirementCodeFilterComponent) CanonicalType(org.hl7.fhir.r4.model.CanonicalType) HashSet(java.util.HashSet)

Aggregations

DataRequirement (org.hl7.fhir.r4.model.DataRequirement)2 DataRequirementCodeFilterComponent (org.hl7.fhir.r4.model.DataRequirement.DataRequirementCodeFilterComponent)2 XhtmlNode (org.hl7.fhir.utilities.xhtml.XhtmlNode)2 ActionData (com.drajer.eca.model.ActionData)1 TimingSchedule (com.drajer.eca.model.TimingSchedule)1 HashSet (java.util.HashSet)1 CanonicalType (org.hl7.fhir.r4.model.CanonicalType)1 Timing (org.hl7.fhir.r4.model.Timing)1 TriggerDefinition (org.hl7.fhir.r4.model.TriggerDefinition)1 ValueSet (org.hl7.fhir.r4.model.ValueSet)1 CanonicalType (org.hl7.fhir.r4b.model.CanonicalType)1 Coding (org.hl7.fhir.r4b.model.Coding)1 DataRequirementCodeFilterComponent (org.hl7.fhir.r4b.model.DataRequirement.DataRequirementCodeFilterComponent)1 DataRequirementDateFilterComponent (org.hl7.fhir.r4b.model.DataRequirement.DataRequirementDateFilterComponent)1 DataRequirementSortComponent (org.hl7.fhir.r4b.model.DataRequirement.DataRequirementSortComponent)1 StructureDefinition (org.hl7.fhir.r4b.model.StructureDefinition)1 CanonicalType (org.hl7.fhir.r5.model.CanonicalType)1 Coding (org.hl7.fhir.r5.model.Coding)1 DataRequirementCodeFilterComponent (org.hl7.fhir.r5.model.DataRequirement.DataRequirementCodeFilterComponent)1 DataRequirementDateFilterComponent (org.hl7.fhir.r5.model.DataRequirement.DataRequirementDateFilterComponent)1