001package org.hl7.fhir.r5.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, Jul 15, 2022 11:20+1000 for FHIR v5.0.0-snapshot2
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.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, practitioner, device, organization, or location. For example, this can be a physical intervention on a patient like an operation, or less invasive like long term services, counseling, or hypnotherapy.  This can be a quality or safety inspection for a location, organization, or device.  This can be an accreditation procedure on a practitioner for licensing.
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         * Indicates who or what performed the procedure.
068         */
069        @Child(name = "actor", type = {Practitioner.class, PractitionerRole.class, Organization.class, Patient.class, RelatedPerson.class, Device.class, CareTeam.class, HealthcareService.class}, order=2, min=1, max=1, modifier=false, summary=true)
070        @Description(shortDefinition="Who performed the procedure", formalDefinition="Indicates who or what performed 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} (Indicates who or what performed 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} (Indicates who or what performed 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|CareTeam|HealthcareService)", "Indicates who or what performed 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|CareTeam|HealthcareService)", "Indicates who or what performed 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=Child.MAX_UNLIMITED, 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 List<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     * On whom or what the procedure was performed. This is usually an individual human, but can also be performed on animals, groups of humans or animals, organizations or practitioners (for licensing), locations or devices (for safety inspections or regulatory authorizations).
593     */
594    @Child(name = "subject", type = {Patient.class, Group.class, Device.class, Practitioner.class, Organization.class, Location.class}, order=9, min=1, max=1, modifier=false, summary=true)
595    @Description(shortDefinition="Individual or entity the procedure was performed on", formalDefinition="On whom or what the procedure was performed. This is usually an individual human, but can also be performed on animals, groups of humans or animals, organizations or practitioners (for licensing), locations or devices (for safety inspections or regulatory authorizations)." )
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="The Encounter during which this Procedure was created", 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 did occur or is occurring.  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 = "occurrence", type = {DateTimeType.class, Period.class, StringType.class, Age.class, Range.class, Timing.class}, order=11, min=0, max=1, modifier=false, summary=true)
609    @Description(shortDefinition="When the procedure occurred or is occurring", formalDefinition="Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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 occurrence;
611
612    /**
613     * The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event).
614     */
615    @Child(name = "recorded", type = {DateTimeType.class}, order=12, min=0, max=1, modifier=false, summary=true)
616    @Description(shortDefinition="When the procedure was first captured in the subject's record", formalDefinition="The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event)." )
617    protected DateTimeType recorded;
618
619    /**
620     * Individual who recorded the record and takes responsibility for its content.
621     */
622    @Child(name = "recorder", type = {Patient.class, RelatedPerson.class, Practitioner.class, PractitionerRole.class}, order=13, min=0, max=1, modifier=false, summary=true)
623    @Description(shortDefinition="Who recorded the procedure", formalDefinition="Individual who recorded the record and takes responsibility for its content." )
624    protected Reference recorder;
625
626    /**
627     * Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.
628     */
629    @Child(name = "reported", type = {BooleanType.class, Patient.class, RelatedPerson.class, Practitioner.class, PractitionerRole.class, Organization.class}, order=14, min=0, max=1, modifier=false, summary=true)
630    @Description(shortDefinition="Reported rather than primary record", formalDefinition="Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report." )
631    protected DataType reported;
632
633    /**
634     * Limited to "real" people rather than equipment.
635     */
636    @Child(name = "performer", type = {}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
637    @Description(shortDefinition="The people who performed the procedure", formalDefinition="Limited to \"real\" people rather than equipment." )
638    protected List<ProcedurePerformerComponent> performer;
639
640    /**
641     * The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.
642     */
643    @Child(name = "location", type = {Location.class}, order=16, min=0, max=1, modifier=false, summary=true)
644    @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." )
645    protected Reference location;
646
647    /**
648     * The coded reason or reference why the procedure was performed. This may be a coded entity of some type, or may simply be present as text, or may be a reference to one of several resources that justify the procedure.
649     */
650    @Child(name = "reason", type = {CodeableReference.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
651    @Description(shortDefinition="The justification that the procedure was performed", formalDefinition="The coded reason or reference why the procedure was performed. This may be a coded entity of some type, or may simply be present as text, or may be a reference to one of several resources that justify the procedure." )
652    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/procedure-reason")
653    protected List<CodeableReference> reason;
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 = "used", type = {CodeableReference.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    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/device-type")
721    protected List<CodeableReference> used;
722
723    /**
724     * Other resources from the patient record that may be relevant to the procedure.  The information from these resources was either used to create the instance or is provided to help with its interpretation. This extension should not be used if more specific inline elements or extensions are available.
725     */
726    @Child(name = "supportingInfo", type = {Reference.class}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
727    @Description(shortDefinition="Extra information relevant to the procedure", formalDefinition="Other resources from the patient record that may be relevant to the procedure.  The information from these resources was either used to create the instance or is provided to help with its interpretation. This extension should not be used if more specific inline elements or extensions are available." )
728    protected List<Reference> supportingInfo;
729
730    private static final long serialVersionUID = -1752782660L;
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 List<CodeableConcept> getCategory() { 
1102      if (this.category == null)
1103        this.category = new ArrayList<CodeableConcept>();
1104      return this.category;
1105    }
1106
1107    /**
1108     * @return Returns a reference to <code>this</code> for easy method chaining
1109     */
1110    public Procedure setCategory(List<CodeableConcept> theCategory) { 
1111      this.category = theCategory;
1112      return this;
1113    }
1114
1115    public boolean hasCategory() { 
1116      if (this.category == null)
1117        return false;
1118      for (CodeableConcept item : this.category)
1119        if (!item.isEmpty())
1120          return true;
1121      return false;
1122    }
1123
1124    public CodeableConcept addCategory() { //3
1125      CodeableConcept t = new CodeableConcept();
1126      if (this.category == null)
1127        this.category = new ArrayList<CodeableConcept>();
1128      this.category.add(t);
1129      return t;
1130    }
1131
1132    public Procedure addCategory(CodeableConcept t) { //3
1133      if (t == null)
1134        return this;
1135      if (this.category == null)
1136        this.category = new ArrayList<CodeableConcept>();
1137      this.category.add(t);
1138      return this;
1139    }
1140
1141    /**
1142     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist {3}
1143     */
1144    public CodeableConcept getCategoryFirstRep() { 
1145      if (getCategory().isEmpty()) {
1146        addCategory();
1147      }
1148      return getCategory().get(0);
1149    }
1150
1151    /**
1152     * @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").)
1153     */
1154    public CodeableConcept getCode() { 
1155      if (this.code == null)
1156        if (Configuration.errorOnAutoCreate())
1157          throw new Error("Attempt to auto-create Procedure.code");
1158        else if (Configuration.doAutoCreate())
1159          this.code = new CodeableConcept(); // cc
1160      return this.code;
1161    }
1162
1163    public boolean hasCode() { 
1164      return this.code != null && !this.code.isEmpty();
1165    }
1166
1167    /**
1168     * @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").)
1169     */
1170    public Procedure setCode(CodeableConcept value) { 
1171      this.code = value;
1172      return this;
1173    }
1174
1175    /**
1176     * @return {@link #subject} (On whom or what the procedure was performed. This is usually an individual human, but can also be performed on animals, groups of humans or animals, organizations or practitioners (for licensing), locations or devices (for safety inspections or regulatory authorizations).)
1177     */
1178    public Reference getSubject() { 
1179      if (this.subject == null)
1180        if (Configuration.errorOnAutoCreate())
1181          throw new Error("Attempt to auto-create Procedure.subject");
1182        else if (Configuration.doAutoCreate())
1183          this.subject = new Reference(); // cc
1184      return this.subject;
1185    }
1186
1187    public boolean hasSubject() { 
1188      return this.subject != null && !this.subject.isEmpty();
1189    }
1190
1191    /**
1192     * @param value {@link #subject} (On whom or what the procedure was performed. This is usually an individual human, but can also be performed on animals, groups of humans or animals, organizations or practitioners (for licensing), locations or devices (for safety inspections or regulatory authorizations).)
1193     */
1194    public Procedure setSubject(Reference value) { 
1195      this.subject = value;
1196      return this;
1197    }
1198
1199    /**
1200     * @return {@link #encounter} (The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.)
1201     */
1202    public Reference getEncounter() { 
1203      if (this.encounter == null)
1204        if (Configuration.errorOnAutoCreate())
1205          throw new Error("Attempt to auto-create Procedure.encounter");
1206        else if (Configuration.doAutoCreate())
1207          this.encounter = new Reference(); // cc
1208      return this.encounter;
1209    }
1210
1211    public boolean hasEncounter() { 
1212      return this.encounter != null && !this.encounter.isEmpty();
1213    }
1214
1215    /**
1216     * @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.)
1217     */
1218    public Procedure setEncounter(Reference value) { 
1219      this.encounter = value;
1220      return this;
1221    }
1222
1223    /**
1224     * @return {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1225     */
1226    public DataType getOccurrence() { 
1227      return this.occurrence;
1228    }
1229
1230    /**
1231     * @return {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1232     */
1233    public DateTimeType getOccurrenceDateTimeType() throws FHIRException { 
1234      if (this.occurrence == null)
1235        this.occurrence = new DateTimeType();
1236      if (!(this.occurrence instanceof DateTimeType))
1237        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1238      return (DateTimeType) this.occurrence;
1239    }
1240
1241    public boolean hasOccurrenceDateTimeType() { 
1242      return this != null && this.occurrence instanceof DateTimeType;
1243    }
1244
1245    /**
1246     * @return {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1247     */
1248    public Period getOccurrencePeriod() throws FHIRException { 
1249      if (this.occurrence == null)
1250        this.occurrence = new Period();
1251      if (!(this.occurrence instanceof Period))
1252        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1253      return (Period) this.occurrence;
1254    }
1255
1256    public boolean hasOccurrencePeriod() { 
1257      return this != null && this.occurrence instanceof Period;
1258    }
1259
1260    /**
1261     * @return {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1262     */
1263    public StringType getOccurrenceStringType() throws FHIRException { 
1264      if (this.occurrence == null)
1265        this.occurrence = new StringType();
1266      if (!(this.occurrence instanceof StringType))
1267        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1268      return (StringType) this.occurrence;
1269    }
1270
1271    public boolean hasOccurrenceStringType() { 
1272      return this != null && this.occurrence instanceof StringType;
1273    }
1274
1275    /**
1276     * @return {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1277     */
1278    public Age getOccurrenceAge() throws FHIRException { 
1279      if (this.occurrence == null)
1280        this.occurrence = new Age();
1281      if (!(this.occurrence instanceof Age))
1282        throw new FHIRException("Type mismatch: the type Age was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1283      return (Age) this.occurrence;
1284    }
1285
1286    public boolean hasOccurrenceAge() { 
1287      return this != null && this.occurrence instanceof Age;
1288    }
1289
1290    /**
1291     * @return {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1292     */
1293    public Range getOccurrenceRange() throws FHIRException { 
1294      if (this.occurrence == null)
1295        this.occurrence = new Range();
1296      if (!(this.occurrence instanceof Range))
1297        throw new FHIRException("Type mismatch: the type Range was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1298      return (Range) this.occurrence;
1299    }
1300
1301    public boolean hasOccurrenceRange() { 
1302      return this != null && this.occurrence instanceof Range;
1303    }
1304
1305    /**
1306     * @return {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1307     */
1308    public Timing getOccurrenceTiming() throws FHIRException { 
1309      if (this.occurrence == null)
1310        this.occurrence = new Timing();
1311      if (!(this.occurrence instanceof Timing))
1312        throw new FHIRException("Type mismatch: the type Timing was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1313      return (Timing) this.occurrence;
1314    }
1315
1316    public boolean hasOccurrenceTiming() { 
1317      return this != null && this.occurrence instanceof Timing;
1318    }
1319
1320    public boolean hasOccurrence() { 
1321      return this.occurrence != null && !this.occurrence.isEmpty();
1322    }
1323
1324    /**
1325     * @param value {@link #occurrence} (Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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.)
1326     */
1327    public Procedure setOccurrence(DataType value) { 
1328      if (value != null && !(value instanceof DateTimeType || value instanceof Period || value instanceof StringType || value instanceof Age || value instanceof Range || value instanceof Timing))
1329        throw new Error("Not the right type for Procedure.occurrence[x]: "+value.fhirType());
1330      this.occurrence = value;
1331      return this;
1332    }
1333
1334    /**
1335     * @return {@link #recorded} (The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event).). This is the underlying object with id, value and extensions. The accessor "getRecorded" gives direct access to the value
1336     */
1337    public DateTimeType getRecordedElement() { 
1338      if (this.recorded == null)
1339        if (Configuration.errorOnAutoCreate())
1340          throw new Error("Attempt to auto-create Procedure.recorded");
1341        else if (Configuration.doAutoCreate())
1342          this.recorded = new DateTimeType(); // bb
1343      return this.recorded;
1344    }
1345
1346    public boolean hasRecordedElement() { 
1347      return this.recorded != null && !this.recorded.isEmpty();
1348    }
1349
1350    public boolean hasRecorded() { 
1351      return this.recorded != null && !this.recorded.isEmpty();
1352    }
1353
1354    /**
1355     * @param value {@link #recorded} (The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event).). This is the underlying object with id, value and extensions. The accessor "getRecorded" gives direct access to the value
1356     */
1357    public Procedure setRecordedElement(DateTimeType value) { 
1358      this.recorded = value;
1359      return this;
1360    }
1361
1362    /**
1363     * @return The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event).
1364     */
1365    public Date getRecorded() { 
1366      return this.recorded == null ? null : this.recorded.getValue();
1367    }
1368
1369    /**
1370     * @param value The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event).
1371     */
1372    public Procedure setRecorded(Date value) { 
1373      if (value == null)
1374        this.recorded = null;
1375      else {
1376        if (this.recorded == null)
1377          this.recorded = new DateTimeType();
1378        this.recorded.setValue(value);
1379      }
1380      return this;
1381    }
1382
1383    /**
1384     * @return {@link #recorder} (Individual who recorded the record and takes responsibility for its content.)
1385     */
1386    public Reference getRecorder() { 
1387      if (this.recorder == null)
1388        if (Configuration.errorOnAutoCreate())
1389          throw new Error("Attempt to auto-create Procedure.recorder");
1390        else if (Configuration.doAutoCreate())
1391          this.recorder = new Reference(); // cc
1392      return this.recorder;
1393    }
1394
1395    public boolean hasRecorder() { 
1396      return this.recorder != null && !this.recorder.isEmpty();
1397    }
1398
1399    /**
1400     * @param value {@link #recorder} (Individual who recorded the record and takes responsibility for its content.)
1401     */
1402    public Procedure setRecorder(Reference value) { 
1403      this.recorder = value;
1404      return this;
1405    }
1406
1407    /**
1408     * @return {@link #reported} (Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.)
1409     */
1410    public DataType getReported() { 
1411      return this.reported;
1412    }
1413
1414    /**
1415     * @return {@link #reported} (Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.)
1416     */
1417    public BooleanType getReportedBooleanType() throws FHIRException { 
1418      if (this.reported == null)
1419        this.reported = new BooleanType();
1420      if (!(this.reported instanceof BooleanType))
1421        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.reported.getClass().getName()+" was encountered");
1422      return (BooleanType) this.reported;
1423    }
1424
1425    public boolean hasReportedBooleanType() { 
1426      return this != null && this.reported instanceof BooleanType;
1427    }
1428
1429    /**
1430     * @return {@link #reported} (Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.)
1431     */
1432    public Reference getReportedReference() throws FHIRException { 
1433      if (this.reported == null)
1434        this.reported = new Reference();
1435      if (!(this.reported instanceof Reference))
1436        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.reported.getClass().getName()+" was encountered");
1437      return (Reference) this.reported;
1438    }
1439
1440    public boolean hasReportedReference() { 
1441      return this != null && this.reported instanceof Reference;
1442    }
1443
1444    public boolean hasReported() { 
1445      return this.reported != null && !this.reported.isEmpty();
1446    }
1447
1448    /**
1449     * @param value {@link #reported} (Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.)
1450     */
1451    public Procedure setReported(DataType value) { 
1452      if (value != null && !(value instanceof BooleanType || value instanceof Reference))
1453        throw new Error("Not the right type for Procedure.reported[x]: "+value.fhirType());
1454      this.reported = value;
1455      return this;
1456    }
1457
1458    /**
1459     * @return {@link #performer} (Limited to "real" people rather than equipment.)
1460     */
1461    public List<ProcedurePerformerComponent> getPerformer() { 
1462      if (this.performer == null)
1463        this.performer = new ArrayList<ProcedurePerformerComponent>();
1464      return this.performer;
1465    }
1466
1467    /**
1468     * @return Returns a reference to <code>this</code> for easy method chaining
1469     */
1470    public Procedure setPerformer(List<ProcedurePerformerComponent> thePerformer) { 
1471      this.performer = thePerformer;
1472      return this;
1473    }
1474
1475    public boolean hasPerformer() { 
1476      if (this.performer == null)
1477        return false;
1478      for (ProcedurePerformerComponent item : this.performer)
1479        if (!item.isEmpty())
1480          return true;
1481      return false;
1482    }
1483
1484    public ProcedurePerformerComponent addPerformer() { //3
1485      ProcedurePerformerComponent t = new ProcedurePerformerComponent();
1486      if (this.performer == null)
1487        this.performer = new ArrayList<ProcedurePerformerComponent>();
1488      this.performer.add(t);
1489      return t;
1490    }
1491
1492    public Procedure addPerformer(ProcedurePerformerComponent t) { //3
1493      if (t == null)
1494        return this;
1495      if (this.performer == null)
1496        this.performer = new ArrayList<ProcedurePerformerComponent>();
1497      this.performer.add(t);
1498      return this;
1499    }
1500
1501    /**
1502     * @return The first repetition of repeating field {@link #performer}, creating it if it does not already exist {3}
1503     */
1504    public ProcedurePerformerComponent getPerformerFirstRep() { 
1505      if (getPerformer().isEmpty()) {
1506        addPerformer();
1507      }
1508      return getPerformer().get(0);
1509    }
1510
1511    /**
1512     * @return {@link #location} (The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.)
1513     */
1514    public Reference getLocation() { 
1515      if (this.location == null)
1516        if (Configuration.errorOnAutoCreate())
1517          throw new Error("Attempt to auto-create Procedure.location");
1518        else if (Configuration.doAutoCreate())
1519          this.location = new Reference(); // cc
1520      return this.location;
1521    }
1522
1523    public boolean hasLocation() { 
1524      return this.location != null && !this.location.isEmpty();
1525    }
1526
1527    /**
1528     * @param value {@link #location} (The location where the procedure actually happened.  E.g. a newborn at home, a tracheostomy at a restaurant.)
1529     */
1530    public Procedure setLocation(Reference value) { 
1531      this.location = value;
1532      return this;
1533    }
1534
1535    /**
1536     * @return {@link #reason} (The coded reason or reference why the procedure was performed. This may be a coded entity of some type, or may simply be present as text, or may be a reference to one of several resources that justify the procedure.)
1537     */
1538    public List<CodeableReference> getReason() { 
1539      if (this.reason == null)
1540        this.reason = new ArrayList<CodeableReference>();
1541      return this.reason;
1542    }
1543
1544    /**
1545     * @return Returns a reference to <code>this</code> for easy method chaining
1546     */
1547    public Procedure setReason(List<CodeableReference> theReason) { 
1548      this.reason = theReason;
1549      return this;
1550    }
1551
1552    public boolean hasReason() { 
1553      if (this.reason == null)
1554        return false;
1555      for (CodeableReference item : this.reason)
1556        if (!item.isEmpty())
1557          return true;
1558      return false;
1559    }
1560
1561    public CodeableReference addReason() { //3
1562      CodeableReference t = new CodeableReference();
1563      if (this.reason == null)
1564        this.reason = new ArrayList<CodeableReference>();
1565      this.reason.add(t);
1566      return t;
1567    }
1568
1569    public Procedure addReason(CodeableReference t) { //3
1570      if (t == null)
1571        return this;
1572      if (this.reason == null)
1573        this.reason = new ArrayList<CodeableReference>();
1574      this.reason.add(t);
1575      return this;
1576    }
1577
1578    /**
1579     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist {3}
1580     */
1581    public CodeableReference getReasonFirstRep() { 
1582      if (getReason().isEmpty()) {
1583        addReason();
1584      }
1585      return getReason().get(0);
1586    }
1587
1588    /**
1589     * @return {@link #bodySite} (Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.)
1590     */
1591    public List<CodeableConcept> getBodySite() { 
1592      if (this.bodySite == null)
1593        this.bodySite = new ArrayList<CodeableConcept>();
1594      return this.bodySite;
1595    }
1596
1597    /**
1598     * @return Returns a reference to <code>this</code> for easy method chaining
1599     */
1600    public Procedure setBodySite(List<CodeableConcept> theBodySite) { 
1601      this.bodySite = theBodySite;
1602      return this;
1603    }
1604
1605    public boolean hasBodySite() { 
1606      if (this.bodySite == null)
1607        return false;
1608      for (CodeableConcept item : this.bodySite)
1609        if (!item.isEmpty())
1610          return true;
1611      return false;
1612    }
1613
1614    public CodeableConcept addBodySite() { //3
1615      CodeableConcept t = new CodeableConcept();
1616      if (this.bodySite == null)
1617        this.bodySite = new ArrayList<CodeableConcept>();
1618      this.bodySite.add(t);
1619      return t;
1620    }
1621
1622    public Procedure addBodySite(CodeableConcept t) { //3
1623      if (t == null)
1624        return this;
1625      if (this.bodySite == null)
1626        this.bodySite = new ArrayList<CodeableConcept>();
1627      this.bodySite.add(t);
1628      return this;
1629    }
1630
1631    /**
1632     * @return The first repetition of repeating field {@link #bodySite}, creating it if it does not already exist {3}
1633     */
1634    public CodeableConcept getBodySiteFirstRep() { 
1635      if (getBodySite().isEmpty()) {
1636        addBodySite();
1637      }
1638      return getBodySite().get(0);
1639    }
1640
1641    /**
1642     * @return {@link #outcome} (The outcome of the procedure - did it resolve the reasons for the procedure being performed?)
1643     */
1644    public CodeableConcept getOutcome() { 
1645      if (this.outcome == null)
1646        if (Configuration.errorOnAutoCreate())
1647          throw new Error("Attempt to auto-create Procedure.outcome");
1648        else if (Configuration.doAutoCreate())
1649          this.outcome = new CodeableConcept(); // cc
1650      return this.outcome;
1651    }
1652
1653    public boolean hasOutcome() { 
1654      return this.outcome != null && !this.outcome.isEmpty();
1655    }
1656
1657    /**
1658     * @param value {@link #outcome} (The outcome of the procedure - did it resolve the reasons for the procedure being performed?)
1659     */
1660    public Procedure setOutcome(CodeableConcept value) { 
1661      this.outcome = value;
1662      return this;
1663    }
1664
1665    /**
1666     * @return {@link #report} (This could be a histology result, pathology report, surgical report, etc.)
1667     */
1668    public List<Reference> getReport() { 
1669      if (this.report == null)
1670        this.report = new ArrayList<Reference>();
1671      return this.report;
1672    }
1673
1674    /**
1675     * @return Returns a reference to <code>this</code> for easy method chaining
1676     */
1677    public Procedure setReport(List<Reference> theReport) { 
1678      this.report = theReport;
1679      return this;
1680    }
1681
1682    public boolean hasReport() { 
1683      if (this.report == null)
1684        return false;
1685      for (Reference item : this.report)
1686        if (!item.isEmpty())
1687          return true;
1688      return false;
1689    }
1690
1691    public Reference addReport() { //3
1692      Reference t = new Reference();
1693      if (this.report == null)
1694        this.report = new ArrayList<Reference>();
1695      this.report.add(t);
1696      return t;
1697    }
1698
1699    public Procedure addReport(Reference t) { //3
1700      if (t == null)
1701        return this;
1702      if (this.report == null)
1703        this.report = new ArrayList<Reference>();
1704      this.report.add(t);
1705      return this;
1706    }
1707
1708    /**
1709     * @return The first repetition of repeating field {@link #report}, creating it if it does not already exist {3}
1710     */
1711    public Reference getReportFirstRep() { 
1712      if (getReport().isEmpty()) {
1713        addReport();
1714      }
1715      return getReport().get(0);
1716    }
1717
1718    /**
1719     * @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.)
1720     */
1721    public List<CodeableConcept> getComplication() { 
1722      if (this.complication == null)
1723        this.complication = new ArrayList<CodeableConcept>();
1724      return this.complication;
1725    }
1726
1727    /**
1728     * @return Returns a reference to <code>this</code> for easy method chaining
1729     */
1730    public Procedure setComplication(List<CodeableConcept> theComplication) { 
1731      this.complication = theComplication;
1732      return this;
1733    }
1734
1735    public boolean hasComplication() { 
1736      if (this.complication == null)
1737        return false;
1738      for (CodeableConcept item : this.complication)
1739        if (!item.isEmpty())
1740          return true;
1741      return false;
1742    }
1743
1744    public CodeableConcept addComplication() { //3
1745      CodeableConcept t = new CodeableConcept();
1746      if (this.complication == null)
1747        this.complication = new ArrayList<CodeableConcept>();
1748      this.complication.add(t);
1749      return t;
1750    }
1751
1752    public Procedure addComplication(CodeableConcept t) { //3
1753      if (t == null)
1754        return this;
1755      if (this.complication == null)
1756        this.complication = new ArrayList<CodeableConcept>();
1757      this.complication.add(t);
1758      return this;
1759    }
1760
1761    /**
1762     * @return The first repetition of repeating field {@link #complication}, creating it if it does not already exist {3}
1763     */
1764    public CodeableConcept getComplicationFirstRep() { 
1765      if (getComplication().isEmpty()) {
1766        addComplication();
1767      }
1768      return getComplication().get(0);
1769    }
1770
1771    /**
1772     * @return {@link #complicationDetail} (Any complications that occurred during the procedure, or in the immediate post-performance period.)
1773     */
1774    public List<Reference> getComplicationDetail() { 
1775      if (this.complicationDetail == null)
1776        this.complicationDetail = new ArrayList<Reference>();
1777      return this.complicationDetail;
1778    }
1779
1780    /**
1781     * @return Returns a reference to <code>this</code> for easy method chaining
1782     */
1783    public Procedure setComplicationDetail(List<Reference> theComplicationDetail) { 
1784      this.complicationDetail = theComplicationDetail;
1785      return this;
1786    }
1787
1788    public boolean hasComplicationDetail() { 
1789      if (this.complicationDetail == null)
1790        return false;
1791      for (Reference item : this.complicationDetail)
1792        if (!item.isEmpty())
1793          return true;
1794      return false;
1795    }
1796
1797    public Reference addComplicationDetail() { //3
1798      Reference t = new Reference();
1799      if (this.complicationDetail == null)
1800        this.complicationDetail = new ArrayList<Reference>();
1801      this.complicationDetail.add(t);
1802      return t;
1803    }
1804
1805    public Procedure addComplicationDetail(Reference t) { //3
1806      if (t == null)
1807        return this;
1808      if (this.complicationDetail == null)
1809        this.complicationDetail = new ArrayList<Reference>();
1810      this.complicationDetail.add(t);
1811      return this;
1812    }
1813
1814    /**
1815     * @return The first repetition of repeating field {@link #complicationDetail}, creating it if it does not already exist {3}
1816     */
1817    public Reference getComplicationDetailFirstRep() { 
1818      if (getComplicationDetail().isEmpty()) {
1819        addComplicationDetail();
1820      }
1821      return getComplicationDetail().get(0);
1822    }
1823
1824    /**
1825     * @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.)
1826     */
1827    public List<CodeableConcept> getFollowUp() { 
1828      if (this.followUp == null)
1829        this.followUp = new ArrayList<CodeableConcept>();
1830      return this.followUp;
1831    }
1832
1833    /**
1834     * @return Returns a reference to <code>this</code> for easy method chaining
1835     */
1836    public Procedure setFollowUp(List<CodeableConcept> theFollowUp) { 
1837      this.followUp = theFollowUp;
1838      return this;
1839    }
1840
1841    public boolean hasFollowUp() { 
1842      if (this.followUp == null)
1843        return false;
1844      for (CodeableConcept item : this.followUp)
1845        if (!item.isEmpty())
1846          return true;
1847      return false;
1848    }
1849
1850    public CodeableConcept addFollowUp() { //3
1851      CodeableConcept t = new CodeableConcept();
1852      if (this.followUp == null)
1853        this.followUp = new ArrayList<CodeableConcept>();
1854      this.followUp.add(t);
1855      return t;
1856    }
1857
1858    public Procedure addFollowUp(CodeableConcept t) { //3
1859      if (t == null)
1860        return this;
1861      if (this.followUp == null)
1862        this.followUp = new ArrayList<CodeableConcept>();
1863      this.followUp.add(t);
1864      return this;
1865    }
1866
1867    /**
1868     * @return The first repetition of repeating field {@link #followUp}, creating it if it does not already exist {3}
1869     */
1870    public CodeableConcept getFollowUpFirstRep() { 
1871      if (getFollowUp().isEmpty()) {
1872        addFollowUp();
1873      }
1874      return getFollowUp().get(0);
1875    }
1876
1877    /**
1878     * @return {@link #note} (Any other notes and comments about the procedure.)
1879     */
1880    public List<Annotation> getNote() { 
1881      if (this.note == null)
1882        this.note = new ArrayList<Annotation>();
1883      return this.note;
1884    }
1885
1886    /**
1887     * @return Returns a reference to <code>this</code> for easy method chaining
1888     */
1889    public Procedure setNote(List<Annotation> theNote) { 
1890      this.note = theNote;
1891      return this;
1892    }
1893
1894    public boolean hasNote() { 
1895      if (this.note == null)
1896        return false;
1897      for (Annotation item : this.note)
1898        if (!item.isEmpty())
1899          return true;
1900      return false;
1901    }
1902
1903    public Annotation addNote() { //3
1904      Annotation t = new Annotation();
1905      if (this.note == null)
1906        this.note = new ArrayList<Annotation>();
1907      this.note.add(t);
1908      return t;
1909    }
1910
1911    public Procedure addNote(Annotation t) { //3
1912      if (t == null)
1913        return this;
1914      if (this.note == null)
1915        this.note = new ArrayList<Annotation>();
1916      this.note.add(t);
1917      return this;
1918    }
1919
1920    /**
1921     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
1922     */
1923    public Annotation getNoteFirstRep() { 
1924      if (getNote().isEmpty()) {
1925        addNote();
1926      }
1927      return getNote().get(0);
1928    }
1929
1930    /**
1931     * @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.)
1932     */
1933    public List<ProcedureFocalDeviceComponent> getFocalDevice() { 
1934      if (this.focalDevice == null)
1935        this.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
1936      return this.focalDevice;
1937    }
1938
1939    /**
1940     * @return Returns a reference to <code>this</code> for easy method chaining
1941     */
1942    public Procedure setFocalDevice(List<ProcedureFocalDeviceComponent> theFocalDevice) { 
1943      this.focalDevice = theFocalDevice;
1944      return this;
1945    }
1946
1947    public boolean hasFocalDevice() { 
1948      if (this.focalDevice == null)
1949        return false;
1950      for (ProcedureFocalDeviceComponent item : this.focalDevice)
1951        if (!item.isEmpty())
1952          return true;
1953      return false;
1954    }
1955
1956    public ProcedureFocalDeviceComponent addFocalDevice() { //3
1957      ProcedureFocalDeviceComponent t = new ProcedureFocalDeviceComponent();
1958      if (this.focalDevice == null)
1959        this.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
1960      this.focalDevice.add(t);
1961      return t;
1962    }
1963
1964    public Procedure addFocalDevice(ProcedureFocalDeviceComponent t) { //3
1965      if (t == null)
1966        return this;
1967      if (this.focalDevice == null)
1968        this.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
1969      this.focalDevice.add(t);
1970      return this;
1971    }
1972
1973    /**
1974     * @return The first repetition of repeating field {@link #focalDevice}, creating it if it does not already exist {3}
1975     */
1976    public ProcedureFocalDeviceComponent getFocalDeviceFirstRep() { 
1977      if (getFocalDevice().isEmpty()) {
1978        addFocalDevice();
1979      }
1980      return getFocalDevice().get(0);
1981    }
1982
1983    /**
1984     * @return {@link #used} (Identifies medications, devices and any other substance used as part of the procedure.)
1985     */
1986    public List<CodeableReference> getUsed() { 
1987      if (this.used == null)
1988        this.used = new ArrayList<CodeableReference>();
1989      return this.used;
1990    }
1991
1992    /**
1993     * @return Returns a reference to <code>this</code> for easy method chaining
1994     */
1995    public Procedure setUsed(List<CodeableReference> theUsed) { 
1996      this.used = theUsed;
1997      return this;
1998    }
1999
2000    public boolean hasUsed() { 
2001      if (this.used == null)
2002        return false;
2003      for (CodeableReference item : this.used)
2004        if (!item.isEmpty())
2005          return true;
2006      return false;
2007    }
2008
2009    public CodeableReference addUsed() { //3
2010      CodeableReference t = new CodeableReference();
2011      if (this.used == null)
2012        this.used = new ArrayList<CodeableReference>();
2013      this.used.add(t);
2014      return t;
2015    }
2016
2017    public Procedure addUsed(CodeableReference t) { //3
2018      if (t == null)
2019        return this;
2020      if (this.used == null)
2021        this.used = new ArrayList<CodeableReference>();
2022      this.used.add(t);
2023      return this;
2024    }
2025
2026    /**
2027     * @return The first repetition of repeating field {@link #used}, creating it if it does not already exist {3}
2028     */
2029    public CodeableReference getUsedFirstRep() { 
2030      if (getUsed().isEmpty()) {
2031        addUsed();
2032      }
2033      return getUsed().get(0);
2034    }
2035
2036    /**
2037     * @return {@link #supportingInfo} (Other resources from the patient record that may be relevant to the procedure.  The information from these resources was either used to create the instance or is provided to help with its interpretation. This extension should not be used if more specific inline elements or extensions are available.)
2038     */
2039    public List<Reference> getSupportingInfo() { 
2040      if (this.supportingInfo == null)
2041        this.supportingInfo = new ArrayList<Reference>();
2042      return this.supportingInfo;
2043    }
2044
2045    /**
2046     * @return Returns a reference to <code>this</code> for easy method chaining
2047     */
2048    public Procedure setSupportingInfo(List<Reference> theSupportingInfo) { 
2049      this.supportingInfo = theSupportingInfo;
2050      return this;
2051    }
2052
2053    public boolean hasSupportingInfo() { 
2054      if (this.supportingInfo == null)
2055        return false;
2056      for (Reference item : this.supportingInfo)
2057        if (!item.isEmpty())
2058          return true;
2059      return false;
2060    }
2061
2062    public Reference addSupportingInfo() { //3
2063      Reference t = new Reference();
2064      if (this.supportingInfo == null)
2065        this.supportingInfo = new ArrayList<Reference>();
2066      this.supportingInfo.add(t);
2067      return t;
2068    }
2069
2070    public Procedure addSupportingInfo(Reference t) { //3
2071      if (t == null)
2072        return this;
2073      if (this.supportingInfo == null)
2074        this.supportingInfo = new ArrayList<Reference>();
2075      this.supportingInfo.add(t);
2076      return this;
2077    }
2078
2079    /**
2080     * @return The first repetition of repeating field {@link #supportingInfo}, creating it if it does not already exist {3}
2081     */
2082    public Reference getSupportingInfoFirstRep() { 
2083      if (getSupportingInfo().isEmpty()) {
2084        addSupportingInfo();
2085      }
2086      return getSupportingInfo().get(0);
2087    }
2088
2089      protected void listChildren(List<Property> children) {
2090        super.listChildren(children);
2091        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));
2092        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));
2093        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));
2094        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));
2095        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));
2096        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));
2097        children.add(new Property("statusReason", "CodeableConcept", "Captures the reason for the current state of the procedure.", 0, 1, statusReason));
2098        children.add(new Property("category", "CodeableConcept", "A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\").", 0, java.lang.Integer.MAX_VALUE, category));
2099        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));
2100        children.add(new Property("subject", "Reference(Patient|Group|Device|Practitioner|Organization|Location)", "On whom or what the procedure was performed. This is usually an individual human, but can also be performed on animals, groups of humans or animals, organizations or practitioners (for licensing), locations or devices (for safety inspections or regulatory authorizations).", 0, 1, subject));
2101        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));
2102        children.add(new Property("occurrence[x]", "dateTime|Period|string|Age|Range|Timing", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence));
2103        children.add(new Property("recorded", "dateTime", "The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event).", 0, 1, recorded));
2104        children.add(new Property("recorder", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole)", "Individual who recorded the record and takes responsibility for its content.", 0, 1, recorder));
2105        children.add(new Property("reported[x]", "boolean|Reference(Patient|RelatedPerson|Practitioner|PractitionerRole|Organization)", "Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.", 0, 1, reported));
2106        children.add(new Property("performer", "", "Limited to \"real\" people rather than equipment.", 0, java.lang.Integer.MAX_VALUE, performer));
2107        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));
2108        children.add(new Property("reason", "CodeableReference(Condition|Observation|Procedure|DiagnosticReport|DocumentReference)", "The coded reason or reference why the procedure was performed. This may be a coded entity of some type, or may simply be present as text, or may be a reference to one of several resources that justify the procedure.", 0, java.lang.Integer.MAX_VALUE, reason));
2109        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));
2110        children.add(new Property("outcome", "CodeableConcept", "The outcome of the procedure - did it resolve the reasons for the procedure being performed?", 0, 1, outcome));
2111        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));
2112        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));
2113        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));
2114        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));
2115        children.add(new Property("note", "Annotation", "Any other notes and comments about the procedure.", 0, java.lang.Integer.MAX_VALUE, note));
2116        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));
2117        children.add(new Property("used", "CodeableReference(Device|Medication|Substance|BiologicallyDerivedProduct)", "Identifies medications, devices and any other substance used as part of the procedure.", 0, java.lang.Integer.MAX_VALUE, used));
2118        children.add(new Property("supportingInfo", "Reference(Any)", "Other resources from the patient record that may be relevant to the procedure.  The information from these resources was either used to create the instance or is provided to help with its interpretation. This extension should not be used if more specific inline elements or extensions are available.", 0, java.lang.Integer.MAX_VALUE, supportingInfo));
2119      }
2120
2121      @Override
2122      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2123        switch (_hash) {
2124        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);
2125        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);
2126        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);
2127        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);
2128        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);
2129        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);
2130        case 2051346646: /*statusReason*/  return new Property("statusReason", "CodeableConcept", "Captures the reason for the current state of the procedure.", 0, 1, statusReason);
2131        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, java.lang.Integer.MAX_VALUE, category);
2132        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);
2133        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group|Device|Practitioner|Organization|Location)", "On whom or what the procedure was performed. This is usually an individual human, but can also be performed on animals, groups of humans or animals, organizations or practitioners (for licensing), locations or devices (for safety inspections or regulatory authorizations).", 0, 1, subject);
2134        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);
2135        case -2022646513: /*occurrence[x]*/  return new Property("occurrence[x]", "dateTime|Period|string|Age|Range|Timing", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2136        case 1687874001: /*occurrence*/  return new Property("occurrence[x]", "dateTime|Period|string|Age|Range|Timing", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2137        case -298443636: /*occurrenceDateTime*/  return new Property("occurrence[x]", "dateTime", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2138        case 1397156594: /*occurrencePeriod*/  return new Property("occurrence[x]", "Period", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2139        case 1496896834: /*occurrenceString*/  return new Property("occurrence[x]", "string", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2140        case -2022672018: /*occurrenceAge*/  return new Property("occurrence[x]", "Age", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2141        case 1847908844: /*occurrenceRange*/  return new Property("occurrence[x]", "Range", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2142        case 1515218299: /*occurrenceTiming*/  return new Property("occurrence[x]", "Timing", "Estimated or actual date, date-time, period, or age when the procedure did occur or is occurring.  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, occurrence);
2143        case -799233872: /*recorded*/  return new Property("recorded", "dateTime", "The date the occurrence of the procedure was first captured in the record regardless of Procedure.status (potentially after the occurrence of the event).", 0, 1, recorded);
2144        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);
2145        case -241505587: /*reported[x]*/  return new Property("reported[x]", "boolean|Reference(Patient|RelatedPerson|Practitioner|PractitionerRole|Organization)", "Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.", 0, 1, reported);
2146        case -427039533: /*reported*/  return new Property("reported[x]", "boolean|Reference(Patient|RelatedPerson|Practitioner|PractitionerRole|Organization)", "Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.", 0, 1, reported);
2147        case 1219992533: /*reportedBoolean*/  return new Property("reported[x]", "boolean", "Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.", 0, 1, reported);
2148        case 1198143416: /*reportedReference*/  return new Property("reported[x]", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole|Organization)", "Indicates if this record was captured as a secondary 'reported' record rather than as an original primary source-of-truth record.  It may also indicate the source of the report.", 0, 1, reported);
2149        case 481140686: /*performer*/  return new Property("performer", "", "Limited to \"real\" people rather than equipment.", 0, java.lang.Integer.MAX_VALUE, performer);
2150        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);
2151        case -934964668: /*reason*/  return new Property("reason", "CodeableReference(Condition|Observation|Procedure|DiagnosticReport|DocumentReference)", "The coded reason or reference why the procedure was performed. This may be a coded entity of some type, or may simply be present as text, or may be a reference to one of several resources that justify the procedure.", 0, java.lang.Integer.MAX_VALUE, reason);
2152        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);
2153        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);
2154        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);
2155        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);
2156        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);
2157        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);
2158        case 3387378: /*note*/  return new Property("note", "Annotation", "Any other notes and comments about the procedure.", 0, java.lang.Integer.MAX_VALUE, note);
2159        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);
2160        case 3599293: /*used*/  return new Property("used", "CodeableReference(Device|Medication|Substance|BiologicallyDerivedProduct)", "Identifies medications, devices and any other substance used as part of the procedure.", 0, java.lang.Integer.MAX_VALUE, used);
2161        case 1922406657: /*supportingInfo*/  return new Property("supportingInfo", "Reference(Any)", "Other resources from the patient record that may be relevant to the procedure.  The information from these resources was either used to create the instance or is provided to help with its interpretation. This extension should not be used if more specific inline elements or extensions are available.", 0, java.lang.Integer.MAX_VALUE, supportingInfo);
2162        default: return super.getNamedProperty(_hash, _name, _checkValid);
2163        }
2164
2165      }
2166
2167      @Override
2168      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2169        switch (hash) {
2170        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2171        case 8911915: /*instantiatesCanonical*/ return this.instantiatesCanonical == null ? new Base[0] : this.instantiatesCanonical.toArray(new Base[this.instantiatesCanonical.size()]); // CanonicalType
2172        case -1926393373: /*instantiatesUri*/ return this.instantiatesUri == null ? new Base[0] : this.instantiatesUri.toArray(new Base[this.instantiatesUri.size()]); // UriType
2173        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
2174        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
2175        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<EventStatus>
2176        case 2051346646: /*statusReason*/ return this.statusReason == null ? new Base[0] : new Base[] {this.statusReason}; // CodeableConcept
2177        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
2178        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
2179        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
2180        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
2181        case 1687874001: /*occurrence*/ return this.occurrence == null ? new Base[0] : new Base[] {this.occurrence}; // DataType
2182        case -799233872: /*recorded*/ return this.recorded == null ? new Base[0] : new Base[] {this.recorded}; // DateTimeType
2183        case -799233858: /*recorder*/ return this.recorder == null ? new Base[0] : new Base[] {this.recorder}; // Reference
2184        case -427039533: /*reported*/ return this.reported == null ? new Base[0] : new Base[] {this.reported}; // DataType
2185        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : this.performer.toArray(new Base[this.performer.size()]); // ProcedurePerformerComponent
2186        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
2187        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // CodeableReference
2188        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : this.bodySite.toArray(new Base[this.bodySite.size()]); // CodeableConcept
2189        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // CodeableConcept
2190        case -934521548: /*report*/ return this.report == null ? new Base[0] : this.report.toArray(new Base[this.report.size()]); // Reference
2191        case -1644401602: /*complication*/ return this.complication == null ? new Base[0] : this.complication.toArray(new Base[this.complication.size()]); // CodeableConcept
2192        case -1685272017: /*complicationDetail*/ return this.complicationDetail == null ? new Base[0] : this.complicationDetail.toArray(new Base[this.complicationDetail.size()]); // Reference
2193        case 301801004: /*followUp*/ return this.followUp == null ? new Base[0] : this.followUp.toArray(new Base[this.followUp.size()]); // CodeableConcept
2194        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2195        case -1129235173: /*focalDevice*/ return this.focalDevice == null ? new Base[0] : this.focalDevice.toArray(new Base[this.focalDevice.size()]); // ProcedureFocalDeviceComponent
2196        case 3599293: /*used*/ return this.used == null ? new Base[0] : this.used.toArray(new Base[this.used.size()]); // CodeableReference
2197        case 1922406657: /*supportingInfo*/ return this.supportingInfo == null ? new Base[0] : this.supportingInfo.toArray(new Base[this.supportingInfo.size()]); // Reference
2198        default: return super.getProperty(hash, name, checkValid);
2199        }
2200
2201      }
2202
2203      @Override
2204      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2205        switch (hash) {
2206        case -1618432855: // identifier
2207          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2208          return value;
2209        case 8911915: // instantiatesCanonical
2210          this.getInstantiatesCanonical().add(TypeConvertor.castToCanonical(value)); // CanonicalType
2211          return value;
2212        case -1926393373: // instantiatesUri
2213          this.getInstantiatesUri().add(TypeConvertor.castToUri(value)); // UriType
2214          return value;
2215        case -332612366: // basedOn
2216          this.getBasedOn().add(TypeConvertor.castToReference(value)); // Reference
2217          return value;
2218        case -995410646: // partOf
2219          this.getPartOf().add(TypeConvertor.castToReference(value)); // Reference
2220          return value;
2221        case -892481550: // status
2222          value = new EventStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2223          this.status = (Enumeration) value; // Enumeration<EventStatus>
2224          return value;
2225        case 2051346646: // statusReason
2226          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2227          return value;
2228        case 50511102: // category
2229          this.getCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2230          return value;
2231        case 3059181: // code
2232          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2233          return value;
2234        case -1867885268: // subject
2235          this.subject = TypeConvertor.castToReference(value); // Reference
2236          return value;
2237        case 1524132147: // encounter
2238          this.encounter = TypeConvertor.castToReference(value); // Reference
2239          return value;
2240        case 1687874001: // occurrence
2241          this.occurrence = TypeConvertor.castToType(value); // DataType
2242          return value;
2243        case -799233872: // recorded
2244          this.recorded = TypeConvertor.castToDateTime(value); // DateTimeType
2245          return value;
2246        case -799233858: // recorder
2247          this.recorder = TypeConvertor.castToReference(value); // Reference
2248          return value;
2249        case -427039533: // reported
2250          this.reported = TypeConvertor.castToType(value); // DataType
2251          return value;
2252        case 481140686: // performer
2253          this.getPerformer().add((ProcedurePerformerComponent) value); // ProcedurePerformerComponent
2254          return value;
2255        case 1901043637: // location
2256          this.location = TypeConvertor.castToReference(value); // Reference
2257          return value;
2258        case -934964668: // reason
2259          this.getReason().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
2260          return value;
2261        case 1702620169: // bodySite
2262          this.getBodySite().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2263          return value;
2264        case -1106507950: // outcome
2265          this.outcome = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2266          return value;
2267        case -934521548: // report
2268          this.getReport().add(TypeConvertor.castToReference(value)); // Reference
2269          return value;
2270        case -1644401602: // complication
2271          this.getComplication().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2272          return value;
2273        case -1685272017: // complicationDetail
2274          this.getComplicationDetail().add(TypeConvertor.castToReference(value)); // Reference
2275          return value;
2276        case 301801004: // followUp
2277          this.getFollowUp().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2278          return value;
2279        case 3387378: // note
2280          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
2281          return value;
2282        case -1129235173: // focalDevice
2283          this.getFocalDevice().add((ProcedureFocalDeviceComponent) value); // ProcedureFocalDeviceComponent
2284          return value;
2285        case 3599293: // used
2286          this.getUsed().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
2287          return value;
2288        case 1922406657: // supportingInfo
2289          this.getSupportingInfo().add(TypeConvertor.castToReference(value)); // Reference
2290          return value;
2291        default: return super.setProperty(hash, name, value);
2292        }
2293
2294      }
2295
2296      @Override
2297      public Base setProperty(String name, Base value) throws FHIRException {
2298        if (name.equals("identifier")) {
2299          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2300        } else if (name.equals("instantiatesCanonical")) {
2301          this.getInstantiatesCanonical().add(TypeConvertor.castToCanonical(value));
2302        } else if (name.equals("instantiatesUri")) {
2303          this.getInstantiatesUri().add(TypeConvertor.castToUri(value));
2304        } else if (name.equals("basedOn")) {
2305          this.getBasedOn().add(TypeConvertor.castToReference(value));
2306        } else if (name.equals("partOf")) {
2307          this.getPartOf().add(TypeConvertor.castToReference(value));
2308        } else if (name.equals("status")) {
2309          value = new EventStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2310          this.status = (Enumeration) value; // Enumeration<EventStatus>
2311        } else if (name.equals("statusReason")) {
2312          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2313        } else if (name.equals("category")) {
2314          this.getCategory().add(TypeConvertor.castToCodeableConcept(value));
2315        } else if (name.equals("code")) {
2316          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2317        } else if (name.equals("subject")) {
2318          this.subject = TypeConvertor.castToReference(value); // Reference
2319        } else if (name.equals("encounter")) {
2320          this.encounter = TypeConvertor.castToReference(value); // Reference
2321        } else if (name.equals("occurrence[x]")) {
2322          this.occurrence = TypeConvertor.castToType(value); // DataType
2323        } else if (name.equals("recorded")) {
2324          this.recorded = TypeConvertor.castToDateTime(value); // DateTimeType
2325        } else if (name.equals("recorder")) {
2326          this.recorder = TypeConvertor.castToReference(value); // Reference
2327        } else if (name.equals("reported[x]")) {
2328          this.reported = TypeConvertor.castToType(value); // DataType
2329        } else if (name.equals("performer")) {
2330          this.getPerformer().add((ProcedurePerformerComponent) value);
2331        } else if (name.equals("location")) {
2332          this.location = TypeConvertor.castToReference(value); // Reference
2333        } else if (name.equals("reason")) {
2334          this.getReason().add(TypeConvertor.castToCodeableReference(value));
2335        } else if (name.equals("bodySite")) {
2336          this.getBodySite().add(TypeConvertor.castToCodeableConcept(value));
2337        } else if (name.equals("outcome")) {
2338          this.outcome = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2339        } else if (name.equals("report")) {
2340          this.getReport().add(TypeConvertor.castToReference(value));
2341        } else if (name.equals("complication")) {
2342          this.getComplication().add(TypeConvertor.castToCodeableConcept(value));
2343        } else if (name.equals("complicationDetail")) {
2344          this.getComplicationDetail().add(TypeConvertor.castToReference(value));
2345        } else if (name.equals("followUp")) {
2346          this.getFollowUp().add(TypeConvertor.castToCodeableConcept(value));
2347        } else if (name.equals("note")) {
2348          this.getNote().add(TypeConvertor.castToAnnotation(value));
2349        } else if (name.equals("focalDevice")) {
2350          this.getFocalDevice().add((ProcedureFocalDeviceComponent) value);
2351        } else if (name.equals("used")) {
2352          this.getUsed().add(TypeConvertor.castToCodeableReference(value));
2353        } else if (name.equals("supportingInfo")) {
2354          this.getSupportingInfo().add(TypeConvertor.castToReference(value));
2355        } else
2356          return super.setProperty(name, value);
2357        return value;
2358      }
2359
2360      @Override
2361      public Base makeProperty(int hash, String name) throws FHIRException {
2362        switch (hash) {
2363        case -1618432855:  return addIdentifier(); 
2364        case 8911915:  return addInstantiatesCanonicalElement();
2365        case -1926393373:  return addInstantiatesUriElement();
2366        case -332612366:  return addBasedOn(); 
2367        case -995410646:  return addPartOf(); 
2368        case -892481550:  return getStatusElement();
2369        case 2051346646:  return getStatusReason();
2370        case 50511102:  return addCategory(); 
2371        case 3059181:  return getCode();
2372        case -1867885268:  return getSubject();
2373        case 1524132147:  return getEncounter();
2374        case -2022646513:  return getOccurrence();
2375        case 1687874001:  return getOccurrence();
2376        case -799233872:  return getRecordedElement();
2377        case -799233858:  return getRecorder();
2378        case -241505587:  return getReported();
2379        case -427039533:  return getReported();
2380        case 481140686:  return addPerformer(); 
2381        case 1901043637:  return getLocation();
2382        case -934964668:  return addReason(); 
2383        case 1702620169:  return addBodySite(); 
2384        case -1106507950:  return getOutcome();
2385        case -934521548:  return addReport(); 
2386        case -1644401602:  return addComplication(); 
2387        case -1685272017:  return addComplicationDetail(); 
2388        case 301801004:  return addFollowUp(); 
2389        case 3387378:  return addNote(); 
2390        case -1129235173:  return addFocalDevice(); 
2391        case 3599293:  return addUsed(); 
2392        case 1922406657:  return addSupportingInfo(); 
2393        default: return super.makeProperty(hash, name);
2394        }
2395
2396      }
2397
2398      @Override
2399      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2400        switch (hash) {
2401        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2402        case 8911915: /*instantiatesCanonical*/ return new String[] {"canonical"};
2403        case -1926393373: /*instantiatesUri*/ return new String[] {"uri"};
2404        case -332612366: /*basedOn*/ return new String[] {"Reference"};
2405        case -995410646: /*partOf*/ return new String[] {"Reference"};
2406        case -892481550: /*status*/ return new String[] {"code"};
2407        case 2051346646: /*statusReason*/ return new String[] {"CodeableConcept"};
2408        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2409        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
2410        case -1867885268: /*subject*/ return new String[] {"Reference"};
2411        case 1524132147: /*encounter*/ return new String[] {"Reference"};
2412        case 1687874001: /*occurrence*/ return new String[] {"dateTime", "Period", "string", "Age", "Range", "Timing"};
2413        case -799233872: /*recorded*/ return new String[] {"dateTime"};
2414        case -799233858: /*recorder*/ return new String[] {"Reference"};
2415        case -427039533: /*reported*/ return new String[] {"boolean", "Reference"};
2416        case 481140686: /*performer*/ return new String[] {};
2417        case 1901043637: /*location*/ return new String[] {"Reference"};
2418        case -934964668: /*reason*/ return new String[] {"CodeableReference"};
2419        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
2420        case -1106507950: /*outcome*/ return new String[] {"CodeableConcept"};
2421        case -934521548: /*report*/ return new String[] {"Reference"};
2422        case -1644401602: /*complication*/ return new String[] {"CodeableConcept"};
2423        case -1685272017: /*complicationDetail*/ return new String[] {"Reference"};
2424        case 301801004: /*followUp*/ return new String[] {"CodeableConcept"};
2425        case 3387378: /*note*/ return new String[] {"Annotation"};
2426        case -1129235173: /*focalDevice*/ return new String[] {};
2427        case 3599293: /*used*/ return new String[] {"CodeableReference"};
2428        case 1922406657: /*supportingInfo*/ return new String[] {"Reference"};
2429        default: return super.getTypesForProperty(hash, name);
2430        }
2431
2432      }
2433
2434      @Override
2435      public Base addChild(String name) throws FHIRException {
2436        if (name.equals("identifier")) {
2437          return addIdentifier();
2438        }
2439        else if (name.equals("instantiatesCanonical")) {
2440          throw new FHIRException("Cannot call addChild on a primitive type Procedure.instantiatesCanonical");
2441        }
2442        else if (name.equals("instantiatesUri")) {
2443          throw new FHIRException("Cannot call addChild on a primitive type Procedure.instantiatesUri");
2444        }
2445        else if (name.equals("basedOn")) {
2446          return addBasedOn();
2447        }
2448        else if (name.equals("partOf")) {
2449          return addPartOf();
2450        }
2451        else if (name.equals("status")) {
2452          throw new FHIRException("Cannot call addChild on a primitive type Procedure.status");
2453        }
2454        else if (name.equals("statusReason")) {
2455          this.statusReason = new CodeableConcept();
2456          return this.statusReason;
2457        }
2458        else if (name.equals("category")) {
2459          return addCategory();
2460        }
2461        else if (name.equals("code")) {
2462          this.code = new CodeableConcept();
2463          return this.code;
2464        }
2465        else if (name.equals("subject")) {
2466          this.subject = new Reference();
2467          return this.subject;
2468        }
2469        else if (name.equals("encounter")) {
2470          this.encounter = new Reference();
2471          return this.encounter;
2472        }
2473        else if (name.equals("occurrenceDateTime")) {
2474          this.occurrence = new DateTimeType();
2475          return this.occurrence;
2476        }
2477        else if (name.equals("occurrencePeriod")) {
2478          this.occurrence = new Period();
2479          return this.occurrence;
2480        }
2481        else if (name.equals("occurrenceString")) {
2482          this.occurrence = new StringType();
2483          return this.occurrence;
2484        }
2485        else if (name.equals("occurrenceAge")) {
2486          this.occurrence = new Age();
2487          return this.occurrence;
2488        }
2489        else if (name.equals("occurrenceRange")) {
2490          this.occurrence = new Range();
2491          return this.occurrence;
2492        }
2493        else if (name.equals("occurrenceTiming")) {
2494          this.occurrence = new Timing();
2495          return this.occurrence;
2496        }
2497        else if (name.equals("recorded")) {
2498          throw new FHIRException("Cannot call addChild on a primitive type Procedure.recorded");
2499        }
2500        else if (name.equals("recorder")) {
2501          this.recorder = new Reference();
2502          return this.recorder;
2503        }
2504        else if (name.equals("reportedBoolean")) {
2505          this.reported = new BooleanType();
2506          return this.reported;
2507        }
2508        else if (name.equals("reportedReference")) {
2509          this.reported = new Reference();
2510          return this.reported;
2511        }
2512        else if (name.equals("performer")) {
2513          return addPerformer();
2514        }
2515        else if (name.equals("location")) {
2516          this.location = new Reference();
2517          return this.location;
2518        }
2519        else if (name.equals("reason")) {
2520          return addReason();
2521        }
2522        else if (name.equals("bodySite")) {
2523          return addBodySite();
2524        }
2525        else if (name.equals("outcome")) {
2526          this.outcome = new CodeableConcept();
2527          return this.outcome;
2528        }
2529        else if (name.equals("report")) {
2530          return addReport();
2531        }
2532        else if (name.equals("complication")) {
2533          return addComplication();
2534        }
2535        else if (name.equals("complicationDetail")) {
2536          return addComplicationDetail();
2537        }
2538        else if (name.equals("followUp")) {
2539          return addFollowUp();
2540        }
2541        else if (name.equals("note")) {
2542          return addNote();
2543        }
2544        else if (name.equals("focalDevice")) {
2545          return addFocalDevice();
2546        }
2547        else if (name.equals("used")) {
2548          return addUsed();
2549        }
2550        else if (name.equals("supportingInfo")) {
2551          return addSupportingInfo();
2552        }
2553        else
2554          return super.addChild(name);
2555      }
2556
2557  public String fhirType() {
2558    return "Procedure";
2559
2560  }
2561
2562      public Procedure copy() {
2563        Procedure dst = new Procedure();
2564        copyValues(dst);
2565        return dst;
2566      }
2567
2568      public void copyValues(Procedure dst) {
2569        super.copyValues(dst);
2570        if (identifier != null) {
2571          dst.identifier = new ArrayList<Identifier>();
2572          for (Identifier i : identifier)
2573            dst.identifier.add(i.copy());
2574        };
2575        if (instantiatesCanonical != null) {
2576          dst.instantiatesCanonical = new ArrayList<CanonicalType>();
2577          for (CanonicalType i : instantiatesCanonical)
2578            dst.instantiatesCanonical.add(i.copy());
2579        };
2580        if (instantiatesUri != null) {
2581          dst.instantiatesUri = new ArrayList<UriType>();
2582          for (UriType i : instantiatesUri)
2583            dst.instantiatesUri.add(i.copy());
2584        };
2585        if (basedOn != null) {
2586          dst.basedOn = new ArrayList<Reference>();
2587          for (Reference i : basedOn)
2588            dst.basedOn.add(i.copy());
2589        };
2590        if (partOf != null) {
2591          dst.partOf = new ArrayList<Reference>();
2592          for (Reference i : partOf)
2593            dst.partOf.add(i.copy());
2594        };
2595        dst.status = status == null ? null : status.copy();
2596        dst.statusReason = statusReason == null ? null : statusReason.copy();
2597        if (category != null) {
2598          dst.category = new ArrayList<CodeableConcept>();
2599          for (CodeableConcept i : category)
2600            dst.category.add(i.copy());
2601        };
2602        dst.code = code == null ? null : code.copy();
2603        dst.subject = subject == null ? null : subject.copy();
2604        dst.encounter = encounter == null ? null : encounter.copy();
2605        dst.occurrence = occurrence == null ? null : occurrence.copy();
2606        dst.recorded = recorded == null ? null : recorded.copy();
2607        dst.recorder = recorder == null ? null : recorder.copy();
2608        dst.reported = reported == null ? null : reported.copy();
2609        if (performer != null) {
2610          dst.performer = new ArrayList<ProcedurePerformerComponent>();
2611          for (ProcedurePerformerComponent i : performer)
2612            dst.performer.add(i.copy());
2613        };
2614        dst.location = location == null ? null : location.copy();
2615        if (reason != null) {
2616          dst.reason = new ArrayList<CodeableReference>();
2617          for (CodeableReference i : reason)
2618            dst.reason.add(i.copy());
2619        };
2620        if (bodySite != null) {
2621          dst.bodySite = new ArrayList<CodeableConcept>();
2622          for (CodeableConcept i : bodySite)
2623            dst.bodySite.add(i.copy());
2624        };
2625        dst.outcome = outcome == null ? null : outcome.copy();
2626        if (report != null) {
2627          dst.report = new ArrayList<Reference>();
2628          for (Reference i : report)
2629            dst.report.add(i.copy());
2630        };
2631        if (complication != null) {
2632          dst.complication = new ArrayList<CodeableConcept>();
2633          for (CodeableConcept i : complication)
2634            dst.complication.add(i.copy());
2635        };
2636        if (complicationDetail != null) {
2637          dst.complicationDetail = new ArrayList<Reference>();
2638          for (Reference i : complicationDetail)
2639            dst.complicationDetail.add(i.copy());
2640        };
2641        if (followUp != null) {
2642          dst.followUp = new ArrayList<CodeableConcept>();
2643          for (CodeableConcept i : followUp)
2644            dst.followUp.add(i.copy());
2645        };
2646        if (note != null) {
2647          dst.note = new ArrayList<Annotation>();
2648          for (Annotation i : note)
2649            dst.note.add(i.copy());
2650        };
2651        if (focalDevice != null) {
2652          dst.focalDevice = new ArrayList<ProcedureFocalDeviceComponent>();
2653          for (ProcedureFocalDeviceComponent i : focalDevice)
2654            dst.focalDevice.add(i.copy());
2655        };
2656        if (used != null) {
2657          dst.used = new ArrayList<CodeableReference>();
2658          for (CodeableReference i : used)
2659            dst.used.add(i.copy());
2660        };
2661        if (supportingInfo != null) {
2662          dst.supportingInfo = new ArrayList<Reference>();
2663          for (Reference i : supportingInfo)
2664            dst.supportingInfo.add(i.copy());
2665        };
2666      }
2667
2668      protected Procedure typedCopy() {
2669        return copy();
2670      }
2671
2672      @Override
2673      public boolean equalsDeep(Base other_) {
2674        if (!super.equalsDeep(other_))
2675          return false;
2676        if (!(other_ instanceof Procedure))
2677          return false;
2678        Procedure o = (Procedure) other_;
2679        return compareDeep(identifier, o.identifier, true) && compareDeep(instantiatesCanonical, o.instantiatesCanonical, true)
2680           && compareDeep(instantiatesUri, o.instantiatesUri, true) && compareDeep(basedOn, o.basedOn, true)
2681           && compareDeep(partOf, o.partOf, true) && compareDeep(status, o.status, true) && compareDeep(statusReason, o.statusReason, true)
2682           && compareDeep(category, o.category, true) && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true)
2683           && compareDeep(encounter, o.encounter, true) && compareDeep(occurrence, o.occurrence, true) && compareDeep(recorded, o.recorded, true)
2684           && compareDeep(recorder, o.recorder, true) && compareDeep(reported, o.reported, true) && compareDeep(performer, o.performer, true)
2685           && compareDeep(location, o.location, true) && compareDeep(reason, o.reason, true) && compareDeep(bodySite, o.bodySite, true)
2686           && compareDeep(outcome, o.outcome, true) && compareDeep(report, o.report, true) && compareDeep(complication, o.complication, true)
2687           && compareDeep(complicationDetail, o.complicationDetail, true) && compareDeep(followUp, o.followUp, true)
2688           && compareDeep(note, o.note, true) && compareDeep(focalDevice, o.focalDevice, true) && compareDeep(used, o.used, true)
2689           && compareDeep(supportingInfo, o.supportingInfo, true);
2690      }
2691
2692      @Override
2693      public boolean equalsShallow(Base other_) {
2694        if (!super.equalsShallow(other_))
2695          return false;
2696        if (!(other_ instanceof Procedure))
2697          return false;
2698        Procedure o = (Procedure) other_;
2699        return compareValues(instantiatesCanonical, o.instantiatesCanonical, true) && compareValues(instantiatesUri, o.instantiatesUri, true)
2700           && compareValues(status, o.status, true) && compareValues(recorded, o.recorded, true);
2701      }
2702
2703      public boolean isEmpty() {
2704        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, instantiatesCanonical
2705          , instantiatesUri, basedOn, partOf, status, statusReason, category, code, subject
2706          , encounter, occurrence, recorded, recorder, reported, performer, location, reason
2707          , bodySite, outcome, report, complication, complicationDetail, followUp, note
2708          , focalDevice, used, supportingInfo);
2709      }
2710
2711  @Override
2712  public ResourceType getResourceType() {
2713    return ResourceType.Procedure;
2714   }
2715
2716 /**
2717   * Search parameter: <b>based-on</b>
2718   * <p>
2719   * Description: <b>A request for this procedure</b><br>
2720   * Type: <b>reference</b><br>
2721   * Path: <b>Procedure.basedOn</b><br>
2722   * </p>
2723   */
2724  @SearchParamDefinition(name="based-on", path="Procedure.basedOn", description="A request for this procedure", type="reference", target={CarePlan.class, ServiceRequest.class } )
2725  public static final String SP_BASED_ON = "based-on";
2726 /**
2727   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
2728   * <p>
2729   * Description: <b>A request for this procedure</b><br>
2730   * Type: <b>reference</b><br>
2731   * Path: <b>Procedure.basedOn</b><br>
2732   * </p>
2733   */
2734  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
2735
2736/**
2737   * Constant for fluent queries to be used to add include statements. Specifies
2738   * the path value of "<b>Procedure:based-on</b>".
2739   */
2740  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("Procedure:based-on").toLocked();
2741
2742 /**
2743   * Search parameter: <b>category</b>
2744   * <p>
2745   * Description: <b>Classification of the procedure</b><br>
2746   * Type: <b>token</b><br>
2747   * Path: <b>Procedure.category</b><br>
2748   * </p>
2749   */
2750  @SearchParamDefinition(name="category", path="Procedure.category", description="Classification of the procedure", type="token" )
2751  public static final String SP_CATEGORY = "category";
2752 /**
2753   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2754   * <p>
2755   * Description: <b>Classification of the procedure</b><br>
2756   * Type: <b>token</b><br>
2757   * Path: <b>Procedure.category</b><br>
2758   * </p>
2759   */
2760  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2761
2762 /**
2763   * Search parameter: <b>instantiates-canonical</b>
2764   * <p>
2765   * Description: <b>Instantiates FHIR protocol or definition</b><br>
2766   * Type: <b>reference</b><br>
2767   * Path: <b>Procedure.instantiatesCanonical</b><br>
2768   * </p>
2769   */
2770  @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 } )
2771  public static final String SP_INSTANTIATES_CANONICAL = "instantiates-canonical";
2772 /**
2773   * <b>Fluent Client</b> search parameter constant for <b>instantiates-canonical</b>
2774   * <p>
2775   * Description: <b>Instantiates FHIR protocol or definition</b><br>
2776   * Type: <b>reference</b><br>
2777   * Path: <b>Procedure.instantiatesCanonical</b><br>
2778   * </p>
2779   */
2780  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INSTANTIATES_CANONICAL = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INSTANTIATES_CANONICAL);
2781
2782/**
2783   * Constant for fluent queries to be used to add include statements. Specifies
2784   * the path value of "<b>Procedure:instantiates-canonical</b>".
2785   */
2786  public static final ca.uhn.fhir.model.api.Include INCLUDE_INSTANTIATES_CANONICAL = new ca.uhn.fhir.model.api.Include("Procedure:instantiates-canonical").toLocked();
2787
2788 /**
2789   * Search parameter: <b>instantiates-uri</b>
2790   * <p>
2791   * Description: <b>Instantiates external protocol or definition</b><br>
2792   * Type: <b>uri</b><br>
2793   * Path: <b>Procedure.instantiatesUri</b><br>
2794   * </p>
2795   */
2796  @SearchParamDefinition(name="instantiates-uri", path="Procedure.instantiatesUri", description="Instantiates external protocol or definition", type="uri" )
2797  public static final String SP_INSTANTIATES_URI = "instantiates-uri";
2798 /**
2799   * <b>Fluent Client</b> search parameter constant for <b>instantiates-uri</b>
2800   * <p>
2801   * Description: <b>Instantiates external protocol or definition</b><br>
2802   * Type: <b>uri</b><br>
2803   * Path: <b>Procedure.instantiatesUri</b><br>
2804   * </p>
2805   */
2806  public static final ca.uhn.fhir.rest.gclient.UriClientParam INSTANTIATES_URI = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_INSTANTIATES_URI);
2807
2808 /**
2809   * Search parameter: <b>location</b>
2810   * <p>
2811   * Description: <b>Where the procedure happened</b><br>
2812   * Type: <b>reference</b><br>
2813   * Path: <b>Procedure.location</b><br>
2814   * </p>
2815   */
2816  @SearchParamDefinition(name="location", path="Procedure.location", description="Where the procedure happened", type="reference", target={Location.class } )
2817  public static final String SP_LOCATION = "location";
2818 /**
2819   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2820   * <p>
2821   * Description: <b>Where the procedure happened</b><br>
2822   * Type: <b>reference</b><br>
2823   * Path: <b>Procedure.location</b><br>
2824   * </p>
2825   */
2826  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
2827
2828/**
2829   * Constant for fluent queries to be used to add include statements. Specifies
2830   * the path value of "<b>Procedure:location</b>".
2831   */
2832  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("Procedure:location").toLocked();
2833
2834 /**
2835   * Search parameter: <b>part-of</b>
2836   * <p>
2837   * Description: <b>Part of referenced event</b><br>
2838   * Type: <b>reference</b><br>
2839   * Path: <b>Procedure.partOf</b><br>
2840   * </p>
2841   */
2842  @SearchParamDefinition(name="part-of", path="Procedure.partOf", description="Part of referenced event", type="reference", target={MedicationAdministration.class, Observation.class, Procedure.class } )
2843  public static final String SP_PART_OF = "part-of";
2844 /**
2845   * <b>Fluent Client</b> search parameter constant for <b>part-of</b>
2846   * <p>
2847   * Description: <b>Part of referenced event</b><br>
2848   * Type: <b>reference</b><br>
2849   * Path: <b>Procedure.partOf</b><br>
2850   * </p>
2851   */
2852  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PART_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PART_OF);
2853
2854/**
2855   * Constant for fluent queries to be used to add include statements. Specifies
2856   * the path value of "<b>Procedure:part-of</b>".
2857   */
2858  public static final ca.uhn.fhir.model.api.Include INCLUDE_PART_OF = new ca.uhn.fhir.model.api.Include("Procedure:part-of").toLocked();
2859
2860 /**
2861   * Search parameter: <b>performer</b>
2862   * <p>
2863   * Description: <b>Who performed the procedure</b><br>
2864   * Type: <b>reference</b><br>
2865   * Path: <b>Procedure.performer.actor</b><br>
2866   * </p>
2867   */
2868  @SearchParamDefinition(name="performer", path="Procedure.performer.actor", description="Who performed the procedure", 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={CareTeam.class, Device.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2869  public static final String SP_PERFORMER = "performer";
2870 /**
2871   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
2872   * <p>
2873   * Description: <b>Who performed the procedure</b><br>
2874   * Type: <b>reference</b><br>
2875   * Path: <b>Procedure.performer.actor</b><br>
2876   * </p>
2877   */
2878  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
2879
2880/**
2881   * Constant for fluent queries to be used to add include statements. Specifies
2882   * the path value of "<b>Procedure:performer</b>".
2883   */
2884  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("Procedure:performer").toLocked();
2885
2886 /**
2887   * Search parameter: <b>reason-code</b>
2888   * <p>
2889   * Description: <b>Reference to a concept (by class)</b><br>
2890   * Type: <b>token</b><br>
2891   * Path: <b>Procedure.reason.concept</b><br>
2892   * </p>
2893   */
2894  @SearchParamDefinition(name="reason-code", path="Procedure.reason.concept", description="Reference to a concept (by class)", type="token" )
2895  public static final String SP_REASON_CODE = "reason-code";
2896 /**
2897   * <b>Fluent Client</b> search parameter constant for <b>reason-code</b>
2898   * <p>
2899   * Description: <b>Reference to a concept (by class)</b><br>
2900   * Type: <b>token</b><br>
2901   * Path: <b>Procedure.reason.concept</b><br>
2902   * </p>
2903   */
2904  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REASON_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_REASON_CODE);
2905
2906 /**
2907   * Search parameter: <b>reason-reference</b>
2908   * <p>
2909   * Description: <b>Reference to a resource (by instance)</b><br>
2910   * Type: <b>reference</b><br>
2911   * Path: <b>Procedure.reason.reference</b><br>
2912   * </p>
2913   */
2914  @SearchParamDefinition(name="reason-reference", path="Procedure.reason.reference", description="Reference to a resource (by instance)", type="reference" )
2915  public static final String SP_REASON_REFERENCE = "reason-reference";
2916 /**
2917   * <b>Fluent Client</b> search parameter constant for <b>reason-reference</b>
2918   * <p>
2919   * Description: <b>Reference to a resource (by instance)</b><br>
2920   * Type: <b>reference</b><br>
2921   * Path: <b>Procedure.reason.reference</b><br>
2922   * </p>
2923   */
2924  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REASON_REFERENCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REASON_REFERENCE);
2925
2926/**
2927   * Constant for fluent queries to be used to add include statements. Specifies
2928   * the path value of "<b>Procedure:reason-reference</b>".
2929   */
2930  public static final ca.uhn.fhir.model.api.Include INCLUDE_REASON_REFERENCE = new ca.uhn.fhir.model.api.Include("Procedure:reason-reference").toLocked();
2931
2932 /**
2933   * Search parameter: <b>report</b>
2934   * <p>
2935   * Description: <b>Any report resulting from the procedure</b><br>
2936   * Type: <b>reference</b><br>
2937   * Path: <b>Procedure.report</b><br>
2938   * </p>
2939   */
2940  @SearchParamDefinition(name="report", path="Procedure.report", description="Any report resulting from the procedure", type="reference", target={Composition.class, DiagnosticReport.class, DocumentReference.class } )
2941  public static final String SP_REPORT = "report";
2942 /**
2943   * <b>Fluent Client</b> search parameter constant for <b>report</b>
2944   * <p>
2945   * Description: <b>Any report resulting from the procedure</b><br>
2946   * Type: <b>reference</b><br>
2947   * Path: <b>Procedure.report</b><br>
2948   * </p>
2949   */
2950  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REPORT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REPORT);
2951
2952/**
2953   * Constant for fluent queries to be used to add include statements. Specifies
2954   * the path value of "<b>Procedure:report</b>".
2955   */
2956  public static final ca.uhn.fhir.model.api.Include INCLUDE_REPORT = new ca.uhn.fhir.model.api.Include("Procedure:report").toLocked();
2957
2958 /**
2959   * Search parameter: <b>status</b>
2960   * <p>
2961   * Description: <b>preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown</b><br>
2962   * Type: <b>token</b><br>
2963   * Path: <b>Procedure.status</b><br>
2964   * </p>
2965   */
2966  @SearchParamDefinition(name="status", path="Procedure.status", description="preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown", type="token" )
2967  public static final String SP_STATUS = "status";
2968 /**
2969   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2970   * <p>
2971   * Description: <b>preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown</b><br>
2972   * Type: <b>token</b><br>
2973   * Path: <b>Procedure.status</b><br>
2974   * </p>
2975   */
2976  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2977
2978 /**
2979   * Search parameter: <b>subject</b>
2980   * <p>
2981   * Description: <b>Search by subject</b><br>
2982   * Type: <b>reference</b><br>
2983   * Path: <b>Procedure.subject</b><br>
2984   * </p>
2985   */
2986  @SearchParamDefinition(name="subject", path="Procedure.subject", description="Search by subject", type="reference", target={Device.class, Group.class, Location.class, Organization.class, Patient.class, Practitioner.class } )
2987  public static final String SP_SUBJECT = "subject";
2988 /**
2989   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2990   * <p>
2991   * Description: <b>Search by subject</b><br>
2992   * Type: <b>reference</b><br>
2993   * Path: <b>Procedure.subject</b><br>
2994   * </p>
2995   */
2996  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2997
2998/**
2999   * Constant for fluent queries to be used to add include statements. Specifies
3000   * the path value of "<b>Procedure:subject</b>".
3001   */
3002  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Procedure:subject").toLocked();
3003
3004 /**
3005   * Search parameter: <b>code</b>
3006   * <p>
3007   * Description: <b>Multiple Resources: 
3008
3009* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance
3010* [Condition](condition.html): Code for the condition
3011* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered
3012* [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
3013* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code
3014* [List](list.html): What the purpose of this list is
3015* [Medication](medication.html): Returns medications for a specific code
3016* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code
3017* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code
3018* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code
3019* [MedicationUsage](medicationusage.html): Return statements of this medication code
3020* [Observation](observation.html): The code of the observation type
3021* [Procedure](procedure.html): A code to identify a  procedure
3022* [ServiceRequest](servicerequest.html): What is being requested/ordered
3023</b><br>
3024   * Type: <b>token</b><br>
3025   * Path: <b>AllergyIntolerance.code | AllergyIntolerance.reaction.substance | Condition.code | DeviceRequest.code.concept | DiagnosticReport.code | FamilyMemberHistory.condition.code | List.code | Medication.code | MedicationAdministration.medication.concept | MedicationDispense.medication.concept | MedicationRequest.medication.concept | MedicationUsage.medication.concept | Observation.code | Procedure.code | ServiceRequest.code</b><br>
3026   * </p>
3027   */
3028  @SearchParamDefinition(name="code", path="AllergyIntolerance.code | AllergyIntolerance.reaction.substance | Condition.code | DeviceRequest.code.concept | DiagnosticReport.code | FamilyMemberHistory.condition.code | List.code | Medication.code | MedicationAdministration.medication.concept | MedicationDispense.medication.concept | MedicationRequest.medication.concept | MedicationUsage.medication.concept | 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* [MedicationUsage](medicationusage.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" )
3029  public static final String SP_CODE = "code";
3030 /**
3031   * <b>Fluent Client</b> search parameter constant for <b>code</b>
3032   * <p>
3033   * Description: <b>Multiple Resources: 
3034
3035* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance
3036* [Condition](condition.html): Code for the condition
3037* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered
3038* [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
3039* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code
3040* [List](list.html): What the purpose of this list is
3041* [Medication](medication.html): Returns medications for a specific code
3042* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code
3043* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code
3044* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code
3045* [MedicationUsage](medicationusage.html): Return statements of this medication code
3046* [Observation](observation.html): The code of the observation type
3047* [Procedure](procedure.html): A code to identify a  procedure
3048* [ServiceRequest](servicerequest.html): What is being requested/ordered
3049</b><br>
3050   * Type: <b>token</b><br>
3051   * Path: <b>AllergyIntolerance.code | AllergyIntolerance.reaction.substance | Condition.code | DeviceRequest.code.concept | DiagnosticReport.code | FamilyMemberHistory.condition.code | List.code | Medication.code | MedicationAdministration.medication.concept | MedicationDispense.medication.concept | MedicationRequest.medication.concept | MedicationUsage.medication.concept | Observation.code | Procedure.code | ServiceRequest.code</b><br>
3052   * </p>
3053   */
3054  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
3055
3056 /**
3057   * Search parameter: <b>date</b>
3058   * <p>
3059   * Description: <b>Multiple Resources: 
3060
3061* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3062* [CarePlan](careplan.html): Time period plan covers
3063* [CareTeam](careteam.html): A date within the coverage time period.
3064* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3065* [Composition](composition.html): Composition editing time
3066* [Consent](consent.html): When consent was agreed to
3067* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3068* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
3069* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3070* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3071* [Flag](flag.html): Time period when flag is active
3072* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3073* [List](list.html): When the list was prepared
3074* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3075* [Procedure](procedure.html): When the procedure occurred or is occurring
3076* [RiskAssessment](riskassessment.html): When was assessment made?
3077* [SupplyRequest](supplyrequest.html): When the request was made
3078</b><br>
3079   * Type: <b>date</b><br>
3080   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence as dateTime) | List.date | Observation.effective | Procedure.occurrence | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3081   * </p>
3082   */
3083  @SearchParamDefinition(name="date", path="AllergyIntolerance.recordedDate | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence as dateTime) | List.date | Observation.effective | Procedure.occurrence | (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): A date within the coverage time period.\r\n* [ClinicalImpression](clinicalimpression.html): When the assessment was documented\r\n* [Composition](composition.html): Composition editing time\r\n* [Consent](consent.html): When consent was agreed to\r\n* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report\r\n* [Encounter](encounter.html): A date within the actualPeriod 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 occurred or is occurring\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
3084  public static final String SP_DATE = "date";
3085 /**
3086   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3087   * <p>
3088   * Description: <b>Multiple Resources: 
3089
3090* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3091* [CarePlan](careplan.html): Time period plan covers
3092* [CareTeam](careteam.html): A date within the coverage time period.
3093* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3094* [Composition](composition.html): Composition editing time
3095* [Consent](consent.html): When consent was agreed to
3096* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3097* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
3098* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3099* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3100* [Flag](flag.html): Time period when flag is active
3101* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3102* [List](list.html): When the list was prepared
3103* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3104* [Procedure](procedure.html): When the procedure occurred or is occurring
3105* [RiskAssessment](riskassessment.html): When was assessment made?
3106* [SupplyRequest](supplyrequest.html): When the request was made
3107</b><br>
3108   * Type: <b>date</b><br>
3109   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence as dateTime) | List.date | Observation.effective | Procedure.occurrence | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3110   * </p>
3111   */
3112  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3113
3114 /**
3115   * Search parameter: <b>encounter</b>
3116   * <p>
3117   * Description: <b>Multiple Resources: 
3118
3119* [Composition](composition.html): Context of the Composition
3120* [DeviceRequest](devicerequest.html): Encounter during which request was created
3121* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
3122* [Flag](flag.html): Alert relevant during encounter
3123* [List](list.html): Context in which list created
3124* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
3125* [Observation](observation.html): Encounter related to the observation
3126* [Procedure](procedure.html): The Encounter during which this Procedure was created
3127* [RiskAssessment](riskassessment.html): Where was assessment performed?
3128* [ServiceRequest](servicerequest.html): An encounter in which this request is made
3129* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
3130</b><br>
3131   * Type: <b>reference</b><br>
3132   * Path: <b>Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter</b><br>
3133   * </p>
3134   */
3135  @SearchParamDefinition(name="encounter", path="Composition.encounter | DeviceRequest.encounter | DiagnosticReport.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* [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): The Encounter during which this Procedure was created\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 } )
3136  public static final String SP_ENCOUNTER = "encounter";
3137 /**
3138   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
3139   * <p>
3140   * Description: <b>Multiple Resources: 
3141
3142* [Composition](composition.html): Context of the Composition
3143* [DeviceRequest](devicerequest.html): Encounter during which request was created
3144* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
3145* [Flag](flag.html): Alert relevant during encounter
3146* [List](list.html): Context in which list created
3147* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
3148* [Observation](observation.html): Encounter related to the observation
3149* [Procedure](procedure.html): The Encounter during which this Procedure was created
3150* [RiskAssessment](riskassessment.html): Where was assessment performed?
3151* [ServiceRequest](servicerequest.html): An encounter in which this request is made
3152* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
3153</b><br>
3154   * Type: <b>reference</b><br>
3155   * Path: <b>Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter</b><br>
3156   * </p>
3157   */
3158  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
3159
3160/**
3161   * Constant for fluent queries to be used to add include statements. Specifies
3162   * the path value of "<b>Procedure:encounter</b>".
3163   */
3164  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Procedure:encounter").toLocked();
3165
3166 /**
3167   * Search parameter: <b>identifier</b>
3168   * <p>
3169   * Description: <b>Multiple Resources: 
3170
3171* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3172* [CarePlan](careplan.html): External Ids for this plan
3173* [CareTeam](careteam.html): External Ids for this team
3174* [Composition](composition.html): Version-independent identifier for the Composition
3175* [Condition](condition.html): A unique identifier of the condition record
3176* [Consent](consent.html): Identifier for this record (external references)
3177* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3178* [DeviceRequest](devicerequest.html): Business identifier for request/order
3179* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3180* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3181* [DocumentReference](documentreference.html): Identifier of the attachment binary
3182* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3183* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3184* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3185* [Goal](goal.html): External Ids for this goal
3186* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
3187* [Immunization](immunization.html): Business identifier
3188* [List](list.html): Business identifier
3189* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3190* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3191* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3192* [MedicationUsage](medicationusage.html): Return statements with this external identifier
3193* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3194* [Observation](observation.html): The unique id for a particular observation
3195* [Procedure](procedure.html): A unique identifier for a procedure
3196* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3197* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3198* [SupplyDelivery](supplydelivery.html): External identifier
3199* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3200* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3201</b><br>
3202   * Type: <b>token</b><br>
3203   * 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.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationUsage.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3204   * </p>
3205   */
3206  @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.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationUsage.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): Identifier of the attachment binary\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\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* [MedicationUsage](medicationusage.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" )
3207  public static final String SP_IDENTIFIER = "identifier";
3208 /**
3209   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3210   * <p>
3211   * Description: <b>Multiple Resources: 
3212
3213* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3214* [CarePlan](careplan.html): External Ids for this plan
3215* [CareTeam](careteam.html): External Ids for this team
3216* [Composition](composition.html): Version-independent identifier for the Composition
3217* [Condition](condition.html): A unique identifier of the condition record
3218* [Consent](consent.html): Identifier for this record (external references)
3219* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3220* [DeviceRequest](devicerequest.html): Business identifier for request/order
3221* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3222* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3223* [DocumentReference](documentreference.html): Identifier of the attachment binary
3224* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3225* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3226* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3227* [Goal](goal.html): External Ids for this goal
3228* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
3229* [Immunization](immunization.html): Business identifier
3230* [List](list.html): Business identifier
3231* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3232* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3233* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3234* [MedicationUsage](medicationusage.html): Return statements with this external identifier
3235* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3236* [Observation](observation.html): The unique id for a particular observation
3237* [Procedure](procedure.html): A unique identifier for a procedure
3238* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3239* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3240* [SupplyDelivery](supplydelivery.html): External identifier
3241* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3242* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3243</b><br>
3244   * Type: <b>token</b><br>
3245   * 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.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationUsage.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3246   * </p>
3247   */
3248  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3249
3250 /**
3251   * Search parameter: <b>patient</b>
3252   * <p>
3253   * Description: <b>Multiple Resources: 
3254
3255* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3256* [CarePlan](careplan.html): Who the care plan is for
3257* [CareTeam](careteam.html): Who care team is for
3258* [ClinicalImpression](clinicalimpression.html): Patient assessed
3259* [Composition](composition.html): Who and/or what the composition is about
3260* [Condition](condition.html): Who has the condition?
3261* [Consent](consent.html): Who the consent applies to
3262* [DetectedIssue](detectedissue.html): Associated patient
3263* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3264* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
3265* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3266* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3267* [DocumentReference](documentreference.html): Who/what is the subject of the document
3268* [Encounter](encounter.html): The patient present at the encounter
3269* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3270* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3271* [Flag](flag.html): The identity of a subject to list flags for
3272* [Goal](goal.html): Who this goal is intended for
3273* [ImagingStudy](imagingstudy.html): Who the study is about
3274* [Immunization](immunization.html): The patient for the vaccination record
3275* [List](list.html): If all resources have the same subject
3276* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3277* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3278* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3279* [MedicationUsage](medicationusage.html): Returns statements for a specific patient.
3280* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3281* [Observation](observation.html): The subject that the observation is about (if patient)
3282* [Procedure](procedure.html): Search by subject - a patient
3283* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3284* [ServiceRequest](servicerequest.html): Search by subject - a patient
3285* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3286* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3287</b><br>
3288   * Type: <b>reference</b><br>
3289   * 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.subject.where(resolve() is Patient) | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.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) | MedicationUsage.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>
3290   * </p>
3291   */
3292  @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.subject.where(resolve() is Patient) | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.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) | MedicationUsage.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 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* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device\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 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* [MedicationUsage](medicationusage.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={Patient.class } )
3293  public static final String SP_PATIENT = "patient";
3294 /**
3295   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3296   * <p>
3297   * Description: <b>Multiple Resources: 
3298
3299* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3300* [CarePlan](careplan.html): Who the care plan is for
3301* [CareTeam](careteam.html): Who care team is for
3302* [ClinicalImpression](clinicalimpression.html): Patient assessed
3303* [Composition](composition.html): Who and/or what the composition is about
3304* [Condition](condition.html): Who has the condition?
3305* [Consent](consent.html): Who the consent applies to
3306* [DetectedIssue](detectedissue.html): Associated patient
3307* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3308* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
3309* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3310* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3311* [DocumentReference](documentreference.html): Who/what is the subject of the document
3312* [Encounter](encounter.html): The patient present at the encounter
3313* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3314* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3315* [Flag](flag.html): The identity of a subject to list flags for
3316* [Goal](goal.html): Who this goal is intended for
3317* [ImagingStudy](imagingstudy.html): Who the study is about
3318* [Immunization](immunization.html): The patient for the vaccination record
3319* [List](list.html): If all resources have the same subject
3320* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3321* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3322* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3323* [MedicationUsage](medicationusage.html): Returns statements for a specific patient.
3324* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3325* [Observation](observation.html): The subject that the observation is about (if patient)
3326* [Procedure](procedure.html): Search by subject - a patient
3327* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3328* [ServiceRequest](servicerequest.html): Search by subject - a patient
3329* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3330* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3331</b><br>
3332   * Type: <b>reference</b><br>
3333   * 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.subject.where(resolve() is Patient) | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.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) | MedicationUsage.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>
3334   * </p>
3335   */
3336  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3337
3338/**
3339   * Constant for fluent queries to be used to add include statements. Specifies
3340   * the path value of "<b>Procedure:patient</b>".
3341   */
3342  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Procedure:patient").toLocked();
3343
3344
3345}
3346