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