001package org.hl7.fhir.r4b.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * An action that is or was performed on or for a patient. This can be a physical intervention like an operation, or less invasive like long term services, counseling, or hypnotherapy.
052 */
053@ResourceDef(name="Procedure", profile="http://hl7.org/fhir/StructureDefinition/Procedure")
054public class Procedure extends DomainResource {
055
056    @Block()
057    public static class ProcedurePerformerComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist.
060         */
061        @Child(name = "function", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
062        @Description(shortDefinition="Type of performance", formalDefinition="Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist." )
063        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/performer-role")
064        protected CodeableConcept function;
065
066        /**
067         * The practitioner who was involved in the procedure.
068         */
069        @Child(name = "actor", type = {Practitioner.class, PractitionerRole.class, Organization.class, Patient.class, RelatedPerson.class, Device.class}, order=2, min=1, max=1, modifier=false, summary=true)
070        @Description(shortDefinition="The reference to the practitioner", formalDefinition="The practitioner who was involved in the procedure." )
071        protected Reference actor;
072
073        /**
074         * The organization the device or practitioner was acting on behalf of.
075         */
076        @Child(name = "onBehalfOf", type = {Organization.class}, order=3, min=0, max=1, modifier=false, summary=false)
077        @Description(shortDefinition="Organization the device or practitioner was acting for", formalDefinition="The organization the device or practitioner was acting on behalf of." )
078        protected Reference onBehalfOf;
079
080        private static final long serialVersionUID = -1804820116L;
081
082    /**
083     * Constructor
084     */
085      public ProcedurePerformerComponent() {
086        super();
087      }
088
089    /**
090     * Constructor
091     */
092      public ProcedurePerformerComponent(Reference actor) {
093        super();
094        this.setActor(actor);
095      }
096
097        /**
098         * @return {@link #function} (Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist.)
099         */
100        public CodeableConcept getFunction() { 
101          if (this.function == null)
102            if (Configuration.errorOnAutoCreate())
103              throw new Error("Attempt to auto-create ProcedurePerformerComponent.function");
104            else if (Configuration.doAutoCreate())
105              this.function = new CodeableConcept(); // cc
106          return this.function;
107        }
108
109        public boolean hasFunction() { 
110          return this.function != null && !this.function.isEmpty();
111        }
112
113        /**
114         * @param value {@link #function} (Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist.)
115         */
116        public ProcedurePerformerComponent setFunction(CodeableConcept value) { 
117          this.function = value;
118          return this;
119        }
120
121        /**
122         * @return {@link #actor} (The practitioner who was involved in the procedure.)
123         */
124        public Reference getActor() { 
125          if (this.actor == null)
126            if (Configuration.errorOnAutoCreate())
127              throw new Error("Attempt to auto-create ProcedurePerformerComponent.actor");
128            else if (Configuration.doAutoCreate())
129              this.actor = new Reference(); // cc
130          return this.actor;
131        }
132
133        public boolean hasActor() { 
134          return this.actor != null && !this.actor.isEmpty();
135        }
136
137        /**
138         * @param value {@link #actor} (The practitioner who was involved in the procedure.)
139         */
140        public ProcedurePerformerComponent setActor(Reference value) { 
141          this.actor = value;
142          return this;
143        }
144
145        /**
146         * @return {@link #onBehalfOf} (The organization the device or practitioner was acting on behalf of.)
147         */
148        public Reference getOnBehalfOf() { 
149          if (this.onBehalfOf == null)
150            if (Configuration.errorOnAutoCreate())
151              throw new Error("Attempt to auto-create ProcedurePerformerComponent.onBehalfOf");
152            else if (Configuration.doAutoCreate())
153              this.onBehalfOf = new Reference(); // cc
154          return this.onBehalfOf;
155        }
156
157        public boolean hasOnBehalfOf() { 
158          return this.onBehalfOf != null && !this.onBehalfOf.isEmpty();
159        }
160
161        /**
162         * @param value {@link #onBehalfOf} (The organization the device or practitioner was acting on behalf of.)
163         */
164        public ProcedurePerformerComponent setOnBehalfOf(Reference value) { 
165          this.onBehalfOf = value;
166          return this;
167        }
168
169        protected void listChildren(List<Property> children) {
170          super.listChildren(children);
171          children.add(new Property("function", "CodeableConcept", "Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist.", 0, 1, function));
172          children.add(new Property("actor", "Reference(Practitioner|PractitionerRole|Organization|Patient|RelatedPerson|Device)", "The practitioner who was involved in the procedure.", 0, 1, actor));
173          children.add(new Property("onBehalfOf", "Reference(Organization)", "The organization the device or practitioner was acting on behalf of.", 0, 1, onBehalfOf));
174        }
175
176        @Override
177        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
178          switch (_hash) {
179          case 1380938712: /*function*/  return new Property("function", "CodeableConcept", "Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist.", 0, 1, function);
180          case 92645877: /*actor*/  return new Property("actor", "Reference(Practitioner|PractitionerRole|Organization|Patient|RelatedPerson|Device)", "The practitioner who was involved in the procedure.", 0, 1, actor);
181          case -14402964: /*onBehalfOf*/  return new Property("onBehalfOf", "Reference(Organization)", "The organization the device or practitioner was acting on behalf of.", 0, 1, onBehalfOf);
182          default: return super.getNamedProperty(_hash, _name, _checkValid);
183          }
184
185        }
186
187      @Override
188      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
189        switch (hash) {
190        case 1380938712: /*function*/ return this.function == null ? new Base[0] : new Base[] {this.function}; // CodeableConcept
191        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : new Base[] {this.actor}; // Reference
192        case -14402964: /*onBehalfOf*/ return this.onBehalfOf == null ? new Base[0] : new Base[] {this.onBehalfOf}; // Reference
193        default: return super.getProperty(hash, name, checkValid);
194        }
195
196      }
197
198      @Override
199      public Base setProperty(int hash, String name, Base value) throws FHIRException {
200        switch (hash) {
201        case 1380938712: // function
202          this.function = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
203          return value;
204        case 92645877: // actor
205          this.actor = TypeConvertor.castToReference(value); // Reference
206          return value;
207        case -14402964: // onBehalfOf
208          this.onBehalfOf = TypeConvertor.castToReference(value); // Reference
209          return value;
210        default: return super.setProperty(hash, name, value);
211        }
212
213      }
214
215      @Override
216      public Base setProperty(String name, Base value) throws FHIRException {
217        if (name.equals("function")) {
218          this.function = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
219        } else if (name.equals("actor")) {
220          this.actor = TypeConvertor.castToReference(value); // Reference
221        } else if (name.equals("onBehalfOf")) {
222          this.onBehalfOf = TypeConvertor.castToReference(value); // Reference
223        } else
224          return super.setProperty(name, value);
225        return value;
226      }
227
228      @Override
229      public Base makeProperty(int hash, String name) throws FHIRException {
230        switch (hash) {
231        case 1380938712:  return getFunction();
232        case 92645877:  return getActor();
233        case -14402964:  return getOnBehalfOf();
234        default: return super.makeProperty(hash, name);
235        }
236
237      }
238
239      @Override
240      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
241        switch (hash) {
242        case 1380938712: /*function*/ return new String[] {"CodeableConcept"};
243        case 92645877: /*actor*/ return new String[] {"Reference"};
244        case -14402964: /*onBehalfOf*/ return new String[] {"Reference"};
245        default: return super.getTypesForProperty(hash, name);
246        }
247
248      }
249
250      @Override
251      public Base addChild(String name) throws FHIRException {
252        if (name.equals("function")) {
253          this.function = new CodeableConcept();
254          return this.function;
255        }
256        else if (name.equals("actor")) {
257          this.actor = new Reference();
258          return this.actor;
259        }
260        else if (name.equals("onBehalfOf")) {
261          this.onBehalfOf = new Reference();
262          return this.onBehalfOf;
263        }
264        else
265          return super.addChild(name);
266      }
267
268      public ProcedurePerformerComponent copy() {
269        ProcedurePerformerComponent dst = new ProcedurePerformerComponent();
270        copyValues(dst);
271        return dst;
272      }
273
274      public void copyValues(ProcedurePerformerComponent dst) {
275        super.copyValues(dst);
276        dst.function = function == null ? null : function.copy();
277        dst.actor = actor == null ? null : actor.copy();
278        dst.onBehalfOf = onBehalfOf == null ? null : onBehalfOf.copy();
279      }
280
281      @Override
282      public boolean equalsDeep(Base other_) {
283        if (!super.equalsDeep(other_))
284          return false;
285        if (!(other_ instanceof ProcedurePerformerComponent))
286          return false;
287        ProcedurePerformerComponent o = (ProcedurePerformerComponent) other_;
288        return compareDeep(function, o.function, true) && compareDeep(actor, o.actor, true) && compareDeep(onBehalfOf, o.onBehalfOf, true)
289          ;
290      }
291
292      @Override
293      public boolean equalsShallow(Base other_) {
294        if (!super.equalsShallow(other_))
295          return false;
296        if (!(other_ instanceof ProcedurePerformerComponent))
297          return false;
298        ProcedurePerformerComponent o = (ProcedurePerformerComponent) other_;
299        return true;
300      }
301
302      public boolean isEmpty() {
303        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(function, actor, onBehalfOf
304          );
305      }
306
307  public String fhirType() {
308    return "Procedure.performer";
309
310  }
311
312  }
313
314    @Block()
315    public static class ProcedureFocalDeviceComponent extends BackboneElement implements IBaseBackboneElement {
316        /**
317         * The kind of change that happened to the device during the procedure.
318         */
319        @Child(name = "action", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
320        @Description(shortDefinition="Kind of change to device", formalDefinition="The kind of change that happened to the device during the procedure." )
321        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-action")
322        protected CodeableConcept action;
323
324        /**
325         * The device that was manipulated (changed) during the procedure.
326         */
327        @Child(name = "manipulated", type = {Device.class}, order=2, min=1, max=1, modifier=false, summary=false)
328        @Description(shortDefinition="Device that was changed", formalDefinition="The device that was manipulated (changed) during the procedure." )
329        protected Reference manipulated;
330
331        private static final long serialVersionUID = -217582010L;
332
333    /**
334     * Constructor
335     */
336      public ProcedureFocalDeviceComponent() {
337        super();
338      }
339
340    /**
341     * Constructor
342     */
343      public ProcedureFocalDeviceComponent(Reference manipulated) {
344        super();
345        this.setManipulated(manipulated);
346      }
347
348        /**
349         * @return {@link #action} (The kind of change that happened to the device during the procedure.)
350         */
351        public CodeableConcept getAction() { 
352          if (this.action == null)
353            if (Configuration.errorOnAutoCreate())
354              throw new Error("Attempt to auto-create ProcedureFocalDeviceComponent.action");
355            else if (Configuration.doAutoCreate())
356              this.action = new CodeableConcept(); // cc
357          return this.action;
358        }
359
360        public boolean hasAction() { 
361          return this.action != null && !this.action.isEmpty();
362        }
363
364        /**
365         * @param value {@link #action} (The kind of change that happened to the device during the procedure.)
366         */
367        public ProcedureFocalDeviceComponent setAction(CodeableConcept value) { 
368          this.action = value;
369          return this;
370        }
371
372        /**
373         * @return {@link #manipulated} (The device that was manipulated (changed) during the procedure.)
374         */
375        public Reference getManipulated() { 
376          if (this.manipulated == null)
377            if (Configuration.errorOnAutoCreate())
378              throw new Error("Attempt to auto-create ProcedureFocalDeviceComponent.manipulated");
379            else if (Configuration.doAutoCreate())
380              this.manipulated = new Reference(); // cc
381          return this.manipulated;
382        }
383
384        public boolean hasManipulated() { 
385          return this.manipulated != null && !this.manipulated.isEmpty();
386        }
387
388        /**
389         * @param value {@link #manipulated} (The device that was manipulated (changed) during the procedure.)
390         */
391        public ProcedureFocalDeviceComponent setManipulated(Reference value) { 
392          this.manipulated = value;
393          return this;
394        }
395
396        protected void listChildren(List<Property> children) {
397          super.listChildren(children);
398          children.add(new Property("action", "CodeableConcept", "The kind of change that happened to the device during the procedure.", 0, 1, action));
399          children.add(new Property("manipulated", "Reference(Device)", "The device that was manipulated (changed) during the procedure.", 0, 1, manipulated));
400        }
401
402        @Override
403        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
404          switch (_hash) {
405          case -1422950858: /*action*/  return new Property("action", "CodeableConcept", "The kind of change that happened to the device during the procedure.", 0, 1, action);
406          case 947372650: /*manipulated*/  return new Property("manipulated", "Reference(Device)", "The device that was manipulated (changed) during the procedure.", 0, 1, manipulated);
407          default: return super.getNamedProperty(_hash, _name, _checkValid);
408          }
409
410        }
411
412      @Override
413      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
414        switch (hash) {
415        case -1422950858: /*action*/ return this.action == null ? new Base[0] : new Base[] {this.action}; // CodeableConcept
416        case 947372650: /*manipulated*/ return this.manipulated == null ? new Base[0] : new Base[] {this.manipulated}; // Reference
417        default: return super.getProperty(hash, name, checkValid);
418        }
419
420      }
421
422      @Override
423      public Base setProperty(int hash, String name, Base value) throws FHIRException {
424        switch (hash) {
425        case -1422950858: // action
426          this.action = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
427          return value;
428        case 947372650: // manipulated
429          this.manipulated = TypeConvertor.castToReference(value); // Reference
430          return value;
431        default: return super.setProperty(hash, name, value);
432        }
433
434      }
435
436      @Override
437      public Base setProperty(String name, Base value) throws FHIRException {
438        if (name.equals("action")) {
439          this.action = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
440        } else if (name.equals("manipulated")) {
441          this.manipulated = TypeConvertor.castToReference(value); // Reference
442        } else
443          return super.setProperty(name, value);
444        return value;
445      }
446
447      @Override
448      public Base makeProperty(int hash, String name) throws FHIRException {
449        switch (hash) {
450        case -1422950858:  return getAction();
451        case 947372650:  return getManipulated();
452        default: return super.makeProperty(hash, name);
453        }
454
455      }
456
457      @Override
458      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
459        switch (hash) {
460        case -1422950858: /*action*/ return new String[] {"CodeableConcept"};
461        case 947372650: /*manipulated*/ return new String[] {"Reference"};
462        default: return super.getTypesForProperty(hash, name);
463        }
464
465      }
466
467      @Override
468      public Base addChild(String name) throws FHIRException {
469        if (name.equals("action")) {
470          this.action = new CodeableConcept();
471          return this.action;
472        }
473        else if (name.equals("manipulated")) {
474          this.manipulated = new Reference();
475          return this.manipulated;
476        }
477        else
478          return super.addChild(name);
479      }
480
481      public ProcedureFocalDeviceComponent copy() {
482        ProcedureFocalDeviceComponent dst = new ProcedureFocalDeviceComponent();
483        copyValues(dst);
484        return dst;
485      }
486
487      public void copyValues(ProcedureFocalDeviceComponent dst) {
488        super.copyValues(dst);
489        dst.action = action == null ? null : action.copy();
490        dst.manipulated = manipulated == null ? null : manipulated.copy();
491      }
492
493      @Override
494      public boolean equalsDeep(Base other_) {
495        if (!super.equalsDeep(other_))
496          return false;
497        if (!(other_ instanceof ProcedureFocalDeviceComponent))
498          return false;
499        ProcedureFocalDeviceComponent o = (ProcedureFocalDeviceComponent) other_;
500        return compareDeep(action, o.action, true) && compareDeep(manipulated, o.manipulated, true);
501      }
502
503      @Override
504      public boolean equalsShallow(Base other_) {
505        if (!super.equalsShallow(other_))
506          return false;
507        if (!(other_ instanceof ProcedureFocalDeviceComponent))
508          return false;
509        ProcedureFocalDeviceComponent o = (ProcedureFocalDeviceComponent) other_;
510        return true;
511      }
512
513      public boolean isEmpty() {
514        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(action, manipulated);
515      }
516
517  public String fhirType() {
518    return "Procedure.focalDevice";
519
520  }
521
522  }
523
524    /**
525     * Business identifiers assigned to this procedure by the performer or other systems which remain constant as the resource is updated and is propagated from server to server.
526     */
527    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
528    @Description(shortDefinition="External Identifiers for this procedure", formalDefinition="Business identifiers assigned to this procedure by the performer or other systems which remain constant as the resource is updated and is propagated from server to server." )
529    protected List<Identifier> identifier;
530
531    /**
532     * The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.
533     */
534    @Child(name = "instantiatesCanonical", type = {CanonicalType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
535    @Description(shortDefinition="Instantiates FHIR protocol or definition", formalDefinition="The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure." )
536    protected List<CanonicalType> instantiatesCanonical;
537
538    /**
539     * The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.
540     */
541    @Child(name = "instantiatesUri", type = {UriType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
542    @Description(shortDefinition="Instantiates external protocol or definition", formalDefinition="The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure." )
543    protected List<UriType> instantiatesUri;
544
545    /**
546     * A reference to a resource that contains details of the request for this procedure.
547     */
548    @Child(name = "basedOn", type = {CarePlan.class, ServiceRequest.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
549    @Description(shortDefinition="A request for this procedure", formalDefinition="A reference to a resource that contains details of the request for this procedure." )
550    protected List<Reference> basedOn;
551
552    /**
553     * A larger event of which this particular procedure is a component or step.
554     */
555    @Child(name = "partOf", type = {Procedure.class, Observation.class, MedicationAdministration.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
556    @Description(shortDefinition="Part of referenced event", formalDefinition="A larger event of which this particular procedure is a component or step." )
557    protected List<Reference> partOf;
558
559    /**
560     * A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.
561     */
562    @Child(name = "status", type = {CodeType.class}, order=5, min=1, max=1, modifier=true, summary=true)
563    @Description(shortDefinition="preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown", formalDefinition="A code specifying the state of the procedure. Generally, this will be the in-progress or completed state." )
564    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/event-status")
565    protected Enumeration<EventStatus> status;
566
567    /**
568     * Captures the reason for the current state of the procedure.
569     */
570    @Child(name = "statusReason", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=true)
571    @Description(shortDefinition="Reason for current status", formalDefinition="Captures the reason for the current state of the procedure." )
572    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-not-performed-reason")
573    protected CodeableConcept statusReason;
574
575    /**
576     * A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").
577     */
578    @Child(name = "category", type = {CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=true)
579    @Description(shortDefinition="Classification of the procedure", formalDefinition="A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\")." )
580    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-category")
581    protected CodeableConcept category;
582
583    /**
584     * The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. "Laparoscopic Appendectomy").
585     */
586    @Child(name = "code", type = {CodeableConcept.class}, order=8, min=0, max=1, modifier=false, summary=true)
587    @Description(shortDefinition="Identification of the procedure", formalDefinition="The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. \"Laparoscopic Appendectomy\")." )
588    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-code")
589    protected CodeableConcept code;
590
591    /**
592     * The person, animal or group on which the procedure was performed.
593     */
594    @Child(name = "subject", type = {Patient.class, Group.class}, order=9, min=1, max=1, modifier=false, summary=true)
595    @Description(shortDefinition="Who the procedure was performed on", formalDefinition="The person, animal or group on which the procedure was performed." )
596    protected Reference subject;
597
598    /**
599     * The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.
600     */
601    @Child(name = "encounter", type = {Encounter.class}, order=10, min=0, max=1, modifier=false, summary=true)
602    @Description(shortDefinition="Encounter created as part of", formalDefinition="The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated." )
603    protected Reference encounter;
604
605    /**
606     * Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.
607     */
608    @Child(name = "performed", type = {DateTimeType.class, Period.class, StringType.class, Age.class, Range.class}, order=11, min=0, max=1, modifier=false, summary=true)
609    @Description(shortDefinition="When the procedure was performed", formalDefinition="Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured." )
610    protected DataType performed;
611
612    /**
613     * Individual who recorded the record and takes responsibility for its content.
614     */
615    @Child(name = "recorder", type = {Patient.class, RelatedPerson.class, Practitioner.class, PractitionerRole.class}, order=12, min=0, max=1, modifier=false, summary=true)
616    @Description(shortDefinition="Who recorded the procedure", formalDefinition="Individual who recorded the record and takes responsibility for its content." )
617    protected Reference recorder;
618
619    /**
620     * Individual who is making the procedure statement.
621     */
622    @Child(name = "asserter", type = {Patient.class, RelatedPerson.class, Practitioner.class, PractitionerRole.class}, order=13, min=0, max=1, modifier=false, summary=true)
623    @Description(shortDefinition="Person who asserts this procedure", formalDefinition="Individual who is making the procedure statement." )
624    protected Reference asserter;
625
626    /**
627     * Limited to "real" people rather than equipment.
628     */
629    @Child(name = "performer", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
630    @Description(shortDefinition="The people who performed the procedure", formalDefinition="Limited to \"real\" people rather than equipment." )
631    protected List<ProcedurePerformerComponent> performer;
632
633    /**
634     * The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.
635     */
636    @Child(name = "location", type = {Location.class}, order=15, min=0, max=1, modifier=false, summary=true)
637    @Description(shortDefinition="Where the procedure happened", formalDefinition="The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant." )
638    protected Reference location;
639
640    /**
641     * The coded reason why the procedure was performed. This may be a coded entity of some type, or may simply be present as text.
642     */
643    @Child(name = "reasonCode", type = {CodeableConcept.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
644    @Description(shortDefinition="Coded reason procedure performed", formalDefinition="The coded reason why the procedure was performed. This may be a coded entity of some type, or may simply be present as text." )
645    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-reason")
646    protected List<CodeableConcept> reasonCode;
647
648    /**
649     * The justification of why the procedure was performed.
650     */
651    @Child(name = "reasonReference", type = {Condition.class, Observation.class, Procedure.class, DiagnosticReport.class, DocumentReference.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
652    @Description(shortDefinition="The justification that the procedure was performed", formalDefinition="The justification of why the procedure was performed." )
653    protected List<Reference> reasonReference;
654
655    /**
656     * Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.
657     */
658    @Child(name = "bodySite", type = {CodeableConcept.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
659    @Description(shortDefinition="Target body sites", formalDefinition="Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion." )
660    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/body-site")
661    protected List<CodeableConcept> bodySite;
662
663    /**
664     * The outcome of the procedure - did it resolve the reasons for the procedure being performed?
665     */
666    @Child(name = "outcome", type = {CodeableConcept.class}, order=19, min=0, max=1, modifier=false, summary=true)
667    @Description(shortDefinition="The result of procedure", formalDefinition="The outcome of the procedure - did it resolve the reasons for the procedure being performed?" )
668    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-outcome")
669    protected CodeableConcept outcome;
670
671    /**
672     * This could be a histology result, pathology report, surgical report, etc.
673     */
674    @Child(name = "report", type = {DiagnosticReport.class, DocumentReference.class, Composition.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
675    @Description(shortDefinition="Any report resulting from the procedure", formalDefinition="This could be a histology result, pathology report, surgical report, etc." )
676    protected List<Reference> report;
677
678    /**
679     * Any complications that occurred during the procedure, or in the immediate post-performance period. These are generally tracked separately from the notes, which will typically describe the procedure itself rather than any 'post procedure' issues.
680     */
681    @Child(name = "complication", type = {CodeableConcept.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
682    @Description(shortDefinition="Complication following the procedure", formalDefinition="Any complications that occurred during the procedure, or in the immediate post-performance period. These are generally tracked separately from the notes, which will typically describe the procedure itself rather than any 'post procedure' issues." )
683    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/condition-code")
684    protected List<CodeableConcept> complication;
685
686    /**
687     * Any complications that occurred during the procedure, or in the immediate post-performance period.
688     */
689    @Child(name = "complicationDetail", type = {Condition.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
690    @Description(shortDefinition="A condition that is a result of the procedure", formalDefinition="Any complications that occurred during the procedure, or in the immediate post-performance period." )
691    protected List<Reference> complicationDetail;
692
693    /**
694     * If the procedure required specific follow up - e.g. removal of sutures. The follow up may be represented as a simple note or could potentially be more complex, in which case the CarePlan resource can be used.
695     */
696    @Child(name = "followUp", type = {CodeableConcept.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
697    @Description(shortDefinition="Instructions for follow up", formalDefinition="If the procedure required specific follow up - e.g. removal of sutures. The follow up may be represented as a simple note or could potentially be more complex, in which case the CarePlan resource can be used." )
698    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-followup")
699    protected List<CodeableConcept> followUp;
700
701    /**
702     * Any other notes and comments about the procedure.
703     */
704    @Child(name = "note", type = {Annotation.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
705    @Description(shortDefinition="Additional information about the procedure", formalDefinition="Any other notes and comments about the procedure." )
706    protected List<Annotation> note;
707
708    /**
709     * A device that is implanted, removed or otherwise manipulated (calibration, battery replacement, fitting a prosthesis, attaching a wound-vac, etc.) as a focal portion of the Procedure.
710     */
711    @Child(name = "focalDevice", type = {}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
712    @Description(shortDefinition="Manipulated, implanted, or removed device", formalDefinition="A device that is implanted, removed or otherwise manipulated (calibration, battery replacement, fitting a prosthesis, attaching a wound-vac, etc.) as a focal portion of the Procedure." )
713    protected List<ProcedureFocalDeviceComponent> focalDevice;
714
715    /**
716     * Identifies medications, devices and any other substance used as part of the procedure.
717     */
718    @Child(name = "usedReference", type = {Device.class, Medication.class, Substance.class}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
719    @Description(shortDefinition="Items used during procedure", formalDefinition="Identifies medications, devices and any other substance used as part of the procedure." )
720    protected List<Reference> usedReference;
721
722    /**
723     * Identifies coded items that were used as part of the procedure.
724     */
725    @Child(name = "usedCode", type = {CodeableConcept.class}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
726    @Description(shortDefinition="Coded items used during the procedure", formalDefinition="Identifies coded items that were used as part of the procedure." )
727    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-kind")
728    protected List<CodeableConcept> usedCode;
729
730    private static final long serialVersionUID = 1772608158L;
731
732  /**
733   * Constructor
734   */
735    public Procedure() {
736      super();
737    }
738
739  /**
740   * Constructor
741   */
742    public Procedure(EventStatus status, Reference subject) {
743      super();
744      this.setStatus(status);
745      this.setSubject(subject);
746    }
747
748    /**
749     * @return {@link #identifier} (Business identifiers assigned to this procedure by the performer or other systems which remain constant as the resource is updated and is propagated from server to server.)
750     */
751    public List<Identifier> getIdentifier() { 
752      if (this.identifier == null)
753        this.identifier = new ArrayList<Identifier>();
754      return this.identifier;
755    }
756
757    /**
758     * @return Returns a reference to <code>this</code> for easy method chaining
759     */
760    public Procedure setIdentifier(List<Identifier> theIdentifier) { 
761      this.identifier = theIdentifier;
762      return this;
763    }
764
765    public boolean hasIdentifier() { 
766      if (this.identifier == null)
767        return false;
768      for (Identifier item : this.identifier)
769        if (!item.isEmpty())
770          return true;
771      return false;
772    }
773
774    public Identifier addIdentifier() { //3
775      Identifier t = new Identifier();
776      if (this.identifier == null)
777        this.identifier = new ArrayList<Identifier>();
778      this.identifier.add(t);
779      return t;
780    }
781
782    public Procedure addIdentifier(Identifier t) { //3
783      if (t == null)
784        return this;
785      if (this.identifier == null)
786        this.identifier = new ArrayList<Identifier>();
787      this.identifier.add(t);
788      return this;
789    }
790
791    /**
792     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
793     */
794    public Identifier getIdentifierFirstRep() { 
795      if (getIdentifier().isEmpty()) {
796        addIdentifier();
797      }
798      return getIdentifier().get(0);
799    }
800
801    /**
802     * @return {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
803     */
804    public List<CanonicalType> getInstantiatesCanonical() { 
805      if (this.instantiatesCanonical == null)
806        this.instantiatesCanonical = new ArrayList<CanonicalType>();
807      return this.instantiatesCanonical;
808    }
809
810    /**
811     * @return Returns a reference to <code>this</code> for easy method chaining
812     */
813    public Procedure setInstantiatesCanonical(List<CanonicalType> theInstantiatesCanonical) { 
814      this.instantiatesCanonical = theInstantiatesCanonical;
815      return this;
816    }
817
818    public boolean hasInstantiatesCanonical() { 
819      if (this.instantiatesCanonical == null)
820        return false;
821      for (CanonicalType item : this.instantiatesCanonical)
822        if (!item.isEmpty())
823          return true;
824      return false;
825    }
826
827    /**
828     * @return {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
829     */
830    public CanonicalType addInstantiatesCanonicalElement() {//2 
831      CanonicalType t = new CanonicalType();
832      if (this.instantiatesCanonical == null)
833        this.instantiatesCanonical = new ArrayList<CanonicalType>();
834      this.instantiatesCanonical.add(t);
835      return t;
836    }
837
838    /**
839     * @param value {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
840     */
841    public Procedure addInstantiatesCanonical(String value) { //1
842      CanonicalType t = new CanonicalType();
843      t.setValue(value);
844      if (this.instantiatesCanonical == null)
845        this.instantiatesCanonical = new ArrayList<CanonicalType>();
846      this.instantiatesCanonical.add(t);
847      return this;
848    }
849
850    /**
851     * @param value {@link #instantiatesCanonical} (The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
852     */
853    public boolean hasInstantiatesCanonical(String value) { 
854      if (this.instantiatesCanonical == null)
855        return false;
856      for (CanonicalType v : this.instantiatesCanonical)
857        if (v.getValue().equals(value)) // canonical
858          return true;
859      return false;
860    }
861
862    /**
863     * @return {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
864     */
865    public List<UriType> getInstantiatesUri() { 
866      if (this.instantiatesUri == null)
867        this.instantiatesUri = new ArrayList<UriType>();
868      return this.instantiatesUri;
869    }
870
871    /**
872     * @return Returns a reference to <code>this</code> for easy method chaining
873     */
874    public Procedure setInstantiatesUri(List<UriType> theInstantiatesUri) { 
875      this.instantiatesUri = theInstantiatesUri;
876      return this;
877    }
878
879    public boolean hasInstantiatesUri() { 
880      if (this.instantiatesUri == null)
881        return false;
882      for (UriType item : this.instantiatesUri)
883        if (!item.isEmpty())
884          return true;
885      return false;
886    }
887
888    /**
889     * @return {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
890     */
891    public UriType addInstantiatesUriElement() {//2 
892      UriType t = new UriType();
893      if (this.instantiatesUri == null)
894        this.instantiatesUri = new ArrayList<UriType>();
895      this.instantiatesUri.add(t);
896      return t;
897    }
898
899    /**
900     * @param value {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
901     */
902    public Procedure addInstantiatesUri(String value) { //1
903      UriType t = new UriType();
904      t.setValue(value);
905      if (this.instantiatesUri == null)
906        this.instantiatesUri = new ArrayList<UriType>();
907      this.instantiatesUri.add(t);
908      return this;
909    }
910
911    /**
912     * @param value {@link #instantiatesUri} (The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.)
913     */
914    public boolean hasInstantiatesUri(String value) { 
915      if (this.instantiatesUri == null)
916        return false;
917      for (UriType v : this.instantiatesUri)
918        if (v.getValue().equals(value)) // uri
919          return true;
920      return false;
921    }
922
923    /**
924     * @return {@link #basedOn} (A reference to a resource that contains details of the request for this procedure.)
925     */
926    public List<Reference> getBasedOn() { 
927      if (this.basedOn == null)
928        this.basedOn = new ArrayList<Reference>();
929      return this.basedOn;
930    }
931
932    /**
933     * @return Returns a reference to <code>this</code> for easy method chaining
934     */
935    public Procedure setBasedOn(List<Reference> theBasedOn) { 
936      this.basedOn = theBasedOn;
937      return this;
938    }
939
940    public boolean hasBasedOn() { 
941      if (this.basedOn == null)
942        return false;
943      for (Reference item : this.basedOn)
944        if (!item.isEmpty())
945          return true;
946      return false;
947    }
948
949    public Reference addBasedOn() { //3
950      Reference t = new Reference();
951      if (this.basedOn == null)
952        this.basedOn = new ArrayList<Reference>();
953      this.basedOn.add(t);
954      return t;
955    }
956
957    public Procedure addBasedOn(Reference t) { //3
958      if (t == null)
959        return this;
960      if (this.basedOn == null)
961        this.basedOn = new ArrayList<Reference>();
962      this.basedOn.add(t);
963      return this;
964    }
965
966    /**
967     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist {3}
968     */
969    public Reference getBasedOnFirstRep() { 
970      if (getBasedOn().isEmpty()) {
971        addBasedOn();
972      }
973      return getBasedOn().get(0);
974    }
975
976    /**
977     * @return {@link #partOf} (A larger event of which this particular procedure is a component or step.)
978     */
979    public List<Reference> getPartOf() { 
980      if (this.partOf == null)
981        this.partOf = new ArrayList<Reference>();
982      return this.partOf;
983    }
984
985    /**
986     * @return Returns a reference to <code>this</code> for easy method chaining
987     */
988    public Procedure setPartOf(List<Reference> thePartOf) { 
989      this.partOf = thePartOf;
990      return this;
991    }
992
993    public boolean hasPartOf() { 
994      if (this.partOf == null)
995        return false;
996      for (Reference item : this.partOf)
997        if (!item.isEmpty())
998          return true;
999      return false;
1000    }
1001
1002    public Reference addPartOf() { //3
1003      Reference t = new Reference();
1004      if (this.partOf == null)
1005        this.partOf = new ArrayList<Reference>();
1006      this.partOf.add(t);
1007      return t;
1008    }
1009
1010    public Procedure addPartOf(Reference t) { //3
1011      if (t == null)
1012        return this;
1013      if (this.partOf == null)
1014        this.partOf = new ArrayList<Reference>();
1015      this.partOf.add(t);
1016      return this;
1017    }
1018
1019    /**
1020     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist {3}
1021     */
1022    public Reference getPartOfFirstRep() { 
1023      if (getPartOf().isEmpty()) {
1024        addPartOf();
1025      }
1026      return getPartOf().get(0);
1027    }
1028
1029    /**
1030     * @return {@link #status} (A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1031     */
1032    public Enumeration<EventStatus> getStatusElement() { 
1033      if (this.status == null)
1034        if (Configuration.errorOnAutoCreate())
1035          throw new Error("Attempt to auto-create Procedure.status");
1036        else if (Configuration.doAutoCreate())
1037          this.status = new Enumeration<EventStatus>(new EventStatusEnumFactory()); // bb
1038      return this.status;
1039    }
1040
1041    public boolean hasStatusElement() { 
1042      return this.status != null && !this.status.isEmpty();
1043    }
1044
1045    public boolean hasStatus() { 
1046      return this.status != null && !this.status.isEmpty();
1047    }
1048
1049    /**
1050     * @param value {@link #status} (A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1051     */
1052    public Procedure setStatusElement(Enumeration<EventStatus> value) { 
1053      this.status = value;
1054      return this;
1055    }
1056
1057    /**
1058     * @return A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.
1059     */
1060    public EventStatus getStatus() { 
1061      return this.status == null ? null : this.status.getValue();
1062    }
1063
1064    /**
1065     * @param value A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.
1066     */
1067    public Procedure setStatus(EventStatus value) { 
1068        if (this.status == null)
1069          this.status = new Enumeration<EventStatus>(new EventStatusEnumFactory());
1070        this.status.setValue(value);
1071      return this;
1072    }
1073
1074    /**
1075     * @return {@link #statusReason} (Captures the reason for the current state of the procedure.)
1076     */
1077    public CodeableConcept getStatusReason() { 
1078      if (this.statusReason == null)
1079        if (Configuration.errorOnAutoCreate())
1080          throw new Error("Attempt to auto-create Procedure.statusReason");
1081        else if (Configuration.doAutoCreate())
1082          this.statusReason = new CodeableConcept(); // cc
1083      return this.statusReason;
1084    }
1085
1086    public boolean hasStatusReason() { 
1087      return this.statusReason != null && !this.statusReason.isEmpty();
1088    }
1089
1090    /**
1091     * @param value {@link #statusReason} (Captures the reason for the current state of the procedure.)
1092     */
1093    public Procedure setStatusReason(CodeableConcept value) { 
1094      this.statusReason = value;
1095      return this;
1096    }
1097
1098    /**
1099     * @return {@link #category} (A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").)
1100     */
1101    public CodeableConcept getCategory() { 
1102      if (this.category == null)
1103        if (Configuration.errorOnAutoCreate())
1104          throw new Error("Attempt to auto-create Procedure.category");
1105        else if (Configuration.doAutoCreate())
1106          this.category = new CodeableConcept(); // cc
1107      return this.category;
1108    }
1109
1110    public boolean hasCategory() { 
1111      return this.category != null && !this.category.isEmpty();
1112    }
1113
1114    /**
1115     * @param value {@link #category} (A code that classifies the procedure for searching, sorting and display purposes (e.g. "Surgical Procedure").)
1116     */
1117    public Procedure setCategory(CodeableConcept value) { 
1118      this.category = value;
1119      return this;
1120    }
1121
1122    /**
1123     * @return {@link #code} (The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. "Laparoscopic Appendectomy").)
1124     */
1125    public CodeableConcept getCode() { 
1126      if (this.code == null)
1127        if (Configuration.errorOnAutoCreate())
1128          throw new Error("Attempt to auto-create Procedure.code");
1129        else if (Configuration.doAutoCreate())
1130          this.code = new CodeableConcept(); // cc
1131      return this.code;
1132    }
1133
1134    public boolean hasCode() { 
1135      return this.code != null && !this.code.isEmpty();
1136    }
1137
1138    /**
1139     * @param value {@link #code} (The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. "Laparoscopic Appendectomy").)
1140     */
1141    public Procedure setCode(CodeableConcept value) { 
1142      this.code = value;
1143      return this;
1144    }
1145
1146    /**
1147     * @return {@link #subject} (The person, animal or group on which the procedure was performed.)
1148     */
1149    public Reference getSubject() { 
1150      if (this.subject == null)
1151        if (Configuration.errorOnAutoCreate())
1152          throw new Error("Attempt to auto-create Procedure.subject");
1153        else if (Configuration.doAutoCreate())
1154          this.subject = new Reference(); // cc
1155      return this.subject;
1156    }
1157
1158    public boolean hasSubject() { 
1159      return this.subject != null && !this.subject.isEmpty();
1160    }
1161
1162    /**
1163     * @param value {@link #subject} (The person, animal or group on which the procedure was performed.)
1164     */
1165    public Procedure setSubject(Reference value) { 
1166      this.subject = value;
1167      return this;
1168    }
1169
1170    /**
1171     * @return {@link #encounter} (The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.)
1172     */
1173    public Reference getEncounter() { 
1174      if (this.encounter == null)
1175        if (Configuration.errorOnAutoCreate())
1176          throw new Error("Attempt to auto-create Procedure.encounter");
1177        else if (Configuration.doAutoCreate())
1178          this.encounter = new Reference(); // cc
1179      return this.encounter;
1180    }
1181
1182    public boolean hasEncounter() { 
1183      return this.encounter != null && !this.encounter.isEmpty();
1184    }
1185
1186    /**
1187     * @param value {@link #encounter} (The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.)
1188     */
1189    public Procedure setEncounter(Reference value) { 
1190      this.encounter = value;
1191      return this;
1192    }
1193
1194    /**
1195     * @return {@link #performed} (Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.)
1196     */
1197    public DataType getPerformed() { 
1198      return this.performed;
1199    }
1200
1201    /**
1202     * @return {@link #performed} (Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.)
1203     */
1204    public DateTimeType getPerformedDateTimeType() throws FHIRException { 
1205      if (this.performed == null)
1206        this.performed = new DateTimeType();
1207      if (!(this.performed instanceof DateTimeType))
1208        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.performed.getClass().getName()+" was encountered");
1209      return (DateTimeType) this.performed;
1210    }
1211
1212    public boolean hasPerformedDateTimeType() { 
1213      return this != null && this.performed instanceof DateTimeType;
1214    }
1215
1216    /**
1217     * @return {@link #performed} (Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.)
1218     */
1219    public Period getPerformedPeriod() throws FHIRException { 
1220      if (this.performed == null)
1221        this.performed = new Period();
1222      if (!(this.performed instanceof Period))
1223        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.performed.getClass().getName()+" was encountered");
1224      return (Period) this.performed;
1225    }
1226
1227    public boolean hasPerformedPeriod() { 
1228      return this != null && this.performed instanceof Period;
1229    }
1230
1231    /**
1232     * @return {@link #performed} (Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.)
1233     */
1234    public StringType getPerformedStringType() throws FHIRException { 
1235      if (this.performed == null)
1236        this.performed = new StringType();
1237      if (!(this.performed instanceof StringType))
1238        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.performed.getClass().getName()+" was encountered");
1239      return (StringType) this.performed;
1240    }
1241
1242    public boolean hasPerformedStringType() { 
1243      return this != null && this.performed instanceof StringType;
1244    }
1245
1246    /**
1247     * @return {@link #performed} (Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.)
1248     */
1249    public Age getPerformedAge() throws FHIRException { 
1250      if (this.performed == null)
1251        this.performed = new Age();
1252      if (!(this.performed instanceof Age))
1253        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.performed.getClass().getName()+" was encountered");
1254      return (Age) this.performed;
1255    }
1256
1257    public boolean hasPerformedAge() { 
1258      return this != null && this.performed instanceof Age;
1259    }
1260
1261    /**
1262     * @return {@link #performed} (Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.)
1263     */
1264    public Range getPerformedRange() throws FHIRException { 
1265      if (this.performed == null)
1266        this.performed = new Range();
1267      if (!(this.performed instanceof Range))
1268        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.performed.getClass().getName()+" was encountered");
1269      return (Range) this.performed;
1270    }
1271
1272    public boolean hasPerformedRange() { 
1273      return this != null && this.performed instanceof Range;
1274    }
1275
1276    public boolean hasPerformed() { 
1277      return this.performed != null && !this.performed.isEmpty();
1278    }
1279
1280    /**
1281     * @param value {@link #performed} (Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.)
1282     */
1283    public Procedure setPerformed(DataType value) { 
1284      if (value != null && !(value instanceof DateTimeType || value instanceof Period || value instanceof StringType || value instanceof Age || value instanceof Range))
1285        throw new Error("Not the right type for Procedure.performed[x]: "+value.fhirType());
1286      this.performed = value;
1287      return this;
1288    }
1289
1290    /**
1291     * @return {@link #recorder} (Individual who recorded the record and takes responsibility for its content.)
1292     */
1293    public Reference getRecorder() { 
1294      if (this.recorder == null)
1295        if (Configuration.errorOnAutoCreate())
1296          throw new Error("Attempt to auto-create Procedure.recorder");
1297        else if (Configuration.doAutoCreate())
1298          this.recorder = new Reference(); // cc
1299      return this.recorder;
1300    }
1301
1302    public boolean hasRecorder() { 
1303      return this.recorder != null && !this.recorder.isEmpty();
1304    }
1305
1306    /**
1307     * @param value {@link #recorder} (Individual who recorded the record and takes responsibility for its content.)
1308     */
1309    public Procedure setRecorder(Reference value) { 
1310      this.recorder = value;
1311      return this;
1312    }
1313
1314    /**
1315     * @return {@link #asserter} (Individual who is making the procedure statement.)
1316     */
1317    public Reference getAsserter() { 
1318      if (this.asserter == null)
1319        if (Configuration.errorOnAutoCreate())
1320          throw new Error("Attempt to auto-create Procedure.asserter");
1321        else if (Configuration.doAutoCreate())
1322          this.asserter = new Reference(); // cc
1323      return this.asserter;
1324    }
1325
1326    public boolean hasAsserter() { 
1327      return this.asserter != null && !this.asserter.isEmpty();
1328    }
1329
1330    /**
1331     * @param value {@link #asserter} (Individual who is making the procedure statement.)
1332     */
1333    public Procedure setAsserter(Reference value) { 
1334      this.asserter = value;
1335      return this;
1336    }
1337
1338    /**
1339     * @return {@link #performer} (Limited to "real" people rather than equipment.)
1340     */
1341    public List<ProcedurePerformerComponent> getPerformer() { 
1342      if (this.performer == null)
1343        this.performer = new ArrayList<ProcedurePerformerComponent>();
1344      return this.performer;
1345    }
1346
1347    /**
1348     * @return Returns a reference to <code>this</code> for easy method chaining
1349     */
1350    public Procedure setPerformer(List<ProcedurePerformerComponent> thePerformer) { 
1351      this.performer = thePerformer;
1352      return this;
1353    }
1354
1355    public boolean hasPerformer() { 
1356      if (this.performer == null)
1357        return false;
1358      for (ProcedurePerformerComponent item : this.performer)
1359        if (!item.isEmpty())
1360          return true;
1361      return false;
1362    }
1363
1364    public ProcedurePerformerComponent addPerformer() { //3
1365      ProcedurePerformerComponent t = new ProcedurePerformerComponent();
1366      if (this.performer == null)
1367        this.performer = new ArrayList<ProcedurePerformerComponent>();
1368      this.performer.add(t);
1369      return t;
1370    }
1371
1372    public Procedure addPerformer(ProcedurePerformerComponent t) { //3
1373      if (t == null)
1374        return this;
1375      if (this.performer == null)
1376        this.performer = new ArrayList<ProcedurePerformerComponent>();
1377      this.performer.add(t);
1378      return this;
1379    }
1380
1381    /**
1382     * @return The first repetition of repeating field {@link #performer}, creating it if it does not already exist {3}
1383     */
1384    public ProcedurePerformerComponent getPerformerFirstRep() { 
1385      if (getPerformer().isEmpty()) {
1386        addPerformer();
1387      }
1388      return getPerformer().get(0);
1389    }
1390
1391    /**
1392     * @return {@link #location} (The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.)
1393     */
1394    public Reference getLocation() { 
1395      if (this.location == null)
1396        if (Configuration.errorOnAutoCreate())
1397          throw new Error("Attempt to auto-create Procedure.location");
1398        else if (Configuration.doAutoCreate())
1399          this.location = new Reference(); // cc
1400      return this.location;
1401    }
1402
1403    public boolean hasLocation() { 
1404      return this.location != null && !this.location.isEmpty();
1405    }
1406
1407    /**
1408     * @param value {@link #location} (The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.)
1409     */
1410    public Procedure setLocation(Reference value) { 
1411      this.location = value;
1412      return this;
1413    }
1414
1415    /**
1416     * @return {@link #reasonCode} (The coded reason why the procedure was performed. This may be a coded entity of some type, or may simply be present as text.)
1417     */
1418    public List<CodeableConcept> getReasonCode() { 
1419      if (this.reasonCode == null)
1420        this.reasonCode = new ArrayList<CodeableConcept>();
1421      return this.reasonCode;
1422    }
1423
1424    /**
1425     * @return Returns a reference to <code>this</code> for easy method chaining
1426     */
1427    public Procedure setReasonCode(List<CodeableConcept> theReasonCode) { 
1428      this.reasonCode = theReasonCode;
1429      return this;
1430    }
1431
1432    public boolean hasReasonCode() { 
1433      if (this.reasonCode == null)
1434        return false;
1435      for (CodeableConcept item : this.reasonCode)
1436        if (!item.isEmpty())
1437          return true;
1438      return false;
1439    }
1440
1441    public CodeableConcept addReasonCode() { //3
1442      CodeableConcept t = new CodeableConcept();
1443      if (this.reasonCode == null)
1444        this.reasonCode = new ArrayList<CodeableConcept>();
1445      this.reasonCode.add(t);
1446      return t;
1447    }
1448
1449    public Procedure addReasonCode(CodeableConcept t) { //3
1450      if (t == null)
1451        return this;
1452      if (this.reasonCode == null)
1453        this.reasonCode = new ArrayList<CodeableConcept>();
1454      this.reasonCode.add(t);
1455      return this;
1456    }
1457
1458    /**
1459     * @return The first repetition of repeating field {@link #reasonCode}, creating it if it does not already exist {3}
1460     */
1461    public CodeableConcept getReasonCodeFirstRep() { 
1462      if (getReasonCode().isEmpty()) {
1463        addReasonCode();
1464      }
1465      return getReasonCode().get(0);
1466    }
1467
1468    /**
1469     * @return {@link #reasonReference} (The justification of why the procedure was performed.)
1470     */
1471    public List<Reference> getReasonReference() { 
1472      if (this.reasonReference == null)
1473        this.reasonReference = new ArrayList<Reference>();
1474      return this.reasonReference;
1475    }
1476
1477    /**
1478     * @return Returns a reference to <code>this</code> for easy method chaining
1479     */
1480    public Procedure setReasonReference(List<Reference> theReasonReference) { 
1481      this.reasonReference = theReasonReference;
1482      return this;
1483    }
1484
1485    public boolean hasReasonReference() { 
1486      if (this.reasonReference == null)
1487        return false;
1488      for (Reference item : this.reasonReference)
1489        if (!item.isEmpty())
1490          return true;
1491      return false;
1492    }
1493
1494    public Reference addReasonReference() { //3
1495      Reference t = new Reference();
1496      if (this.reasonReference == null)
1497        this.reasonReference = new ArrayList<Reference>();
1498      this.reasonReference.add(t);
1499      return t;
1500    }
1501
1502    public Procedure addReasonReference(Reference t) { //3
1503      if (t == null)
1504        return this;
1505      if (this.reasonReference == null)
1506        this.reasonReference = new ArrayList<Reference>();
1507      this.reasonReference.add(t);
1508      return this;
1509    }
1510
1511    /**
1512     * @return The first repetition of repeating field {@link #reasonReference}, creating it if it does not already exist {3}
1513     */
1514    public Reference getReasonReferenceFirstRep() { 
1515      if (getReasonReference().isEmpty()) {
1516        addReasonReference();
1517      }
1518      return getReasonReference().get(0);
1519    }
1520
1521    /**
1522     * @return {@link #bodySite} (Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.)
1523     */
1524    public List<CodeableConcept> getBodySite() { 
1525      if (this.bodySite == null)
1526        this.bodySite = new ArrayList<CodeableConcept>();
1527      return this.bodySite;
1528    }
1529
1530    /**
1531     * @return Returns a reference to <code>this</code> for easy method chaining
1532     */
1533    public Procedure setBodySite(List<CodeableConcept> theBodySite) { 
1534      this.bodySite = theBodySite;
1535      return this;
1536    }
1537
1538    public boolean hasBodySite() { 
1539      if (this.bodySite == null)
1540        return false;
1541      for (CodeableConcept item : this.bodySite)
1542        if (!item.isEmpty())
1543          return true;
1544      return false;
1545    }
1546
1547    public CodeableConcept addBodySite() { //3
1548      CodeableConcept t = new CodeableConcept();
1549      if (this.bodySite == null)
1550        this.bodySite = new ArrayList<CodeableConcept>();
1551      this.bodySite.add(t);
1552      return t;
1553    }
1554
1555    public Procedure addBodySite(CodeableConcept t) { //3
1556      if (t == null)
1557        return this;
1558      if (this.bodySite == null)
1559        this.bodySite = new ArrayList<CodeableConcept>();
1560      this.bodySite.add(t);
1561      return this;
1562    }
1563
1564    /**
1565     * @return The first repetition of repeating field {@link #bodySite}, creating it if it does not already exist {3}
1566     */
1567    public CodeableConcept getBodySiteFirstRep() { 
1568      if (getBodySite().isEmpty()) {
1569        addBodySite();
1570      }
1571      return getBodySite().get(0);
1572    }
1573
1574    /**
1575     * @return {@link #outcome} (The outcome of the procedure - did it resolve the reasons for the procedure being performed?)
1576     */
1577    public CodeableConcept getOutcome() { 
1578      if (this.outcome == null)
1579        if (Configuration.errorOnAutoCreate())
1580          throw new Error("Attempt to auto-create Procedure.outcome");
1581        else if (Configuration.doAutoCreate())
1582          this.outcome = new CodeableConcept(); // cc
1583      return this.outcome;
1584    }
1585
1586    public boolean hasOutcome() { 
1587      return this.outcome != null && !this.outcome.isEmpty();
1588    }
1589
1590    /**
1591     * @param value {@link #outcome} (The outcome of the procedure - did it resolve the reasons for the procedure being performed?)
1592     */
1593    public Procedure setOutcome(CodeableConcept value) { 
1594      this.outcome = value;
1595      return this;
1596    }
1597
1598    /**
1599     * @return {@link #report} (This could be a histology result, pathology report, surgical report, etc.)
1600     */
1601    public List<Reference> getReport() { 
1602      if (this.report == null)
1603        this.report = new ArrayList<Reference>();
1604      return this.report;
1605    }
1606
1607    /**
1608     * @return Returns a reference to <code>this</code> for easy method chaining
1609     */
1610    public Procedure setReport(List<Reference> theReport) { 
1611      this.report = theReport;
1612      return this;
1613    }
1614
1615    public boolean hasReport() { 
1616      if (this.report == null)
1617        return false;
1618      for (Reference item : this.report)
1619        if (!item.isEmpty())
1620          return true;
1621      return false;
1622    }
1623
1624    public Reference addReport() { //3
1625      Reference t = new Reference();
1626      if (this.report == null)
1627        this.report = new ArrayList<Reference>();
1628      this.report.add(t);
1629      return t;
1630    }
1631
1632    public Procedure addReport(Reference t) { //3
1633      if (t == null)
1634        return this;
1635      if (this.report == null)
1636        this.report = new ArrayList<Reference>();
1637      this.report.add(t);
1638      return this;
1639    }
1640
1641    /**
1642     * @return The first repetition of repeating field {@link #report}, creating it if it does not already exist {3}
1643     */
1644    public Reference getReportFirstRep() { 
1645      if (getReport().isEmpty()) {
1646        addReport();
1647      }
1648      return getReport().get(0);
1649    }
1650
1651    /**
1652     * @return {@link #complication} (Any complications that occurred during the procedure, or in the immediate post-performance period. These are generally tracked separately from the notes, which will typically describe the procedure itself rather than any 'post procedure' issues.)
1653     */
1654    public List<CodeableConcept> getComplication() { 
1655      if (this.complication == null)
1656        this.complication = new ArrayList<CodeableConcept>();
1657      return this.complication;
1658    }
1659
1660    /**
1661     * @return Returns a reference to <code>this</code> for easy method chaining
1662     */
1663    public Procedure setComplication(List<CodeableConcept> theComplication) { 
1664      this.complication = theComplication;
1665      return this;
1666    }
1667
1668    public boolean hasComplication() { 
1669      if (this.complication == null)
1670        return false;
1671      for (CodeableConcept item : this.complication)
1672        if (!item.isEmpty())
1673          return true;
1674      return false;
1675    }
1676
1677    public CodeableConcept addComplication() { //3
1678      CodeableConcept t = new CodeableConcept();
1679      if (this.complication == null)
1680        this.complication = new ArrayList<CodeableConcept>();
1681      this.complication.add(t);
1682      return t;
1683    }
1684
1685    public Procedure addComplication(CodeableConcept t) { //3
1686      if (t == null)
1687        return this;
1688      if (this.complication == null)
1689        this.complication = new ArrayList<CodeableConcept>();
1690      this.complication.add(t);
1691      return this;
1692    }
1693
1694    /**
1695     * @return The first repetition of repeating field {@link #complication}, creating it if it does not already exist {3}
1696     */
1697    public CodeableConcept getComplicationFirstRep() { 
1698      if (getComplication().isEmpty()) {
1699        addComplication();
1700      }
1701      return getComplication().get(0);
1702    }
1703
1704    /**
1705     * @return {@link #complicationDetail} (Any complications that occurred during the procedure, or in the immediate post-performance period.)
1706     */
1707    public List<Reference> getComplicationDetail() { 
1708      if (this.complicationDetail == null)
1709        this.complicationDetail = new ArrayList<Reference>();
1710      return this.complicationDetail;
1711    }
1712
1713    /**
1714     * @return Returns a reference to <code>this</code> for easy method chaining
1715     */
1716    public Procedure setComplicationDetail(List<Reference> theComplicationDetail) { 
1717      this.complicationDetail = theComplicationDetail;
1718      return this;
1719    }
1720
1721    public boolean hasComplicationDetail() { 
1722      if (this.complicationDetail == null)
1723        return false;
1724      for (Reference item : this.complicationDetail)
1725        if (!item.isEmpty())
1726          return true;
1727      return false;
1728    }
1729
1730    public Reference addComplicationDetail() { //3
1731      Reference t = new Reference();
1732      if (this.complicationDetail == null)
1733        this.complicationDetail = new ArrayList<Reference>();
1734      this.complicationDetail.add(t);
1735      return t;
1736    }
1737
1738    public Procedure addComplicationDetail(Reference t) { //3
1739      if (t == null)
1740        return this;
1741      if (this.complicationDetail == null)
1742        this.complicationDetail = new ArrayList<Reference>();
1743      this.complicationDetail.add(t);
1744      return this;
1745    }
1746
1747    /**
1748     * @return The first repetition of repeating field {@link #complicationDetail}, creating it if it does not already exist {3}
1749     */
1750    public Reference getComplicationDetailFirstRep() { 
1751      if (getComplicationDetail().isEmpty()) {
1752        addComplicationDetail();
1753      }
1754      return getComplicationDetail().get(0);
1755    }
1756
1757    /**
1758     * @return {@link #followUp} (If the procedure required specific follow up - e.g. removal of sutures. The follow up may be represented as a simple note or could potentially be more complex, in which case the CarePlan resource can be used.)
1759     */
1760    public List<CodeableConcept> getFollowUp() { 
1761      if (this.followUp == null)
1762        this.followUp = new ArrayList<CodeableConcept>();
1763      return this.followUp;
1764    }
1765
1766    /**
1767     * @return Returns a reference to <code>this</code> for easy method chaining
1768     */
1769    public Procedure setFollowUp(List<CodeableConcept> theFollowUp) { 
1770      this.followUp = theFollowUp;
1771      return this;
1772    }
1773
1774    public boolean hasFollowUp() { 
1775      if (this.followUp == null)
1776        return false;
1777      for (CodeableConcept item : this.followUp)
1778        if (!item.isEmpty())
1779          return true;
1780      return false;
1781    }
1782
1783    public CodeableConcept addFollowUp() { //3
1784      CodeableConcept t = new CodeableConcept();
1785      if (this.followUp == null)
1786        this.followUp = new ArrayList<CodeableConcept>();
1787      this.followUp.add(t);
1788      return t;
1789    }
1790
1791    public Procedure addFollowUp(CodeableConcept t) { //3
1792      if (t == null)
1793        return this;
1794      if (this.followUp == null)
1795        this.followUp = new ArrayList<CodeableConcept>();
1796      this.followUp.add(t);
1797      return this;
1798    }
1799
1800    /**
1801     * @return The first repetition of repeating field {@link #followUp}, creating it if it does not already exist {3}
1802     */
1803    public CodeableConcept getFollowUpFirstRep() { 
1804      if (getFollowUp().isEmpty()) {
1805        addFollowUp();
1806      }
1807      return getFollowUp().get(0);
1808    }
1809
1810    /**
1811     * @return {@link #note} (Any other notes and comments about the procedure.)
1812     */
1813    public List<Annotation> getNote() { 
1814      if (this.note == null)
1815        this.note = new ArrayList<Annotation>();
1816      return this.note;
1817    }
1818
1819    /**
1820     * @return Returns a reference to <code>this</code> for easy method chaining
1821     */
1822    public Procedure setNote(List<Annotation> theNote) { 
1823      this.note = theNote;
1824      return this;
1825    }
1826
1827    public boolean hasNote() { 
1828      if (this.note == null)
1829        return false;
1830      for (Annotation item : this.note)
1831        if (!item.isEmpty())
1832          return true;
1833      return false;
1834    }
1835
1836    public Annotation addNote() { //3
1837      Annotation t = new Annotation();
1838      if (this.note == null)
1839        this.note = new ArrayList<Annotation>();
1840      this.note.add(t);
1841      return t;
1842    }
1843
1844    public Procedure addNote(Annotation t) { //3
1845      if (t == null)
1846        return this;
1847      if (this.note == null)
1848        this.note = new ArrayList<Annotation>();
1849      this.note.add(t);
1850      return this;
1851    }
1852
1853    /**
1854     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
1855     */
1856    public Annotation getNoteFirstRep() { 
1857      if (getNote().isEmpty()) {
1858        addNote();
1859      }
1860      return getNote().get(0);
1861    }
1862
1863    /**
1864     * @return {@link #focalDevice} (A device that is implanted, removed or otherwise manipulated (calibration, battery replacement, fitting a prosthesis, attaching a wound-vac, etc.) as a focal portion of the Procedure.)
1865     */
1866    public List<ProcedureFocalDeviceComponent> getFocalDevice() { 
1867      if (this.focalDevice == null)
1868        this.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
1869      return this.focalDevice;
1870    }
1871
1872    /**
1873     * @return Returns a reference to <code>this</code> for easy method chaining
1874     */
1875    public Procedure setFocalDevice(List<ProcedureFocalDeviceComponent> theFocalDevice) { 
1876      this.focalDevice = theFocalDevice;
1877      return this;
1878    }
1879
1880    public boolean hasFocalDevice() { 
1881      if (this.focalDevice == null)
1882        return false;
1883      for (ProcedureFocalDeviceComponent item : this.focalDevice)
1884        if (!item.isEmpty())
1885          return true;
1886      return false;
1887    }
1888
1889    public ProcedureFocalDeviceComponent addFocalDevice() { //3
1890      ProcedureFocalDeviceComponent t = new ProcedureFocalDeviceComponent();
1891      if (this.focalDevice == null)
1892        this.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
1893      this.focalDevice.add(t);
1894      return t;
1895    }
1896
1897    public Procedure addFocalDevice(ProcedureFocalDeviceComponent t) { //3
1898      if (t == null)
1899        return this;
1900      if (this.focalDevice == null)
1901        this.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
1902      this.focalDevice.add(t);
1903      return this;
1904    }
1905
1906    /**
1907     * @return The first repetition of repeating field {@link #focalDevice}, creating it if it does not already exist {3}
1908     */
1909    public ProcedureFocalDeviceComponent getFocalDeviceFirstRep() { 
1910      if (getFocalDevice().isEmpty()) {
1911        addFocalDevice();
1912      }
1913      return getFocalDevice().get(0);
1914    }
1915
1916    /**
1917     * @return {@link #usedReference} (Identifies medications, devices and any other substance used as part of the procedure.)
1918     */
1919    public List<Reference> getUsedReference() { 
1920      if (this.usedReference == null)
1921        this.usedReference = new ArrayList<Reference>();
1922      return this.usedReference;
1923    }
1924
1925    /**
1926     * @return Returns a reference to <code>this</code> for easy method chaining
1927     */
1928    public Procedure setUsedReference(List<Reference> theUsedReference) { 
1929      this.usedReference = theUsedReference;
1930      return this;
1931    }
1932
1933    public boolean hasUsedReference() { 
1934      if (this.usedReference == null)
1935        return false;
1936      for (Reference item : this.usedReference)
1937        if (!item.isEmpty())
1938          return true;
1939      return false;
1940    }
1941
1942    public Reference addUsedReference() { //3
1943      Reference t = new Reference();
1944      if (this.usedReference == null)
1945        this.usedReference = new ArrayList<Reference>();
1946      this.usedReference.add(t);
1947      return t;
1948    }
1949
1950    public Procedure addUsedReference(Reference t) { //3
1951      if (t == null)
1952        return this;
1953      if (this.usedReference == null)
1954        this.usedReference = new ArrayList<Reference>();
1955      this.usedReference.add(t);
1956      return this;
1957    }
1958
1959    /**
1960     * @return The first repetition of repeating field {@link #usedReference}, creating it if it does not already exist {3}
1961     */
1962    public Reference getUsedReferenceFirstRep() { 
1963      if (getUsedReference().isEmpty()) {
1964        addUsedReference();
1965      }
1966      return getUsedReference().get(0);
1967    }
1968
1969    /**
1970     * @return {@link #usedCode} (Identifies coded items that were used as part of the procedure.)
1971     */
1972    public List<CodeableConcept> getUsedCode() { 
1973      if (this.usedCode == null)
1974        this.usedCode = new ArrayList<CodeableConcept>();
1975      return this.usedCode;
1976    }
1977
1978    /**
1979     * @return Returns a reference to <code>this</code> for easy method chaining
1980     */
1981    public Procedure setUsedCode(List<CodeableConcept> theUsedCode) { 
1982      this.usedCode = theUsedCode;
1983      return this;
1984    }
1985
1986    public boolean hasUsedCode() { 
1987      if (this.usedCode == null)
1988        return false;
1989      for (CodeableConcept item : this.usedCode)
1990        if (!item.isEmpty())
1991          return true;
1992      return false;
1993    }
1994
1995    public CodeableConcept addUsedCode() { //3
1996      CodeableConcept t = new CodeableConcept();
1997      if (this.usedCode == null)
1998        this.usedCode = new ArrayList<CodeableConcept>();
1999      this.usedCode.add(t);
2000      return t;
2001    }
2002
2003    public Procedure addUsedCode(CodeableConcept t) { //3
2004      if (t == null)
2005        return this;
2006      if (this.usedCode == null)
2007        this.usedCode = new ArrayList<CodeableConcept>();
2008      this.usedCode.add(t);
2009      return this;
2010    }
2011
2012    /**
2013     * @return The first repetition of repeating field {@link #usedCode}, creating it if it does not already exist {3}
2014     */
2015    public CodeableConcept getUsedCodeFirstRep() { 
2016      if (getUsedCode().isEmpty()) {
2017        addUsedCode();
2018      }
2019      return getUsedCode().get(0);
2020    }
2021
2022      protected void listChildren(List<Property> children) {
2023        super.listChildren(children);
2024        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this procedure by the performer or other systems which remain constant as the resource is updated and is propagated from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
2025        children.add(new Property("instantiatesCanonical", "canonical(PlanDefinition|ActivityDefinition|Measure|OperationDefinition|Questionnaire)", "The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.", 0, java.lang.Integer.MAX_VALUE, instantiatesCanonical));
2026        children.add(new Property("instantiatesUri", "uri", "The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.", 0, java.lang.Integer.MAX_VALUE, instantiatesUri));
2027        children.add(new Property("basedOn", "Reference(CarePlan|ServiceRequest)", "A reference to a resource that contains details of the request for this procedure.", 0, java.lang.Integer.MAX_VALUE, basedOn));
2028        children.add(new Property("partOf", "Reference(Procedure|Observation|MedicationAdministration)", "A larger event of which this particular procedure is a component or step.", 0, java.lang.Integer.MAX_VALUE, partOf));
2029        children.add(new Property("status", "code", "A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.", 0, 1, status));
2030        children.add(new Property("statusReason", "CodeableConcept", "Captures the reason for the current state of the procedure.", 0, 1, statusReason));
2031        children.add(new Property("category", "CodeableConcept", "A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\").", 0, 1, category));
2032        children.add(new Property("code", "CodeableConcept", "The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. \"Laparoscopic Appendectomy\").", 0, 1, code));
2033        children.add(new Property("subject", "Reference(Patient|Group)", "The person, animal or group on which the procedure was performed.", 0, 1, subject));
2034        children.add(new Property("encounter", "Reference(Encounter)", "The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.", 0, 1, encounter));
2035        children.add(new Property("performed[x]", "dateTime|Period|string|Age|Range", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed));
2036        children.add(new Property("recorder", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole)", "Individual who recorded the record and takes responsibility for its content.", 0, 1, recorder));
2037        children.add(new Property("asserter", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole)", "Individual who is making the procedure statement.", 0, 1, asserter));
2038        children.add(new Property("performer", "", "Limited to \"real\" people rather than equipment.", 0, java.lang.Integer.MAX_VALUE, performer));
2039        children.add(new Property("location", "Reference(Location)", "The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.", 0, 1, location));
2040        children.add(new Property("reasonCode", "CodeableConcept", "The coded reason why the procedure was performed. This may be a coded entity of some type, or may simply be present as text.", 0, java.lang.Integer.MAX_VALUE, reasonCode));
2041        children.add(new Property("reasonReference", "Reference(Condition|Observation|Procedure|DiagnosticReport|DocumentReference)", "The justification of why the procedure was performed.", 0, java.lang.Integer.MAX_VALUE, reasonReference));
2042        children.add(new Property("bodySite", "CodeableConcept", "Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.", 0, java.lang.Integer.MAX_VALUE, bodySite));
2043        children.add(new Property("outcome", "CodeableConcept", "The outcome of the procedure - did it resolve the reasons for the procedure being performed?", 0, 1, outcome));
2044        children.add(new Property("report", "Reference(DiagnosticReport|DocumentReference|Composition)", "This could be a histology result, pathology report, surgical report, etc.", 0, java.lang.Integer.MAX_VALUE, report));
2045        children.add(new Property("complication", "CodeableConcept", "Any complications that occurred during the procedure, or in the immediate post-performance period. These are generally tracked separately from the notes, which will typically describe the procedure itself rather than any 'post procedure' issues.", 0, java.lang.Integer.MAX_VALUE, complication));
2046        children.add(new Property("complicationDetail", "Reference(Condition)", "Any complications that occurred during the procedure, or in the immediate post-performance period.", 0, java.lang.Integer.MAX_VALUE, complicationDetail));
2047        children.add(new Property("followUp", "CodeableConcept", "If the procedure required specific follow up - e.g. removal of sutures. The follow up may be represented as a simple note or could potentially be more complex, in which case the CarePlan resource can be used.", 0, java.lang.Integer.MAX_VALUE, followUp));
2048        children.add(new Property("note", "Annotation", "Any other notes and comments about the procedure.", 0, java.lang.Integer.MAX_VALUE, note));
2049        children.add(new Property("focalDevice", "", "A device that is implanted, removed or otherwise manipulated (calibration, battery replacement, fitting a prosthesis, attaching a wound-vac, etc.) as a focal portion of the Procedure.", 0, java.lang.Integer.MAX_VALUE, focalDevice));
2050        children.add(new Property("usedReference", "Reference(Device|Medication|Substance)", "Identifies medications, devices and any other substance used as part of the procedure.", 0, java.lang.Integer.MAX_VALUE, usedReference));
2051        children.add(new Property("usedCode", "CodeableConcept", "Identifies coded items that were used as part of the procedure.", 0, java.lang.Integer.MAX_VALUE, usedCode));
2052      }
2053
2054      @Override
2055      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2056        switch (_hash) {
2057        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this procedure by the performer or other systems which remain constant as the resource is updated and is propagated from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
2058        case 8911915: /*instantiatesCanonical*/  return new Property("instantiatesCanonical", "canonical(PlanDefinition|ActivityDefinition|Measure|OperationDefinition|Questionnaire)", "The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.", 0, java.lang.Integer.MAX_VALUE, instantiatesCanonical);
2059        case -1926393373: /*instantiatesUri*/  return new Property("instantiatesUri", "uri", "The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.", 0, java.lang.Integer.MAX_VALUE, instantiatesUri);
2060        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(CarePlan|ServiceRequest)", "A reference to a resource that contains details of the request for this procedure.", 0, java.lang.Integer.MAX_VALUE, basedOn);
2061        case -995410646: /*partOf*/  return new Property("partOf", "Reference(Procedure|Observation|MedicationAdministration)", "A larger event of which this particular procedure is a component or step.", 0, java.lang.Integer.MAX_VALUE, partOf);
2062        case -892481550: /*status*/  return new Property("status", "code", "A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.", 0, 1, status);
2063        case 2051346646: /*statusReason*/  return new Property("statusReason", "CodeableConcept", "Captures the reason for the current state of the procedure.", 0, 1, statusReason);
2064        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\").", 0, 1, category);
2065        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. \"Laparoscopic Appendectomy\").", 0, 1, code);
2066        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "The person, animal or group on which the procedure was performed.", 0, 1, subject);
2067        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.", 0, 1, encounter);
2068        case 1355984064: /*performed[x]*/  return new Property("performed[x]", "dateTime|Period|string|Age|Range", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed);
2069        case 481140672: /*performed*/  return new Property("performed[x]", "dateTime|Period|string|Age|Range", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed);
2070        case 1118270331: /*performedDateTime*/  return new Property("performed[x]", "dateTime", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed);
2071        case 1622094241: /*performedPeriod*/  return new Property("performed[x]", "Period", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed);
2072        case 1721834481: /*performedString*/  return new Property("performed[x]", "string", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed);
2073        case 1355958559: /*performedAge*/  return new Property("performed[x]", "Age", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed);
2074        case 1716617565: /*performedRange*/  return new Property("performed[x]", "Range", "Estimated or actual date, date-time, period, or age when the procedure was performed.  Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", 0, 1, performed);
2075        case -799233858: /*recorder*/  return new Property("recorder", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole)", "Individual who recorded the record and takes responsibility for its content.", 0, 1, recorder);
2076        case -373242253: /*asserter*/  return new Property("asserter", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole)", "Individual who is making the procedure statement.", 0, 1, asserter);
2077        case 481140686: /*performer*/  return new Property("performer", "", "Limited to \"real\" people rather than equipment.", 0, java.lang.Integer.MAX_VALUE, performer);
2078        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.", 0, 1, location);
2079        case 722137681: /*reasonCode*/  return new Property("reasonCode", "CodeableConcept", "The coded reason why the procedure was performed. This may be a coded entity of some type, or may simply be present as text.", 0, java.lang.Integer.MAX_VALUE, reasonCode);
2080        case -1146218137: /*reasonReference*/  return new Property("reasonReference", "Reference(Condition|Observation|Procedure|DiagnosticReport|DocumentReference)", "The justification of why the procedure was performed.", 0, java.lang.Integer.MAX_VALUE, reasonReference);
2081        case 1702620169: /*bodySite*/  return new Property("bodySite", "CodeableConcept", "Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.", 0, java.lang.Integer.MAX_VALUE, bodySite);
2082        case -1106507950: /*outcome*/  return new Property("outcome", "CodeableConcept", "The outcome of the procedure - did it resolve the reasons for the procedure being performed?", 0, 1, outcome);
2083        case -934521548: /*report*/  return new Property("report", "Reference(DiagnosticReport|DocumentReference|Composition)", "This could be a histology result, pathology report, surgical report, etc.", 0, java.lang.Integer.MAX_VALUE, report);
2084        case -1644401602: /*complication*/  return new Property("complication", "CodeableConcept", "Any complications that occurred during the procedure, or in the immediate post-performance period. These are generally tracked separately from the notes, which will typically describe the procedure itself rather than any 'post procedure' issues.", 0, java.lang.Integer.MAX_VALUE, complication);
2085        case -1685272017: /*complicationDetail*/  return new Property("complicationDetail", "Reference(Condition)", "Any complications that occurred during the procedure, or in the immediate post-performance period.", 0, java.lang.Integer.MAX_VALUE, complicationDetail);
2086        case 301801004: /*followUp*/  return new Property("followUp", "CodeableConcept", "If the procedure required specific follow up - e.g. removal of sutures. The follow up may be represented as a simple note or could potentially be more complex, in which case the CarePlan resource can be used.", 0, java.lang.Integer.MAX_VALUE, followUp);
2087        case 3387378: /*note*/  return new Property("note", "Annotation", "Any other notes and comments about the procedure.", 0, java.lang.Integer.MAX_VALUE, note);
2088        case -1129235173: /*focalDevice*/  return new Property("focalDevice", "", "A device that is implanted, removed or otherwise manipulated (calibration, battery replacement, fitting a prosthesis, attaching a wound-vac, etc.) as a focal portion of the Procedure.", 0, java.lang.Integer.MAX_VALUE, focalDevice);
2089        case -504932338: /*usedReference*/  return new Property("usedReference", "Reference(Device|Medication|Substance)", "Identifies medications, devices and any other substance used as part of the procedure.", 0, java.lang.Integer.MAX_VALUE, usedReference);
2090        case -279910582: /*usedCode*/  return new Property("usedCode", "CodeableConcept", "Identifies coded items that were used as part of the procedure.", 0, java.lang.Integer.MAX_VALUE, usedCode);
2091        default: return super.getNamedProperty(_hash, _name, _checkValid);
2092        }
2093
2094      }
2095
2096      @Override
2097      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2098        switch (hash) {
2099        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2100        case 8911915: /*instantiatesCanonical*/ return this.instantiatesCanonical == null ? new Base[0] : this.instantiatesCanonical.toArray(new Base[this.instantiatesCanonical.size()]); // CanonicalType
2101        case -1926393373: /*instantiatesUri*/ return this.instantiatesUri == null ? new Base[0] : this.instantiatesUri.toArray(new Base[this.instantiatesUri.size()]); // UriType
2102        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
2103        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
2104        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<EventStatus>
2105        case 2051346646: /*statusReason*/ return this.statusReason == null ? new Base[0] : new Base[] {this.statusReason}; // CodeableConcept
2106        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
2107        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2108        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
2109        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
2110        case 481140672: /*performed*/ return this.performed == null ? new Base[0] : new Base[] {this.performed}; // DataType
2111        case -799233858: /*recorder*/ return this.recorder == null ? new Base[0] : new Base[] {this.recorder}; // Reference
2112        case -373242253: /*asserter*/ return this.asserter == null ? new Base[0] : new Base[] {this.asserter}; // Reference
2113        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : this.performer.toArray(new Base[this.performer.size()]); // ProcedurePerformerComponent
2114        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
2115        case 722137681: /*reasonCode*/ return this.reasonCode == null ? new Base[0] : this.reasonCode.toArray(new Base[this.reasonCode.size()]); // CodeableConcept
2116        case -1146218137: /*reasonReference*/ return this.reasonReference == null ? new Base[0] : this.reasonReference.toArray(new Base[this.reasonReference.size()]); // Reference
2117        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : this.bodySite.toArray(new Base[this.bodySite.size()]); // CodeableConcept
2118        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // CodeableConcept
2119        case -934521548: /*report*/ return this.report == null ? new Base[0] : this.report.toArray(new Base[this.report.size()]); // Reference
2120        case -1644401602: /*complication*/ return this.complication == null ? new Base[0] : this.complication.toArray(new Base[this.complication.size()]); // CodeableConcept
2121        case -1685272017: /*complicationDetail*/ return this.complicationDetail == null ? new Base[0] : this.complicationDetail.toArray(new Base[this.complicationDetail.size()]); // Reference
2122        case 301801004: /*followUp*/ return this.followUp == null ? new Base[0] : this.followUp.toArray(new Base[this.followUp.size()]); // CodeableConcept
2123        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2124        case -1129235173: /*focalDevice*/ return this.focalDevice == null ? new Base[0] : this.focalDevice.toArray(new Base[this.focalDevice.size()]); // ProcedureFocalDeviceComponent
2125        case -504932338: /*usedReference*/ return this.usedReference == null ? new Base[0] : this.usedReference.toArray(new Base[this.usedReference.size()]); // Reference
2126        case -279910582: /*usedCode*/ return this.usedCode == null ? new Base[0] : this.usedCode.toArray(new Base[this.usedCode.size()]); // CodeableConcept
2127        default: return super.getProperty(hash, name, checkValid);
2128        }
2129
2130      }
2131
2132      @Override
2133      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2134        switch (hash) {
2135        case -1618432855: // identifier
2136          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2137          return value;
2138        case 8911915: // instantiatesCanonical
2139          this.getInstantiatesCanonical().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2140          return value;
2141        case -1926393373: // instantiatesUri
2142          this.getInstantiatesUri().add(TypeConvertor.castToUri(value)); // UriType
2143          return value;
2144        case -332612366: // basedOn
2145          this.getBasedOn().add(TypeConvertor.castToReference(value)); // Reference
2146          return value;
2147        case -995410646: // partOf
2148          this.getPartOf().add(TypeConvertor.castToReference(value)); // Reference
2149          return value;
2150        case -892481550: // status
2151          value = new EventStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2152          this.status = (Enumeration) value; // Enumeration<EventStatus>
2153          return value;
2154        case 2051346646: // statusReason
2155          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2156          return value;
2157        case 50511102: // category
2158          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2159          return value;
2160        case 3059181: // code
2161          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2162          return value;
2163        case -1867885268: // subject
2164          this.subject = TypeConvertor.castToReference(value); // Reference
2165          return value;
2166        case 1524132147: // encounter
2167          this.encounter = TypeConvertor.castToReference(value); // Reference
2168          return value;
2169        case 481140672: // performed
2170          this.performed = TypeConvertor.castToType(value); // DataType
2171          return value;
2172        case -799233858: // recorder
2173          this.recorder = TypeConvertor.castToReference(value); // Reference
2174          return value;
2175        case -373242253: // asserter
2176          this.asserter = TypeConvertor.castToReference(value); // Reference
2177          return value;
2178        case 481140686: // performer
2179          this.getPerformer().add((ProcedurePerformerComponent) value); // ProcedurePerformerComponent
2180          return value;
2181        case 1901043637: // location
2182          this.location = TypeConvertor.castToReference(value); // Reference
2183          return value;
2184        case 722137681: // reasonCode
2185          this.getReasonCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2186          return value;
2187        case -1146218137: // reasonReference
2188          this.getReasonReference().add(TypeConvertor.castToReference(value)); // Reference
2189          return value;
2190        case 1702620169: // bodySite
2191          this.getBodySite().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2192          return value;
2193        case -1106507950: // outcome
2194          this.outcome = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2195          return value;
2196        case -934521548: // report
2197          this.getReport().add(TypeConvertor.castToReference(value)); // Reference
2198          return value;
2199        case -1644401602: // complication
2200          this.getComplication().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2201          return value;
2202        case -1685272017: // complicationDetail
2203          this.getComplicationDetail().add(TypeConvertor.castToReference(value)); // Reference
2204          return value;
2205        case 301801004: // followUp
2206          this.getFollowUp().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2207          return value;
2208        case 3387378: // note
2209          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
2210          return value;
2211        case -1129235173: // focalDevice
2212          this.getFocalDevice().add((ProcedureFocalDeviceComponent) value); // ProcedureFocalDeviceComponent
2213          return value;
2214        case -504932338: // usedReference
2215          this.getUsedReference().add(TypeConvertor.castToReference(value)); // Reference
2216          return value;
2217        case -279910582: // usedCode
2218          this.getUsedCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2219          return value;
2220        default: return super.setProperty(hash, name, value);
2221        }
2222
2223      }
2224
2225      @Override
2226      public Base setProperty(String name, Base value) throws FHIRException {
2227        if (name.equals("identifier")) {
2228          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2229        } else if (name.equals("instantiatesCanonical")) {
2230          this.getInstantiatesCanonical().add(TypeConvertor.castToCanonical(value));
2231        } else if (name.equals("instantiatesUri")) {
2232          this.getInstantiatesUri().add(TypeConvertor.castToUri(value));
2233        } else if (name.equals("basedOn")) {
2234          this.getBasedOn().add(TypeConvertor.castToReference(value));
2235        } else if (name.equals("partOf")) {
2236          this.getPartOf().add(TypeConvertor.castToReference(value));
2237        } else if (name.equals("status")) {
2238          value = new EventStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2239          this.status = (Enumeration) value; // Enumeration<EventStatus>
2240        } else if (name.equals("statusReason")) {
2241          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2242        } else if (name.equals("category")) {
2243          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2244        } else if (name.equals("code")) {
2245          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2246        } else if (name.equals("subject")) {
2247          this.subject = TypeConvertor.castToReference(value); // Reference
2248        } else if (name.equals("encounter")) {
2249          this.encounter = TypeConvertor.castToReference(value); // Reference
2250        } else if (name.equals("performed[x]")) {
2251          this.performed = TypeConvertor.castToType(value); // DataType
2252        } else if (name.equals("recorder")) {
2253          this.recorder = TypeConvertor.castToReference(value); // Reference
2254        } else if (name.equals("asserter")) {
2255          this.asserter = TypeConvertor.castToReference(value); // Reference
2256        } else if (name.equals("performer")) {
2257          this.getPerformer().add((ProcedurePerformerComponent) value);
2258        } else if (name.equals("location")) {
2259          this.location = TypeConvertor.castToReference(value); // Reference
2260        } else if (name.equals("reasonCode")) {
2261          this.getReasonCode().add(TypeConvertor.castToCodeableConcept(value));
2262        } else if (name.equals("reasonReference")) {
2263          this.getReasonReference().add(TypeConvertor.castToReference(value));
2264        } else if (name.equals("bodySite")) {
2265          this.getBodySite().add(TypeConvertor.castToCodeableConcept(value));
2266        } else if (name.equals("outcome")) {
2267          this.outcome = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2268        } else if (name.equals("report")) {
2269          this.getReport().add(TypeConvertor.castToReference(value));
2270        } else if (name.equals("complication")) {
2271          this.getComplication().add(TypeConvertor.castToCodeableConcept(value));
2272        } else if (name.equals("complicationDetail")) {
2273          this.getComplicationDetail().add(TypeConvertor.castToReference(value));
2274        } else if (name.equals("followUp")) {
2275          this.getFollowUp().add(TypeConvertor.castToCodeableConcept(value));
2276        } else if (name.equals("note")) {
2277          this.getNote().add(TypeConvertor.castToAnnotation(value));
2278        } else if (name.equals("focalDevice")) {
2279          this.getFocalDevice().add((ProcedureFocalDeviceComponent) value);
2280        } else if (name.equals("usedReference")) {
2281          this.getUsedReference().add(TypeConvertor.castToReference(value));
2282        } else if (name.equals("usedCode")) {
2283          this.getUsedCode().add(TypeConvertor.castToCodeableConcept(value));
2284        } else
2285          return super.setProperty(name, value);
2286        return value;
2287      }
2288
2289      @Override
2290      public Base makeProperty(int hash, String name) throws FHIRException {
2291        switch (hash) {
2292        case -1618432855:  return addIdentifier(); 
2293        case 8911915:  return addInstantiatesCanonicalElement();
2294        case -1926393373:  return addInstantiatesUriElement();
2295        case -332612366:  return addBasedOn(); 
2296        case -995410646:  return addPartOf(); 
2297        case -892481550:  return getStatusElement();
2298        case 2051346646:  return getStatusReason();
2299        case 50511102:  return getCategory();
2300        case 3059181:  return getCode();
2301        case -1867885268:  return getSubject();
2302        case 1524132147:  return getEncounter();
2303        case 1355984064:  return getPerformed();
2304        case 481140672:  return getPerformed();
2305        case -799233858:  return getRecorder();
2306        case -373242253:  return getAsserter();
2307        case 481140686:  return addPerformer(); 
2308        case 1901043637:  return getLocation();
2309        case 722137681:  return addReasonCode(); 
2310        case -1146218137:  return addReasonReference(); 
2311        case 1702620169:  return addBodySite(); 
2312        case -1106507950:  return getOutcome();
2313        case -934521548:  return addReport(); 
2314        case -1644401602:  return addComplication(); 
2315        case -1685272017:  return addComplicationDetail(); 
2316        case 301801004:  return addFollowUp(); 
2317        case 3387378:  return addNote(); 
2318        case -1129235173:  return addFocalDevice(); 
2319        case -504932338:  return addUsedReference(); 
2320        case -279910582:  return addUsedCode(); 
2321        default: return super.makeProperty(hash, name);
2322        }
2323
2324      }
2325
2326      @Override
2327      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2328        switch (hash) {
2329        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2330        case 8911915: /*instantiatesCanonical*/ return new String[] {"canonical"};
2331        case -1926393373: /*instantiatesUri*/ return new String[] {"uri"};
2332        case -332612366: /*basedOn*/ return new String[] {"Reference"};
2333        case -995410646: /*partOf*/ return new String[] {"Reference"};
2334        case -892481550: /*status*/ return new String[] {"code"};
2335        case 2051346646: /*statusReason*/ return new String[] {"CodeableConcept"};
2336        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2337        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2338        case -1867885268: /*subject*/ return new String[] {"Reference"};
2339        case 1524132147: /*encounter*/ return new String[] {"Reference"};
2340        case 481140672: /*performed*/ return new String[] {"dateTime", "Period", "string", "Age", "Range"};
2341        case -799233858: /*recorder*/ return new String[] {"Reference"};
2342        case -373242253: /*asserter*/ return new String[] {"Reference"};
2343        case 481140686: /*performer*/ return new String[] {};
2344        case 1901043637: /*location*/ return new String[] {"Reference"};
2345        case 722137681: /*reasonCode*/ return new String[] {"CodeableConcept"};
2346        case -1146218137: /*reasonReference*/ return new String[] {"Reference"};
2347        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
2348        case -1106507950: /*outcome*/ return new String[] {"CodeableConcept"};
2349        case -934521548: /*report*/ return new String[] {"Reference"};
2350        case -1644401602: /*complication*/ return new String[] {"CodeableConcept"};
2351        case -1685272017: /*complicationDetail*/ return new String[] {"Reference"};
2352        case 301801004: /*followUp*/ return new String[] {"CodeableConcept"};
2353        case 3387378: /*note*/ return new String[] {"Annotation"};
2354        case -1129235173: /*focalDevice*/ return new String[] {};
2355        case -504932338: /*usedReference*/ return new String[] {"Reference"};
2356        case -279910582: /*usedCode*/ return new String[] {"CodeableConcept"};
2357        default: return super.getTypesForProperty(hash, name);
2358        }
2359
2360      }
2361
2362      @Override
2363      public Base addChild(String name) throws FHIRException {
2364        if (name.equals("identifier")) {
2365          return addIdentifier();
2366        }
2367        else if (name.equals("instantiatesCanonical")) {
2368          throw new FHIRException("Cannot call addChild on a primitive type Procedure.instantiatesCanonical");
2369        }
2370        else if (name.equals("instantiatesUri")) {
2371          throw new FHIRException("Cannot call addChild on a primitive type Procedure.instantiatesUri");
2372        }
2373        else if (name.equals("basedOn")) {
2374          return addBasedOn();
2375        }
2376        else if (name.equals("partOf")) {
2377          return addPartOf();
2378        }
2379        else if (name.equals("status")) {
2380          throw new FHIRException("Cannot call addChild on a primitive type Procedure.status");
2381        }
2382        else if (name.equals("statusReason")) {
2383          this.statusReason = new CodeableConcept();
2384          return this.statusReason;
2385        }
2386        else if (name.equals("category")) {
2387          this.category = new CodeableConcept();
2388          return this.category;
2389        }
2390        else if (name.equals("code")) {
2391          this.code = new CodeableConcept();
2392          return this.code;
2393        }
2394        else if (name.equals("subject")) {
2395          this.subject = new Reference();
2396          return this.subject;
2397        }
2398        else if (name.equals("encounter")) {
2399          this.encounter = new Reference();
2400          return this.encounter;
2401        }
2402        else if (name.equals("performedDateTime")) {
2403          this.performed = new DateTimeType();
2404          return this.performed;
2405        }
2406        else if (name.equals("performedPeriod")) {
2407          this.performed = new Period();
2408          return this.performed;
2409        }
2410        else if (name.equals("performedString")) {
2411          this.performed = new StringType();
2412          return this.performed;
2413        }
2414        else if (name.equals("performedAge")) {
2415          this.performed = new Age();
2416          return this.performed;
2417        }
2418        else if (name.equals("performedRange")) {
2419          this.performed = new Range();
2420          return this.performed;
2421        }
2422        else if (name.equals("recorder")) {
2423          this.recorder = new Reference();
2424          return this.recorder;
2425        }
2426        else if (name.equals("asserter")) {
2427          this.asserter = new Reference();
2428          return this.asserter;
2429        }
2430        else if (name.equals("performer")) {
2431          return addPerformer();
2432        }
2433        else if (name.equals("location")) {
2434          this.location = new Reference();
2435          return this.location;
2436        }
2437        else if (name.equals("reasonCode")) {
2438          return addReasonCode();
2439        }
2440        else if (name.equals("reasonReference")) {
2441          return addReasonReference();
2442        }
2443        else if (name.equals("bodySite")) {
2444          return addBodySite();
2445        }
2446        else if (name.equals("outcome")) {
2447          this.outcome = new CodeableConcept();
2448          return this.outcome;
2449        }
2450        else if (name.equals("report")) {
2451          return addReport();
2452        }
2453        else if (name.equals("complication")) {
2454          return addComplication();
2455        }
2456        else if (name.equals("complicationDetail")) {
2457          return addComplicationDetail();
2458        }
2459        else if (name.equals("followUp")) {
2460          return addFollowUp();
2461        }
2462        else if (name.equals("note")) {
2463          return addNote();
2464        }
2465        else if (name.equals("focalDevice")) {
2466          return addFocalDevice();
2467        }
2468        else if (name.equals("usedReference")) {
2469          return addUsedReference();
2470        }
2471        else if (name.equals("usedCode")) {
2472          return addUsedCode();
2473        }
2474        else
2475          return super.addChild(name);
2476      }
2477
2478  public String fhirType() {
2479    return "Procedure";
2480
2481  }
2482
2483      public Procedure copy() {
2484        Procedure dst = new Procedure();
2485        copyValues(dst);
2486        return dst;
2487      }
2488
2489      public void copyValues(Procedure dst) {
2490        super.copyValues(dst);
2491        if (identifier != null) {
2492          dst.identifier = new ArrayList<Identifier>();
2493          for (Identifier i : identifier)
2494            dst.identifier.add(i.copy());
2495        };
2496        if (instantiatesCanonical != null) {
2497          dst.instantiatesCanonical = new ArrayList<CanonicalType>();
2498          for (CanonicalType i : instantiatesCanonical)
2499            dst.instantiatesCanonical.add(i.copy());
2500        };
2501        if (instantiatesUri != null) {
2502          dst.instantiatesUri = new ArrayList<UriType>();
2503          for (UriType i : instantiatesUri)
2504            dst.instantiatesUri.add(i.copy());
2505        };
2506        if (basedOn != null) {
2507          dst.basedOn = new ArrayList<Reference>();
2508          for (Reference i : basedOn)
2509            dst.basedOn.add(i.copy());
2510        };
2511        if (partOf != null) {
2512          dst.partOf = new ArrayList<Reference>();
2513          for (Reference i : partOf)
2514            dst.partOf.add(i.copy());
2515        };
2516        dst.status = status == null ? null : status.copy();
2517        dst.statusReason = statusReason == null ? null : statusReason.copy();
2518        dst.category = category == null ? null : category.copy();
2519        dst.code = code == null ? null : code.copy();
2520        dst.subject = subject == null ? null : subject.copy();
2521        dst.encounter = encounter == null ? null : encounter.copy();
2522        dst.performed = performed == null ? null : performed.copy();
2523        dst.recorder = recorder == null ? null : recorder.copy();
2524        dst.asserter = asserter == null ? null : asserter.copy();
2525        if (performer != null) {
2526          dst.performer = new ArrayList<ProcedurePerformerComponent>();
2527          for (ProcedurePerformerComponent i : performer)
2528            dst.performer.add(i.copy());
2529        };
2530        dst.location = location == null ? null : location.copy();
2531        if (reasonCode != null) {
2532          dst.reasonCode = new ArrayList<CodeableConcept>();
2533          for (CodeableConcept i : reasonCode)
2534            dst.reasonCode.add(i.copy());
2535        };
2536        if (reasonReference != null) {
2537          dst.reasonReference = new ArrayList<Reference>();
2538          for (Reference i : reasonReference)
2539            dst.reasonReference.add(i.copy());
2540        };
2541        if (bodySite != null) {
2542          dst.bodySite = new ArrayList<CodeableConcept>();
2543          for (CodeableConcept i : bodySite)
2544            dst.bodySite.add(i.copy());
2545        };
2546        dst.outcome = outcome == null ? null : outcome.copy();
2547        if (report != null) {
2548          dst.report = new ArrayList<Reference>();
2549          for (Reference i : report)
2550            dst.report.add(i.copy());
2551        };
2552        if (complication != null) {
2553          dst.complication = new ArrayList<CodeableConcept>();
2554          for (CodeableConcept i : complication)
2555            dst.complication.add(i.copy());
2556        };
2557        if (complicationDetail != null) {
2558          dst.complicationDetail = new ArrayList<Reference>();
2559          for (Reference i : complicationDetail)
2560            dst.complicationDetail.add(i.copy());
2561        };
2562        if (followUp != null) {
2563          dst.followUp = new ArrayList<CodeableConcept>();
2564          for (CodeableConcept i : followUp)
2565            dst.followUp.add(i.copy());
2566        };
2567        if (note != null) {
2568          dst.note = new ArrayList<Annotation>();
2569          for (Annotation i : note)
2570            dst.note.add(i.copy());
2571        };
2572        if (focalDevice != null) {
2573          dst.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
2574          for (ProcedureFocalDeviceComponent i : focalDevice)
2575            dst.focalDevice.add(i.copy());
2576        };
2577        if (usedReference != null) {
2578          dst.usedReference = new ArrayList<Reference>();
2579          for (Reference i : usedReference)
2580            dst.usedReference.add(i.copy());
2581        };
2582        if (usedCode != null) {
2583          dst.usedCode = new ArrayList<CodeableConcept>();
2584          for (CodeableConcept i : usedCode)
2585            dst.usedCode.add(i.copy());
2586        };
2587      }
2588
2589      protected Procedure typedCopy() {
2590        return copy();
2591      }
2592
2593      @Override
2594      public boolean equalsDeep(Base other_) {
2595        if (!super.equalsDeep(other_))
2596          return false;
2597        if (!(other_ instanceof Procedure))
2598          return false;
2599        Procedure o = (Procedure) other_;
2600        return compareDeep(identifier, o.identifier, true) && compareDeep(instantiatesCanonical, o.instantiatesCanonical, true)
2601           && compareDeep(instantiatesUri, o.instantiatesUri, true) && compareDeep(basedOn, o.basedOn, true)
2602           && compareDeep(partOf, o.partOf, true) && compareDeep(status, o.status, true) && compareDeep(statusReason, o.statusReason, true)
2603           && compareDeep(category, o.category, true) && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true)
2604           && compareDeep(encounter, o.encounter, true) && compareDeep(performed, o.performed, true) && compareDeep(recorder, o.recorder, true)
2605           && compareDeep(asserter, o.asserter, true) && compareDeep(performer, o.performer, true) && compareDeep(location, o.location, true)
2606           && compareDeep(reasonCode, o.reasonCode, true) && compareDeep(reasonReference, o.reasonReference, true)
2607           && compareDeep(bodySite, o.bodySite, true) && compareDeep(outcome, o.outcome, true) && compareDeep(report, o.report, true)
2608           && compareDeep(complication, o.complication, true) && compareDeep(complicationDetail, o.complicationDetail, true)
2609           && compareDeep(followUp, o.followUp, true) && compareDeep(note, o.note, true) && compareDeep(focalDevice, o.focalDevice, true)
2610           && compareDeep(usedReference, o.usedReference, true) && compareDeep(usedCode, o.usedCode, true)
2611          ;
2612      }
2613
2614      @Override
2615      public boolean equalsShallow(Base other_) {
2616        if (!super.equalsShallow(other_))
2617          return false;
2618        if (!(other_ instanceof Procedure))
2619          return false;
2620        Procedure o = (Procedure) other_;
2621        return compareValues(instantiatesCanonical, o.instantiatesCanonical, true) && compareValues(instantiatesUri, o.instantiatesUri, true)
2622           && compareValues(status, o.status, true);
2623      }
2624
2625      public boolean isEmpty() {
2626        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, instantiatesCanonical
2627          , instantiatesUri, basedOn, partOf, status, statusReason, category, code, subject
2628          , encounter, performed, recorder, asserter, performer, location, reasonCode, reasonReference
2629          , bodySite, outcome, report, complication, complicationDetail, followUp, note
2630          , focalDevice, usedReference, usedCode);
2631      }
2632
2633  @Override
2634  public ResourceType getResourceType() {
2635    return ResourceType.Procedure;
2636   }
2637
2638 /**
2639   * Search parameter: <b>based-on</b>
2640   * <p>
2641   * Description: <b>A request for this procedure</b><br>
2642   * Type: <b>reference</b><br>
2643   * Path: <b>Procedure.basedOn</b><br>
2644   * </p>
2645   */
2646  @SearchParamDefinition(name="based-on", path="Procedure.basedOn", description="A request for this procedure", type="reference", target={CarePlan.class, ServiceRequest.class } )
2647  public static final String SP_BASED_ON = "based-on";
2648 /**
2649   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
2650   * <p>
2651   * Description: <b>A request for this procedure</b><br>
2652   * Type: <b>reference</b><br>
2653   * Path: <b>Procedure.basedOn</b><br>
2654   * </p>
2655   */
2656  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
2657
2658/**
2659   * Constant for fluent queries to be used to add include statements. Specifies
2660   * the path value of "<b>Procedure:based-on</b>".
2661   */
2662  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("Procedure:based-on").toLocked();
2663
2664 /**
2665   * Search parameter: <b>category</b>
2666   * <p>
2667   * Description: <b>Classification of the procedure</b><br>
2668   * Type: <b>token</b><br>
2669   * Path: <b>Procedure.category</b><br>
2670   * </p>
2671   */
2672  @SearchParamDefinition(name="category", path="Procedure.category", description="Classification of the procedure", type="token" )
2673  public static final String SP_CATEGORY = "category";
2674 /**
2675   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2676   * <p>
2677   * Description: <b>Classification of the procedure</b><br>
2678   * Type: <b>token</b><br>
2679   * Path: <b>Procedure.category</b><br>
2680   * </p>
2681   */
2682  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2683
2684 /**
2685   * Search parameter: <b>instantiates-canonical</b>
2686   * <p>
2687   * Description: <b>Instantiates FHIR protocol or definition</b><br>
2688   * Type: <b>reference</b><br>
2689   * Path: <b>Procedure.instantiatesCanonical</b><br>
2690   * </p>
2691   */
2692  @SearchParamDefinition(name="instantiates-canonical", path="Procedure.instantiatesCanonical", description="Instantiates FHIR protocol or definition", type="reference", target={ActivityDefinition.class, Measure.class, OperationDefinition.class, PlanDefinition.class, Questionnaire.class } )
2693  public static final String SP_INSTANTIATES_CANONICAL = "instantiates-canonical";
2694 /**
2695   * <b>Fluent Client</b> search parameter constant for <b>instantiates-canonical</b>
2696   * <p>
2697   * Description: <b>Instantiates FHIR protocol or definition</b><br>
2698   * Type: <b>reference</b><br>
2699   * Path: <b>Procedure.instantiatesCanonical</b><br>
2700   * </p>
2701   */
2702  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INSTANTIATES_CANONICAL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INSTANTIATES_CANONICAL);
2703
2704/**
2705   * Constant for fluent queries to be used to add include statements. Specifies
2706   * the path value of "<b>Procedure:instantiates-canonical</b>".
2707   */
2708  public static final ca.uhn.fhir.model.api.Include INCLUDE_INSTANTIATES_CANONICAL = new ca.uhn.fhir.model.api.Include("Procedure:instantiates-canonical").toLocked();
2709
2710 /**
2711   * Search parameter: <b>instantiates-uri</b>
2712   * <p>
2713   * Description: <b>Instantiates external protocol or definition</b><br>
2714   * Type: <b>uri</b><br>
2715   * Path: <b>Procedure.instantiatesUri</b><br>
2716   * </p>
2717   */
2718  @SearchParamDefinition(name="instantiates-uri", path="Procedure.instantiatesUri", description="Instantiates external protocol or definition", type="uri" )
2719  public static final String SP_INSTANTIATES_URI = "instantiates-uri";
2720 /**
2721   * <b>Fluent Client</b> search parameter constant for <b>instantiates-uri</b>
2722   * <p>
2723   * Description: <b>Instantiates external protocol or definition</b><br>
2724   * Type: <b>uri</b><br>
2725   * Path: <b>Procedure.instantiatesUri</b><br>
2726   * </p>
2727   */
2728  public static final ca.uhn.fhir.rest.gclient.UriClientParam INSTANTIATES_URI = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_INSTANTIATES_URI);
2729
2730 /**
2731   * Search parameter: <b>location</b>
2732   * <p>
2733   * Description: <b>Where the procedure happened</b><br>
2734   * Type: <b>reference</b><br>
2735   * Path: <b>Procedure.location</b><br>
2736   * </p>
2737   */
2738  @SearchParamDefinition(name="location", path="Procedure.location", description="Where the procedure happened", type="reference", target={Location.class } )
2739  public static final String SP_LOCATION = "location";
2740 /**
2741   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2742   * <p>
2743   * Description: <b>Where the procedure happened</b><br>
2744   * Type: <b>reference</b><br>
2745   * Path: <b>Procedure.location</b><br>
2746   * </p>
2747   */
2748  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
2749
2750/**
2751   * Constant for fluent queries to be used to add include statements. Specifies
2752   * the path value of "<b>Procedure:location</b>".
2753   */
2754  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("Procedure:location").toLocked();
2755
2756 /**
2757   * Search parameter: <b>part-of</b>
2758   * <p>
2759   * Description: <b>Part of referenced event</b><br>
2760   * Type: <b>reference</b><br>
2761   * Path: <b>Procedure.partOf</b><br>
2762   * </p>
2763   */
2764  @SearchParamDefinition(name="part-of", path="Procedure.partOf", description="Part of referenced event", type="reference", target={MedicationAdministration.class, Observation.class, Procedure.class } )
2765  public static final String SP_PART_OF = "part-of";
2766 /**
2767   * <b>Fluent Client</b> search parameter constant for <b>part-of</b>
2768   * <p>
2769   * Description: <b>Part of referenced event</b><br>
2770   * Type: <b>reference</b><br>
2771   * Path: <b>Procedure.partOf</b><br>
2772   * </p>
2773   */
2774  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PART_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PART_OF);
2775
2776/**
2777   * Constant for fluent queries to be used to add include statements. Specifies
2778   * the path value of "<b>Procedure:part-of</b>".
2779   */
2780  public static final ca.uhn.fhir.model.api.Include INCLUDE_PART_OF = new ca.uhn.fhir.model.api.Include("Procedure:part-of").toLocked();
2781
2782 /**
2783   * Search parameter: <b>performer</b>
2784   * <p>
2785   * Description: <b>The reference to the practitioner</b><br>
2786   * Type: <b>reference</b><br>
2787   * Path: <b>Procedure.performer.actor</b><br>
2788   * </p>
2789   */
2790  @SearchParamDefinition(name="performer", path="Procedure.performer.actor", description="The reference to the practitioner", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2791  public static final String SP_PERFORMER = "performer";
2792 /**
2793   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
2794   * <p>
2795   * Description: <b>The reference to the practitioner</b><br>
2796   * Type: <b>reference</b><br>
2797   * Path: <b>Procedure.performer.actor</b><br>
2798   * </p>
2799   */
2800  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
2801
2802/**
2803   * Constant for fluent queries to be used to add include statements. Specifies
2804   * the path value of "<b>Procedure:performer</b>".
2805   */
2806  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("Procedure:performer").toLocked();
2807
2808 /**
2809   * Search parameter: <b>reason-code</b>
2810   * <p>
2811   * Description: <b>Coded reason procedure performed</b><br>
2812   * Type: <b>token</b><br>
2813   * Path: <b>Procedure.reasonCode</b><br>
2814   * </p>
2815   */
2816  @SearchParamDefinition(name="reason-code", path="Procedure.reasonCode", description="Coded reason procedure performed", type="token" )
2817  public static final String SP_REASON_CODE = "reason-code";
2818 /**
2819   * <b>Fluent Client</b> search parameter constant for <b>reason-code</b>
2820   * <p>
2821   * Description: <b>Coded reason procedure performed</b><br>
2822   * Type: <b>token</b><br>
2823   * Path: <b>Procedure.reasonCode</b><br>
2824   * </p>
2825   */
2826  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REASON_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_REASON_CODE);
2827
2828 /**
2829   * Search parameter: <b>reason-reference</b>
2830   * <p>
2831   * Description: <b>The justification that the procedure was performed</b><br>
2832   * Type: <b>reference</b><br>
2833   * Path: <b>Procedure.reasonReference</b><br>
2834   * </p>
2835   */
2836  @SearchParamDefinition(name="reason-reference", path="Procedure.reasonReference", description="The justification that the procedure was performed", type="reference", target={Condition.class, DiagnosticReport.class, DocumentReference.class, Observation.class, Procedure.class } )
2837  public static final String SP_REASON_REFERENCE = "reason-reference";
2838 /**
2839   * <b>Fluent Client</b> search parameter constant for <b>reason-reference</b>
2840   * <p>
2841   * Description: <b>The justification that the procedure was performed</b><br>
2842   * Type: <b>reference</b><br>
2843   * Path: <b>Procedure.reasonReference</b><br>
2844   * </p>
2845   */
2846  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REASON_REFERENCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REASON_REFERENCE);
2847
2848/**
2849   * Constant for fluent queries to be used to add include statements. Specifies
2850   * the path value of "<b>Procedure:reason-reference</b>".
2851   */
2852  public static final ca.uhn.fhir.model.api.Include INCLUDE_REASON_REFERENCE = new ca.uhn.fhir.model.api.Include("Procedure:reason-reference").toLocked();
2853
2854 /**
2855   * Search parameter: <b>status</b>
2856   * <p>
2857   * Description: <b>preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown</b><br>
2858   * Type: <b>token</b><br>
2859   * Path: <b>Procedure.status</b><br>
2860   * </p>
2861   */
2862  @SearchParamDefinition(name="status", path="Procedure.status", description="preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown", type="token" )
2863  public static final String SP_STATUS = "status";
2864 /**
2865   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2866   * <p>
2867   * Description: <b>preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown</b><br>
2868   * Type: <b>token</b><br>
2869   * Path: <b>Procedure.status</b><br>
2870   * </p>
2871   */
2872  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2873
2874 /**
2875   * Search parameter: <b>subject</b>
2876   * <p>
2877   * Description: <b>Search by subject</b><br>
2878   * Type: <b>reference</b><br>
2879   * Path: <b>Procedure.subject</b><br>
2880   * </p>
2881   */
2882  @SearchParamDefinition(name="subject", path="Procedure.subject", description="Search by subject", type="reference", target={Group.class, Patient.class } )
2883  public static final String SP_SUBJECT = "subject";
2884 /**
2885   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2886   * <p>
2887   * Description: <b>Search by subject</b><br>
2888   * Type: <b>reference</b><br>
2889   * Path: <b>Procedure.subject</b><br>
2890   * </p>
2891   */
2892  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2893
2894/**
2895   * Constant for fluent queries to be used to add include statements. Specifies
2896   * the path value of "<b>Procedure:subject</b>".
2897   */
2898  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Procedure:subject").toLocked();
2899
2900 /**
2901   * Search parameter: <b>code</b>
2902   * <p>
2903   * Description: <b>Multiple Resources: 
2904
2905* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance
2906* [Condition](condition.html): Code for the condition
2907* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered
2908* [DiagnosticReport](diagnosticreport.html): The code for the report, as opposed to codes for the atomic results, which are the names on the observation resource referred to from the result
2909* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code
2910* [List](list.html): What the purpose of this list is
2911* [Medication](medication.html): Returns medications for a specific code
2912* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code
2913* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code
2914* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code
2915* [MedicationStatement](medicationstatement.html): Return statements of this medication code
2916* [Observation](observation.html): The code of the observation type
2917* [Procedure](procedure.html): A code to identify a  procedure
2918* [ServiceRequest](servicerequest.html): What is being requested/ordered
2919</b><br>
2920   * Type: <b>token</b><br>
2921   * Path: <b>AllergyIntolerance.code | AllergyIntolerance.reaction.substance | Condition.code | (DeviceRequest.code as CodeableConcept) | DiagnosticReport.code | FamilyMemberHistory.condition.code | List.code | Medication.code | (MedicationAdministration.medication as CodeableConcept) | (MedicationDispense.medication as CodeableConcept) | (MedicationRequest.medication as CodeableConcept) | (MedicationStatement.medication as CodeableConcept) | Observation.code | Procedure.code | ServiceRequest.code</b><br>
2922   * </p>
2923   */
2924  @SearchParamDefinition(name="code", path="AllergyIntolerance.code | AllergyIntolerance.reaction.substance | Condition.code | (DeviceRequest.code as CodeableConcept) | DiagnosticReport.code | FamilyMemberHistory.condition.code | List.code | Medication.code | (MedicationAdministration.medication as CodeableConcept) | (MedicationDispense.medication as CodeableConcept) | (MedicationRequest.medication as CodeableConcept) | (MedicationStatement.medication as CodeableConcept) | Observation.code | Procedure.code | ServiceRequest.code", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance\r\n* [Condition](condition.html): Code for the condition\r\n* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered\r\n* [DiagnosticReport](diagnosticreport.html): The code for the report, as opposed to codes for the atomic results, which are the names on the observation resource referred to from the result\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code\r\n* [List](list.html): What the purpose of this list is\r\n* [Medication](medication.html): Returns medications for a specific code\r\n* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code\r\n* [MedicationStatement](medicationstatement.html): Return statements of this medication code\r\n* [Observation](observation.html): The code of the observation type\r\n* [Procedure](procedure.html): A code to identify a  procedure\r\n* [ServiceRequest](servicerequest.html): What is being requested/ordered\r\n", type="token" )
2925  public static final String SP_CODE = "code";
2926 /**
2927   * <b>Fluent Client</b> search parameter constant for <b>code</b>
2928   * <p>
2929   * Description: <b>Multiple Resources: 
2930
2931* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance
2932* [Condition](condition.html): Code for the condition
2933* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered
2934* [DiagnosticReport](diagnosticreport.html): The code for the report, as opposed to codes for the atomic results, which are the names on the observation resource referred to from the result
2935* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code
2936* [List](list.html): What the purpose of this list is
2937* [Medication](medication.html): Returns medications for a specific code
2938* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code
2939* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code
2940* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code
2941* [MedicationStatement](medicationstatement.html): Return statements of this medication code
2942* [Observation](observation.html): The code of the observation type
2943* [Procedure](procedure.html): A code to identify a  procedure
2944* [ServiceRequest](servicerequest.html): What is being requested/ordered
2945</b><br>
2946   * Type: <b>token</b><br>
2947   * Path: <b>AllergyIntolerance.code | AllergyIntolerance.reaction.substance | Condition.code | (DeviceRequest.code as CodeableConcept) | DiagnosticReport.code | FamilyMemberHistory.condition.code | List.code | Medication.code | (MedicationAdministration.medication as CodeableConcept) | (MedicationDispense.medication as CodeableConcept) | (MedicationRequest.medication as CodeableConcept) | (MedicationStatement.medication as CodeableConcept) | Observation.code | Procedure.code | ServiceRequest.code</b><br>
2948   * </p>
2949   */
2950  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
2951
2952 /**
2953   * Search parameter: <b>date</b>
2954   * <p>
2955   * Description: <b>Multiple Resources: 
2956
2957* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
2958* [CarePlan](careplan.html): Time period plan covers
2959* [CareTeam](careteam.html): Time period team covers
2960* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
2961* [Composition](composition.html): Composition editing time
2962* [Consent](consent.html): When this Consent was created or indexed
2963* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
2964* [Encounter](encounter.html): A date within the period the Encounter lasted
2965* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
2966* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
2967* [Flag](flag.html): Time period when flag is active
2968* [Immunization](immunization.html): Vaccination  (non)-Administration Date
2969* [List](list.html): When the list was prepared
2970* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
2971* [Procedure](procedure.html): When the procedure was performed
2972* [RiskAssessment](riskassessment.html): When was assessment made?
2973* [SupplyRequest](supplyrequest.html): When the request was made
2974</b><br>
2975   * Type: <b>date</b><br>
2976   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
2977   * </p>
2978   */
2979  @SearchParamDefinition(name="date", path="AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded\r\n* [CarePlan](careplan.html): Time period plan covers\r\n* [CareTeam](careteam.html): Time period team covers\r\n* [ClinicalImpression](clinicalimpression.html): When the assessment was documented\r\n* [Composition](composition.html): Composition editing time\r\n* [Consent](consent.html): When this Consent was created or indexed\r\n* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report\r\n* [Encounter](encounter.html): A date within the period the Encounter lasted\r\n* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period\r\n* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated\r\n* [Flag](flag.html): Time period when flag is active\r\n* [Immunization](immunization.html): Vaccination  (non)-Administration Date\r\n* [List](list.html): When the list was prepared\r\n* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period\r\n* [Procedure](procedure.html): When the procedure was performed\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
2980  public static final String SP_DATE = "date";
2981 /**
2982   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2983   * <p>
2984   * Description: <b>Multiple Resources: 
2985
2986* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
2987* [CarePlan](careplan.html): Time period plan covers
2988* [CareTeam](careteam.html): Time period team covers
2989* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
2990* [Composition](composition.html): Composition editing time
2991* [Consent](consent.html): When this Consent was created or indexed
2992* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
2993* [Encounter](encounter.html): A date within the period the Encounter lasted
2994* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
2995* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
2996* [Flag](flag.html): Time period when flag is active
2997* [Immunization](immunization.html): Vaccination  (non)-Administration Date
2998* [List](list.html): When the list was prepared
2999* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3000* [Procedure](procedure.html): When the procedure was performed
3001* [RiskAssessment](riskassessment.html): When was assessment made?
3002* [SupplyRequest](supplyrequest.html): When the request was made
3003</b><br>
3004   * Type: <b>date</b><br>
3005   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3006   * </p>
3007   */
3008  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3009
3010 /**
3011   * Search parameter: <b>encounter</b>
3012   * <p>
3013   * Description: <b>Multiple Resources: 
3014
3015* [Composition](composition.html): Context of the Composition
3016* [DeviceRequest](devicerequest.html): Encounter during which request was created
3017* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
3018* [DocumentReference](documentreference.html): Context of the document  content
3019* [Flag](flag.html): Alert relevant during encounter
3020* [List](list.html): Context in which list created
3021* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
3022* [Observation](observation.html): Encounter related to the observation
3023* [Procedure](procedure.html): Encounter created as part of
3024* [RiskAssessment](riskassessment.html): Where was assessment performed?
3025* [ServiceRequest](servicerequest.html): An encounter in which this request is made
3026* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
3027</b><br>
3028   * Type: <b>reference</b><br>
3029   * Path: <b>Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | DocumentReference.context.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter</b><br>
3030   * </p>
3031   */
3032  @SearchParamDefinition(name="encounter", path="Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | DocumentReference.context.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter", description="Multiple Resources: \r\n\r\n* [Composition](composition.html): Context of the Composition\r\n* [DeviceRequest](devicerequest.html): Encounter during which request was created\r\n* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made\r\n* [DocumentReference](documentreference.html): Context of the document  content\r\n* [Flag](flag.html): Alert relevant during encounter\r\n* [List](list.html): Context in which list created\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier\r\n* [Observation](observation.html): Encounter related to the observation\r\n* [Procedure](procedure.html): Encounter created as part of\r\n* [RiskAssessment](riskassessment.html): Where was assessment performed?\r\n* [ServiceRequest](servicerequest.html): An encounter in which this request is made\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier\r\n", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Encounter") }, target={Encounter.class, EpisodeOfCare.class } )
3033  public static final String SP_ENCOUNTER = "encounter";
3034 /**
3035   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
3036   * <p>
3037   * Description: <b>Multiple Resources: 
3038
3039* [Composition](composition.html): Context of the Composition
3040* [DeviceRequest](devicerequest.html): Encounter during which request was created
3041* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
3042* [DocumentReference](documentreference.html): Context of the document  content
3043* [Flag](flag.html): Alert relevant during encounter
3044* [List](list.html): Context in which list created
3045* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
3046* [Observation](observation.html): Encounter related to the observation
3047* [Procedure](procedure.html): Encounter created as part of
3048* [RiskAssessment](riskassessment.html): Where was assessment performed?
3049* [ServiceRequest](servicerequest.html): An encounter in which this request is made
3050* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
3051</b><br>
3052   * Type: <b>reference</b><br>
3053   * Path: <b>Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | DocumentReference.context.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter</b><br>
3054   * </p>
3055   */
3056  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
3057
3058/**
3059   * Constant for fluent queries to be used to add include statements. Specifies
3060   * the path value of "<b>Procedure:encounter</b>".
3061   */
3062  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Procedure:encounter").toLocked();
3063
3064 /**
3065   * Search parameter: <b>identifier</b>
3066   * <p>
3067   * Description: <b>Multiple Resources: 
3068
3069* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3070* [CarePlan](careplan.html): External Ids for this plan
3071* [CareTeam](careteam.html): External Ids for this team
3072* [Composition](composition.html): Version-independent identifier for the Composition
3073* [Condition](condition.html): A unique identifier of the condition record
3074* [Consent](consent.html): Identifier for this record (external references)
3075* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3076* [DeviceRequest](devicerequest.html): Business identifier for request/order
3077* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3078* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3079* [DocumentReference](documentreference.html): Master Version Specific Identifier
3080* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3081* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3082* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3083* [Goal](goal.html): External Ids for this goal
3084* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number
3085* [Immunization](immunization.html): Business identifier
3086* [List](list.html): Business identifier
3087* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3088* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3089* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3090* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
3091* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3092* [Observation](observation.html): The unique id for a particular observation
3093* [Procedure](procedure.html): A unique identifier for a procedure
3094* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3095* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3096* [SupplyDelivery](supplydelivery.html): External identifier
3097* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3098* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3099</b><br>
3100   * Type: <b>token</b><br>
3101   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3102   * </p>
3103   */
3104  @SearchParamDefinition(name="identifier", path="AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): External ids for this item\r\n* [CarePlan](careplan.html): External Ids for this plan\r\n* [CareTeam](careteam.html): External Ids for this team\r\n* [Composition](composition.html): Version-independent identifier for the Composition\r\n* [Condition](condition.html): A unique identifier of the condition record\r\n* [Consent](consent.html): Identifier for this record (external references)\r\n* [DetectedIssue](detectedissue.html): Unique id for the detected issue\r\n* [DeviceRequest](devicerequest.html): Business identifier for request/order\r\n* [DiagnosticReport](diagnosticreport.html): An identifier for the report\r\n* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents\r\n* [DocumentReference](documentreference.html): Master Version Specific Identifier\r\n* [Encounter](encounter.html): Identifier(s) by which this encounter is known\r\n* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier\r\n* [Goal](goal.html): External Ids for this goal\r\n* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number\r\n* [Immunization](immunization.html): Business identifier\r\n* [List](list.html): Business identifier\r\n* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier\r\n* [MedicationStatement](medicationstatement.html): Return statements with this external identifier\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier\r\n* [Observation](observation.html): The unique id for a particular observation\r\n* [Procedure](procedure.html): A unique identifier for a procedure\r\n* [RiskAssessment](riskassessment.html): Unique identifier for the assessment\r\n* [ServiceRequest](servicerequest.html): Identifiers assigned to this order\r\n* [SupplyDelivery](supplydelivery.html): External identifier\r\n* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier\r\n", type="token" )
3105  public static final String SP_IDENTIFIER = "identifier";
3106 /**
3107   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3108   * <p>
3109   * Description: <b>Multiple Resources: 
3110
3111* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3112* [CarePlan](careplan.html): External Ids for this plan
3113* [CareTeam](careteam.html): External Ids for this team
3114* [Composition](composition.html): Version-independent identifier for the Composition
3115* [Condition](condition.html): A unique identifier of the condition record
3116* [Consent](consent.html): Identifier for this record (external references)
3117* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3118* [DeviceRequest](devicerequest.html): Business identifier for request/order
3119* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3120* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3121* [DocumentReference](documentreference.html): Master Version Specific Identifier
3122* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3123* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3124* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3125* [Goal](goal.html): External Ids for this goal
3126* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number
3127* [Immunization](immunization.html): Business identifier
3128* [List](list.html): Business identifier
3129* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3130* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3131* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3132* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
3133* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3134* [Observation](observation.html): The unique id for a particular observation
3135* [Procedure](procedure.html): A unique identifier for a procedure
3136* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3137* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3138* [SupplyDelivery](supplydelivery.html): External identifier
3139* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3140* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3141</b><br>
3142   * Type: <b>token</b><br>
3143   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3144   * </p>
3145   */
3146  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3147
3148 /**
3149   * Search parameter: <b>patient</b>
3150   * <p>
3151   * Description: <b>Multiple Resources: 
3152
3153* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3154* [CarePlan](careplan.html): Who the care plan is for
3155* [CareTeam](careteam.html): Who care team is for
3156* [ClinicalImpression](clinicalimpression.html): Patient or group assessed
3157* [Composition](composition.html): Who and/or what the composition is about
3158* [Condition](condition.html): Who has the condition?
3159* [Consent](consent.html): Who the consent applies to
3160* [DetectedIssue](detectedissue.html): Associated patient
3161* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3162* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient
3163* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3164* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3165* [DocumentReference](documentreference.html): Who/what is the subject of the document
3166* [Encounter](encounter.html): The patient or group present at the encounter
3167* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3168* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3169* [Flag](flag.html): The identity of a subject to list flags for
3170* [Goal](goal.html): Who this goal is intended for
3171* [ImagingStudy](imagingstudy.html): Who the study is about
3172* [Immunization](immunization.html): The patient for the vaccination record
3173* [List](list.html): If all resources have the same subject
3174* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3175* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3176* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3177* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
3178* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3179* [Observation](observation.html): The subject that the observation is about (if patient)
3180* [Procedure](procedure.html): Search by subject - a patient
3181* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3182* [ServiceRequest](servicerequest.html): Search by subject - a patient
3183* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3184* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3185</b><br>
3186   * Type: <b>reference</b><br>
3187   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
3188   * </p>
3189   */
3190  @SearchParamDefinition(name="patient", path="AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for\r\n* [CarePlan](careplan.html): Who the care plan is for\r\n* [CareTeam](careteam.html): Who care team is for\r\n* [ClinicalImpression](clinicalimpression.html): Patient or group assessed\r\n* [Composition](composition.html): Who and/or what the composition is about\r\n* [Condition](condition.html): Who has the condition?\r\n* [Consent](consent.html): Who the consent applies to\r\n* [DetectedIssue](detectedissue.html): Associated patient\r\n* [DeviceRequest](devicerequest.html): Individual the service is ordered for\r\n* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient\r\n* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient\r\n* [DocumentManifest](documentmanifest.html): The subject of the set of documents\r\n* [DocumentReference](documentreference.html): Who/what is the subject of the document\r\n* [Encounter](encounter.html): The patient or group present at the encounter\r\n* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care\r\n* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for\r\n* [Flag](flag.html): The identity of a subject to list flags for\r\n* [Goal](goal.html): Who this goal is intended for\r\n* [ImagingStudy](imagingstudy.html): Who the study is about\r\n* [Immunization](immunization.html): The patient for the vaccination record\r\n* [List](list.html): If all resources have the same subject\r\n* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for\r\n* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for\r\n* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient\r\n* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.\r\n* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement\r\n* [Observation](observation.html): The subject that the observation is about (if patient)\r\n* [Procedure](procedure.html): Search by subject - a patient\r\n* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?\r\n* [ServiceRequest](servicerequest.html): Search by subject - a patient\r\n* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied\r\n* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for\r\n", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Account.class, ActivityDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, CatalogEntry.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceMetric.class, DeviceRequest.class, DeviceUseStatement.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Media.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestGroup.class, ResearchDefinition.class, ResearchElementDefinition.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3191  public static final String SP_PATIENT = "patient";
3192 /**
3193   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3194   * <p>
3195   * Description: <b>Multiple Resources: 
3196
3197* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3198* [CarePlan](careplan.html): Who the care plan is for
3199* [CareTeam](careteam.html): Who care team is for
3200* [ClinicalImpression](clinicalimpression.html): Patient or group assessed
3201* [Composition](composition.html): Who and/or what the composition is about
3202* [Condition](condition.html): Who has the condition?
3203* [Consent](consent.html): Who the consent applies to
3204* [DetectedIssue](detectedissue.html): Associated patient
3205* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3206* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient
3207* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3208* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3209* [DocumentReference](documentreference.html): Who/what is the subject of the document
3210* [Encounter](encounter.html): The patient or group present at the encounter
3211* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3212* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3213* [Flag](flag.html): The identity of a subject to list flags for
3214* [Goal](goal.html): Who this goal is intended for
3215* [ImagingStudy](imagingstudy.html): Who the study is about
3216* [Immunization](immunization.html): The patient for the vaccination record
3217* [List](list.html): If all resources have the same subject
3218* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3219* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3220* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3221* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
3222* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3223* [Observation](observation.html): The subject that the observation is about (if patient)
3224* [Procedure](procedure.html): Search by subject - a patient
3225* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3226* [ServiceRequest](servicerequest.html): Search by subject - a patient
3227* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3228* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3229</b><br>
3230   * Type: <b>reference</b><br>
3231   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
3232   * </p>
3233   */
3234  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3235
3236/**
3237   * Constant for fluent queries to be used to add include statements. Specifies
3238   * the path value of "<b>Procedure:patient</b>".
3239   */
3240  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Procedure:patient").toLocked();
3241
3242
3243}
3244