Merge branch 'master' of https://github.com/hapifhir/org.hl7.fhir.core
This commit is contained in:
commit
6cccb24fff
|
@ -287,3 +287,5 @@ local.properties
|
||||||
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/t7-actual.xml
|
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/t7-actual.xml
|
||||||
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/t8-actual.xml
|
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/t8-actual.xml
|
||||||
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/t9-actual.xml
|
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/t9-actual.xml
|
||||||
|
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/dv1-actual.xml
|
||||||
|
/org.hl7.fhir.r5/src/test/resources/snapshot-generation/t45-actual.xml
|
||||||
|
|
|
@ -224,7 +224,9 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
public static final String IS_DERIVED = "derived.fact";
|
public static final String IS_DERIVED = "derived.fact";
|
||||||
public static final String UD_ERROR_STATUS = "error-status";
|
public static final String UD_ERROR_STATUS = "error-status";
|
||||||
private static final String GENERATED_IN_SNAPSHOT = "profileutilities.snapshot.processed";
|
private static final String GENERATED_IN_SNAPSHOT = "profileutilities.snapshot.processed";
|
||||||
|
private final boolean ADD_REFERENCE_TO_TABLE = true;
|
||||||
|
|
||||||
|
private boolean useTableForFixedValues = true;
|
||||||
private boolean debug;
|
private boolean debug;
|
||||||
|
|
||||||
// note that ProfileUtilities are used re-entrantly internally, so nothing with process state can be here
|
// note that ProfileUtilities are used re-entrantly internally, so nothing with process state can be here
|
||||||
|
@ -599,7 +601,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
else if (!outcome.getPath().startsWith(resultPathBase))
|
else if (!outcome.getPath().startsWith(resultPathBase))
|
||||||
throw new DefinitionException("Adding wrong path");
|
throw new DefinitionException("Adding wrong path");
|
||||||
result.getElement().add(outcome);
|
result.getElement().add(outcome);
|
||||||
if (hasInnerDiffMatches(differential, cpath, diffCursor, diffLimit, base.getElement())) {
|
if (hasInnerDiffMatches(differential, cpath, diffCursor, diffLimit, base.getElement(), true)) {
|
||||||
// well, the profile walks into this, so we need to as well
|
// well, the profile walks into this, so we need to as well
|
||||||
// did we implicitly step into a new type?
|
// did we implicitly step into a new type?
|
||||||
if (baseHasChildren(base, currentBase)) { // not a new type here
|
if (baseHasChildren(base, currentBase)) { // not a new type here
|
||||||
|
@ -674,6 +676,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (diffMatches.get(0).hasSliceName())
|
if (diffMatches.get(0).hasSliceName())
|
||||||
outcome.setSliceName(diffMatches.get(0).getSliceName());
|
outcome.setSliceName(diffMatches.get(0).getSliceName());
|
||||||
updateFromDefinition(outcome, diffMatches.get(0), profileName, trimDifferential, url, srcSD);
|
updateFromDefinition(outcome, diffMatches.get(0), profileName, trimDifferential, url, srcSD);
|
||||||
|
removeStatusExtensions(outcome);
|
||||||
// if (outcome.getPath().endsWith("[x]") && outcome.getType().size() == 1 && !outcome.getType().get(0).getCode().equals("*") && !diffMatches.get(0).hasSlicing()) // if the base profile allows multiple types, but the profile only allows one, rename it
|
// if (outcome.getPath().endsWith("[x]") && outcome.getType().size() == 1 && !outcome.getType().get(0).getCode().equals("*") && !diffMatches.get(0).hasSlicing()) // if the base profile allows multiple types, but the profile only allows one, rename it
|
||||||
// outcome.setPath(outcome.getPath().substring(0, outcome.getPath().length()-3)+Utilities.capitalize(outcome.getType().get(0).getCode()));
|
// outcome.setPath(outcome.getPath().substring(0, outcome.getPath().length()-3)+Utilities.capitalize(outcome.getType().get(0).getCode()));
|
||||||
outcome.setSlicing(null);
|
outcome.setSlicing(null);
|
||||||
|
@ -795,6 +798,12 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
ts.defn.setSliceName(tn);
|
ts.defn.setSliceName(tn);
|
||||||
else if (!ts.defn.getSliceName().equals(tn))
|
else if (!ts.defn.getSliceName().equals(tn))
|
||||||
throw new FHIRException("Error at path "+(!Utilities.noString(contextPathSrc) ? contextPathSrc : cpath)+": Slice name must be '"+tn+"' but is '"+ts.defn.getSliceName()+"'");
|
throw new FHIRException("Error at path "+(!Utilities.noString(contextPathSrc) ? contextPathSrc : cpath)+": Slice name must be '"+tn+"' but is '"+ts.defn.getSliceName()+"'");
|
||||||
|
if (!ts.defn.hasType())
|
||||||
|
ts.defn.addType().setCode(ts.type);
|
||||||
|
else if (ts.defn.getType().size() > 1)
|
||||||
|
throw new FHIRException("Error at path "+(!Utilities.noString(contextPathSrc) ? contextPathSrc : cpath)+": Slice for type '"+tn+"' has more than one type '"+ts.defn.typeSummary()+"'");
|
||||||
|
else if (!ts.defn.getType().get(0).getCode().equals(ts.type))
|
||||||
|
throw new FHIRException("Error at path "+(!Utilities.noString(contextPathSrc) ? contextPathSrc : cpath)+": Slice for type '"+tn+"' has wrong type '"+ts.defn.typeSummary()+"'");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok passed the checks.
|
// ok passed the checks.
|
||||||
|
@ -866,6 +875,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
// differential - if the first one in the list has a name, we'll process it. Else we'll treat it as the base definition of the slice.
|
// differential - if the first one in the list has a name, we'll process it. Else we'll treat it as the base definition of the slice.
|
||||||
if (!diffMatches.get(0).hasSliceName()) {
|
if (!diffMatches.get(0).hasSliceName()) {
|
||||||
updateFromDefinition(outcome, diffMatches.get(0), profileName, trimDifferential, url, srcSD);
|
updateFromDefinition(outcome, diffMatches.get(0), profileName, trimDifferential, url, srcSD);
|
||||||
|
removeStatusExtensions(outcome);
|
||||||
if (!outcome.hasContentReference() && !outcome.hasType()) {
|
if (!outcome.hasContentReference() && !outcome.hasType()) {
|
||||||
throw new DefinitionException("not done yet");
|
throw new DefinitionException("not done yet");
|
||||||
}
|
}
|
||||||
|
@ -939,19 +949,20 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (diffMatches.get(0).hasSlicing() || !diffMatches.get(0).hasSliceName()) {
|
if (diffMatches.get(0).hasSlicing() || !diffMatches.get(0).hasSliceName()) {
|
||||||
updateFromSlicing(outcome.getSlicing(), diffMatches.get(0).getSlicing());
|
updateFromSlicing(outcome.getSlicing(), diffMatches.get(0).getSlicing());
|
||||||
updateFromDefinition(outcome, diffMatches.get(0), profileName, closed, url, srcSD); // if there's no slice, we don't want to update the unsliced description
|
updateFromDefinition(outcome, diffMatches.get(0), profileName, closed, url, srcSD); // if there's no slice, we don't want to update the unsliced description
|
||||||
|
removeStatusExtensions(outcome);
|
||||||
} else if (!diffMatches.get(0).hasSliceName())
|
} else if (!diffMatches.get(0).hasSliceName())
|
||||||
diffMatches.get(0).setUserData(GENERATED_IN_SNAPSHOT, true); // because of updateFromDefinition isn't called
|
diffMatches.get(0).setUserData(GENERATED_IN_SNAPSHOT, outcome); // because of updateFromDefinition isn't called
|
||||||
|
|
||||||
result.getElement().add(outcome);
|
result.getElement().add(outcome);
|
||||||
|
|
||||||
if (!diffMatches.get(0).hasSliceName()) { // it's not real content, just the slice
|
if (!diffMatches.get(0).hasSliceName()) { // it's not real content, just the slice
|
||||||
diffpos++;
|
diffpos++;
|
||||||
}
|
}
|
||||||
if (diffMatches.size() > 1 && diffMatches.get(0).hasSlicing() && differential.getElement().indexOf(diffMatches.get(1)) > differential.getElement().indexOf(diffMatches.get(0))+1) {
|
if (hasInnerDiffMatches(differential, cpath, diffpos, diffLimit, base.getElement(), false)) {
|
||||||
int nbl = findEndOfElement(base, baseCursor);
|
int nbl = findEndOfElement(base, baseCursor);
|
||||||
int ndc = differential.getElement().indexOf(diffMatches.get(0));
|
int ndc = differential.getElement().indexOf(diffMatches.get(0))+1;
|
||||||
int ndl = findEndOfElement(differential, ndc);
|
int ndl = findEndOfElement(differential, ndc);
|
||||||
processPaths(indent+" ", result, base, differential, baseCursor+1, ndc, nbl, ndl, url, webUrl, profileName+pathTail(diffMatches, 0), contextPathSrc, contextPathDst, trimDifferential, contextName, resultPathBase, true, null, srcSD);
|
processPaths(indent+" ", result, base, differential, baseCursor+1, ndc, nbl, ndl, url, webUrl, profileName+pathTail(diffMatches, 0), contextPathSrc, contextPathDst, trimDifferential, contextName, resultPathBase, false, null, srcSD);
|
||||||
// throw new Error("Not done yet");
|
// throw new Error("Not done yet");
|
||||||
// } else if (currentBase.getType().get(0).getCode().equals("BackboneElement") && diffMatches.size() > 0 && diffMatches.get(0).hasSliceName()) {
|
// } else if (currentBase.getType().get(0).getCode().equals("BackboneElement") && diffMatches.size() > 0 && diffMatches.get(0).hasSliceName()) {
|
||||||
} else if (currentBase.getType().get(0).getCode().equals("BackboneElement")) {
|
} else if (currentBase.getType().get(0).getCode().equals("BackboneElement")) {
|
||||||
|
@ -1023,6 +1034,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
throw new DefinitionException("Adding wrong path");
|
throw new DefinitionException("Adding wrong path");
|
||||||
result.getElement().add(outcome);
|
result.getElement().add(outcome);
|
||||||
updateFromDefinition(outcome, diffItem, profileName, trimDifferential, url, srcSD);
|
updateFromDefinition(outcome, diffItem, profileName, trimDifferential, url, srcSD);
|
||||||
|
removeStatusExtensions(outcome);
|
||||||
// --- LM Added this
|
// --- LM Added this
|
||||||
diffCursor = differential.getElement().indexOf(diffItem)+1;
|
diffCursor = differential.getElement().indexOf(diffItem)+1;
|
||||||
if (!outcome.getType().isEmpty() && (/*outcome.getType().get(0).getCode().equals("Extension") || */differential.getElement().size() > diffCursor) && outcome.getPath().contains(".") && isDataType(outcome.getType())) { // don't want to do this for the root, since that's base, and we're already processing it
|
if (!outcome.getType().isEmpty() && (/*outcome.getType().get(0).getCode().equals("Extension") || */differential.getElement().size() > diffCursor) && outcome.getPath().contains(".") && isDataType(outcome.getType())) { // don't want to do this for the root, since that's base, and we're already processing it
|
||||||
|
@ -1094,6 +1106,14 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void removeStatusExtensions(ElementDefinition outcome) {
|
||||||
|
outcome.removeExtension(ToolingExtensions.EXT_FMM_LEVEL);
|
||||||
|
outcome.removeExtension(ToolingExtensions.EXT_STANDARDS_STATUS);
|
||||||
|
outcome.removeExtension(ToolingExtensions.EXT_NORMATIVE_VERSION);
|
||||||
|
outcome.removeExtension(ToolingExtensions.EXT_WORKGROUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private String descED(List<ElementDefinition> list, int index) {
|
private String descED(List<ElementDefinition> list, int index) {
|
||||||
return index >=0 && index < list.size() ? list.get(index).present() : "X";
|
return index >=0 && index < list.size() ? list.get(index).present() : "X";
|
||||||
}
|
}
|
||||||
|
@ -1560,12 +1580,16 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
return currentBase.getPath().endsWith(".extension") || currentBase.getPath().endsWith(".modifierExtension");
|
return currentBase.getPath().endsWith(".extension") || currentBase.getPath().endsWith(".modifierExtension");
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasInnerDiffMatches(StructureDefinitionDifferentialComponent context, String path, int start, int end, List<ElementDefinition> base) throws DefinitionException {
|
private boolean hasInnerDiffMatches(StructureDefinitionDifferentialComponent context, String path, int start, int end, List<ElementDefinition> base, boolean allowSlices) throws DefinitionException {
|
||||||
|
end = Math.min(context.getElement().size(), end);
|
||||||
|
start = Math.max(0, start);
|
||||||
|
|
||||||
for (int i = start; i <= end; i++) {
|
for (int i = start; i <= end; i++) {
|
||||||
String statedPath = context.getElement().get(i).getPath();
|
String statedPath = context.getElement().get(i).getPath();
|
||||||
if (statedPath.startsWith(path+".")) {
|
if (statedPath.startsWith(path+".")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
} else if (!statedPath.endsWith(path))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1618,7 +1642,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateFromDefinition(ElementDefinition dest, ElementDefinition source, String pn, boolean trimDifferential, String purl, StructureDefinition srcSD) throws DefinitionException, FHIRException {
|
private void updateFromDefinition(ElementDefinition dest, ElementDefinition source, String pn, boolean trimDifferential, String purl, StructureDefinition srcSD) throws DefinitionException, FHIRException {
|
||||||
source.setUserData(GENERATED_IN_SNAPSHOT, true);
|
source.setUserData(GENERATED_IN_SNAPSHOT, dest);
|
||||||
// we start with a clone of the base profile ('dest') and we copy from the profile ('source')
|
// we start with a clone of the base profile ('dest') and we copy from the profile ('source')
|
||||||
// over the top for anything the source has
|
// over the top for anything the source has
|
||||||
ElementDefinition base = dest;
|
ElementDefinition base = dest;
|
||||||
|
@ -2112,7 +2136,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
List<ElementDefinition> children = getChildren(ed.getSnapshot().getElement(), ed.getSnapshot().getElement().get(0));
|
List<ElementDefinition> children = getChildren(ed.getSnapshot().getElement(), ed.getSnapshot().getElement().get(0));
|
||||||
for (ElementDefinition child : children)
|
for (ElementDefinition child : children)
|
||||||
if (!child.getPath().endsWith(".id"))
|
if (!child.getPath().endsWith(".id"))
|
||||||
genElement(defFile == null ? "" : defFile+"-definitions.html#extension.", gen, r.getSubRows(), child, ed.getSnapshot().getElement(), null, true, defFile, true, full, corePath, imagePath, true, false, false, false);
|
genElement(defFile == null ? "" : defFile+"-definitions.html#extension.", gen, r.getSubRows(), child, ed.getSnapshot().getElement(), null, true, defFile, true, full, corePath, imagePath, true, false, false, false, null);
|
||||||
} else if (deep) {
|
} else if (deep) {
|
||||||
List<ElementDefinition> children = new ArrayList<ElementDefinition>();
|
List<ElementDefinition> children = new ArrayList<ElementDefinition>();
|
||||||
for (ElementDefinition ted : ed.getSnapshot().getElement()) {
|
for (ElementDefinition ted : ed.getSnapshot().getElement()) {
|
||||||
|
@ -2195,7 +2219,6 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static final int AGG_NONE = 0;
|
private static final int AGG_NONE = 0;
|
||||||
private static final int AGG_IND = 1;
|
private static final int AGG_IND = 1;
|
||||||
private static final int AGG_GR = 2;
|
private static final int AGG_GR = 2;
|
||||||
|
@ -2289,10 +2312,15 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
c.addPiece(checkForNoChange(t, gen.new Piece((t.getProfile().get(0).getValue().startsWith(corePath)? corePath: "")+ref, t.getCode(), null)));
|
c.addPiece(checkForNoChange(t, gen.new Piece((t.getProfile().get(0).getValue().startsWith(corePath)? corePath: "")+ref, t.getCode(), null)));
|
||||||
} else if (pkp != null && pkp.hasLinkFor(t.getCode())) {
|
} else {
|
||||||
c.addPiece(checkForNoChange(t, gen.new Piece(pkp.getLinkFor(corePath, t.getCode()), t.getCode(), null)));
|
String tc = t.getCode();
|
||||||
|
if (Utilities.noString(tc) && t.getCodeElement().hasExtension(ToolingExtensions.EXT_JSON_TYPE))
|
||||||
|
tc = "string";
|
||||||
|
if (pkp != null && pkp.hasLinkFor(tc)) {
|
||||||
|
c.addPiece(checkForNoChange(t, gen.new Piece(pkp.getLinkFor(corePath, tc), tc, null)));
|
||||||
} else
|
} else
|
||||||
c.addPiece(checkForNoChange(t, gen.new Piece(null, t.getCode(), null)));
|
c.addPiece(checkForNoChange(t, gen.new Piece(null, tc, null)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
@ -2447,7 +2475,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
profiles.add(profile);
|
profiles.add(profile);
|
||||||
if (list.isEmpty())
|
if (list.isEmpty())
|
||||||
throw new FHIRException((diff ? "Differential" : "Snapshot") + " is empty generating hierarchical table for "+profile.getUrl());
|
throw new FHIRException((diff ? "Differential" : "Snapshot") + " is empty generating hierarchical table for "+profile.getUrl());
|
||||||
genElement(defFile == null ? null : defFile+"#", gen, model.getRows(), list.get(0), list, profiles, diff, profileBaseFileName, null, snapshot, corePath, imagePath, true, logicalModel, profile.getDerivation() == TypeDerivationRule.CONSTRAINT && usesMustSupport(list), allInvariants);
|
genElement(defFile == null ? null : defFile+"#", gen, model.getRows(), list.get(0), list, profiles, diff, profileBaseFileName, null, snapshot, corePath, imagePath, true, logicalModel, profile.getDerivation() == TypeDerivationRule.CONSTRAINT && usesMustSupport(list), allInvariants, null);
|
||||||
try {
|
try {
|
||||||
return gen.generate(model, imagePath, 0, outputTracker);
|
return gen.generate(model, imagePath, 0, outputTracker);
|
||||||
} catch (org.hl7.fhir.exceptions.FHIRException e) {
|
} catch (org.hl7.fhir.exceptions.FHIRException e) {
|
||||||
|
@ -2480,9 +2508,14 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void genElement(String defPath, HierarchicalTableGenerator gen, List<Row> rows, ElementDefinition element, List<ElementDefinition> all, List<StructureDefinition> profiles, boolean showMissing, String profileBaseFileName, Boolean extensions, boolean snapshot, String corePath, String imagePath, boolean root, boolean logicalModel, boolean isConstraintMode, boolean allInvariants) throws IOException, FHIRException {
|
private Row genElement(String defPath, HierarchicalTableGenerator gen, List<Row> rows, ElementDefinition element, List<ElementDefinition> all, List<StructureDefinition> profiles, boolean showMissing, String profileBaseFileName, Boolean extensions, boolean snapshot, String corePath, String imagePath, boolean root, boolean logicalModel, boolean isConstraintMode, boolean allInvariants, Row slicingRow) throws IOException, FHIRException {
|
||||||
|
Row originalRow = slicingRow;
|
||||||
StructureDefinition profile = profiles == null ? null : profiles.get(profiles.size()-1);
|
StructureDefinition profile = profiles == null ? null : profiles.get(profiles.size()-1);
|
||||||
String s = tail(element.getPath());
|
String s = tail(element.getPath());
|
||||||
|
if (element.hasSliceName())
|
||||||
|
s = element.getSliceName();
|
||||||
|
Row typesRow = null;
|
||||||
|
|
||||||
List<ElementDefinition> children = getChildren(all, element);
|
List<ElementDefinition> children = getChildren(all, element);
|
||||||
boolean isExtension = (s.equals("extension") || s.equals("modifierExtension"));
|
boolean isExtension = (s.equals("extension") || s.equals("modifierExtension"));
|
||||||
// if (!snapshot && isExtension && extensions != null && extensions != isExtension)
|
// if (!snapshot && isExtension && extensions != null && extensions != isExtension)
|
||||||
|
@ -2516,8 +2549,10 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
else if (hasDef && element.getType().size() > 1) {
|
else if (hasDef && element.getType().size() > 1) {
|
||||||
if (allAreReference(element.getType()))
|
if (allAreReference(element.getType()))
|
||||||
row.setIcon("icon_reference.png", HierarchicalTableGenerator.TEXT_ICON_REFERENCE);
|
row.setIcon("icon_reference.png", HierarchicalTableGenerator.TEXT_ICON_REFERENCE);
|
||||||
else
|
else {
|
||||||
row.setIcon("icon_choice.gif", HierarchicalTableGenerator.TEXT_ICON_CHOICE);
|
row.setIcon("icon_choice.gif", HierarchicalTableGenerator.TEXT_ICON_CHOICE);
|
||||||
|
typesRow = row;
|
||||||
|
}
|
||||||
} else if (hasDef && element.getType().get(0).getCode() != null && element.getType().get(0).getCode().startsWith("@"))
|
} else if (hasDef && element.getType().get(0).getCode() != null && element.getType().get(0).getCode().startsWith("@"))
|
||||||
row.setIcon("icon_reuse.png", HierarchicalTableGenerator.TEXT_ICON_REUSE);
|
row.setIcon("icon_reuse.png", HierarchicalTableGenerator.TEXT_ICON_REUSE);
|
||||||
else if (hasDef && isPrimitive(element.getType().get(0).getCode()))
|
else if (hasDef && isPrimitive(element.getType().get(0).getCode()))
|
||||||
|
@ -2554,7 +2589,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (extDefn == null) {
|
if (extDefn == null) {
|
||||||
genCardinality(gen, element, row, hasDef, used, null);
|
genCardinality(gen, element, row, hasDef, used, null);
|
||||||
row.getCells().add(gen.new Cell(null, null, "?? "+element.getType().get(0).getProfile(), null, null));
|
row.getCells().add(gen.new Cell(null, null, "?? "+element.getType().get(0).getProfile(), null, null));
|
||||||
generateDescription(gen, row, element, null, used.used, profile.getUrl(), eurl, profile, corePath, imagePath, root, logicalModel, allInvariants);
|
generateDescription(gen, row, element, null, used.used, profile.getUrl(), eurl, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot);
|
||||||
} else {
|
} else {
|
||||||
String name = urltail(eurl);
|
String name = urltail(eurl);
|
||||||
left.getPieces().get(0).setText(name);
|
left.getPieces().get(0).setText(name);
|
||||||
|
@ -2567,7 +2602,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
else // if it's complex, we just call it nothing
|
else // if it's complex, we just call it nothing
|
||||||
// genTypes(gen, row, extDefn.getSnapshot().getElement().get(0), profileBaseFileName, profile);
|
// genTypes(gen, row, extDefn.getSnapshot().getElement().get(0), profileBaseFileName, profile);
|
||||||
row.getCells().add(gen.new Cell(null, null, "("+translate("sd.table", "Complex")+")", null, null));
|
row.getCells().add(gen.new Cell(null, null, "("+translate("sd.table", "Complex")+")", null, null));
|
||||||
generateDescription(gen, row, element, extDefn.getElement(), used.used, null, extDefn.getUrl(), profile, corePath, imagePath, root, logicalModel, allInvariants, valueDefn);
|
generateDescription(gen, row, element, extDefn.getElement(), used.used, null, extDefn.getUrl(), profile, corePath, imagePath, root, logicalModel, allInvariants, valueDefn, snapshot);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
genCardinality(gen, element, row, hasDef, used, null);
|
genCardinality(gen, element, row, hasDef, used, null);
|
||||||
|
@ -2575,15 +2610,17 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
row.getCells().add(gen.new Cell());
|
row.getCells().add(gen.new Cell());
|
||||||
else
|
else
|
||||||
genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath);
|
genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath);
|
||||||
generateDescription(gen, row, element, null, used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants);
|
generateDescription(gen, row, element, null, used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
genCardinality(gen, element, row, hasDef, used, null);
|
genCardinality(gen, element, row, hasDef, used, null);
|
||||||
if (hasDef && !"0".equals(element.getMax()))
|
if (element.hasSlicing())
|
||||||
|
row.getCells().add(gen.new Cell(null, corePath+"profiling.html#slicing", "(Slice Definition)", null, null));
|
||||||
|
else if (hasDef && !"0".equals(element.getMax()) && typesRow == null)
|
||||||
genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath);
|
genTypes(gen, row, element, profileBaseFileName, profile, corePath, imagePath);
|
||||||
else
|
else
|
||||||
row.getCells().add(gen.new Cell());
|
row.getCells().add(gen.new Cell());
|
||||||
generateDescription(gen, row, element, null, used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants);
|
generateDescription(gen, row, element, null, used.used, null, null, profile, corePath, imagePath, root, logicalModel, allInvariants, snapshot);
|
||||||
}
|
}
|
||||||
if (element.hasSlicing()) {
|
if (element.hasSlicing()) {
|
||||||
if (standardExtensionSlicing(element)) {
|
if (standardExtensionSlicing(element)) {
|
||||||
|
@ -2591,6 +2628,7 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
showMissing = false; //?
|
showMissing = false; //?
|
||||||
} else {
|
} else {
|
||||||
row.setIcon("icon_slice.png", HierarchicalTableGenerator.TEXT_ICON_SLICE);
|
row.setIcon("icon_slice.png", HierarchicalTableGenerator.TEXT_ICON_SLICE);
|
||||||
|
slicingRow = row;
|
||||||
row.getCells().get(2).getPieces().clear();
|
row.getCells().get(2).getPieces().clear();
|
||||||
for (Cell cell : row.getCells())
|
for (Cell cell : row.getCells())
|
||||||
for (Piece p : cell.getPieces()) {
|
for (Piece p : cell.getPieces()) {
|
||||||
|
@ -2607,16 +2645,118 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
p.setReference(null);
|
p.setReference(null);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (ElementDefinition child : children)
|
if (slicingRow != originalRow && !children.isEmpty()) {
|
||||||
|
// we've entered a slice; we're going to create a holder row for the slice children
|
||||||
|
Row hrow = gen.new Row();
|
||||||
|
hrow.setAnchor(element.getPath());
|
||||||
|
hrow.setColor(getRowColor(element, isConstraintMode));
|
||||||
|
hrow.setLineColor(1);
|
||||||
|
hrow.setIcon("icon_element.gif", HierarchicalTableGenerator.TEXT_ICON_ELEMENT);
|
||||||
|
hrow.getCells().add(gen.new Cell(null, null, "(All Slices)", "", null));
|
||||||
|
hrow.getCells().add(gen.new Cell());
|
||||||
|
hrow.getCells().add(gen.new Cell());
|
||||||
|
hrow.getCells().add(gen.new Cell());
|
||||||
|
hrow.getCells().add(gen.new Cell(null, null, "Content/Rules for all slices", "", null));
|
||||||
|
row.getSubRows().add(hrow);
|
||||||
|
row = hrow;
|
||||||
|
}
|
||||||
|
if (typesRow != null && !children.isEmpty()) {
|
||||||
|
// we've entered a typing slice; we're going to create a holder row for the all types children
|
||||||
|
Row hrow = gen.new Row();
|
||||||
|
hrow.setAnchor(element.getPath());
|
||||||
|
hrow.setColor(getRowColor(element, isConstraintMode));
|
||||||
|
hrow.setLineColor(1);
|
||||||
|
hrow.setIcon("icon_element.gif", HierarchicalTableGenerator.TEXT_ICON_ELEMENT);
|
||||||
|
hrow.getCells().add(gen.new Cell(null, null, "(All Types)", "", null));
|
||||||
|
hrow.getCells().add(gen.new Cell());
|
||||||
|
hrow.getCells().add(gen.new Cell());
|
||||||
|
hrow.getCells().add(gen.new Cell());
|
||||||
|
hrow.getCells().add(gen.new Cell(null, null, "Content/Rules for all Types", "", null));
|
||||||
|
row.getSubRows().add(hrow);
|
||||||
|
row = hrow;
|
||||||
|
}
|
||||||
|
|
||||||
|
Row currRow = row;
|
||||||
|
for (ElementDefinition child : children) {
|
||||||
|
if (!child.hasSliceName())
|
||||||
|
currRow = row;
|
||||||
if (logicalModel || !child.getPath().endsWith(".id") || (child.getPath().endsWith(".id") && (profile != null) && (profile.getDerivation() == TypeDerivationRule.CONSTRAINT)))
|
if (logicalModel || !child.getPath().endsWith(".id") || (child.getPath().endsWith(".id") && (profile != null) && (profile.getDerivation() == TypeDerivationRule.CONSTRAINT)))
|
||||||
genElement(defPath, gen, row.getSubRows(), child, all, profiles, showMissing, profileBaseFileName, isExtension, snapshot, corePath, imagePath, false, logicalModel, isConstraintMode, allInvariants);
|
currRow = genElement(defPath, gen, currRow.getSubRows(), child, all, profiles, showMissing, profileBaseFileName, isExtension, snapshot, corePath, imagePath, false, logicalModel, isConstraintMode, allInvariants, currRow);
|
||||||
|
}
|
||||||
// if (!snapshot && (extensions == null || !extensions))
|
// if (!snapshot && (extensions == null || !extensions))
|
||||||
// for (ElementDefinition child : children)
|
// for (ElementDefinition child : children)
|
||||||
// if (child.getPath().endsWith(".extension") || child.getPath().endsWith(".modifierExtension"))
|
// if (child.getPath().endsWith(".extension") || child.getPath().endsWith(".modifierExtension"))
|
||||||
// genElement(defPath, gen, row.getSubRows(), child, all, profiles, showMissing, profileBaseFileName, true, false, corePath, imagePath, false, logicalModel, isConstraintMode, allInvariants);
|
// genElement(defPath, gen, row.getSubRows(), child, all, profiles, showMissing, profileBaseFileName, true, false, corePath, imagePath, false, logicalModel, isConstraintMode, allInvariants);
|
||||||
}
|
}
|
||||||
|
if (typesRow != null) {
|
||||||
|
makeChoiceRows(typesRow.getSubRows(), element, gen, corePath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return slicingRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void makeChoiceRows(List<Row> subRows, ElementDefinition element, HierarchicalTableGenerator gen, String corePath) {
|
||||||
|
// create a child for each choice
|
||||||
|
for (TypeRefComponent tr : element.getType()) {
|
||||||
|
Row choicerow = gen.new Row();
|
||||||
|
String t = tr.getCode();
|
||||||
|
if (isReference(t)) {
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, null, tail(element.getPath()).replace("[x]", Utilities.capitalize(t)), null, null));
|
||||||
|
choicerow.getCells().add(gen.new Cell());
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, null, "", null, null));
|
||||||
|
choicerow.setIcon("icon_reference.png", HierarchicalTableGenerator.TEXT_ICON_REFERENCE);
|
||||||
|
Cell c = gen.new Cell();
|
||||||
|
choicerow.getCells().add(c);
|
||||||
|
if (ADD_REFERENCE_TO_TABLE) {
|
||||||
|
if (tr.getCode().equals("canonical"))
|
||||||
|
c.getPieces().add(gen.new Piece(corePath+"datatypes.html#canonical", "canonical", null));
|
||||||
|
else
|
||||||
|
c.getPieces().add(gen.new Piece(corePath+"references.html#Reference", "Reference", null));
|
||||||
|
c.getPieces().add(gen.new Piece(null, "(", null));
|
||||||
|
}
|
||||||
|
boolean first = true;
|
||||||
|
for (CanonicalType rt : tr.getTargetProfile()) {
|
||||||
|
if (!first)
|
||||||
|
c.getPieces().add(gen.new Piece(null, " | ", null));
|
||||||
|
c.getPieces().add(gen.new Piece(null, pkp.getLinkFor(corePath, rt.asStringValue()), null));
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
if (ADD_REFERENCE_TO_TABLE)
|
||||||
|
c.getPieces().add(gen.new Piece(null, ")", null));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
StructureDefinition sd = context.fetchTypeDefinition(t);
|
||||||
|
if (sd.getKind() == StructureDefinitionKind.PRIMITIVETYPE) {
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, null, tail(element.getPath()).replace("[x]", Utilities.capitalize(t)), sd.getDescription(), null));
|
||||||
|
choicerow.getCells().add(gen.new Cell());
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, null, "", null, null));
|
||||||
|
choicerow.setIcon("icon_primitive.png", HierarchicalTableGenerator.TEXT_ICON_PRIMITIVE);
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, corePath+"datatypes.html#"+t, t, null, null));
|
||||||
|
// } else if (definitions.getConstraints().contthnsKey(t)) {
|
||||||
|
// ProfiledType pt = definitions.getConstraints().get(t);
|
||||||
|
// choicerow.getCells().add(gen.new Cell(null, null, e.getName().replace("[x]", Utilities.capitalize(pt.getBaseType())), definitions.getTypes().containsKey(t) ? definitions.getTypes().get(t).getDefinition() : null, null));
|
||||||
|
// choicerow.getCells().add(gen.new Cell());
|
||||||
|
// choicerow.getCells().add(gen.new Cell(null, null, "", null, null));
|
||||||
|
// choicerow.setIcon("icon_datatype.gif", HierarchicalTableGenerator.TEXT_ICON_DATATYPE);
|
||||||
|
// choicerow.getCells().add(gen.new Cell(null, definitions.getSrcFile(t)+".html#"+t.replace("*", "open"), t, null, null));
|
||||||
|
} else {
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, null, tail(element.getPath()).replace("[x]", Utilities.capitalize(t)), sd.getDescription(), null));
|
||||||
|
choicerow.getCells().add(gen.new Cell());
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, null, "", null, null));
|
||||||
|
choicerow.setIcon("icon_datatype.gif", HierarchicalTableGenerator.TEXT_ICON_DATATYPE);
|
||||||
|
choicerow.getCells().add(gen.new Cell(null, pkp.getLinkFor(corePath, t), t, null, null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
choicerow.getCells().add(gen.new Cell());
|
||||||
|
subRows.add(choicerow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isReference(String t) {
|
||||||
|
return t.equals("Reference") || t.equals("canonical");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void genGridElement(String defPath, HierarchicalTableGenerator gen, List<Row> rows, ElementDefinition element, List<ElementDefinition> all, List<StructureDefinition> profiles, boolean showMissing, String profileBaseFileName, Boolean extensions, String corePath, String imagePath, boolean root, boolean isConstraintMode) throws IOException, FHIRException {
|
private void genGridElement(String defPath, HierarchicalTableGenerator gen, List<Row> rows, ElementDefinition element, List<ElementDefinition> all, List<StructureDefinition> profiles, boolean showMissing, String profileBaseFileName, Boolean extensions, String corePath, String imagePath, boolean root, boolean isConstraintMode) throws IOException, FHIRException {
|
||||||
StructureDefinition profile = profiles == null ? null : profiles.get(profiles.size()-1);
|
StructureDefinition profile = profiles == null ? null : profiles.get(profiles.size()-1);
|
||||||
|
@ -2759,11 +2899,11 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
&& element.getSlicing().getRules() != SlicingRules.CLOSED && element.getSlicing().getDiscriminator().size() == 1 && element.getSlicing().getDiscriminator().get(0).getPath().equals("url") && element.getSlicing().getDiscriminator().get(0).getType().equals(DiscriminatorType.VALUE);
|
&& element.getSlicing().getRules() != SlicingRules.CLOSED && element.getSlicing().getDiscriminator().size() == 1 && element.getSlicing().getDiscriminator().get(0).getPath().equals("url") && element.getSlicing().getDiscriminator().get(0).getType().equals(DiscriminatorType.VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants) throws IOException, FHIRException {
|
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants, boolean snapshot) throws IOException, FHIRException {
|
||||||
return generateDescription(gen, row, definition, fallback, used, baseURL, url, profile, corePath, imagePath, root, logicalModel, allInvariants, null);
|
return generateDescription(gen, row, definition, fallback, used, baseURL, url, profile, corePath, imagePath, root, logicalModel, allInvariants, null, snapshot);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants, ElementDefinition valueDefn) throws IOException, FHIRException {
|
private Cell generateDescription(HierarchicalTableGenerator gen, Row row, ElementDefinition definition, ElementDefinition fallback, boolean used, String baseURL, String url, StructureDefinition profile, String corePath, String imagePath, boolean root, boolean logicalModel, boolean allInvariants, ElementDefinition valueDefn, boolean snapshot) throws IOException, FHIRException {
|
||||||
Cell c = gen.new Cell();
|
Cell c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
|
|
||||||
|
@ -2894,7 +3034,12 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
if (definition.hasFixed()) {
|
if (definition.hasFixed()) {
|
||||||
if (!c.getPieces().isEmpty()) c.addPiece(gen.new Piece("br"));
|
if (!c.getPieces().isEmpty()) c.addPiece(gen.new Piece("br"));
|
||||||
c.getPieces().add(checkForNoChange(definition.getFixed(), gen.new Piece(null, translate("sd.table", "Fixed Value")+": ", null).addStyle("font-weight:bold")));
|
c.getPieces().add(checkForNoChange(definition.getFixed(), gen.new Piece(null, translate("sd.table", "Fixed Value")+": ", null).addStyle("font-weight:bold")));
|
||||||
|
if (!useTableForFixedValues || definition.getFixed().isPrimitive())
|
||||||
c.getPieces().add(checkForNoChange(definition.getFixed(), gen.new Piece(null, buildJson(definition.getFixed()), null).addStyle("color: darkgreen")));
|
c.getPieces().add(checkForNoChange(definition.getFixed(), gen.new Piece(null, buildJson(definition.getFixed()), null).addStyle("color: darkgreen")));
|
||||||
|
else {
|
||||||
|
c.getPieces().add(checkForNoChange(definition.getFixed(), gen.new Piece(null, "As shown", null).addStyle("color: darkgreen")));
|
||||||
|
genFixedValue(gen, row, definition.getFixed(), snapshot, false, corePath);
|
||||||
|
}
|
||||||
if (isCoded(definition.getFixed()) && !hasDescription(definition.getFixed())) {
|
if (isCoded(definition.getFixed()) && !hasDescription(definition.getFixed())) {
|
||||||
Piece p = describeCoded(gen, definition.getFixed());
|
Piece p = describeCoded(gen, definition.getFixed());
|
||||||
if (p != null)
|
if (p != null)
|
||||||
|
@ -2903,12 +3048,11 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
} else if (definition.hasPattern()) {
|
} else if (definition.hasPattern()) {
|
||||||
if (!c.getPieces().isEmpty()) c.addPiece(gen.new Piece("br"));
|
if (!c.getPieces().isEmpty()) c.addPiece(gen.new Piece("br"));
|
||||||
c.getPieces().add(checkForNoChange(definition.getPattern(), gen.new Piece(null, translate("sd.table", "Required Pattern")+": ", null).addStyle("font-weight:bold")));
|
c.getPieces().add(checkForNoChange(definition.getPattern(), gen.new Piece(null, translate("sd.table", "Required Pattern")+": ", null).addStyle("font-weight:bold")));
|
||||||
if (!TABLE_FORMAT_FOR_FIXED_VALUES || definition.getPattern().isPrimitive())
|
if (!useTableForFixedValues || definition.getPattern().isPrimitive())
|
||||||
c.getPieces().add(checkForNoChange(definition.getPattern(), gen.new Piece(null, buildJson(definition.getPattern()), null).addStyle("color: darkgreen")));
|
c.getPieces().add(checkForNoChange(definition.getPattern(), gen.new Piece(null, buildJson(definition.getPattern()), null).addStyle("color: darkgreen")));
|
||||||
else {
|
else {
|
||||||
c.getPieces().add(checkForNoChange(definition.getPattern(), gen.new Piece(null, "TODO", null).addStyle("color: darkgreen")));
|
c.getPieces().add(checkForNoChange(definition.getPattern(), gen.new Piece(null, "At least the following", null).addStyle("color: darkgreen")));
|
||||||
genFixedValue(gen, row, definition.getPattern());
|
genFixedValue(gen, row, definition.getPattern(), snapshot, true, corePath);
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (definition.hasExample()) {
|
} else if (definition.hasExample()) {
|
||||||
for (ElementDefinitionExampleComponent ex : definition.getExample()) {
|
for (ElementDefinitionExampleComponent ex : definition.getExample()) {
|
||||||
|
@ -2944,41 +3088,102 @@ public class ProfileUtilities extends TranslatingUtilities {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void genFixedValue(HierarchicalTableGenerator gen, Row erow, Type value) {
|
private void genFixedValue(HierarchicalTableGenerator gen, Row erow, Type value, boolean snapshot, boolean pattern, String corePath) {
|
||||||
|
String ref = pkp.getLinkFor(corePath, value.fhirType());
|
||||||
|
ref = ref.substring(0, ref.indexOf(".html"))+"-definitions.html#";
|
||||||
|
StructureDefinition sd = context.fetchTypeDefinition(value.fhirType());
|
||||||
|
|
||||||
for (org.hl7.fhir.r5.model.Property t : value.children()) {
|
for (org.hl7.fhir.r5.model.Property t : value.children()) {
|
||||||
if (t.hasValues()) {
|
if (t.getValues().size() > 0 || snapshot) {
|
||||||
|
ElementDefinition ed = findElementDefinition(sd, t.getName());
|
||||||
|
if (t.getValues().size() == 0 || (t.getValues().size() == 1 && t.getValues().get(0).isEmpty())) {
|
||||||
|
Row row = gen.new Row();
|
||||||
|
erow.getSubRows().add(row);
|
||||||
|
Cell c = gen.new Cell();
|
||||||
|
row.getCells().add(c);
|
||||||
|
c.addPiece(gen.new Piece((ed.getBase().getPath().equals(ed.getPath()) ? ref+ed.getPath() : corePath+"element-definitions.html#"+ed.getBase().getPath()), t.getName(), null));
|
||||||
|
c = gen.new Cell();
|
||||||
|
row.getCells().add(c);
|
||||||
|
c.addPiece(gen.new Piece(null, null, null));
|
||||||
|
c = gen.new Cell();
|
||||||
|
row.getCells().add(c);
|
||||||
|
if (!pattern) {
|
||||||
|
c.addPiece(gen.new Piece(null, "0..0", null));
|
||||||
|
row.setIcon("icon_fixed.gif", "Fixed Value" /*HierarchicalTableGenerator.TEXT_ICON_FIXED*/);
|
||||||
|
} else if (isPrimitive(t.getTypeCode())) {
|
||||||
|
row.setIcon("icon_primitive.png", HierarchicalTableGenerator.TEXT_ICON_PRIMITIVE);
|
||||||
|
c.addPiece(gen.new Piece(null, "0.."+(t.getMaxCardinality() == 2147483647 ? "*": Integer.toString(t.getMaxCardinality())), null));
|
||||||
|
} else if (isReference(t.getTypeCode())) {
|
||||||
|
row.setIcon("icon_reference.png", HierarchicalTableGenerator.TEXT_ICON_REFERENCE);
|
||||||
|
c.addPiece(gen.new Piece(null, "0.."+(t.getMaxCardinality() == 2147483647 ? "*": Integer.toString(t.getMaxCardinality())), null));
|
||||||
|
} else {
|
||||||
|
row.setIcon("icon_datatype.gif", HierarchicalTableGenerator.TEXT_ICON_DATATYPE);
|
||||||
|
c.addPiece(gen.new Piece(null, "0.."+(t.getMaxCardinality() == 2147483647 ? "*": Integer.toString(t.getMaxCardinality())), null));
|
||||||
|
}
|
||||||
|
c = gen.new Cell();
|
||||||
|
row.getCells().add(c);
|
||||||
|
c.addPiece(gen.new Piece(pkp.getLinkFor(corePath, t.getTypeCode()), t.getTypeCode(), null));
|
||||||
|
c = gen.new Cell();
|
||||||
|
c.addPiece(gen.new Piece(null, ed.getShort(), null));
|
||||||
|
row.getCells().add(c);
|
||||||
|
} else {
|
||||||
for (Base b : t.getValues()) {
|
for (Base b : t.getValues()) {
|
||||||
Row row = gen.new Row();
|
Row row = gen.new Row();
|
||||||
erow.getSubRows().add(row);
|
erow.getSubRows().add(row);
|
||||||
|
row.setIcon("icon_fixed.gif", "Fixed Value" /*HierarchicalTableGenerator.TEXT_ICON_FIXED*/);
|
||||||
|
|
||||||
Cell c = gen.new Cell();
|
Cell c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
c.addPiece(gen.new Piece(t.getName()));
|
c.addPiece(gen.new Piece((ed.getBase().getPath().equals(ed.getPath()) ? ref+ed.getPath() : corePath+"element-definitions.html#"+ed.getBase().getPath()), t.getName(), null));
|
||||||
|
|
||||||
c = gen.new Cell();
|
c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
c.addPiece(gen.new Piece("P"));
|
c.addPiece(gen.new Piece(null, null, null));
|
||||||
|
|
||||||
c = gen.new Cell();
|
c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
c.addPiece(gen.new Piece("1..1"));
|
if (pattern)
|
||||||
|
c.addPiece(gen.new Piece(null, "1.."+(t.getMaxCardinality() == 2147483647 ? "*" : Integer.toString(t.getMaxCardinality())), null));
|
||||||
|
else
|
||||||
|
c.addPiece(gen.new Piece(null, "1..1", null));
|
||||||
|
|
||||||
c = gen.new Cell();
|
c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
c.addPiece(gen.new Piece(b.fhirType()));
|
c.addPiece(gen.new Piece(pkp.getLinkFor(corePath, b.fhirType()), b.fhirType(), null));
|
||||||
|
|
||||||
if (b.isPrimitive()) {
|
if (b.isPrimitive()) {
|
||||||
c = gen.new Cell();
|
c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
c.addPiece(gen.new Piece(b.primitiveValue()));
|
c.addPiece(gen.new Piece(null, ed.getShort(), null));
|
||||||
|
c.addPiece(gen.new Piece("br"));
|
||||||
|
c.getPieces().add(gen.new Piece(null, "Fixed Value: ", null).addStyle("font-weight: bold"));
|
||||||
|
String s = b.primitiveValue();
|
||||||
|
if (Utilities.noString(s))
|
||||||
|
System.out.print("t");
|
||||||
|
c.getPieces().add(gen.new Piece(null, s, null).addStyle("color: darkgreen"));
|
||||||
} else {
|
} else {
|
||||||
c = gen.new Cell();
|
c = gen.new Cell();
|
||||||
row.getCells().add(c);
|
row.getCells().add(c);
|
||||||
|
c.addPiece(gen.new Piece(null, ed.getShort(), null));
|
||||||
|
c.addPiece(gen.new Piece("br"));
|
||||||
|
c.getPieces().add(gen.new Piece(null, "Fixed Value: ", null).addStyle("font-weight: bold"));
|
||||||
|
c.getPieces().add(gen.new Piece(null, "(complex)", null).addStyle("color: darkgreen"));
|
||||||
|
genFixedValue(gen, row, (Type) b, snapshot, pattern, corePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private ElementDefinition findElementDefinition(StructureDefinition sd, String name) {
|
||||||
|
String path = sd.getType()+"."+name;
|
||||||
|
for (ElementDefinition ed : sd.getSnapshot().getElement()) {
|
||||||
|
if (ed.getPath().equals(path))
|
||||||
|
return ed;
|
||||||
|
}
|
||||||
|
throw new FHIRException("Unable to find element "+path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1116,4 +1116,14 @@ public abstract class BaseWorkerContext implements IWorkerContext {
|
||||||
this.ucumService = ucumService;
|
this.ucumService = ucumService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<StructureDefinition> getStructures() {
|
||||||
|
List<StructureDefinition> res = new ArrayList<>();
|
||||||
|
synchronized (lock) { // tricky, because you need to lock this as well, but it's really not in use yet
|
||||||
|
res.addAll(structures.values());
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,9 +22,11 @@ package org.hl7.fhir.r5.context;
|
||||||
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.fhir.ucum.UcumService;
|
import org.fhir.ucum.UcumService;
|
||||||
|
import org.hl7.fhir.exceptions.DefinitionException;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
||||||
import org.hl7.fhir.r5.formats.IParser;
|
import org.hl7.fhir.r5.formats.IParser;
|
||||||
|
@ -210,8 +212,10 @@ public interface IWorkerContext {
|
||||||
public List<String> getResourceNames();
|
public List<String> getResourceNames();
|
||||||
public Set<String> getResourceNamesAsSet();
|
public Set<String> getResourceNamesAsSet();
|
||||||
public List<String> getTypeNames();
|
public List<String> getTypeNames();
|
||||||
public List<StructureDefinition> allStructures();
|
public List<StructureDefinition> allStructures(); // ensure snapshot exists...
|
||||||
|
public List<StructureDefinition> getStructures();
|
||||||
public List<MetadataResource> allConformanceResources();
|
public List<MetadataResource> allConformanceResources();
|
||||||
|
public void generateSnapshot(StructureDefinition p) throws DefinitionException, FHIRException;
|
||||||
|
|
||||||
// -- Terminology services ------------------------------------------------------
|
// -- Terminology services ------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -117,13 +117,15 @@ public abstract class ParserBase {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// first pass: only look at base definitions
|
// first pass: only look at base definitions
|
||||||
for (StructureDefinition sd : context.allStructures()) {
|
for (StructureDefinition sd : context.getStructures()) {
|
||||||
if (sd.getUrl().equals("http://hl7.org/fhir/StructureDefinition/"+name)) {
|
if (sd.getUrl().equals("http://hl7.org/fhir/StructureDefinition/"+name)) {
|
||||||
|
context.generateSnapshot(sd);
|
||||||
return sd;
|
return sd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (StructureDefinition sd : context.allStructures()) {
|
for (StructureDefinition sd : context.getStructures()) {
|
||||||
if (name.equals(sd.getType()) && sd.getDerivation() == TypeDerivationRule.SPECIALIZATION) {
|
if (name.equals(sd.getType()) && sd.getDerivation() == TypeDerivationRule.SPECIALIZATION) {
|
||||||
|
context.generateSnapshot(sd);
|
||||||
return sd;
|
return sd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,7 +226,8 @@ public class FHIRPathEngine {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of resolve() function. Passed a string, return matching resource, if one is known - else null
|
* Implementation of resolve() function. Passed a string, return matching resource, if one is known - else null
|
||||||
* @param url
|
* @appContext - passed in by the host to the FHIRPathEngine
|
||||||
|
* @param url the reference (Reference.reference or the value of the canonical
|
||||||
* @return
|
* @return
|
||||||
* @throws FHIRException
|
* @throws FHIRException
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -41,10 +41,6 @@ public class OperationOutcomeUtilities {
|
||||||
if (message.getLocation() != null) {
|
if (message.getLocation() != null) {
|
||||||
// message location has a fhirPath in it. We need to populate the expression
|
// message location has a fhirPath in it. We need to populate the expression
|
||||||
issue.addExpression(message.getLocation());
|
issue.addExpression(message.getLocation());
|
||||||
// also, populate the XPath variant
|
|
||||||
StringType s = new StringType();
|
|
||||||
s.setValue(Utilities.fhirPathToXPath(message.getLocation())+(message.getLine()>= 0 && message.getCol() >= 0 ? " (line "+Integer.toString(message.getLine())+", col"+Integer.toString(message.getCol())+")" : "") );
|
|
||||||
issue.getLocation().add(s);
|
|
||||||
}
|
}
|
||||||
// pass through line/col if they're present
|
// pass through line/col if they're present
|
||||||
if (message.getLine() != 0)
|
if (message.getLine() != 0)
|
||||||
|
|
|
@ -346,7 +346,7 @@ public class SnapShotGenerationTests {
|
||||||
if (t.expected != null && url.equals(t.expected.getUrl()))
|
if (t.expected != null && url.equals(t.expected.getUrl()))
|
||||||
return t.expected;
|
return t.expected;
|
||||||
if (t.included != null && url.equals(t.included.getUrl()))
|
if (t.included != null && url.equals(t.included.getUrl()))
|
||||||
return t.expected;
|
return t.included;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -385,7 +385,7 @@ public class SnapShotGenerationTests {
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@Test
|
@Test
|
||||||
public void test() throws FHIRException, IOException, EOperationOutcome {
|
public void test() throws Exception {
|
||||||
if (fp == null)
|
if (fp == null)
|
||||||
fp = new FHIRPathEngine(TestingUtilities.context());
|
fp = new FHIRPathEngine(TestingUtilities.context());
|
||||||
fp.setHostServices(context);
|
fp.setHostServices(context);
|
||||||
|
@ -426,7 +426,7 @@ public class SnapShotGenerationTests {
|
||||||
Assert.assertTrue("Output does not match expected", test.expected.equalsDeep(test.output));
|
Assert.assertTrue("Output does not match expected", test.expected.equalsDeep(test.output));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testGen() throws DefinitionException, FHIRException, IOException, EOperationOutcome {
|
private void testGen() throws Exception {
|
||||||
if (!Utilities.noString(test.register)) {
|
if (!Utilities.noString(test.register)) {
|
||||||
ProfileUtilities pu = new ProfileUtilities(TestingUtilities.context(), null, null);
|
ProfileUtilities pu = new ProfileUtilities(TestingUtilities.context(), null, null);
|
||||||
pu.setNewSlicingProcessing(true);
|
pu.setNewSlicingProcessing(true);
|
||||||
|
@ -437,6 +437,9 @@ public class SnapShotGenerationTests {
|
||||||
TestingUtilities.context().cacheResource(test.included);
|
TestingUtilities.context().cacheResource(test.included);
|
||||||
}
|
}
|
||||||
StructureDefinition base = getSD(test.getSource().getBaseDefinition());
|
StructureDefinition base = getSD(test.getSource().getBaseDefinition());
|
||||||
|
if (!base.getUrl().equals(test.getSource().getBaseDefinition()))
|
||||||
|
throw new Exception("URL mismatch on base: "+base.getUrl()+" wanting "+test.getSource().getBaseDefinition());
|
||||||
|
|
||||||
StructureDefinition output = test.getSource().copy();
|
StructureDefinition output = test.getSource().copy();
|
||||||
ProfileUtilities pu = new ProfileUtilities(TestingUtilities.context(), messages , new TestPKP());
|
ProfileUtilities pu = new ProfileUtilities(TestingUtilities.context(), messages , new TestPKP());
|
||||||
pu.setNewSlicingProcessing(true);
|
pu.setNewSlicingProcessing(true);
|
||||||
|
|
|
@ -269,12 +269,6 @@
|
||||||
<derivation value="constraint"/>
|
<derivation value="constraint"/>
|
||||||
<snapshot>
|
<snapshot>
|
||||||
<element id="Extension">
|
<element id="Extension">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Extension"/>
|
<path value="Extension"/>
|
||||||
<short value="HL7 V2 receiving facility"/>
|
<short value="HL7 V2 receiving facility"/>
|
||||||
<definition value="Values for routing HLV2 message payloads associated with an endpoint, suitable for MSH-6"/>
|
<definition value="Values for routing HLV2 message payloads associated with an endpoint, suitable for MSH-6"/>
|
||||||
|
|
|
@ -269,12 +269,6 @@
|
||||||
<derivation value="constraint" />
|
<derivation value="constraint" />
|
||||||
<snapshot>
|
<snapshot>
|
||||||
<element id="Extension">
|
<element id="Extension">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Extension"/>
|
<path value="Extension"/>
|
||||||
<short value="HL7 V2 receiving facility"/>
|
<short value="HL7 V2 receiving facility"/>
|
||||||
<definition value="Values for routing HLV2 message payloads associated with an endpoint, suitable for MSH-6"/>
|
<definition value="Values for routing HLV2 message payloads associated with an endpoint, suitable for MSH-6"/>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,97 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<StructureDefinition xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="profile-timing"/>
|
||||||
|
<text>
|
||||||
|
<status value="generated"/><div xmlns="http://www.w3.org/1999/xhtml"><table border="0" cellpadding="0" cellspacing="0" style="border: 0px #F0F0F0 solid; font-size: 11px; font-family: verdana; vertical-align: top;"><tr style="border: 1px #F0F0F0 solid; font-size: 11px; font-family: verdana; vertical-align: top;"><th style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><a href="http://hl7.org/fhir/R4/formats.html#table" title="The logical name of the element">Name</a></th><th style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><a href="http://hl7.org/fhir/R4/formats.html#table" title="Information about the use of the element">Flags</a></th><th style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><a href="http://hl7.org/fhir/R4/formats.html#table" title="Minimum and Maximum # of times the the element can appear in the instance">Card.</a></th><th style="width: 100px" class="hierarchy"><a href="http://hl7.org/fhir/R4/formats.html#table" title="Reference to the type of the element">Type</a></th><th style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><a href="http://hl7.org/fhir/R4/formats.html#table" title="Additional information about the element">Description & Constraints</a><span style="float: right"><a href="http://hl7.org/fhir/R4/formats.html#table" title="Legend for this format"><img src="http://hl7.org/fhir/R4/help16.png" alt="doco" style="background-color: inherit"/></a></span></th></tr><tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: white;"><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck1.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: white; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing">Timing</a><a name="Timing"> </a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: #F7F7F7;"><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck01.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin_end.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: #F7F7F7; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat">repeat</a><a name="Timing.repeat"> </a></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: white;"><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck010.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: white; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.boundsDuration">boundsDuration</a><a name="Timing.repeat.boundsDuration"> </a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: #F7F7F7;"><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck010.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: #F7F7F7; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.duration">duration</a><a name="Timing.repeat.duration"> </a></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: white;"><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck010.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: white; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.durationUnit">durationUnit</a><a name="Timing.repeat.durationUnit"> </a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: #F7F7F7;"><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck010.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: #F7F7F7; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.period">period</a><a name="Timing.repeat.period"> </a></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: white;"><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck010.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: white; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.periodUnit">periodUnit</a><a name="Timing.repeat.periodUnit"> </a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: #F7F7F7;"><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck011.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: #F7F7F7; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.dayOfWeek">dayOfWeek</a><a name="Timing.repeat.dayOfWeek"> </a></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: white;"><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck0104.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vline.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin_end.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_extension_complex.png" alt="." style="background-color: white; background-color: inherit" title="Complex Extension" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.dayOfWeek.extension:CalendarPattern" title="Extension URL = http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-calendarPattern">extension-calendarPattern</a><a name="Timing.repeat.dayOfWeek.extension"> </a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy">1..1</td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><a href="http://hl7.org/fhir/R4/datatypes.html#code">code</a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy">Extension<br/><span style="font-weight:bold">URL: </span><a href="http://hl7.org/fhir/R4/extension-extension-calendarPattern.html">http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-calendarPattern</a></td></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: #F7F7F7;"><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck001.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin_end.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_element.gif" alt="." style="background-color: #F7F7F7; background-color: inherit" title="Element" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.when">when</a><a name="Timing.repeat.when"> </a></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/><td style="vertical-align: top; text-align : left; background-color: #F7F7F7; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"/></tr>
|
||||||
|
<tr style="border: 0px #F0F0F0 solid; padding:0px; vertical-align: top; background-color: white;"><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px; white-space: nowrap; background-image: url(tbl_bck0004.png)" class="hierarchy"><img src="tbl_spacer.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_blank.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="tbl_vjoin_end.png" alt="." style="background-color: inherit" class="hierarchy"/><img src="icon_extension_complex.png" alt="." style="background-color: white; background-color: inherit" title="Complex Extension" class="hierarchy"/> <a href="{{[id]}}-definitions.html#Timing.repeat.when.extension:DeliveryPattern" title="Extension URL = http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-deliveryPattern">extension-deliveryPattern</a><a name="Timing.repeat.when.extension"> </a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><span style="padding-left: 3px; padding-right: 3px; color: white; background-color: red" title="This element must be supported">S</span></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy">1..1</td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy"><a href="http://hl7.org/fhir/R4/datatypes.html#code">code</a></td><td style="vertical-align: top; text-align : left; background-color: white; border: 0px #F0F0F0 solid; padding:0px 4px 0px 4px" class="hierarchy">Extension<br/><span style="font-weight:bold">URL: </span><a href="http://hl7.org/fhir/R4/extension-extension-deliveryPattern.html">http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-deliveryPattern</a></td></tr>
|
||||||
|
<tr><td colspan="5" class="hierarchy"><br/><a href="http://hl7.org/fhir/R4/formats.html#table" title="Legend for this format"><img src="http://hl7.org/fhir/R4/help16.png" alt="doco" style="background-color: inherit"/> Documentation for this format</a></td></tr></table></div>
|
||||||
|
</text>
|
||||||
|
<url value="http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-timing"/>
|
||||||
|
<version value="0.0.0"/>
|
||||||
|
<name value="Timing"/>
|
||||||
|
<status value="active"/>
|
||||||
|
<experimental value="false"/>
|
||||||
|
<date value="2019-03-21T00:00:00+11:00"/>
|
||||||
|
<fhirVersion value="4.0.0"/>
|
||||||
|
<mapping>
|
||||||
|
<identity value="v2"/>
|
||||||
|
<uri value="http://hl7.org/v2"/>
|
||||||
|
<name value="HL7 v2 Mapping"/>
|
||||||
|
</mapping>
|
||||||
|
<mapping>
|
||||||
|
<identity value="rim"/>
|
||||||
|
<uri value="http://hl7.org/v3"/>
|
||||||
|
<name value="RIM Mapping"/>
|
||||||
|
</mapping>
|
||||||
|
<kind value="resource"/>
|
||||||
|
<abstract value="false"/>
|
||||||
|
<type value="Timing"/>
|
||||||
|
<baseDefinition value="http://hl7.org/fhir/StructureDefinition/Timing"/>
|
||||||
|
<derivation value="constraint"/>
|
||||||
|
<differential>
|
||||||
|
<element id="Timing">
|
||||||
|
<path value="Timing"/>
|
||||||
|
<mustSupport value="false"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat">
|
||||||
|
<path value="Timing.repeat"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.boundsDuration">
|
||||||
|
<path value="Timing.repeat.boundsDuration"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.duration">
|
||||||
|
<path value="Timing.repeat.duration"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.durationUnit">
|
||||||
|
<path value="Timing.repeat.durationUnit"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.period">
|
||||||
|
<path value="Timing.repeat.period"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.periodUnit">
|
||||||
|
<path value="Timing.repeat.periodUnit"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.dayOfWeek">
|
||||||
|
<path value="Timing.repeat.dayOfWeek"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.dayOfWeek.extension:CalendarPattern">
|
||||||
|
<path value="Timing.repeat.dayOfWeek.extension"/>
|
||||||
|
<sliceName value="CalendarPattern"/>
|
||||||
|
<type>
|
||||||
|
<code value="Extension"/>
|
||||||
|
<profile value="http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-calendarPattern"/>
|
||||||
|
</type>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.when">
|
||||||
|
<path value="Timing.repeat.when"/>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
<element id="Timing.repeat.when.extension:DeliveryPattern">
|
||||||
|
<path value="Timing.repeat.when.extension"/>
|
||||||
|
<sliceName value="DeliveryPattern"/>
|
||||||
|
<type>
|
||||||
|
<code value="Extension"/>
|
||||||
|
<profile value="http://hl7.org/fhir/us/davinci-pas/StructureDefinition/extension-deliveryPattern"/>
|
||||||
|
</type>
|
||||||
|
<mustSupport value="true"/>
|
||||||
|
</element>
|
||||||
|
</differential>
|
||||||
|
</StructureDefinition>
|
|
@ -1,4 +1,4 @@
|
||||||
<snapshot-generation-tests>
|
<snapshot-generation-tests>
|
||||||
<test gen="true" id="t1">
|
<test gen="true" id="t1">
|
||||||
<rule text="The snapshot must have the same number of elements, in the same order, with matching paths" fhirpath="fixture('t1-output').snapshot.element.select(path) = fixture('patient').snapshot.element.select(path)"/>
|
<rule text="The snapshot must have the same number of elements, in the same order, with matching paths" fhirpath="fixture('t1-output').snapshot.element.select(path) = fixture('patient').snapshot.element.select(path)"/>
|
||||||
<rule text="The snapshot elements must be the same - check short description" fhirpath="fixture('t1-output').snapshot.element.all(aliasAs('A').short = fixture('patient').snapshot.element.where(path = alias('A').path).short)"/>
|
<rule text="The snapshot elements must be the same - check short description" fhirpath="fixture('t1-output').snapshot.element.all(aliasAs('A').short = fixture('patient').snapshot.element.where(path = alias('A').path).short)"/>
|
||||||
|
@ -220,8 +220,10 @@
|
||||||
<rule text="The element definition for value[x] quantity slice should have sliceName = 'Quantity'" fhirpath="fixture('t44-output').snapshot.element.where(id = 'Observation.value[x]:valueQuantity').check(exists(), 'no slice').sliceName = 'valueQuantity'"/>
|
<rule text="The element definition for value[x] quantity slice should have sliceName = 'Quantity'" fhirpath="fixture('t44-output').snapshot.element.where(id = 'Observation.value[x]:valueQuantity').check(exists(), 'no slice').sliceName = 'valueQuantity'"/>
|
||||||
<rule text="The element definition for value[x].value quantity slice should have sliceName = 'Quantity'" fhirpath="fixture('t44-output').snapshot.element.where(id = 'Observation.value[x]:valueQuantity.value').check(exists(), 'no slice').min = 1"/>
|
<rule text="The element definition for value[x].value quantity slice should have sliceName = 'Quantity'" fhirpath="fixture('t44-output').snapshot.element.where(id = 'Observation.value[x]:valueQuantity.value').check(exists(), 'no slice').min = 1"/>
|
||||||
</test>
|
</test>
|
||||||
|
<test gen="true" sort="true" id="t45" register="t45-defn"/>
|
||||||
<test gen="true" id="samply1"/>
|
<test gen="true" id="samply1"/>
|
||||||
<test gen="true" id="au1" include="au1a"/>
|
<!-- <test gen="true" id="au1" include="au1a"/> -->
|
||||||
<test gen="true" id="au2"/>
|
<test gen="true" id="au2"/>
|
||||||
<test gen="true" id="au3"/>
|
<test gen="true" id="au3"/>
|
||||||
|
<test gen="true" id="dv1"/>
|
||||||
</snapshot-generation-tests>
|
</snapshot-generation-tests>
|
||||||
|
|
|
@ -325,12 +325,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:name1">
|
<element id="Patient.extension:name1">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension"/>
|
<path value="Patient.extension"/>
|
||||||
<sliceName value="name1"/>
|
<sliceName value="name1"/>
|
||||||
<short value="Time of day of birth"/>
|
<short value="Time of day of birth"/>
|
||||||
|
@ -366,12 +360,6 @@
|
||||||
<isModifier value="false"/>
|
<isModifier value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:name2">
|
<element id="Patient.extension:name2">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension"/>
|
<path value="Patient.extension"/>
|
||||||
<sliceName value="name2"/>
|
<sliceName value="name2"/>
|
||||||
<short value="Mother's Maiden name"/>
|
<short value="Mother's Maiden name"/>
|
||||||
|
|
|
@ -328,12 +328,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:name1">
|
<element id="Patient.extension:name1">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension"/>
|
<path value="Patient.extension"/>
|
||||||
<sliceName value="name1"/>
|
<sliceName value="name1"/>
|
||||||
<short value="Time of day of birth"/>
|
<short value="Time of day of birth"/>
|
||||||
|
@ -369,12 +363,6 @@
|
||||||
<isModifier value="false"/>
|
<isModifier value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:name2">
|
<element id="Patient.extension:name2">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension"/>
|
<path value="Patient.extension"/>
|
||||||
<sliceName value="name2"/>
|
<sliceName value="name2"/>
|
||||||
<short value="Mother's Maiden name"/>
|
<short value="Mother's Maiden name"/>
|
||||||
|
|
|
@ -328,12 +328,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:name1">
|
<element id="Patient.extension:name1">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension"/>
|
<path value="Patient.extension"/>
|
||||||
<sliceName value="name1"/>
|
<sliceName value="name1"/>
|
||||||
<short value="Time of day of birth"/>
|
<short value="Time of day of birth"/>
|
||||||
|
|
|
@ -325,12 +325,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:t">
|
<element id="Patient.extension:t">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension"/>
|
<path value="Patient.extension"/>
|
||||||
<sliceName value="t"/>
|
<sliceName value="t"/>
|
||||||
<short value="Time of day of birth"/>
|
<short value="Time of day of birth"/>
|
||||||
|
@ -366,12 +360,6 @@
|
||||||
<isModifier value="false"/>
|
<isModifier value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:complex">
|
<element id="Patient.extension:complex">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension"/>
|
<path value="Patient.extension"/>
|
||||||
<sliceName value="complex"/>
|
<sliceName value="complex"/>
|
||||||
<short value="Nationality"/>
|
<short value="Nationality"/>
|
||||||
|
@ -455,12 +443,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:complex.extension:code">
|
<element id="Patient.extension:complex.extension:code">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension.extension"/>
|
<path value="Patient.extension.extension"/>
|
||||||
<sliceName value="code"/>
|
<sliceName value="code"/>
|
||||||
<short value="Nationality"/>
|
<short value="Nationality"/>
|
||||||
|
@ -589,12 +571,6 @@
|
||||||
</mapping>
|
</mapping>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.extension:complex.extension:period">
|
<element id="Patient.extension:complex.extension:period">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.extension.extension"/>
|
<path value="Patient.extension.extension"/>
|
||||||
<sliceName value="period"/>
|
<sliceName value="period"/>
|
||||||
<short value="Nationality"/>
|
<short value="Nationality"/>
|
||||||
|
|
|
@ -933,12 +933,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.address.extension:Geolocation.extension:latitude.valueDecimal.extension:Geolocation.latitude.rendered">
|
<element id="Patient.address.extension:Geolocation.extension:latitude.valueDecimal.extension:Geolocation.latitude.rendered">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.address.extension.extension.valueDecimal.extension"/>
|
<path value="Patient.address.extension.extension.valueDecimal.extension"/>
|
||||||
<sliceName value="Geolocation.latitude.rendered"/>
|
<sliceName value="Geolocation.latitude.rendered"/>
|
||||||
<short value="What should be displayed to human (if default is not appropriate)"/>
|
<short value="What should be displayed to human (if default is not appropriate)"/>
|
||||||
|
@ -1253,12 +1247,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.address.extension:Geolocation.extension:longitude.valueDecimal.extension:Geolocation.longitude.rendered">
|
<element id="Patient.address.extension:Geolocation.extension:longitude.valueDecimal.extension:Geolocation.longitude.rendered">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.address.extension.extension.valueDecimal.extension"/>
|
<path value="Patient.address.extension.extension.valueDecimal.extension"/>
|
||||||
<sliceName value="Geolocation.longitude.rendered"/>
|
<sliceName value="Geolocation.longitude.rendered"/>
|
||||||
<short value="What should be displayed to human (if default is not appropriate)"/>
|
<short value="What should be displayed to human (if default is not appropriate)"/>
|
||||||
|
|
|
@ -350,12 +350,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.modifierExtension:name1">
|
<element id="Patient.modifierExtension:name1">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.modifierExtension"/>
|
<path value="Patient.modifierExtension"/>
|
||||||
<sliceName value="name1"/>
|
<sliceName value="name1"/>
|
||||||
<short value="Time of day of birth"/>
|
<short value="Time of day of birth"/>
|
||||||
|
@ -391,12 +385,6 @@
|
||||||
<isModifier value="false"/>
|
<isModifier value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.modifierExtension:name2">
|
<element id="Patient.modifierExtension:name2">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.modifierExtension"/>
|
<path value="Patient.modifierExtension"/>
|
||||||
<sliceName value="name2"/>
|
<sliceName value="name2"/>
|
||||||
<short value="Mother's Maiden name"/>
|
<short value="Mother's Maiden name"/>
|
||||||
|
|
|
@ -350,12 +350,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.modifierExtension:name1">
|
<element id="Patient.modifierExtension:name1">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.modifierExtension"/>
|
<path value="Patient.modifierExtension"/>
|
||||||
<sliceName value="name1"/>
|
<sliceName value="name1"/>
|
||||||
<short value="Time of day of birth"/>
|
<short value="Time of day of birth"/>
|
||||||
|
@ -391,12 +385,6 @@
|
||||||
<isModifier value="false"/>
|
<isModifier value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.modifierExtension:name2">
|
<element id="Patient.modifierExtension:name2">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.modifierExtension"/>
|
<path value="Patient.modifierExtension"/>
|
||||||
<sliceName value="name2"/>
|
<sliceName value="name2"/>
|
||||||
<short value="Mother's Maiden name"/>
|
<short value="Mother's Maiden name"/>
|
||||||
|
|
|
@ -350,12 +350,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Patient.modifierExtension:name1">
|
<element id="Patient.modifierExtension:name1">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Patient.modifierExtension"/>
|
<path value="Patient.modifierExtension"/>
|
||||||
<sliceName value="name1"/>
|
<sliceName value="name1"/>
|
||||||
<short value="Time of day of birth"/>
|
<short value="Time of day of birth"/>
|
||||||
|
|
|
@ -393,7 +393,7 @@
|
||||||
<short value="Extensions that cannot be ignored"/>
|
<short value="Extensions that cannot be ignored"/>
|
||||||
<definition value="May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
<definition value="May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
||||||
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
||||||
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/contained/extensibility.html#modifierExtension)."/>
|
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/profile/extensibility.html#modifierExtension)."/>
|
||||||
<alias value="extensions"/>
|
<alias value="extensions"/>
|
||||||
<alias value="user content"/>
|
<alias value="user content"/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
|
@ -489,7 +489,7 @@
|
||||||
<path value="Observation.partOf"/>
|
<path value="Observation.partOf"/>
|
||||||
<short value="Part of referenced event"/>
|
<short value="Part of referenced event"/>
|
||||||
<definition value="A larger event of which this particular Observation is a component or step. For example, an observation as part of a procedure."/>
|
<definition value="A larger event of which this particular Observation is a component or step. For example, an observation as part of a procedure."/>
|
||||||
<comment value="To link an Observation to an Encounter use `encounter`. See the [Notes](http://test.org/contained/observation.html#obsgrouping) below for guidance on referencing another Observation."/>
|
<comment value="To link an Observation to an Encounter use `encounter`. See the [Notes](http://test.org/profile/observation.html#obsgrouping) below for guidance on referencing another Observation."/>
|
||||||
<alias value="Container"/>
|
<alias value="Container"/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="*"/>
|
<max value="*"/>
|
||||||
|
@ -710,7 +710,7 @@
|
||||||
<path value="Observation.focus"/>
|
<path value="Observation.focus"/>
|
||||||
<short value="What the observation is about, when it is not about the subject of record"/>
|
<short value="What the observation is about, when it is not about the subject of record"/>
|
||||||
<definition value="The actual focus of an observation when it is not the patient of record representing something or someone associated with the patient such as a spouse, parent, fetus, or donor. For example, fetus observations in a mother's record. The focus of an observation could also be an existing condition, an intervention, the subject's diet, another observation of the subject, or a body structure such as tumor or implanted device. An example use case would be using the Observation resource to capture whether the mother is trained to change her child's tracheostomy tube. In this example, the child is the patient of record and the mother is the focus."/>
|
<definition value="The actual focus of an observation when it is not the patient of record representing something or someone associated with the patient such as a spouse, parent, fetus, or donor. For example, fetus observations in a mother's record. The focus of an observation could also be an existing condition, an intervention, the subject's diet, another observation of the subject, or a body structure such as tumor or implanted device. An example use case would be using the Observation resource to capture whether the mother is trained to change her child's tracheostomy tube. In this example, the child is the patient of record and the mother is the focus."/>
|
||||||
<comment value="Typically, an observation is made about the subject - a patient, or group of patients, location, or device - and the distinction between the subject and what is directly measured for an observation is specified in the observation code itself ( e.g., "Blood Glucose") and does not need to be represented separately using this element. Use `specimen` if a reference to a specimen is required. If a code is required instead of a resource use either `bodysite` for bodysites or the standard extension [focusCode](http://test.org/contained/extension-observation-focuscode.html)."/>
|
<comment value="Typically, an observation is made about the subject - a patient, or group of patients, location, or device - and the distinction between the subject and what is directly measured for an observation is specified in the observation code itself ( e.g., "Blood Glucose") and does not need to be represented separately using this element. Use `specimen` if a reference to a specimen is required. If a code is required instead of a resource use either `bodysite` for bodysites or the standard extension [focusCode](http://test.org/profile/extension-observation-focuscode.html)."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="*"/>
|
<max value="*"/>
|
||||||
<base>
|
<base>
|
||||||
|
@ -782,7 +782,7 @@
|
||||||
<path value="Observation.effective[x]"/>
|
<path value="Observation.effective[x]"/>
|
||||||
<short value="Clinically relevant time/time-period for observation"/>
|
<short value="Clinically relevant time/time-period for observation"/>
|
||||||
<definition value="The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself."/>
|
<definition value="The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself."/>
|
||||||
<comment value="At least a date should be present unless this observation is a historical report. For recording imprecise or "fuzzy" times (For example, a blood glucose measurement taken "after breakfast") use the [Timing](http://test.org/contained/datatypes.html#timing) datatype which allow the measurement to be tied to regular life events."/>
|
<comment value="At least a date should be present unless this observation is a historical report. For recording imprecise or "fuzzy" times (For example, a blood glucose measurement taken "after breakfast") use the [Timing](http://test.org/profile/datatypes.html#timing) datatype which allow the measurement to be tied to regular life events."/>
|
||||||
<requirements value="Knowing when an observation was deemed true is important to its relevance as well as determining trends."/>
|
<requirements value="Knowing when an observation was deemed true is important to its relevance as well as determining trends."/>
|
||||||
<alias value="Occurrence"/>
|
<alias value="Occurrence"/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
|
@ -827,7 +827,7 @@
|
||||||
<path value="Observation.issued"/>
|
<path value="Observation.issued"/>
|
||||||
<short value="Date/Time this version was made available"/>
|
<short value="Date/Time this version was made available"/>
|
||||||
<definition value="The date and time this version of the observation was made available to providers, typically after the results have been reviewed and verified."/>
|
<definition value="The date and time this version of the observation was made available to providers, typically after the results have been reviewed and verified."/>
|
||||||
<comment value="For Observations that don’t require review and verification, it may be the same as the [`lastUpdated` ](http://test.org/contained/resource-definitions.html#Meta.lastUpdated) time of the resource itself. For Observations that do require review and verification for certain updates, it might not be the same as the `lastUpdated` time of the resource itself due to a non-clinically significant update that doesn’t require the new version to be reviewed and verified again."/>
|
<comment value="For Observations that don’t require review and verification, it may be the same as the [`lastUpdated` ](http://test.org/profile/resource-definitions.html#Meta.lastUpdated) time of the resource itself. For Observations that do require review and verification for certain updates, it might not be the same as the `lastUpdated` time of the resource itself due to a non-clinically significant update that doesn’t require the new version to be reviewed and verified again."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
<base>
|
<base>
|
||||||
|
@ -897,7 +897,7 @@
|
||||||
<path value="Observation.value[x]"/>
|
<path value="Observation.value[x]"/>
|
||||||
<short value="Actual result"/>
|
<short value="Actual result"/>
|
||||||
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
||||||
<comment value="An observation may have; 1) a single value here, 2) both a value and a set of related or component values, or 3) only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/contained/observation.html#notes) below."/>
|
<comment value="An observation may have; 1) a single value here, 2) both a value and a set of related or component values, or 3) only a set of related or component values. If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/profile/observation.html#notes) below."/>
|
||||||
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
|
@ -1070,7 +1070,7 @@
|
||||||
<path value="Observation.bodySite"/>
|
<path value="Observation.bodySite"/>
|
||||||
<short value="Observed body part"/>
|
<short value="Observed body part"/>
|
||||||
<definition value="Indicates the site on the subject's body where the observation was made (i.e. the target site)."/>
|
<definition value="Indicates the site on the subject's body where the observation was made (i.e. the target site)."/>
|
||||||
<comment value="Only used if not implicit in code found in Observation.code. In many systems, this may be represented as a related observation instead of an inline component. 

If the use case requires BodySite to be handled as a separate resource (e.g. to identify and track separately) then use the standard extension[ bodySite](http://test.org/contained/extension-bodysite.html)."/>
|
<comment value="Only used if not implicit in code found in Observation.code. In many systems, this may be represented as a related observation instead of an inline component. 

If the use case requires BodySite to be handled as a separate resource (e.g. to identify and track separately) then use the standard extension[ bodySite](http://test.org/profile/extension-bodysite.html)."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
<base>
|
<base>
|
||||||
|
@ -1307,7 +1307,7 @@
|
||||||
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
||||||
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
||||||
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
||||||
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/contained/extensibility.html#modifierExtension)."/>
|
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/profile/extensibility.html#modifierExtension)."/>
|
||||||
<alias value="extensions"/>
|
<alias value="extensions"/>
|
||||||
<alias value="user content"/>
|
<alias value="user content"/>
|
||||||
<alias value="modifiers"/>
|
<alias value="modifiers"/>
|
||||||
|
@ -1512,7 +1512,7 @@
|
||||||
<path value="Observation.hasMember"/>
|
<path value="Observation.hasMember"/>
|
||||||
<short value="Related resource that belongs to the Observation group"/>
|
<short value="Related resource that belongs to the Observation group"/>
|
||||||
<definition value="This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group."/>
|
<definition value="This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group."/>
|
||||||
<comment value="When using this element, an observation will typically have either a value or a set of related resources, although both may be present in some cases. For a discussion on the ways Observations can assembled in groups together, see [Notes](http://test.org/contained/observation.html#obsgrouping) below. Note that a system may calculate results from [QuestionnaireResponse](http://test.org/contained/questionnaireresponse.html) into a final score and represent the score as an Observation."/>
|
<comment value="When using this element, an observation will typically have either a value or a set of related resources, although both may be present in some cases. For a discussion on the ways Observations can assembled in groups together, see [Notes](http://test.org/profile/observation.html#obsgrouping) below. Note that a system may calculate results from [QuestionnaireResponse](http://test.org/profile/questionnaireresponse.html) into a final score and represent the score as an Observation."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="*"/>
|
<max value="*"/>
|
||||||
<base>
|
<base>
|
||||||
|
@ -1541,7 +1541,7 @@
|
||||||
<path value="Observation.derivedFrom"/>
|
<path value="Observation.derivedFrom"/>
|
||||||
<short value="Related measurements the observation is made from"/>
|
<short value="Related measurements the observation is made from"/>
|
||||||
<definition value="The target resource that represents a measurement from which this observation value is derived. For example, a calculated anion gap or a fetal measurement based on an ultrasound image."/>
|
<definition value="The target resource that represents a measurement from which this observation value is derived. For example, a calculated anion gap or a fetal measurement based on an ultrasound image."/>
|
||||||
<comment value="All the reference choices that are listed in this element can represent clinical observations and other measurements that may be the source for a derived value. The most common reference will be another Observation. For a discussion on the ways Observations can assembled in groups together, see [Notes](http://test.org/contained/observation.html#obsgrouping) below."/>
|
<comment value="All the reference choices that are listed in this element can represent clinical observations and other measurements that may be the source for a derived value. The most common reference will be another Observation. For a discussion on the ways Observations can assembled in groups together, see [Notes](http://test.org/profile/observation.html#obsgrouping) below."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="*"/>
|
<max value="*"/>
|
||||||
<base>
|
<base>
|
||||||
|
@ -1580,7 +1580,7 @@
|
||||||
</slicing>
|
</slicing>
|
||||||
<short value="Component results"/>
|
<short value="Component results"/>
|
||||||
<definition value="Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations."/>
|
<definition value="Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations."/>
|
||||||
<comment value="For a discussion on the ways Observations can be assembled in groups together see [Notes](http://test.org/contained/observation.html#notes) below."/>
|
<comment value="For a discussion on the ways Observations can be assembled in groups together see [Notes](http://test.org/profile/observation.html#notes) below."/>
|
||||||
<requirements value="Component observations share the same attributes in the Observation resource as the primary observation and are always treated a part of a single observation (they are not separable). However, the reference range for the primary observation value is not inherited by the component values and is required when appropriate for each component observation."/>
|
<requirements value="Component observations share the same attributes in the Observation resource as the primary observation and are always treated a part of a single observation (they are not separable). However, the reference range for the primary observation value is not inherited by the component values and is required when appropriate for each component observation."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="*"/>
|
<max value="*"/>
|
||||||
|
@ -1662,7 +1662,7 @@
|
||||||
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
||||||
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
||||||
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
||||||
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/contained/extensibility.html#modifierExtension)."/>
|
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/profile/extensibility.html#modifierExtension)."/>
|
||||||
<alias value="extensions"/>
|
<alias value="extensions"/>
|
||||||
<alias value="user content"/>
|
<alias value="user content"/>
|
||||||
<alias value="modifiers"/>
|
<alias value="modifiers"/>
|
||||||
|
@ -1731,7 +1731,7 @@
|
||||||
<path value="Observation.component.value[x]"/>
|
<path value="Observation.component.value[x]"/>
|
||||||
<short value="Actual component result"/>
|
<short value="Actual component result"/>
|
||||||
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
||||||
<comment value="Used when observation has a set of component observations. An observation may have both a value (e.g. an Apgar score) and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/contained/observation.html#notes) below."/>
|
<comment value="Used when observation has a set of component observations. An observation may have both a value (e.g. an Apgar score) and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/profile/observation.html#notes) below."/>
|
||||||
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
|
@ -1902,7 +1902,7 @@
|
||||||
<sliceName value="gene-studied"/>
|
<sliceName value="gene-studied"/>
|
||||||
<short value="Component results"/>
|
<short value="Component results"/>
|
||||||
<definition value="Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations."/>
|
<definition value="Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations."/>
|
||||||
<comment value="For a discussion on the ways Observations can be assembled in groups together see [Notes](http://test.org/contained/observation.html#notes) below."/>
|
<comment value="For a discussion on the ways Observations can be assembled in groups together see [Notes](http://test.org/profile/observation.html#notes) below."/>
|
||||||
<requirements value="Component observations share the same attributes in the Observation resource as the primary observation and are always treated a part of a single observation (they are not separable). However, the reference range for the primary observation value is not inherited by the component values and is required when appropriate for each component observation."/>
|
<requirements value="Component observations share the same attributes in the Observation resource as the primary observation and are always treated a part of a single observation (they are not separable). However, the reference range for the primary observation value is not inherited by the component values and is required when appropriate for each component observation."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
|
@ -1984,7 +1984,7 @@
|
||||||
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
||||||
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
||||||
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
||||||
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/contained/extensibility.html#modifierExtension)."/>
|
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/profile/extensibility.html#modifierExtension)."/>
|
||||||
<alias value="extensions"/>
|
<alias value="extensions"/>
|
||||||
<alias value="user content"/>
|
<alias value="user content"/>
|
||||||
<alias value="modifiers"/>
|
<alias value="modifiers"/>
|
||||||
|
@ -2059,7 +2059,7 @@
|
||||||
<path value="Observation.component.value[x]"/>
|
<path value="Observation.component.value[x]"/>
|
||||||
<short value="Actual component result"/>
|
<short value="Actual component result"/>
|
||||||
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
||||||
<comment value="Used when observation has a set of component observations. An observation may have both a value (e.g. an Apgar score) and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/contained/observation.html#notes) below."/>
|
<comment value="Used when observation has a set of component observations. An observation may have both a value (e.g. an Apgar score) and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/profile/observation.html#notes) below."/>
|
||||||
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
|
@ -2230,7 +2230,7 @@
|
||||||
<sliceName value="allelic-frequency"/>
|
<sliceName value="allelic-frequency"/>
|
||||||
<short value="Component results"/>
|
<short value="Component results"/>
|
||||||
<definition value="Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations."/>
|
<definition value="Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations."/>
|
||||||
<comment value="For a discussion on the ways Observations can be assembled in groups together see [Notes](http://test.org/contained/observation.html#notes) below."/>
|
<comment value="For a discussion on the ways Observations can be assembled in groups together see [Notes](http://test.org/profile/observation.html#notes) below."/>
|
||||||
<requirements value="Component observations share the same attributes in the Observation resource as the primary observation and are always treated a part of a single observation (they are not separable). However, the reference range for the primary observation value is not inherited by the component values and is required when appropriate for each component observation."/>
|
<requirements value="Component observations share the same attributes in the Observation resource as the primary observation and are always treated a part of a single observation (they are not separable). However, the reference range for the primary observation value is not inherited by the component values and is required when appropriate for each component observation."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
|
@ -2312,7 +2312,7 @@
|
||||||
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
<short value="Extensions that cannot be ignored even if unrecognized"/>
|
||||||
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
<definition value="May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."/>
|
||||||
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
<comment value="There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone."/>
|
||||||
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/contained/extensibility.html#modifierExtension)."/>
|
<requirements value="Modifier extensions allow for extensions that *cannot* be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the [definition of modifier extensions](http://test.org/profile/extensibility.html#modifierExtension)."/>
|
||||||
<alias value="extensions"/>
|
<alias value="extensions"/>
|
||||||
<alias value="user content"/>
|
<alias value="user content"/>
|
||||||
<alias value="modifiers"/>
|
<alias value="modifiers"/>
|
||||||
|
@ -2387,7 +2387,7 @@
|
||||||
<path value="Observation.component.value[x]"/>
|
<path value="Observation.component.value[x]"/>
|
||||||
<short value="Actual component result"/>
|
<short value="Actual component result"/>
|
||||||
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
<definition value="The information determined as a result of making the observation, if the information has a simple value."/>
|
||||||
<comment value="Used when observation has a set of component observations. An observation may have both a value (e.g. an Apgar score) and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/contained/observation.html#notes) below."/>
|
<comment value="Used when observation has a set of component observations. An observation may have both a value (e.g. an Apgar score) and component observations (the observations from which the Apgar score was derived). If a value is present, the datatype for this element should be determined by Observation.code. A CodeableConcept with just a text would be used instead of a string if the field was usually coded, or if the type associated with the Observation.code defines a coded value. For additional guidance, see the [Notes section](http://test.org/profile/observation.html#notes) below."/>
|
||||||
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
<requirements value="An observation exists to have a value, though it might not if it is in error, or if it represents a group of observations."/>
|
||||||
<min value="0"/>
|
<min value="0"/>
|
||||||
<max value="1"/>
|
<max value="1"/>
|
||||||
|
|
|
@ -829,12 +829,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="Parameters.parameter:string.value[x].extension:translation">
|
<element id="Parameters.parameter:string.value[x].extension:translation">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="Parameters.parameter.value[x].extension"/>
|
<path value="Parameters.parameter.value[x].extension"/>
|
||||||
<sliceName value="translation"/>
|
<sliceName value="translation"/>
|
||||||
<short value="Language Translation (Localization)"/>
|
<short value="Language Translation (Localization)"/>
|
||||||
|
|
|
@ -4691,12 +4691,6 @@
|
||||||
<isSummary value="false"/>
|
<isSummary value="false"/>
|
||||||
</element>
|
</element>
|
||||||
<element id="ExplanationOfBenefit.addItem.adjudication.extension:someExt">
|
<element id="ExplanationOfBenefit.addItem.adjudication.extension:someExt">
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">
|
|
||||||
<valueCode value="normative"/>
|
|
||||||
</extension>
|
|
||||||
<extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-normative-version">
|
|
||||||
<valueCode value="4.0.0"/>
|
|
||||||
</extension>
|
|
||||||
<path value="ExplanationOfBenefit.addItem.adjudication.extension"/>
|
<path value="ExplanationOfBenefit.addItem.adjudication.extension"/>
|
||||||
<sliceName value="someExt"/>
|
<sliceName value="someExt"/>
|
||||||
<short value="unknown | asked | temp | notasked | masked | unsupported | astext | error"/>
|
<short value="unknown | asked | temp | notasked | masked | unsupported | astext | error"/>
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<StructureDefinition xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="profile-claim"/>
|
||||||
|
<url value="http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim"/>
|
||||||
|
<name value="PASClaim"/>
|
||||||
|
<status value="draft"/>
|
||||||
|
<fhirVersion value="4.0.0"/>
|
||||||
|
<kind value="resource"/>
|
||||||
|
<abstract value="false"/>
|
||||||
|
<type value="Claim"/>
|
||||||
|
<baseDefinition value="http://hl7.org/fhir/StructureDefinition/Claim"/>
|
||||||
|
<derivation value="constraint"/>
|
||||||
|
<differential>
|
||||||
|
<element id="Claim">
|
||||||
|
<path value="Claim"/>
|
||||||
|
<isModifier value="false"/>
|
||||||
|
</element>
|
||||||
|
<element id="Claim.supportingInfo">
|
||||||
|
<path value="Claim.supportingInfo"/>
|
||||||
|
<slicing>
|
||||||
|
<discriminator>
|
||||||
|
<type value="pattern"/>
|
||||||
|
<path value="category"/>
|
||||||
|
</discriminator>
|
||||||
|
<rules value="open"/>
|
||||||
|
</slicing>
|
||||||
|
<isModifier value="false"/>
|
||||||
|
</element>
|
||||||
|
<element id="Claim.supportingInfo:RelatedCauses">
|
||||||
|
<path value="Claim.supportingInfo"/>
|
||||||
|
<sliceName value="RelatedCauses"/>
|
||||||
|
<isModifier value="false"/>
|
||||||
|
</element>
|
||||||
|
<element id="Claim.supportingInfo:RelatedCauses.category">
|
||||||
|
<path value="Claim.supportingInfo.category"/>
|
||||||
|
<type>
|
||||||
|
<code value="CodeableConcept"/>
|
||||||
|
</type>
|
||||||
|
<patternCodeableConcept>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/us/davinci-pas/CodeSystem/PASSupportingInfoType"/>
|
||||||
|
<code value="relatedCauses"/>
|
||||||
|
</coding>
|
||||||
|
</patternCodeableConcept>
|
||||||
|
<isModifier value="false"/>
|
||||||
|
</element>
|
||||||
|
</differential>
|
||||||
|
</StructureDefinition>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<StructureDefinition xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="profile-claim-update"/>
|
||||||
|
<url value="http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim-update"/>
|
||||||
|
<name value="PASClaimUpdate"/>
|
||||||
|
<status value="draft"/>
|
||||||
|
<fhirVersion value="4.0.0"/>
|
||||||
|
<kind value="resource"/>
|
||||||
|
<abstract value="false"/>
|
||||||
|
<type value="Claim"/>
|
||||||
|
<baseDefinition value="http://hl7.org/fhir/us/davinci-pas/StructureDefinition/profile-claim"/>
|
||||||
|
<derivation value="constraint"/>
|
||||||
|
<differential>
|
||||||
|
<element id="Claim">
|
||||||
|
<path value="Claim"/>
|
||||||
|
<isModifier value="false"/>
|
||||||
|
</element>
|
||||||
|
<element id="Claim.supportingInfo">
|
||||||
|
<path value="Claim.supportingInfo"/>
|
||||||
|
<isModifier value="false"/>
|
||||||
|
</element>
|
||||||
|
<element id="Claim.supportingInfo.extension:SupportingInfoAbsent">
|
||||||
|
<path value="Claim.supportingInfo.extension"/>
|
||||||
|
<sliceName value="SupportingInfoAbsent"/>
|
||||||
|
<type>
|
||||||
|
<code value="Extension"/>
|
||||||
|
<profile value="http://hl7.org/fhir/StructureDefinition/data-absent-reason"/>
|
||||||
|
</type>
|
||||||
|
<isModifier value="false"/>
|
||||||
|
</element>
|
||||||
|
</differential>
|
||||||
|
</StructureDefinition>
|
|
@ -85,6 +85,7 @@ public class HierarchicalTableGenerator extends TranslatingUtilities {
|
||||||
public static final String TEXT_ICON_EXTENSION = "Extension";
|
public static final String TEXT_ICON_EXTENSION = "Extension";
|
||||||
public static final String TEXT_ICON_CHOICE = "Choice of Types";
|
public static final String TEXT_ICON_CHOICE = "Choice of Types";
|
||||||
public static final String TEXT_ICON_SLICE = "Slice Definition";
|
public static final String TEXT_ICON_SLICE = "Slice Definition";
|
||||||
|
public static final String TEXT_ICON_FIXED = "Fixed Value";
|
||||||
public static final String TEXT_ICON_EXTENSION_SIMPLE = "Simple Extension";
|
public static final String TEXT_ICON_EXTENSION_SIMPLE = "Simple Extension";
|
||||||
public static final String TEXT_ICON_PROFILE = "Profile";
|
public static final String TEXT_ICON_PROFILE = "Profile";
|
||||||
public static final String TEXT_ICON_EXTENSION_COMPLEX = "Complex Extension";
|
public static final String TEXT_ICON_EXTENSION_COMPLEX = "Complex Extension";
|
||||||
|
|
|
@ -180,6 +180,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
public ValidatorHostContext forContained(Element element) {
|
public ValidatorHostContext forContained(Element element) {
|
||||||
ValidatorHostContext res = new ValidatorHostContext(appContext);
|
ValidatorHostContext res = new ValidatorHostContext(appContext);
|
||||||
res.resource = element;
|
res.resource = element;
|
||||||
|
res.container = resource;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -230,15 +231,47 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
@Override
|
@Override
|
||||||
public Base resolveReference(Object appContext, String url) throws FHIRException {
|
public Base resolveReference(Object appContext, String url) throws FHIRException {
|
||||||
ValidatorHostContext c = (ValidatorHostContext) appContext;
|
ValidatorHostContext c = (ValidatorHostContext) appContext;
|
||||||
if (c.container != null)
|
|
||||||
throw new Error("Not done yet - resolve "+url+" locally (1)");
|
if (c.appContext instanceof Element) {
|
||||||
else if (externalHostServices == null)
|
Element bnd = (Element) c.appContext;
|
||||||
|
Base res = resolveInBundle(url, bnd);
|
||||||
|
if (res != null)
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
Base res = resolveInBundle(url, c.resource);
|
||||||
|
if (res != null)
|
||||||
|
return res;
|
||||||
|
res = resolveInBundle(url, c.container);
|
||||||
|
if (res != null)
|
||||||
|
return res;
|
||||||
|
|
||||||
|
if (externalHostServices == null)
|
||||||
throw new Error("Not done yet - resolve "+url+" locally (2)");
|
throw new Error("Not done yet - resolve "+url+" locally (2)");
|
||||||
else
|
else
|
||||||
return externalHostServices.resolveReference(c.appContext, url);
|
return externalHostServices.resolveReference(c.appContext, url);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Base resolveInBundle(String url, Element bnd) {
|
||||||
|
if (bnd == null)
|
||||||
|
return null;
|
||||||
|
if (bnd.fhirType().equals("Bundle")) {
|
||||||
|
for (Element be : bnd.getChildrenByName("entry")) {
|
||||||
|
Element res = be.getNamedChild("resource");
|
||||||
|
if (res != null) {
|
||||||
|
String fullUrl = be.getChildValue("fullUrl");
|
||||||
|
String rt = res.fhirType();
|
||||||
|
String id = res.getChildValue("id");
|
||||||
|
if (url.equals(fullUrl))
|
||||||
|
return res;
|
||||||
|
if (url.equals(rt+"/"+id))
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
|
public boolean conformsToProfile(Object appContext, Base item, String url) throws FHIRException {
|
||||||
IResourceValidator val = new InstanceValidator(context, this);
|
IResourceValidator val = new InstanceValidator(context, this);
|
||||||
|
@ -252,10 +285,6 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
boolean ok = true;
|
boolean ok = true;
|
||||||
for (ValidationMessage v : valerrors)
|
for (ValidationMessage v : valerrors)
|
||||||
ok = ok && !v.getLevel().isError();
|
ok = ok && !v.getLevel().isError();
|
||||||
if(item instanceof Element) {
|
|
||||||
Element e = (Element) item;
|
|
||||||
System.out.println("Conforms to: resource "+(e.getIdBase() != null ? item.getIdBase() : e.getChildValue("id"))+", url = "+url+", outcome = "+Boolean.toString(ok));
|
|
||||||
}
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2524,14 +2553,15 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
String u = null;
|
String u = null;
|
||||||
if (fullUrl != null && fullUrl.endsWith(type+"/"+id))
|
if (fullUrl != null && fullUrl.endsWith(type+"/"+id))
|
||||||
// fullUrl = complex
|
// fullUrl = complex
|
||||||
u = fullUrl.substring((type+"/"+id).length())+ref;
|
u = fullUrl.substring(0, fullUrl.length() - (type+"/"+id).length())+ref;
|
||||||
|
// u = fullUrl.substring((type+"/"+id).length())+ref;
|
||||||
String[] parts = ref.split("\\/");
|
String[] parts = ref.split("\\/");
|
||||||
if (parts.length >= 2) {
|
if (parts.length >= 2) {
|
||||||
String t = parts[0];
|
String t = parts[0];
|
||||||
String i = parts[1];
|
String i = parts[1];
|
||||||
for (Element entry : entries) {
|
for (Element entry : entries) {
|
||||||
String fu = entry.getNamedChildValue("fullUrl");
|
String fu = entry.getNamedChildValue("fullUrl");
|
||||||
if (u != null && fullUrl.equals(u))
|
if (u != null && fu.equals(u))
|
||||||
return entry;
|
return entry;
|
||||||
if (u == null) {
|
if (u == null) {
|
||||||
Element resource = entry.getNamedChild("resource");
|
Element resource = entry.getNamedChild("resource");
|
||||||
|
@ -2665,9 +2695,10 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
if (discriminator.contains("["))
|
if (discriminator.contains("["))
|
||||||
discriminator = discriminator.substring(0, discriminator.indexOf('['));
|
discriminator = discriminator.substring(0, discriminator.indexOf('['));
|
||||||
type = criteriaElement.getType().get(0).getCode();
|
type = criteriaElement.getType().get(0).getCode();
|
||||||
}
|
} else if (criteriaElement.getType().size() > 1) {
|
||||||
if (type==null)
|
throw new DefinitionException("Discriminator (" + discriminator + ") is based on type, but slice " + ed.getId() + " in "+profile.getUrl()+" has multiple types: "+criteriaElement.typeSummary());
|
||||||
throw new DefinitionException("Discriminator (" + discriminator + ") is based on type, but slice " + ed.getId() + " does not declare a type");
|
} else
|
||||||
|
throw new DefinitionException("Discriminator (" + discriminator + ") is based on type, but slice " + ed.getId() + " in "+profile.getUrl()+" has no types");
|
||||||
if (discriminator.isEmpty())
|
if (discriminator.isEmpty())
|
||||||
expression.append(" and this is " + type);
|
expression.append(" and this is " + type);
|
||||||
else
|
else
|
||||||
|
|
|
@ -119,6 +119,7 @@ import org.hl7.fhir.r5.terminologies.ConceptMapEngine;
|
||||||
import org.hl7.fhir.r5.utils.IResourceValidator.BestPracticeWarningLevel;
|
import org.hl7.fhir.r5.utils.IResourceValidator.BestPracticeWarningLevel;
|
||||||
import org.hl7.fhir.r5.utils.IResourceValidator.CheckDisplayOption;
|
import org.hl7.fhir.r5.utils.IResourceValidator.CheckDisplayOption;
|
||||||
import org.hl7.fhir.r5.utils.IResourceValidator.IdStatus;
|
import org.hl7.fhir.r5.utils.IResourceValidator.IdStatus;
|
||||||
|
import org.hl7.fhir.r5.utils.FHIRPathEngine;
|
||||||
import org.hl7.fhir.r5.utils.NarrativeGenerator;
|
import org.hl7.fhir.r5.utils.NarrativeGenerator;
|
||||||
import org.hl7.fhir.r5.utils.OperationOutcomeUtilities;
|
import org.hl7.fhir.r5.utils.OperationOutcomeUtilities;
|
||||||
import org.hl7.fhir.r5.utils.StructureMapUtilities;
|
import org.hl7.fhir.r5.utils.StructureMapUtilities;
|
||||||
|
@ -992,6 +993,12 @@ public class ValidationEngine {
|
||||||
private OperationOutcome messagesToOutcome(List<ValidationMessage> messages) throws DefinitionException {
|
private OperationOutcome messagesToOutcome(List<ValidationMessage> messages) throws DefinitionException {
|
||||||
OperationOutcome op = new OperationOutcome();
|
OperationOutcome op = new OperationOutcome();
|
||||||
for (ValidationMessage vm : filterMessages(messages)) {
|
for (ValidationMessage vm : filterMessages(messages)) {
|
||||||
|
FHIRPathEngine fpe = new FHIRPathEngine(context);
|
||||||
|
try {
|
||||||
|
fpe.parse(vm.getLocation());
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Internal error in location for message: '"+e.getMessage()+"', loc = '"+vm.getLocation()+"', err = '"+vm.getMessage()+"'");
|
||||||
|
}
|
||||||
op.getIssue().add(OperationOutcomeUtilities.convertToIssue(vm, op));
|
op.getIssue().add(OperationOutcomeUtilities.convertToIssue(vm, op));
|
||||||
}
|
}
|
||||||
new NarrativeGenerator("", "", context).generate(null, op);
|
new NarrativeGenerator("", "", context).generate(null, op);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,45 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Bundle xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="bundle-local-refs"/>
|
||||||
|
<meta>
|
||||||
|
<lastUpdated value="2019-07-21T11:01:00+05:00"/>
|
||||||
|
</meta>
|
||||||
|
<identifier>
|
||||||
|
<system value="http://example.org/documentIDs"/>
|
||||||
|
<value value="A12345"/>
|
||||||
|
</identifier>
|
||||||
|
<type value="document"/>
|
||||||
|
<timestamp value="2019-07-21T11:01:00+05:00"/>
|
||||||
|
<entry>
|
||||||
|
<fullUrl value="http://example.org/fhir/Composition/1"/>
|
||||||
|
<resource>
|
||||||
|
<Composition>
|
||||||
|
<id value="1"/>
|
||||||
|
<status value="final"/>
|
||||||
|
<type>
|
||||||
|
<text value="foo"/>
|
||||||
|
</type>
|
||||||
|
<subject>
|
||||||
|
<reference value="Patient/1"/>
|
||||||
|
</subject>
|
||||||
|
<date value="2019-07-21T23:09:00+07:00"/>
|
||||||
|
<author>
|
||||||
|
<display value="foo"/>
|
||||||
|
</author>
|
||||||
|
<title value="Example with local references"/>
|
||||||
|
</Composition>
|
||||||
|
</resource>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<fullUrl value="http://example.org/fhir/Patient/1"/>
|
||||||
|
<resource>
|
||||||
|
<Patient>
|
||||||
|
<id value="1"/>
|
||||||
|
<name>
|
||||||
|
<family value="SMITH"/>
|
||||||
|
<given value="JOE"/>
|
||||||
|
</name>
|
||||||
|
</Patient>
|
||||||
|
</resource>
|
||||||
|
</entry>
|
||||||
|
</Bundle>
|
|
@ -149,7 +149,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"synthea.json": {
|
"synthea.json": {
|
||||||
"errorCount": 1
|
"version": "4.0",
|
||||||
|
"errorCount": 2,
|
||||||
|
"errors-for-debugging" : ["ERROR: /Encounter/reasonCode: This property must be an Array, not an Object", "ERROR: Encounter.status: The value provided ('completed') is not in the value set http://hl7.org/fhir/ValueSet/encounter-status|4.1.0 (http://hl7.org/fhir/ValueSet/encounter-status, and a code is required from this value set) (error message = Unknown Code http://hl7.org/fhir/encounter-status#completed in http://hl7.org/fhir/encounter-status)"]
|
||||||
},
|
},
|
||||||
"patient-good.json": {
|
"patient-good.json": {
|
||||||
"errorCount": 0,
|
"errorCount": 0,
|
||||||
|
@ -827,6 +829,30 @@
|
||||||
"source": "profile-slicing-profile-open.xml",
|
"source": "profile-slicing-profile-open.xml",
|
||||||
"errorCount": 1
|
"errorCount": 1
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"value-slicing-ok-1.xml": {
|
||||||
|
"errorCount": 0,
|
||||||
|
"profiles": [
|
||||||
|
"profile-slicing-profile-1.xml", "profile-slicing-profile-2.xml", "profile-slicing-profile-3.xml"
|
||||||
|
],
|
||||||
|
"profile": {
|
||||||
|
"source": "value-slicing-profile-open.xml",
|
||||||
|
"errorCount": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value-slicing-bad-1.xml": {
|
||||||
|
"errorCount": 0,
|
||||||
|
"profiles": [
|
||||||
|
"profile-slicing-profile-1.xml", "profile-slicing-profile-2.xml", "profile-slicing-profile-3.xml"
|
||||||
|
],
|
||||||
|
"profile": {
|
||||||
|
"source": "value-slicing-profile-open.xml",
|
||||||
|
"errorCount": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bundle-local-refs.xml" : {
|
||||||
|
"errorCount": 0,
|
||||||
|
"warningCount": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
"value": "v6751"
|
"value": "v6751"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"status": "finished",
|
"status": "completed",
|
||||||
"subject": {
|
"subject": {
|
||||||
"reference": "Patient/f001",
|
"reference": "Patient/f001",
|
||||||
"display": "P. van de Heuvel"
|
"display": "P. van de Heuvel"
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
<List xmlns="http://hl7.org/fhir">
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i1"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile2"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i2"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile2"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i3"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile2"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i4"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile3"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<status value="current"/>
|
||||||
|
<mode value="working"/>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i1"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i2"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i3"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i4"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
</List>
|
|
@ -0,0 +1,68 @@
|
||||||
|
<List xmlns="http://hl7.org/fhir">
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i1"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile1"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i2"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile2"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i3"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile2"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<contained>
|
||||||
|
<Basic>
|
||||||
|
<id value="i4"/>
|
||||||
|
<code>
|
||||||
|
<coding>
|
||||||
|
<system value="http://hl7.org/fhir/test/CodeSystem/profile-slicing-codes"/>
|
||||||
|
<code value="profile3"/>
|
||||||
|
</coding>
|
||||||
|
</code>
|
||||||
|
</Basic>
|
||||||
|
</contained>
|
||||||
|
<status value="current"/>
|
||||||
|
<mode value="working"/>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i1"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i2"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i3"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<item>
|
||||||
|
<reference value="#i4"/>
|
||||||
|
</item>
|
||||||
|
</entry>
|
||||||
|
</List>
|
|
@ -0,0 +1,66 @@
|
||||||
|
<StructureDefinition xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="profile-slicing-profile-list"/>
|
||||||
|
<url value="http://hl7.org/fhir/test/StructureDefinition/profile-slicing-profile-list"/>
|
||||||
|
<version value="0.1.0"/>
|
||||||
|
<name value="TestProfileList"/>
|
||||||
|
<title value="Test Profile List"/>
|
||||||
|
<status value="draft"/>
|
||||||
|
<date value="3017-09-06T06:30:54+00:00"/>
|
||||||
|
<publisher value="HL7"/>
|
||||||
|
<fhirVersion value="4.0.0"/>
|
||||||
|
<kind value="resource"/>
|
||||||
|
<abstract value="false"/>
|
||||||
|
<type value="List"/>
|
||||||
|
<baseDefinition value="http://hl7.org/fhir/StructureDefinition/List"/>
|
||||||
|
<derivation value="constraint"/>
|
||||||
|
<differential>
|
||||||
|
<element id="List.entry">
|
||||||
|
<path value="List.entry"/>
|
||||||
|
<slicing>
|
||||||
|
<discriminator>
|
||||||
|
<type value="value"/>
|
||||||
|
<path value="item.resolve().code"/>
|
||||||
|
</discriminator>
|
||||||
|
<ordered value="false"/>
|
||||||
|
<rules value="open"/>
|
||||||
|
</slicing>
|
||||||
|
</element>
|
||||||
|
<element id="List.entry:slice1">
|
||||||
|
<path value="List.entry"/>
|
||||||
|
<sliceName value="slice1"/>
|
||||||
|
<min value="1"/>
|
||||||
|
</element>
|
||||||
|
<element id="List.entry:slice1.item">
|
||||||
|
<path value="List.entry.item"/>
|
||||||
|
<type>
|
||||||
|
<code value="Reference"/>
|
||||||
|
<targetProfile value="http://hl7.org/fhir/test/StructureDefinition/profile-slicing-profile-1"/>
|
||||||
|
</type>
|
||||||
|
</element>
|
||||||
|
<element id="List.entry:slice2">
|
||||||
|
<path value="List.entry"/>
|
||||||
|
<sliceName value="slice2"/>
|
||||||
|
<min value="1"/>
|
||||||
|
<max value="3"/>
|
||||||
|
</element>
|
||||||
|
<element id="List.entry:slice2.item">
|
||||||
|
<path value="List.entry.item"/>
|
||||||
|
<type>
|
||||||
|
<code value="Reference"/>
|
||||||
|
<targetProfile value="http://hl7.org/fhir/test/StructureDefinition/profile-slicing-profile-2"/>
|
||||||
|
</type>
|
||||||
|
</element>
|
||||||
|
<element id="List.entry:slice3">
|
||||||
|
<path value="List.entry"/>
|
||||||
|
<sliceName value="slice3"/>
|
||||||
|
<max value="1"/>
|
||||||
|
</element>
|
||||||
|
<element id="List.entry:slice3.item">
|
||||||
|
<path value="List.entry.item"/>
|
||||||
|
<type>
|
||||||
|
<code value="Reference"/>
|
||||||
|
<targetProfile value="http://hl7.org/fhir/test/StructureDefinition/profile-slicing-profile-3"/>
|
||||||
|
</type>
|
||||||
|
</element>
|
||||||
|
</differential>
|
||||||
|
</StructureDefinition>
|
Loading…
Reference in New Issue