001package org.hl7.fhir.r4b.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * Describes the event of a patient being administered a vaccine or a record of an immunization as reported by a patient, a clinician or another party.
052 */
053@ResourceDef(name="Immunization", profile="http://hl7.org/fhir/StructureDefinition/Immunization")
054public class Immunization extends DomainResource {
055
056    public enum ImmunizationStatusCodes {
057        /**
058         * The event has now concluded.
059         */
060        COMPLETED, 
061        /**
062         * This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be \"stopped\" rather than \"entered-in-error\".).
063         */
064        ENTEREDINERROR, 
065        /**
066         * The event was terminated prior to any activity beyond preparation.  I.e. The 'main' activity has not yet begun.  The boundary between preparatory and the 'main' activity is context-specific.
067         */
068        NOTDONE, 
069        /**
070         * added to help the parsers with the generic types
071         */
072        NULL;
073        public static ImmunizationStatusCodes fromCode(String codeString) throws FHIRException {
074            if (codeString == null || "".equals(codeString))
075                return null;
076        if ("completed".equals(codeString))
077          return COMPLETED;
078        if ("entered-in-error".equals(codeString))
079          return ENTEREDINERROR;
080        if ("not-done".equals(codeString))
081          return NOTDONE;
082        if (Configuration.isAcceptInvalidEnums())
083          return null;
084        else
085          throw new FHIRException("Unknown ImmunizationStatusCodes code '"+codeString+"'");
086        }
087        public String toCode() {
088          switch (this) {
089            case COMPLETED: return "completed";
090            case ENTEREDINERROR: return "entered-in-error";
091            case NOTDONE: return "not-done";
092            case NULL: return null;
093            default: return "?";
094          }
095        }
096        public String getSystem() {
097          switch (this) {
098            case COMPLETED: return "http://hl7.org/fhir/event-status";
099            case ENTEREDINERROR: return "http://hl7.org/fhir/event-status";
100            case NOTDONE: return "http://hl7.org/fhir/event-status";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDefinition() {
106          switch (this) {
107            case COMPLETED: return "The event has now concluded.";
108            case ENTEREDINERROR: return "This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be \"stopped\" rather than \"entered-in-error\".).";
109            case NOTDONE: return "The event was terminated prior to any activity beyond preparation.  I.e. The 'main' activity has not yet begun.  The boundary between preparatory and the 'main' activity is context-specific.";
110            case NULL: return null;
111            default: return "?";
112          }
113        }
114        public String getDisplay() {
115          switch (this) {
116            case COMPLETED: return "Completed";
117            case ENTEREDINERROR: return "Entered in Error";
118            case NOTDONE: return "Not Done";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123    }
124
125  public static class ImmunizationStatusCodesEnumFactory implements EnumFactory<ImmunizationStatusCodes> {
126    public ImmunizationStatusCodes fromCode(String codeString) throws IllegalArgumentException {
127      if (codeString == null || "".equals(codeString))
128            if (codeString == null || "".equals(codeString))
129                return null;
130        if ("completed".equals(codeString))
131          return ImmunizationStatusCodes.COMPLETED;
132        if ("entered-in-error".equals(codeString))
133          return ImmunizationStatusCodes.ENTEREDINERROR;
134        if ("not-done".equals(codeString))
135          return ImmunizationStatusCodes.NOTDONE;
136        throw new IllegalArgumentException("Unknown ImmunizationStatusCodes code '"+codeString+"'");
137        }
138        public Enumeration<ImmunizationStatusCodes> fromType(Base code) throws FHIRException {
139          if (code == null)
140            return null;
141          if (code.isEmpty())
142            return new Enumeration<ImmunizationStatusCodes>(this);
143          String codeString = ((PrimitiveType) code).asStringValue();
144          if (codeString == null || "".equals(codeString))
145            return null;
146        if ("completed".equals(codeString))
147          return new Enumeration<ImmunizationStatusCodes>(this, ImmunizationStatusCodes.COMPLETED);
148        if ("entered-in-error".equals(codeString))
149          return new Enumeration<ImmunizationStatusCodes>(this, ImmunizationStatusCodes.ENTEREDINERROR);
150        if ("not-done".equals(codeString))
151          return new Enumeration<ImmunizationStatusCodes>(this, ImmunizationStatusCodes.NOTDONE);
152        throw new FHIRException("Unknown ImmunizationStatusCodes code '"+codeString+"'");
153        }
154    public String toCode(ImmunizationStatusCodes code) {
155      if (code == ImmunizationStatusCodes.COMPLETED)
156        return "completed";
157      if (code == ImmunizationStatusCodes.ENTEREDINERROR)
158        return "entered-in-error";
159      if (code == ImmunizationStatusCodes.NOTDONE)
160        return "not-done";
161      return "?";
162      }
163    public String toSystem(ImmunizationStatusCodes code) {
164      return code.getSystem();
165      }
166    }
167
168    @Block()
169    public static class ImmunizationPerformerComponent extends BackboneElement implements IBaseBackboneElement {
170        /**
171         * Describes the type of performance (e.g. ordering provider, administering provider, etc.).
172         */
173        @Child(name = "function", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
174        @Description(shortDefinition="What type of performance was done", formalDefinition="Describes the type of performance (e.g. ordering provider, administering provider, etc.)." )
175        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-function")
176        protected CodeableConcept function;
177
178        /**
179         * The practitioner or organization who performed the action.
180         */
181        @Child(name = "actor", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=2, min=1, max=1, modifier=false, summary=true)
182        @Description(shortDefinition="Individual or organization who was performing", formalDefinition="The practitioner or organization who performed the action." )
183        protected Reference actor;
184
185        private static final long serialVersionUID = -576943815L;
186
187    /**
188     * Constructor
189     */
190      public ImmunizationPerformerComponent() {
191        super();
192      }
193
194    /**
195     * Constructor
196     */
197      public ImmunizationPerformerComponent(Reference actor) {
198        super();
199        this.setActor(actor);
200      }
201
202        /**
203         * @return {@link #function} (Describes the type of performance (e.g. ordering provider, administering provider, etc.).)
204         */
205        public CodeableConcept getFunction() { 
206          if (this.function == null)
207            if (Configuration.errorOnAutoCreate())
208              throw new Error("Attempt to auto-create ImmunizationPerformerComponent.function");
209            else if (Configuration.doAutoCreate())
210              this.function = new CodeableConcept(); // cc
211          return this.function;
212        }
213
214        public boolean hasFunction() { 
215          return this.function != null && !this.function.isEmpty();
216        }
217
218        /**
219         * @param value {@link #function} (Describes the type of performance (e.g. ordering provider, administering provider, etc.).)
220         */
221        public ImmunizationPerformerComponent setFunction(CodeableConcept value) { 
222          this.function = value;
223          return this;
224        }
225
226        /**
227         * @return {@link #actor} (The practitioner or organization who performed the action.)
228         */
229        public Reference getActor() { 
230          if (this.actor == null)
231            if (Configuration.errorOnAutoCreate())
232              throw new Error("Attempt to auto-create ImmunizationPerformerComponent.actor");
233            else if (Configuration.doAutoCreate())
234              this.actor = new Reference(); // cc
235          return this.actor;
236        }
237
238        public boolean hasActor() { 
239          return this.actor != null && !this.actor.isEmpty();
240        }
241
242        /**
243         * @param value {@link #actor} (The practitioner or organization who performed the action.)
244         */
245        public ImmunizationPerformerComponent setActor(Reference value) { 
246          this.actor = value;
247          return this;
248        }
249
250        protected void listChildren(List<Property> children) {
251          super.listChildren(children);
252          children.add(new Property("function", "CodeableConcept", "Describes the type of performance (e.g. ordering provider, administering provider, etc.).", 0, 1, function));
253          children.add(new Property("actor", "Reference(Practitioner|PractitionerRole|Organization)", "The practitioner or organization who performed the action.", 0, 1, actor));
254        }
255
256        @Override
257        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
258          switch (_hash) {
259          case 1380938712: /*function*/  return new Property("function", "CodeableConcept", "Describes the type of performance (e.g. ordering provider, administering provider, etc.).", 0, 1, function);
260          case 92645877: /*actor*/  return new Property("actor", "Reference(Practitioner|PractitionerRole|Organization)", "The practitioner or organization who performed the action.", 0, 1, actor);
261          default: return super.getNamedProperty(_hash, _name, _checkValid);
262          }
263
264        }
265
266      @Override
267      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
268        switch (hash) {
269        case 1380938712: /*function*/ return this.function == null ? new Base[0] : new Base[] {this.function}; // CodeableConcept
270        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : new Base[] {this.actor}; // Reference
271        default: return super.getProperty(hash, name, checkValid);
272        }
273
274      }
275
276      @Override
277      public Base setProperty(int hash, String name, Base value) throws FHIRException {
278        switch (hash) {
279        case 1380938712: // function
280          this.function = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
281          return value;
282        case 92645877: // actor
283          this.actor = TypeConvertor.castToReference(value); // Reference
284          return value;
285        default: return super.setProperty(hash, name, value);
286        }
287
288      }
289
290      @Override
291      public Base setProperty(String name, Base value) throws FHIRException {
292        if (name.equals("function")) {
293          this.function = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
294        } else if (name.equals("actor")) {
295          this.actor = TypeConvertor.castToReference(value); // Reference
296        } else
297          return super.setProperty(name, value);
298        return value;
299      }
300
301      @Override
302      public Base makeProperty(int hash, String name) throws FHIRException {
303        switch (hash) {
304        case 1380938712:  return getFunction();
305        case 92645877:  return getActor();
306        default: return super.makeProperty(hash, name);
307        }
308
309      }
310
311      @Override
312      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
313        switch (hash) {
314        case 1380938712: /*function*/ return new String[] {"CodeableConcept"};
315        case 92645877: /*actor*/ return new String[] {"Reference"};
316        default: return super.getTypesForProperty(hash, name);
317        }
318
319      }
320
321      @Override
322      public Base addChild(String name) throws FHIRException {
323        if (name.equals("function")) {
324          this.function = new CodeableConcept();
325          return this.function;
326        }
327        else if (name.equals("actor")) {
328          this.actor = new Reference();
329          return this.actor;
330        }
331        else
332          return super.addChild(name);
333      }
334
335      public ImmunizationPerformerComponent copy() {
336        ImmunizationPerformerComponent dst = new ImmunizationPerformerComponent();
337        copyValues(dst);
338        return dst;
339      }
340
341      public void copyValues(ImmunizationPerformerComponent dst) {
342        super.copyValues(dst);
343        dst.function = function == null ? null : function.copy();
344        dst.actor = actor == null ? null : actor.copy();
345      }
346
347      @Override
348      public boolean equalsDeep(Base other_) {
349        if (!super.equalsDeep(other_))
350          return false;
351        if (!(other_ instanceof ImmunizationPerformerComponent))
352          return false;
353        ImmunizationPerformerComponent o = (ImmunizationPerformerComponent) other_;
354        return compareDeep(function, o.function, true) && compareDeep(actor, o.actor, true);
355      }
356
357      @Override
358      public boolean equalsShallow(Base other_) {
359        if (!super.equalsShallow(other_))
360          return false;
361        if (!(other_ instanceof ImmunizationPerformerComponent))
362          return false;
363        ImmunizationPerformerComponent o = (ImmunizationPerformerComponent) other_;
364        return true;
365      }
366
367      public boolean isEmpty() {
368        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(function, actor);
369      }
370
371  public String fhirType() {
372    return "Immunization.performer";
373
374  }
375
376  }
377
378    @Block()
379    public static class ImmunizationEducationComponent extends BackboneElement implements IBaseBackboneElement {
380        /**
381         * Identifier of the material presented to the patient.
382         */
383        @Child(name = "documentType", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
384        @Description(shortDefinition="Educational material document identifier", formalDefinition="Identifier of the material presented to the patient." )
385        protected StringType documentType;
386
387        /**
388         * Reference pointer to the educational material given to the patient if the information was on line.
389         */
390        @Child(name = "reference", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
391        @Description(shortDefinition="Educational material reference pointer", formalDefinition="Reference pointer to the educational material given to the patient if the information was on line." )
392        protected UriType reference;
393
394        /**
395         * Date the educational material was published.
396         */
397        @Child(name = "publicationDate", type = {DateTimeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
398        @Description(shortDefinition="Educational material publication date", formalDefinition="Date the educational material was published." )
399        protected DateTimeType publicationDate;
400
401        /**
402         * Date the educational material was given to the patient.
403         */
404        @Child(name = "presentationDate", type = {DateTimeType.class}, order=4, min=0, max=1, modifier=false, summary=false)
405        @Description(shortDefinition="Educational material presentation date", formalDefinition="Date the educational material was given to the patient." )
406        protected DateTimeType presentationDate;
407
408        private static final long serialVersionUID = -1277654827L;
409
410    /**
411     * Constructor
412     */
413      public ImmunizationEducationComponent() {
414        super();
415      }
416
417        /**
418         * @return {@link #documentType} (Identifier of the material presented to the patient.). This is the underlying object with id, value and extensions. The accessor "getDocumentType" gives direct access to the value
419         */
420        public StringType getDocumentTypeElement() { 
421          if (this.documentType == null)
422            if (Configuration.errorOnAutoCreate())
423              throw new Error("Attempt to auto-create ImmunizationEducationComponent.documentType");
424            else if (Configuration.doAutoCreate())
425              this.documentType = new StringType(); // bb
426          return this.documentType;
427        }
428
429        public boolean hasDocumentTypeElement() { 
430          return this.documentType != null && !this.documentType.isEmpty();
431        }
432
433        public boolean hasDocumentType() { 
434          return this.documentType != null && !this.documentType.isEmpty();
435        }
436
437        /**
438         * @param value {@link #documentType} (Identifier of the material presented to the patient.). This is the underlying object with id, value and extensions. The accessor "getDocumentType" gives direct access to the value
439         */
440        public ImmunizationEducationComponent setDocumentTypeElement(StringType value) { 
441          this.documentType = value;
442          return this;
443        }
444
445        /**
446         * @return Identifier of the material presented to the patient.
447         */
448        public String getDocumentType() { 
449          return this.documentType == null ? null : this.documentType.getValue();
450        }
451
452        /**
453         * @param value Identifier of the material presented to the patient.
454         */
455        public ImmunizationEducationComponent setDocumentType(String value) { 
456          if (Utilities.noString(value))
457            this.documentType = null;
458          else {
459            if (this.documentType == null)
460              this.documentType = new StringType();
461            this.documentType.setValue(value);
462          }
463          return this;
464        }
465
466        /**
467         * @return {@link #reference} (Reference pointer to the educational material given to the patient if the information was on line.). This is the underlying object with id, value and extensions. The accessor "getReference" gives direct access to the value
468         */
469        public UriType getReferenceElement() { 
470          if (this.reference == null)
471            if (Configuration.errorOnAutoCreate())
472              throw new Error("Attempt to auto-create ImmunizationEducationComponent.reference");
473            else if (Configuration.doAutoCreate())
474              this.reference = new UriType(); // bb
475          return this.reference;
476        }
477
478        public boolean hasReferenceElement() { 
479          return this.reference != null && !this.reference.isEmpty();
480        }
481
482        public boolean hasReference() { 
483          return this.reference != null && !this.reference.isEmpty();
484        }
485
486        /**
487         * @param value {@link #reference} (Reference pointer to the educational material given to the patient if the information was on line.). This is the underlying object with id, value and extensions. The accessor "getReference" gives direct access to the value
488         */
489        public ImmunizationEducationComponent setReferenceElement(UriType value) { 
490          this.reference = value;
491          return this;
492        }
493
494        /**
495         * @return Reference pointer to the educational material given to the patient if the information was on line.
496         */
497        public String getReference() { 
498          return this.reference == null ? null : this.reference.getValue();
499        }
500
501        /**
502         * @param value Reference pointer to the educational material given to the patient if the information was on line.
503         */
504        public ImmunizationEducationComponent setReference(String value) { 
505          if (Utilities.noString(value))
506            this.reference = null;
507          else {
508            if (this.reference == null)
509              this.reference = new UriType();
510            this.reference.setValue(value);
511          }
512          return this;
513        }
514
515        /**
516         * @return {@link #publicationDate} (Date the educational material was published.). This is the underlying object with id, value and extensions. The accessor "getPublicationDate" gives direct access to the value
517         */
518        public DateTimeType getPublicationDateElement() { 
519          if (this.publicationDate == null)
520            if (Configuration.errorOnAutoCreate())
521              throw new Error("Attempt to auto-create ImmunizationEducationComponent.publicationDate");
522            else if (Configuration.doAutoCreate())
523              this.publicationDate = new DateTimeType(); // bb
524          return this.publicationDate;
525        }
526
527        public boolean hasPublicationDateElement() { 
528          return this.publicationDate != null && !this.publicationDate.isEmpty();
529        }
530
531        public boolean hasPublicationDate() { 
532          return this.publicationDate != null && !this.publicationDate.isEmpty();
533        }
534
535        /**
536         * @param value {@link #publicationDate} (Date the educational material was published.). This is the underlying object with id, value and extensions. The accessor "getPublicationDate" gives direct access to the value
537         */
538        public ImmunizationEducationComponent setPublicationDateElement(DateTimeType value) { 
539          this.publicationDate = value;
540          return this;
541        }
542
543        /**
544         * @return Date the educational material was published.
545         */
546        public Date getPublicationDate() { 
547          return this.publicationDate == null ? null : this.publicationDate.getValue();
548        }
549
550        /**
551         * @param value Date the educational material was published.
552         */
553        public ImmunizationEducationComponent setPublicationDate(Date value) { 
554          if (value == null)
555            this.publicationDate = null;
556          else {
557            if (this.publicationDate == null)
558              this.publicationDate = new DateTimeType();
559            this.publicationDate.setValue(value);
560          }
561          return this;
562        }
563
564        /**
565         * @return {@link #presentationDate} (Date the educational material was given to the patient.). This is the underlying object with id, value and extensions. The accessor "getPresentationDate" gives direct access to the value
566         */
567        public DateTimeType getPresentationDateElement() { 
568          if (this.presentationDate == null)
569            if (Configuration.errorOnAutoCreate())
570              throw new Error("Attempt to auto-create ImmunizationEducationComponent.presentationDate");
571            else if (Configuration.doAutoCreate())
572              this.presentationDate = new DateTimeType(); // bb
573          return this.presentationDate;
574        }
575
576        public boolean hasPresentationDateElement() { 
577          return this.presentationDate != null && !this.presentationDate.isEmpty();
578        }
579
580        public boolean hasPresentationDate() { 
581          return this.presentationDate != null && !this.presentationDate.isEmpty();
582        }
583
584        /**
585         * @param value {@link #presentationDate} (Date the educational material was given to the patient.). This is the underlying object with id, value and extensions. The accessor "getPresentationDate" gives direct access to the value
586         */
587        public ImmunizationEducationComponent setPresentationDateElement(DateTimeType value) { 
588          this.presentationDate = value;
589          return this;
590        }
591
592        /**
593         * @return Date the educational material was given to the patient.
594         */
595        public Date getPresentationDate() { 
596          return this.presentationDate == null ? null : this.presentationDate.getValue();
597        }
598
599        /**
600         * @param value Date the educational material was given to the patient.
601         */
602        public ImmunizationEducationComponent setPresentationDate(Date value) { 
603          if (value == null)
604            this.presentationDate = null;
605          else {
606            if (this.presentationDate == null)
607              this.presentationDate = new DateTimeType();
608            this.presentationDate.setValue(value);
609          }
610          return this;
611        }
612
613        protected void listChildren(List<Property> children) {
614          super.listChildren(children);
615          children.add(new Property("documentType", "string", "Identifier of the material presented to the patient.", 0, 1, documentType));
616          children.add(new Property("reference", "uri", "Reference pointer to the educational material given to the patient if the information was on line.", 0, 1, reference));
617          children.add(new Property("publicationDate", "dateTime", "Date the educational material was published.", 0, 1, publicationDate));
618          children.add(new Property("presentationDate", "dateTime", "Date the educational material was given to the patient.", 0, 1, presentationDate));
619        }
620
621        @Override
622        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
623          switch (_hash) {
624          case -1473196299: /*documentType*/  return new Property("documentType", "string", "Identifier of the material presented to the patient.", 0, 1, documentType);
625          case -925155509: /*reference*/  return new Property("reference", "uri", "Reference pointer to the educational material given to the patient if the information was on line.", 0, 1, reference);
626          case 1470566394: /*publicationDate*/  return new Property("publicationDate", "dateTime", "Date the educational material was published.", 0, 1, publicationDate);
627          case 1602373096: /*presentationDate*/  return new Property("presentationDate", "dateTime", "Date the educational material was given to the patient.", 0, 1, presentationDate);
628          default: return super.getNamedProperty(_hash, _name, _checkValid);
629          }
630
631        }
632
633      @Override
634      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
635        switch (hash) {
636        case -1473196299: /*documentType*/ return this.documentType == null ? new Base[0] : new Base[] {this.documentType}; // StringType
637        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // UriType
638        case 1470566394: /*publicationDate*/ return this.publicationDate == null ? new Base[0] : new Base[] {this.publicationDate}; // DateTimeType
639        case 1602373096: /*presentationDate*/ return this.presentationDate == null ? new Base[0] : new Base[] {this.presentationDate}; // DateTimeType
640        default: return super.getProperty(hash, name, checkValid);
641        }
642
643      }
644
645      @Override
646      public Base setProperty(int hash, String name, Base value) throws FHIRException {
647        switch (hash) {
648        case -1473196299: // documentType
649          this.documentType = TypeConvertor.castToString(value); // StringType
650          return value;
651        case -925155509: // reference
652          this.reference = TypeConvertor.castToUri(value); // UriType
653          return value;
654        case 1470566394: // publicationDate
655          this.publicationDate = TypeConvertor.castToDateTime(value); // DateTimeType
656          return value;
657        case 1602373096: // presentationDate
658          this.presentationDate = TypeConvertor.castToDateTime(value); // DateTimeType
659          return value;
660        default: return super.setProperty(hash, name, value);
661        }
662
663      }
664
665      @Override
666      public Base setProperty(String name, Base value) throws FHIRException {
667        if (name.equals("documentType")) {
668          this.documentType = TypeConvertor.castToString(value); // StringType
669        } else if (name.equals("reference")) {
670          this.reference = TypeConvertor.castToUri(value); // UriType
671        } else if (name.equals("publicationDate")) {
672          this.publicationDate = TypeConvertor.castToDateTime(value); // DateTimeType
673        } else if (name.equals("presentationDate")) {
674          this.presentationDate = TypeConvertor.castToDateTime(value); // DateTimeType
675        } else
676          return super.setProperty(name, value);
677        return value;
678      }
679
680      @Override
681      public Base makeProperty(int hash, String name) throws FHIRException {
682        switch (hash) {
683        case -1473196299:  return getDocumentTypeElement();
684        case -925155509:  return getReferenceElement();
685        case 1470566394:  return getPublicationDateElement();
686        case 1602373096:  return getPresentationDateElement();
687        default: return super.makeProperty(hash, name);
688        }
689
690      }
691
692      @Override
693      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
694        switch (hash) {
695        case -1473196299: /*documentType*/ return new String[] {"string"};
696        case -925155509: /*reference*/ return new String[] {"uri"};
697        case 1470566394: /*publicationDate*/ return new String[] {"dateTime"};
698        case 1602373096: /*presentationDate*/ return new String[] {"dateTime"};
699        default: return super.getTypesForProperty(hash, name);
700        }
701
702      }
703
704      @Override
705      public Base addChild(String name) throws FHIRException {
706        if (name.equals("documentType")) {
707          throw new FHIRException("Cannot call addChild on a primitive type Immunization.education.documentType");
708        }
709        else if (name.equals("reference")) {
710          throw new FHIRException("Cannot call addChild on a primitive type Immunization.education.reference");
711        }
712        else if (name.equals("publicationDate")) {
713          throw new FHIRException("Cannot call addChild on a primitive type Immunization.education.publicationDate");
714        }
715        else if (name.equals("presentationDate")) {
716          throw new FHIRException("Cannot call addChild on a primitive type Immunization.education.presentationDate");
717        }
718        else
719          return super.addChild(name);
720      }
721
722      public ImmunizationEducationComponent copy() {
723        ImmunizationEducationComponent dst = new ImmunizationEducationComponent();
724        copyValues(dst);
725        return dst;
726      }
727
728      public void copyValues(ImmunizationEducationComponent dst) {
729        super.copyValues(dst);
730        dst.documentType = documentType == null ? null : documentType.copy();
731        dst.reference = reference == null ? null : reference.copy();
732        dst.publicationDate = publicationDate == null ? null : publicationDate.copy();
733        dst.presentationDate = presentationDate == null ? null : presentationDate.copy();
734      }
735
736      @Override
737      public boolean equalsDeep(Base other_) {
738        if (!super.equalsDeep(other_))
739          return false;
740        if (!(other_ instanceof ImmunizationEducationComponent))
741          return false;
742        ImmunizationEducationComponent o = (ImmunizationEducationComponent) other_;
743        return compareDeep(documentType, o.documentType, true) && compareDeep(reference, o.reference, true)
744           && compareDeep(publicationDate, o.publicationDate, true) && compareDeep(presentationDate, o.presentationDate, true)
745          ;
746      }
747
748      @Override
749      public boolean equalsShallow(Base other_) {
750        if (!super.equalsShallow(other_))
751          return false;
752        if (!(other_ instanceof ImmunizationEducationComponent))
753          return false;
754        ImmunizationEducationComponent o = (ImmunizationEducationComponent) other_;
755        return compareValues(documentType, o.documentType, true) && compareValues(reference, o.reference, true)
756           && compareValues(publicationDate, o.publicationDate, true) && compareValues(presentationDate, o.presentationDate, true)
757          ;
758      }
759
760      public boolean isEmpty() {
761        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(documentType, reference, publicationDate
762          , presentationDate);
763      }
764
765  public String fhirType() {
766    return "Immunization.education";
767
768  }
769
770  }
771
772    @Block()
773    public static class ImmunizationReactionComponent extends BackboneElement implements IBaseBackboneElement {
774        /**
775         * Date of reaction to the immunization.
776         */
777        @Child(name = "date", type = {DateTimeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
778        @Description(shortDefinition="When reaction started", formalDefinition="Date of reaction to the immunization." )
779        protected DateTimeType date;
780
781        /**
782         * Details of the reaction.
783         */
784        @Child(name = "detail", type = {Observation.class}, order=2, min=0, max=1, modifier=false, summary=false)
785        @Description(shortDefinition="Additional information on reaction", formalDefinition="Details of the reaction." )
786        protected Reference detail;
787
788        /**
789         * Self-reported indicator.
790         */
791        @Child(name = "reported", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
792        @Description(shortDefinition="Indicates self-reported reaction", formalDefinition="Self-reported indicator." )
793        protected BooleanType reported;
794
795        private static final long serialVersionUID = -655647546L;
796
797    /**
798     * Constructor
799     */
800      public ImmunizationReactionComponent() {
801        super();
802      }
803
804        /**
805         * @return {@link #date} (Date of reaction to the immunization.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
806         */
807        public DateTimeType getDateElement() { 
808          if (this.date == null)
809            if (Configuration.errorOnAutoCreate())
810              throw new Error("Attempt to auto-create ImmunizationReactionComponent.date");
811            else if (Configuration.doAutoCreate())
812              this.date = new DateTimeType(); // bb
813          return this.date;
814        }
815
816        public boolean hasDateElement() { 
817          return this.date != null && !this.date.isEmpty();
818        }
819
820        public boolean hasDate() { 
821          return this.date != null && !this.date.isEmpty();
822        }
823
824        /**
825         * @param value {@link #date} (Date of reaction to the immunization.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
826         */
827        public ImmunizationReactionComponent setDateElement(DateTimeType value) { 
828          this.date = value;
829          return this;
830        }
831
832        /**
833         * @return Date of reaction to the immunization.
834         */
835        public Date getDate() { 
836          return this.date == null ? null : this.date.getValue();
837        }
838
839        /**
840         * @param value Date of reaction to the immunization.
841         */
842        public ImmunizationReactionComponent setDate(Date value) { 
843          if (value == null)
844            this.date = null;
845          else {
846            if (this.date == null)
847              this.date = new DateTimeType();
848            this.date.setValue(value);
849          }
850          return this;
851        }
852
853        /**
854         * @return {@link #detail} (Details of the reaction.)
855         */
856        public Reference getDetail() { 
857          if (this.detail == null)
858            if (Configuration.errorOnAutoCreate())
859              throw new Error("Attempt to auto-create ImmunizationReactionComponent.detail");
860            else if (Configuration.doAutoCreate())
861              this.detail = new Reference(); // cc
862          return this.detail;
863        }
864
865        public boolean hasDetail() { 
866          return this.detail != null && !this.detail.isEmpty();
867        }
868
869        /**
870         * @param value {@link #detail} (Details of the reaction.)
871         */
872        public ImmunizationReactionComponent setDetail(Reference value) { 
873          this.detail = value;
874          return this;
875        }
876
877        /**
878         * @return {@link #reported} (Self-reported indicator.). This is the underlying object with id, value and extensions. The accessor "getReported" gives direct access to the value
879         */
880        public BooleanType getReportedElement() { 
881          if (this.reported == null)
882            if (Configuration.errorOnAutoCreate())
883              throw new Error("Attempt to auto-create ImmunizationReactionComponent.reported");
884            else if (Configuration.doAutoCreate())
885              this.reported = new BooleanType(); // bb
886          return this.reported;
887        }
888
889        public boolean hasReportedElement() { 
890          return this.reported != null && !this.reported.isEmpty();
891        }
892
893        public boolean hasReported() { 
894          return this.reported != null && !this.reported.isEmpty();
895        }
896
897        /**
898         * @param value {@link #reported} (Self-reported indicator.). This is the underlying object with id, value and extensions. The accessor "getReported" gives direct access to the value
899         */
900        public ImmunizationReactionComponent setReportedElement(BooleanType value) { 
901          this.reported = value;
902          return this;
903        }
904
905        /**
906         * @return Self-reported indicator.
907         */
908        public boolean getReported() { 
909          return this.reported == null || this.reported.isEmpty() ? false : this.reported.getValue();
910        }
911
912        /**
913         * @param value Self-reported indicator.
914         */
915        public ImmunizationReactionComponent setReported(boolean value) { 
916            if (this.reported == null)
917              this.reported = new BooleanType();
918            this.reported.setValue(value);
919          return this;
920        }
921
922        protected void listChildren(List<Property> children) {
923          super.listChildren(children);
924          children.add(new Property("date", "dateTime", "Date of reaction to the immunization.", 0, 1, date));
925          children.add(new Property("detail", "Reference(Observation)", "Details of the reaction.", 0, 1, detail));
926          children.add(new Property("reported", "boolean", "Self-reported indicator.", 0, 1, reported));
927        }
928
929        @Override
930        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
931          switch (_hash) {
932          case 3076014: /*date*/  return new Property("date", "dateTime", "Date of reaction to the immunization.", 0, 1, date);
933          case -1335224239: /*detail*/  return new Property("detail", "Reference(Observation)", "Details of the reaction.", 0, 1, detail);
934          case -427039533: /*reported*/  return new Property("reported", "boolean", "Self-reported indicator.", 0, 1, reported);
935          default: return super.getNamedProperty(_hash, _name, _checkValid);
936          }
937
938        }
939
940      @Override
941      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
942        switch (hash) {
943        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
944        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : new Base[] {this.detail}; // Reference
945        case -427039533: /*reported*/ return this.reported == null ? new Base[0] : new Base[] {this.reported}; // BooleanType
946        default: return super.getProperty(hash, name, checkValid);
947        }
948
949      }
950
951      @Override
952      public Base setProperty(int hash, String name, Base value) throws FHIRException {
953        switch (hash) {
954        case 3076014: // date
955          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
956          return value;
957        case -1335224239: // detail
958          this.detail = TypeConvertor.castToReference(value); // Reference
959          return value;
960        case -427039533: // reported
961          this.reported = TypeConvertor.castToBoolean(value); // BooleanType
962          return value;
963        default: return super.setProperty(hash, name, value);
964        }
965
966      }
967
968      @Override
969      public Base setProperty(String name, Base value) throws FHIRException {
970        if (name.equals("date")) {
971          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
972        } else if (name.equals("detail")) {
973          this.detail = TypeConvertor.castToReference(value); // Reference
974        } else if (name.equals("reported")) {
975          this.reported = TypeConvertor.castToBoolean(value); // BooleanType
976        } else
977          return super.setProperty(name, value);
978        return value;
979      }
980
981      @Override
982      public Base makeProperty(int hash, String name) throws FHIRException {
983        switch (hash) {
984        case 3076014:  return getDateElement();
985        case -1335224239:  return getDetail();
986        case -427039533:  return getReportedElement();
987        default: return super.makeProperty(hash, name);
988        }
989
990      }
991
992      @Override
993      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
994        switch (hash) {
995        case 3076014: /*date*/ return new String[] {"dateTime"};
996        case -1335224239: /*detail*/ return new String[] {"Reference"};
997        case -427039533: /*reported*/ return new String[] {"boolean"};
998        default: return super.getTypesForProperty(hash, name);
999        }
1000
1001      }
1002
1003      @Override
1004      public Base addChild(String name) throws FHIRException {
1005        if (name.equals("date")) {
1006          throw new FHIRException("Cannot call addChild on a primitive type Immunization.reaction.date");
1007        }
1008        else if (name.equals("detail")) {
1009          this.detail = new Reference();
1010          return this.detail;
1011        }
1012        else if (name.equals("reported")) {
1013          throw new FHIRException("Cannot call addChild on a primitive type Immunization.reaction.reported");
1014        }
1015        else
1016          return super.addChild(name);
1017      }
1018
1019      public ImmunizationReactionComponent copy() {
1020        ImmunizationReactionComponent dst = new ImmunizationReactionComponent();
1021        copyValues(dst);
1022        return dst;
1023      }
1024
1025      public void copyValues(ImmunizationReactionComponent dst) {
1026        super.copyValues(dst);
1027        dst.date = date == null ? null : date.copy();
1028        dst.detail = detail == null ? null : detail.copy();
1029        dst.reported = reported == null ? null : reported.copy();
1030      }
1031
1032      @Override
1033      public boolean equalsDeep(Base other_) {
1034        if (!super.equalsDeep(other_))
1035          return false;
1036        if (!(other_ instanceof ImmunizationReactionComponent))
1037          return false;
1038        ImmunizationReactionComponent o = (ImmunizationReactionComponent) other_;
1039        return compareDeep(date, o.date, true) && compareDeep(detail, o.detail, true) && compareDeep(reported, o.reported, true)
1040          ;
1041      }
1042
1043      @Override
1044      public boolean equalsShallow(Base other_) {
1045        if (!super.equalsShallow(other_))
1046          return false;
1047        if (!(other_ instanceof ImmunizationReactionComponent))
1048          return false;
1049        ImmunizationReactionComponent o = (ImmunizationReactionComponent) other_;
1050        return compareValues(date, o.date, true) && compareValues(reported, o.reported, true);
1051      }
1052
1053      public boolean isEmpty() {
1054        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(date, detail, reported);
1055      }
1056
1057  public String fhirType() {
1058    return "Immunization.reaction";
1059
1060  }
1061
1062  }
1063
1064    @Block()
1065    public static class ImmunizationProtocolAppliedComponent extends BackboneElement implements IBaseBackboneElement {
1066        /**
1067         * One possible path to achieve presumed immunity against a disease - within the context of an authority.
1068         */
1069        @Child(name = "series", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1070        @Description(shortDefinition="Name of vaccine series", formalDefinition="One possible path to achieve presumed immunity against a disease - within the context of an authority." )
1071        protected StringType series;
1072
1073        /**
1074         * Indicates the authority who published the protocol (e.g. ACIP) that is being followed.
1075         */
1076        @Child(name = "authority", type = {Organization.class}, order=2, min=0, max=1, modifier=false, summary=false)
1077        @Description(shortDefinition="Who is responsible for publishing the recommendations", formalDefinition="Indicates the authority who published the protocol (e.g. ACIP) that is being followed." )
1078        protected Reference authority;
1079
1080        /**
1081         * The vaccine preventable disease the dose is being administered against.
1082         */
1083        @Child(name = "targetDisease", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1084        @Description(shortDefinition="Vaccine preventatable disease being targetted", formalDefinition="The vaccine preventable disease the dose is being administered against." )
1085        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-target-disease")
1086        protected List<CodeableConcept> targetDisease;
1087
1088        /**
1089         * Nominal position in a series.
1090         */
1091        @Child(name = "doseNumber", type = {PositiveIntType.class, StringType.class}, order=4, min=1, max=1, modifier=false, summary=false)
1092        @Description(shortDefinition="Dose number within series", formalDefinition="Nominal position in a series." )
1093        protected DataType doseNumber;
1094
1095        /**
1096         * The recommended number of doses to achieve immunity.
1097         */
1098        @Child(name = "seriesDoses", type = {PositiveIntType.class, StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
1099        @Description(shortDefinition="Recommended number of doses for immunity", formalDefinition="The recommended number of doses to achieve immunity." )
1100        protected DataType seriesDoses;
1101
1102        private static final long serialVersionUID = 193176765L;
1103
1104    /**
1105     * Constructor
1106     */
1107      public ImmunizationProtocolAppliedComponent() {
1108        super();
1109      }
1110
1111    /**
1112     * Constructor
1113     */
1114      public ImmunizationProtocolAppliedComponent(DataType doseNumber) {
1115        super();
1116        this.setDoseNumber(doseNumber);
1117      }
1118
1119        /**
1120         * @return {@link #series} (One possible path to achieve presumed immunity against a disease - within the context of an authority.). This is the underlying object with id, value and extensions. The accessor "getSeries" gives direct access to the value
1121         */
1122        public StringType getSeriesElement() { 
1123          if (this.series == null)
1124            if (Configuration.errorOnAutoCreate())
1125              throw new Error("Attempt to auto-create ImmunizationProtocolAppliedComponent.series");
1126            else if (Configuration.doAutoCreate())
1127              this.series = new StringType(); // bb
1128          return this.series;
1129        }
1130
1131        public boolean hasSeriesElement() { 
1132          return this.series != null && !this.series.isEmpty();
1133        }
1134
1135        public boolean hasSeries() { 
1136          return this.series != null && !this.series.isEmpty();
1137        }
1138
1139        /**
1140         * @param value {@link #series} (One possible path to achieve presumed immunity against a disease - within the context of an authority.). This is the underlying object with id, value and extensions. The accessor "getSeries" gives direct access to the value
1141         */
1142        public ImmunizationProtocolAppliedComponent setSeriesElement(StringType value) { 
1143          this.series = value;
1144          return this;
1145        }
1146
1147        /**
1148         * @return One possible path to achieve presumed immunity against a disease - within the context of an authority.
1149         */
1150        public String getSeries() { 
1151          return this.series == null ? null : this.series.getValue();
1152        }
1153
1154        /**
1155         * @param value One possible path to achieve presumed immunity against a disease - within the context of an authority.
1156         */
1157        public ImmunizationProtocolAppliedComponent setSeries(String value) { 
1158          if (Utilities.noString(value))
1159            this.series = null;
1160          else {
1161            if (this.series == null)
1162              this.series = new StringType();
1163            this.series.setValue(value);
1164          }
1165          return this;
1166        }
1167
1168        /**
1169         * @return {@link #authority} (Indicates the authority who published the protocol (e.g. ACIP) that is being followed.)
1170         */
1171        public Reference getAuthority() { 
1172          if (this.authority == null)
1173            if (Configuration.errorOnAutoCreate())
1174              throw new Error("Attempt to auto-create ImmunizationProtocolAppliedComponent.authority");
1175            else if (Configuration.doAutoCreate())
1176              this.authority = new Reference(); // cc
1177          return this.authority;
1178        }
1179
1180        public boolean hasAuthority() { 
1181          return this.authority != null && !this.authority.isEmpty();
1182        }
1183
1184        /**
1185         * @param value {@link #authority} (Indicates the authority who published the protocol (e.g. ACIP) that is being followed.)
1186         */
1187        public ImmunizationProtocolAppliedComponent setAuthority(Reference value) { 
1188          this.authority = value;
1189          return this;
1190        }
1191
1192        /**
1193         * @return {@link #targetDisease} (The vaccine preventable disease the dose is being administered against.)
1194         */
1195        public List<CodeableConcept> getTargetDisease() { 
1196          if (this.targetDisease == null)
1197            this.targetDisease = new ArrayList<CodeableConcept>();
1198          return this.targetDisease;
1199        }
1200
1201        /**
1202         * @return Returns a reference to <code>this</code> for easy method chaining
1203         */
1204        public ImmunizationProtocolAppliedComponent setTargetDisease(List<CodeableConcept> theTargetDisease) { 
1205          this.targetDisease = theTargetDisease;
1206          return this;
1207        }
1208
1209        public boolean hasTargetDisease() { 
1210          if (this.targetDisease == null)
1211            return false;
1212          for (CodeableConcept item : this.targetDisease)
1213            if (!item.isEmpty())
1214              return true;
1215          return false;
1216        }
1217
1218        public CodeableConcept addTargetDisease() { //3
1219          CodeableConcept t = new CodeableConcept();
1220          if (this.targetDisease == null)
1221            this.targetDisease = new ArrayList<CodeableConcept>();
1222          this.targetDisease.add(t);
1223          return t;
1224        }
1225
1226        public ImmunizationProtocolAppliedComponent addTargetDisease(CodeableConcept t) { //3
1227          if (t == null)
1228            return this;
1229          if (this.targetDisease == null)
1230            this.targetDisease = new ArrayList<CodeableConcept>();
1231          this.targetDisease.add(t);
1232          return this;
1233        }
1234
1235        /**
1236         * @return The first repetition of repeating field {@link #targetDisease}, creating it if it does not already exist {3}
1237         */
1238        public CodeableConcept getTargetDiseaseFirstRep() { 
1239          if (getTargetDisease().isEmpty()) {
1240            addTargetDisease();
1241          }
1242          return getTargetDisease().get(0);
1243        }
1244
1245        /**
1246         * @return {@link #doseNumber} (Nominal position in a series.)
1247         */
1248        public DataType getDoseNumber() { 
1249          return this.doseNumber;
1250        }
1251
1252        /**
1253         * @return {@link #doseNumber} (Nominal position in a series.)
1254         */
1255        public PositiveIntType getDoseNumberPositiveIntType() throws FHIRException { 
1256          if (this.doseNumber == null)
1257            this.doseNumber = new PositiveIntType();
1258          if (!(this.doseNumber instanceof PositiveIntType))
1259            throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.doseNumber.getClass().getName()+" was encountered");
1260          return (PositiveIntType) this.doseNumber;
1261        }
1262
1263        public boolean hasDoseNumberPositiveIntType() { 
1264          return this != null && this.doseNumber instanceof PositiveIntType;
1265        }
1266
1267        /**
1268         * @return {@link #doseNumber} (Nominal position in a series.)
1269         */
1270        public StringType getDoseNumberStringType() throws FHIRException { 
1271          if (this.doseNumber == null)
1272            this.doseNumber = new StringType();
1273          if (!(this.doseNumber instanceof StringType))
1274            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.doseNumber.getClass().getName()+" was encountered");
1275          return (StringType) this.doseNumber;
1276        }
1277
1278        public boolean hasDoseNumberStringType() { 
1279          return this != null && this.doseNumber instanceof StringType;
1280        }
1281
1282        public boolean hasDoseNumber() { 
1283          return this.doseNumber != null && !this.doseNumber.isEmpty();
1284        }
1285
1286        /**
1287         * @param value {@link #doseNumber} (Nominal position in a series.)
1288         */
1289        public ImmunizationProtocolAppliedComponent setDoseNumber(DataType value) { 
1290          if (value != null && !(value instanceof PositiveIntType || value instanceof StringType))
1291            throw new Error("Not the right type for Immunization.protocolApplied.doseNumber[x]: "+value.fhirType());
1292          this.doseNumber = value;
1293          return this;
1294        }
1295
1296        /**
1297         * @return {@link #seriesDoses} (The recommended number of doses to achieve immunity.)
1298         */
1299        public DataType getSeriesDoses() { 
1300          return this.seriesDoses;
1301        }
1302
1303        /**
1304         * @return {@link #seriesDoses} (The recommended number of doses to achieve immunity.)
1305         */
1306        public PositiveIntType getSeriesDosesPositiveIntType() throws FHIRException { 
1307          if (this.seriesDoses == null)
1308            this.seriesDoses = new PositiveIntType();
1309          if (!(this.seriesDoses instanceof PositiveIntType))
1310            throw new FHIRException("Type mismatch: the type PositiveIntType was expected, but "+this.seriesDoses.getClass().getName()+" was encountered");
1311          return (PositiveIntType) this.seriesDoses;
1312        }
1313
1314        public boolean hasSeriesDosesPositiveIntType() { 
1315          return this != null && this.seriesDoses instanceof PositiveIntType;
1316        }
1317
1318        /**
1319         * @return {@link #seriesDoses} (The recommended number of doses to achieve immunity.)
1320         */
1321        public StringType getSeriesDosesStringType() throws FHIRException { 
1322          if (this.seriesDoses == null)
1323            this.seriesDoses = new StringType();
1324          if (!(this.seriesDoses instanceof StringType))
1325            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.seriesDoses.getClass().getName()+" was encountered");
1326          return (StringType) this.seriesDoses;
1327        }
1328
1329        public boolean hasSeriesDosesStringType() { 
1330          return this != null && this.seriesDoses instanceof StringType;
1331        }
1332
1333        public boolean hasSeriesDoses() { 
1334          return this.seriesDoses != null && !this.seriesDoses.isEmpty();
1335        }
1336
1337        /**
1338         * @param value {@link #seriesDoses} (The recommended number of doses to achieve immunity.)
1339         */
1340        public ImmunizationProtocolAppliedComponent setSeriesDoses(DataType value) { 
1341          if (value != null && !(value instanceof PositiveIntType || value instanceof StringType))
1342            throw new Error("Not the right type for Immunization.protocolApplied.seriesDoses[x]: "+value.fhirType());
1343          this.seriesDoses = value;
1344          return this;
1345        }
1346
1347        protected void listChildren(List<Property> children) {
1348          super.listChildren(children);
1349          children.add(new Property("series", "string", "One possible path to achieve presumed immunity against a disease - within the context of an authority.", 0, 1, series));
1350          children.add(new Property("authority", "Reference(Organization)", "Indicates the authority who published the protocol (e.g. ACIP) that is being followed.", 0, 1, authority));
1351          children.add(new Property("targetDisease", "CodeableConcept", "The vaccine preventable disease the dose is being administered against.", 0, java.lang.Integer.MAX_VALUE, targetDisease));
1352          children.add(new Property("doseNumber[x]", "positiveInt|string", "Nominal position in a series.", 0, 1, doseNumber));
1353          children.add(new Property("seriesDoses[x]", "positiveInt|string", "The recommended number of doses to achieve immunity.", 0, 1, seriesDoses));
1354        }
1355
1356        @Override
1357        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1358          switch (_hash) {
1359          case -905838985: /*series*/  return new Property("series", "string", "One possible path to achieve presumed immunity against a disease - within the context of an authority.", 0, 1, series);
1360          case 1475610435: /*authority*/  return new Property("authority", "Reference(Organization)", "Indicates the authority who published the protocol (e.g. ACIP) that is being followed.", 0, 1, authority);
1361          case -319593813: /*targetDisease*/  return new Property("targetDisease", "CodeableConcept", "The vaccine preventable disease the dose is being administered against.", 0, java.lang.Integer.MAX_VALUE, targetDisease);
1362          case -1632295686: /*doseNumber[x]*/  return new Property("doseNumber[x]", "positiveInt|string", "Nominal position in a series.", 0, 1, doseNumber);
1363          case -887709242: /*doseNumber*/  return new Property("doseNumber[x]", "positiveInt|string", "Nominal position in a series.", 0, 1, doseNumber);
1364          case -1826134640: /*doseNumberPositiveInt*/  return new Property("doseNumber[x]", "positiveInt", "Nominal position in a series.", 0, 1, doseNumber);
1365          case -333053577: /*doseNumberString*/  return new Property("doseNumber[x]", "string", "Nominal position in a series.", 0, 1, doseNumber);
1366          case 1553560673: /*seriesDoses[x]*/  return new Property("seriesDoses[x]", "positiveInt|string", "The recommended number of doses to achieve immunity.", 0, 1, seriesDoses);
1367          case -1936727105: /*seriesDoses*/  return new Property("seriesDoses[x]", "positiveInt|string", "The recommended number of doses to achieve immunity.", 0, 1, seriesDoses);
1368          case -220897801: /*seriesDosesPositiveInt*/  return new Property("seriesDoses[x]", "positiveInt", "The recommended number of doses to achieve immunity.", 0, 1, seriesDoses);
1369          case -673569616: /*seriesDosesString*/  return new Property("seriesDoses[x]", "string", "The recommended number of doses to achieve immunity.", 0, 1, seriesDoses);
1370          default: return super.getNamedProperty(_hash, _name, _checkValid);
1371          }
1372
1373        }
1374
1375      @Override
1376      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1377        switch (hash) {
1378        case -905838985: /*series*/ return this.series == null ? new Base[0] : new Base[] {this.series}; // StringType
1379        case 1475610435: /*authority*/ return this.authority == null ? new Base[0] : new Base[] {this.authority}; // Reference
1380        case -319593813: /*targetDisease*/ return this.targetDisease == null ? new Base[0] : this.targetDisease.toArray(new Base[this.targetDisease.size()]); // CodeableConcept
1381        case -887709242: /*doseNumber*/ return this.doseNumber == null ? new Base[0] : new Base[] {this.doseNumber}; // DataType
1382        case -1936727105: /*seriesDoses*/ return this.seriesDoses == null ? new Base[0] : new Base[] {this.seriesDoses}; // DataType
1383        default: return super.getProperty(hash, name, checkValid);
1384        }
1385
1386      }
1387
1388      @Override
1389      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1390        switch (hash) {
1391        case -905838985: // series
1392          this.series = TypeConvertor.castToString(value); // StringType
1393          return value;
1394        case 1475610435: // authority
1395          this.authority = TypeConvertor.castToReference(value); // Reference
1396          return value;
1397        case -319593813: // targetDisease
1398          this.getTargetDisease().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1399          return value;
1400        case -887709242: // doseNumber
1401          this.doseNumber = TypeConvertor.castToType(value); // DataType
1402          return value;
1403        case -1936727105: // seriesDoses
1404          this.seriesDoses = TypeConvertor.castToType(value); // DataType
1405          return value;
1406        default: return super.setProperty(hash, name, value);
1407        }
1408
1409      }
1410
1411      @Override
1412      public Base setProperty(String name, Base value) throws FHIRException {
1413        if (name.equals("series")) {
1414          this.series = TypeConvertor.castToString(value); // StringType
1415        } else if (name.equals("authority")) {
1416          this.authority = TypeConvertor.castToReference(value); // Reference
1417        } else if (name.equals("targetDisease")) {
1418          this.getTargetDisease().add(TypeConvertor.castToCodeableConcept(value));
1419        } else if (name.equals("doseNumber[x]")) {
1420          this.doseNumber = TypeConvertor.castToType(value); // DataType
1421        } else if (name.equals("seriesDoses[x]")) {
1422          this.seriesDoses = TypeConvertor.castToType(value); // DataType
1423        } else
1424          return super.setProperty(name, value);
1425        return value;
1426      }
1427
1428      @Override
1429      public Base makeProperty(int hash, String name) throws FHIRException {
1430        switch (hash) {
1431        case -905838985:  return getSeriesElement();
1432        case 1475610435:  return getAuthority();
1433        case -319593813:  return addTargetDisease(); 
1434        case -1632295686:  return getDoseNumber();
1435        case -887709242:  return getDoseNumber();
1436        case 1553560673:  return getSeriesDoses();
1437        case -1936727105:  return getSeriesDoses();
1438        default: return super.makeProperty(hash, name);
1439        }
1440
1441      }
1442
1443      @Override
1444      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1445        switch (hash) {
1446        case -905838985: /*series*/ return new String[] {"string"};
1447        case 1475610435: /*authority*/ return new String[] {"Reference"};
1448        case -319593813: /*targetDisease*/ return new String[] {"CodeableConcept"};
1449        case -887709242: /*doseNumber*/ return new String[] {"positiveInt", "string"};
1450        case -1936727105: /*seriesDoses*/ return new String[] {"positiveInt", "string"};
1451        default: return super.getTypesForProperty(hash, name);
1452        }
1453
1454      }
1455
1456      @Override
1457      public Base addChild(String name) throws FHIRException {
1458        if (name.equals("series")) {
1459          throw new FHIRException("Cannot call addChild on a primitive type Immunization.protocolApplied.series");
1460        }
1461        else if (name.equals("authority")) {
1462          this.authority = new Reference();
1463          return this.authority;
1464        }
1465        else if (name.equals("targetDisease")) {
1466          return addTargetDisease();
1467        }
1468        else if (name.equals("doseNumberPositiveInt")) {
1469          this.doseNumber = new PositiveIntType();
1470          return this.doseNumber;
1471        }
1472        else if (name.equals("doseNumberString")) {
1473          this.doseNumber = new StringType();
1474          return this.doseNumber;
1475        }
1476        else if (name.equals("seriesDosesPositiveInt")) {
1477          this.seriesDoses = new PositiveIntType();
1478          return this.seriesDoses;
1479        }
1480        else if (name.equals("seriesDosesString")) {
1481          this.seriesDoses = new StringType();
1482          return this.seriesDoses;
1483        }
1484        else
1485          return super.addChild(name);
1486      }
1487
1488      public ImmunizationProtocolAppliedComponent copy() {
1489        ImmunizationProtocolAppliedComponent dst = new ImmunizationProtocolAppliedComponent();
1490        copyValues(dst);
1491        return dst;
1492      }
1493
1494      public void copyValues(ImmunizationProtocolAppliedComponent dst) {
1495        super.copyValues(dst);
1496        dst.series = series == null ? null : series.copy();
1497        dst.authority = authority == null ? null : authority.copy();
1498        if (targetDisease != null) {
1499          dst.targetDisease = new ArrayList<CodeableConcept>();
1500          for (CodeableConcept i : targetDisease)
1501            dst.targetDisease.add(i.copy());
1502        };
1503        dst.doseNumber = doseNumber == null ? null : doseNumber.copy();
1504        dst.seriesDoses = seriesDoses == null ? null : seriesDoses.copy();
1505      }
1506
1507      @Override
1508      public boolean equalsDeep(Base other_) {
1509        if (!super.equalsDeep(other_))
1510          return false;
1511        if (!(other_ instanceof ImmunizationProtocolAppliedComponent))
1512          return false;
1513        ImmunizationProtocolAppliedComponent o = (ImmunizationProtocolAppliedComponent) other_;
1514        return compareDeep(series, o.series, true) && compareDeep(authority, o.authority, true) && compareDeep(targetDisease, o.targetDisease, true)
1515           && compareDeep(doseNumber, o.doseNumber, true) && compareDeep(seriesDoses, o.seriesDoses, true)
1516          ;
1517      }
1518
1519      @Override
1520      public boolean equalsShallow(Base other_) {
1521        if (!super.equalsShallow(other_))
1522          return false;
1523        if (!(other_ instanceof ImmunizationProtocolAppliedComponent))
1524          return false;
1525        ImmunizationProtocolAppliedComponent o = (ImmunizationProtocolAppliedComponent) other_;
1526        return compareValues(series, o.series, true);
1527      }
1528
1529      public boolean isEmpty() {
1530        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(series, authority, targetDisease
1531          , doseNumber, seriesDoses);
1532      }
1533
1534  public String fhirType() {
1535    return "Immunization.protocolApplied";
1536
1537  }
1538
1539  }
1540
1541    /**
1542     * A unique identifier assigned to this immunization record.
1543     */
1544    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1545    @Description(shortDefinition="Business identifier", formalDefinition="A unique identifier assigned to this immunization record." )
1546    protected List<Identifier> identifier;
1547
1548    /**
1549     * Indicates the current status of the immunization event.
1550     */
1551    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
1552    @Description(shortDefinition="completed | entered-in-error | not-done", formalDefinition="Indicates the current status of the immunization event." )
1553    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-status")
1554    protected Enumeration<ImmunizationStatusCodes> status;
1555
1556    /**
1557     * Indicates the reason the immunization event was not performed.
1558     */
1559    @Child(name = "statusReason", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1560    @Description(shortDefinition="Reason not done", formalDefinition="Indicates the reason the immunization event was not performed." )
1561    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-status-reason")
1562    protected CodeableConcept statusReason;
1563
1564    /**
1565     * Vaccine that was administered or was to be administered.
1566     */
1567    @Child(name = "vaccineCode", type = {CodeableConcept.class}, order=3, min=1, max=1, modifier=false, summary=true)
1568    @Description(shortDefinition="Vaccine product administered", formalDefinition="Vaccine that was administered or was to be administered." )
1569    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/vaccine-code")
1570    protected CodeableConcept vaccineCode;
1571
1572    /**
1573     * The patient who either received or did not receive the immunization.
1574     */
1575    @Child(name = "patient", type = {Patient.class}, order=4, min=1, max=1, modifier=false, summary=true)
1576    @Description(shortDefinition="Who was immunized", formalDefinition="The patient who either received or did not receive the immunization." )
1577    protected Reference patient;
1578
1579    /**
1580     * The visit or admission or other contact between patient and health care provider the immunization was performed as part of.
1581     */
1582    @Child(name = "encounter", type = {Encounter.class}, order=5, min=0, max=1, modifier=false, summary=false)
1583    @Description(shortDefinition="Encounter immunization was part of", formalDefinition="The visit or admission or other contact between patient and health care provider the immunization was performed as part of." )
1584    protected Reference encounter;
1585
1586    /**
1587     * Date vaccine administered or was to be administered.
1588     */
1589    @Child(name = "occurrence", type = {DateTimeType.class, StringType.class}, order=6, min=1, max=1, modifier=false, summary=true)
1590    @Description(shortDefinition="Vaccine administration date", formalDefinition="Date vaccine administered or was to be administered." )
1591    protected DataType occurrence;
1592
1593    /**
1594     * The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event.
1595     */
1596    @Child(name = "recorded", type = {DateTimeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
1597    @Description(shortDefinition="When the immunization was first captured in the subject's record", formalDefinition="The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event." )
1598    protected DateTimeType recorded;
1599
1600    /**
1601     * An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.
1602     */
1603    @Child(name = "primarySource", type = {BooleanType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1604    @Description(shortDefinition="Indicates context the data was recorded in", formalDefinition="An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded." )
1605    protected BooleanType primarySource;
1606
1607    /**
1608     * The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.
1609     */
1610    @Child(name = "reportOrigin", type = {CodeableConcept.class}, order=9, min=0, max=1, modifier=false, summary=false)
1611    @Description(shortDefinition="Indicates the source of a secondarily reported record", formalDefinition="The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine." )
1612    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-origin")
1613    protected CodeableConcept reportOrigin;
1614
1615    /**
1616     * The service delivery location where the vaccine administration occurred.
1617     */
1618    @Child(name = "location", type = {Location.class}, order=10, min=0, max=1, modifier=false, summary=false)
1619    @Description(shortDefinition="Where immunization occurred", formalDefinition="The service delivery location where the vaccine administration occurred." )
1620    protected Reference location;
1621
1622    /**
1623     * Name of vaccine manufacturer.
1624     */
1625    @Child(name = "manufacturer", type = {Organization.class}, order=11, min=0, max=1, modifier=false, summary=false)
1626    @Description(shortDefinition="Vaccine manufacturer", formalDefinition="Name of vaccine manufacturer." )
1627    protected Reference manufacturer;
1628
1629    /**
1630     * Lot number of the  vaccine product.
1631     */
1632    @Child(name = "lotNumber", type = {StringType.class}, order=12, min=0, max=1, modifier=false, summary=false)
1633    @Description(shortDefinition="Vaccine lot number", formalDefinition="Lot number of the  vaccine product." )
1634    protected StringType lotNumber;
1635
1636    /**
1637     * Date vaccine batch expires.
1638     */
1639    @Child(name = "expirationDate", type = {DateType.class}, order=13, min=0, max=1, modifier=false, summary=false)
1640    @Description(shortDefinition="Vaccine expiration date", formalDefinition="Date vaccine batch expires." )
1641    protected DateType expirationDate;
1642
1643    /**
1644     * Body site where vaccine was administered.
1645     */
1646    @Child(name = "site", type = {CodeableConcept.class}, order=14, min=0, max=1, modifier=false, summary=false)
1647    @Description(shortDefinition="Body site vaccine  was administered", formalDefinition="Body site where vaccine was administered." )
1648    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-site")
1649    protected CodeableConcept site;
1650
1651    /**
1652     * The path by which the vaccine product is taken into the body.
1653     */
1654    @Child(name = "route", type = {CodeableConcept.class}, order=15, min=0, max=1, modifier=false, summary=false)
1655    @Description(shortDefinition="How vaccine entered body", formalDefinition="The path by which the vaccine product is taken into the body." )
1656    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-route")
1657    protected CodeableConcept route;
1658
1659    /**
1660     * The quantity of vaccine product that was administered.
1661     */
1662    @Child(name = "doseQuantity", type = {Quantity.class}, order=16, min=0, max=1, modifier=false, summary=false)
1663    @Description(shortDefinition="Amount of vaccine administered", formalDefinition="The quantity of vaccine product that was administered." )
1664    protected Quantity doseQuantity;
1665
1666    /**
1667     * Indicates who performed the immunization event.
1668     */
1669    @Child(name = "performer", type = {}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1670    @Description(shortDefinition="Who performed event", formalDefinition="Indicates who performed the immunization event." )
1671    protected List<ImmunizationPerformerComponent> performer;
1672
1673    /**
1674     * Extra information about the immunization that is not conveyed by the other attributes.
1675     */
1676    @Child(name = "note", type = {Annotation.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1677    @Description(shortDefinition="Additional immunization notes", formalDefinition="Extra information about the immunization that is not conveyed by the other attributes." )
1678    protected List<Annotation> note;
1679
1680    /**
1681     * Reasons why the vaccine was administered.
1682     */
1683    @Child(name = "reasonCode", type = {CodeableConcept.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1684    @Description(shortDefinition="Why immunization occurred", formalDefinition="Reasons why the vaccine was administered." )
1685    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-reason")
1686    protected List<CodeableConcept> reasonCode;
1687
1688    /**
1689     * Condition, Observation or DiagnosticReport that supports why the immunization was administered.
1690     */
1691    @Child(name = "reasonReference", type = {Condition.class, Observation.class, DiagnosticReport.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1692    @Description(shortDefinition="Why immunization occurred", formalDefinition="Condition, Observation or DiagnosticReport that supports why the immunization was administered." )
1693    protected List<Reference> reasonReference;
1694
1695    /**
1696     * Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.
1697     */
1698    @Child(name = "isSubpotent", type = {BooleanType.class}, order=21, min=0, max=1, modifier=true, summary=true)
1699    @Description(shortDefinition="Dose potency", formalDefinition="Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent." )
1700    protected BooleanType isSubpotent;
1701
1702    /**
1703     * Reason why a dose is considered to be subpotent.
1704     */
1705    @Child(name = "subpotentReason", type = {CodeableConcept.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1706    @Description(shortDefinition="Reason for being subpotent", formalDefinition="Reason why a dose is considered to be subpotent." )
1707    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-subpotent-reason")
1708    protected List<CodeableConcept> subpotentReason;
1709
1710    /**
1711     * Educational material presented to the patient (or guardian) at the time of vaccine administration.
1712     */
1713    @Child(name = "education", type = {}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1714    @Description(shortDefinition="Educational material presented to patient", formalDefinition="Educational material presented to the patient (or guardian) at the time of vaccine administration." )
1715    protected List<ImmunizationEducationComponent> education;
1716
1717    /**
1718     * Indicates a patient's eligibility for a funding program.
1719     */
1720    @Child(name = "programEligibility", type = {CodeableConcept.class}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1721    @Description(shortDefinition="Patient eligibility for a vaccination program", formalDefinition="Indicates a patient's eligibility for a funding program." )
1722    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-program-eligibility")
1723    protected List<CodeableConcept> programEligibility;
1724
1725    /**
1726     * Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered).
1727     */
1728    @Child(name = "fundingSource", type = {CodeableConcept.class}, order=25, min=0, max=1, modifier=false, summary=false)
1729    @Description(shortDefinition="Funding source for the vaccine", formalDefinition="Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered)." )
1730    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/immunization-funding-source")
1731    protected CodeableConcept fundingSource;
1732
1733    /**
1734     * Categorical data indicating that an adverse event is associated in time to an immunization.
1735     */
1736    @Child(name = "reaction", type = {}, order=26, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1737    @Description(shortDefinition="Details of a reaction that follows immunization", formalDefinition="Categorical data indicating that an adverse event is associated in time to an immunization." )
1738    protected List<ImmunizationReactionComponent> reaction;
1739
1740    /**
1741     * The protocol (set of recommendations) being followed by the provider who administered the dose.
1742     */
1743    @Child(name = "protocolApplied", type = {}, order=27, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1744    @Description(shortDefinition="Protocol followed by the provider", formalDefinition="The protocol (set of recommendations) being followed by the provider who administered the dose." )
1745    protected List<ImmunizationProtocolAppliedComponent> protocolApplied;
1746
1747    private static final long serialVersionUID = 390676077L;
1748
1749  /**
1750   * Constructor
1751   */
1752    public Immunization() {
1753      super();
1754    }
1755
1756  /**
1757   * Constructor
1758   */
1759    public Immunization(ImmunizationStatusCodes status, CodeableConcept vaccineCode, Reference patient, DataType occurrence) {
1760      super();
1761      this.setStatus(status);
1762      this.setVaccineCode(vaccineCode);
1763      this.setPatient(patient);
1764      this.setOccurrence(occurrence);
1765    }
1766
1767    /**
1768     * @return {@link #identifier} (A unique identifier assigned to this immunization record.)
1769     */
1770    public List<Identifier> getIdentifier() { 
1771      if (this.identifier == null)
1772        this.identifier = new ArrayList<Identifier>();
1773      return this.identifier;
1774    }
1775
1776    /**
1777     * @return Returns a reference to <code>this</code> for easy method chaining
1778     */
1779    public Immunization setIdentifier(List<Identifier> theIdentifier) { 
1780      this.identifier = theIdentifier;
1781      return this;
1782    }
1783
1784    public boolean hasIdentifier() { 
1785      if (this.identifier == null)
1786        return false;
1787      for (Identifier item : this.identifier)
1788        if (!item.isEmpty())
1789          return true;
1790      return false;
1791    }
1792
1793    public Identifier addIdentifier() { //3
1794      Identifier t = new Identifier();
1795      if (this.identifier == null)
1796        this.identifier = new ArrayList<Identifier>();
1797      this.identifier.add(t);
1798      return t;
1799    }
1800
1801    public Immunization addIdentifier(Identifier t) { //3
1802      if (t == null)
1803        return this;
1804      if (this.identifier == null)
1805        this.identifier = new ArrayList<Identifier>();
1806      this.identifier.add(t);
1807      return this;
1808    }
1809
1810    /**
1811     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1812     */
1813    public Identifier getIdentifierFirstRep() { 
1814      if (getIdentifier().isEmpty()) {
1815        addIdentifier();
1816      }
1817      return getIdentifier().get(0);
1818    }
1819
1820    /**
1821     * @return {@link #status} (Indicates the current status of the immunization event.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1822     */
1823    public Enumeration<ImmunizationStatusCodes> getStatusElement() { 
1824      if (this.status == null)
1825        if (Configuration.errorOnAutoCreate())
1826          throw new Error("Attempt to auto-create Immunization.status");
1827        else if (Configuration.doAutoCreate())
1828          this.status = new Enumeration<ImmunizationStatusCodes>(new ImmunizationStatusCodesEnumFactory()); // bb
1829      return this.status;
1830    }
1831
1832    public boolean hasStatusElement() { 
1833      return this.status != null && !this.status.isEmpty();
1834    }
1835
1836    public boolean hasStatus() { 
1837      return this.status != null && !this.status.isEmpty();
1838    }
1839
1840    /**
1841     * @param value {@link #status} (Indicates the current status of the immunization event.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1842     */
1843    public Immunization setStatusElement(Enumeration<ImmunizationStatusCodes> value) { 
1844      this.status = value;
1845      return this;
1846    }
1847
1848    /**
1849     * @return Indicates the current status of the immunization event.
1850     */
1851    public ImmunizationStatusCodes getStatus() { 
1852      return this.status == null ? null : this.status.getValue();
1853    }
1854
1855    /**
1856     * @param value Indicates the current status of the immunization event.
1857     */
1858    public Immunization setStatus(ImmunizationStatusCodes value) { 
1859        if (this.status == null)
1860          this.status = new Enumeration<ImmunizationStatusCodes>(new ImmunizationStatusCodesEnumFactory());
1861        this.status.setValue(value);
1862      return this;
1863    }
1864
1865    /**
1866     * @return {@link #statusReason} (Indicates the reason the immunization event was not performed.)
1867     */
1868    public CodeableConcept getStatusReason() { 
1869      if (this.statusReason == null)
1870        if (Configuration.errorOnAutoCreate())
1871          throw new Error("Attempt to auto-create Immunization.statusReason");
1872        else if (Configuration.doAutoCreate())
1873          this.statusReason = new CodeableConcept(); // cc
1874      return this.statusReason;
1875    }
1876
1877    public boolean hasStatusReason() { 
1878      return this.statusReason != null && !this.statusReason.isEmpty();
1879    }
1880
1881    /**
1882     * @param value {@link #statusReason} (Indicates the reason the immunization event was not performed.)
1883     */
1884    public Immunization setStatusReason(CodeableConcept value) { 
1885      this.statusReason = value;
1886      return this;
1887    }
1888
1889    /**
1890     * @return {@link #vaccineCode} (Vaccine that was administered or was to be administered.)
1891     */
1892    public CodeableConcept getVaccineCode() { 
1893      if (this.vaccineCode == null)
1894        if (Configuration.errorOnAutoCreate())
1895          throw new Error("Attempt to auto-create Immunization.vaccineCode");
1896        else if (Configuration.doAutoCreate())
1897          this.vaccineCode = new CodeableConcept(); // cc
1898      return this.vaccineCode;
1899    }
1900
1901    public boolean hasVaccineCode() { 
1902      return this.vaccineCode != null && !this.vaccineCode.isEmpty();
1903    }
1904
1905    /**
1906     * @param value {@link #vaccineCode} (Vaccine that was administered or was to be administered.)
1907     */
1908    public Immunization setVaccineCode(CodeableConcept value) { 
1909      this.vaccineCode = value;
1910      return this;
1911    }
1912
1913    /**
1914     * @return {@link #patient} (The patient who either received or did not receive the immunization.)
1915     */
1916    public Reference getPatient() { 
1917      if (this.patient == null)
1918        if (Configuration.errorOnAutoCreate())
1919          throw new Error("Attempt to auto-create Immunization.patient");
1920        else if (Configuration.doAutoCreate())
1921          this.patient = new Reference(); // cc
1922      return this.patient;
1923    }
1924
1925    public boolean hasPatient() { 
1926      return this.patient != null && !this.patient.isEmpty();
1927    }
1928
1929    /**
1930     * @param value {@link #patient} (The patient who either received or did not receive the immunization.)
1931     */
1932    public Immunization setPatient(Reference value) { 
1933      this.patient = value;
1934      return this;
1935    }
1936
1937    /**
1938     * @return {@link #encounter} (The visit or admission or other contact between patient and health care provider the immunization was performed as part of.)
1939     */
1940    public Reference getEncounter() { 
1941      if (this.encounter == null)
1942        if (Configuration.errorOnAutoCreate())
1943          throw new Error("Attempt to auto-create Immunization.encounter");
1944        else if (Configuration.doAutoCreate())
1945          this.encounter = new Reference(); // cc
1946      return this.encounter;
1947    }
1948
1949    public boolean hasEncounter() { 
1950      return this.encounter != null && !this.encounter.isEmpty();
1951    }
1952
1953    /**
1954     * @param value {@link #encounter} (The visit or admission or other contact between patient and health care provider the immunization was performed as part of.)
1955     */
1956    public Immunization setEncounter(Reference value) { 
1957      this.encounter = value;
1958      return this;
1959    }
1960
1961    /**
1962     * @return {@link #occurrence} (Date vaccine administered or was to be administered.)
1963     */
1964    public DataType getOccurrence() { 
1965      return this.occurrence;
1966    }
1967
1968    /**
1969     * @return {@link #occurrence} (Date vaccine administered or was to be administered.)
1970     */
1971    public DateTimeType getOccurrenceDateTimeType() throws FHIRException { 
1972      if (this.occurrence == null)
1973        this.occurrence = new DateTimeType();
1974      if (!(this.occurrence instanceof DateTimeType))
1975        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1976      return (DateTimeType) this.occurrence;
1977    }
1978
1979    public boolean hasOccurrenceDateTimeType() { 
1980      return this != null && this.occurrence instanceof DateTimeType;
1981    }
1982
1983    /**
1984     * @return {@link #occurrence} (Date vaccine administered or was to be administered.)
1985     */
1986    public StringType getOccurrenceStringType() throws FHIRException { 
1987      if (this.occurrence == null)
1988        this.occurrence = new StringType();
1989      if (!(this.occurrence instanceof StringType))
1990        throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1991      return (StringType) this.occurrence;
1992    }
1993
1994    public boolean hasOccurrenceStringType() { 
1995      return this != null && this.occurrence instanceof StringType;
1996    }
1997
1998    public boolean hasOccurrence() { 
1999      return this.occurrence != null && !this.occurrence.isEmpty();
2000    }
2001
2002    /**
2003     * @param value {@link #occurrence} (Date vaccine administered or was to be administered.)
2004     */
2005    public Immunization setOccurrence(DataType value) { 
2006      if (value != null && !(value instanceof DateTimeType || value instanceof StringType))
2007        throw new Error("Not the right type for Immunization.occurrence[x]: "+value.fhirType());
2008      this.occurrence = value;
2009      return this;
2010    }
2011
2012    /**
2013     * @return {@link #recorded} (The date the occurrence of the immunization was first captured in the record - potentially significantly 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
2014     */
2015    public DateTimeType getRecordedElement() { 
2016      if (this.recorded == null)
2017        if (Configuration.errorOnAutoCreate())
2018          throw new Error("Attempt to auto-create Immunization.recorded");
2019        else if (Configuration.doAutoCreate())
2020          this.recorded = new DateTimeType(); // bb
2021      return this.recorded;
2022    }
2023
2024    public boolean hasRecordedElement() { 
2025      return this.recorded != null && !this.recorded.isEmpty();
2026    }
2027
2028    public boolean hasRecorded() { 
2029      return this.recorded != null && !this.recorded.isEmpty();
2030    }
2031
2032    /**
2033     * @param value {@link #recorded} (The date the occurrence of the immunization was first captured in the record - potentially significantly 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
2034     */
2035    public Immunization setRecordedElement(DateTimeType value) { 
2036      this.recorded = value;
2037      return this;
2038    }
2039
2040    /**
2041     * @return The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event.
2042     */
2043    public Date getRecorded() { 
2044      return this.recorded == null ? null : this.recorded.getValue();
2045    }
2046
2047    /**
2048     * @param value The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event.
2049     */
2050    public Immunization setRecorded(Date value) { 
2051      if (value == null)
2052        this.recorded = null;
2053      else {
2054        if (this.recorded == null)
2055          this.recorded = new DateTimeType();
2056        this.recorded.setValue(value);
2057      }
2058      return this;
2059    }
2060
2061    /**
2062     * @return {@link #primarySource} (An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.). This is the underlying object with id, value and extensions. The accessor "getPrimarySource" gives direct access to the value
2063     */
2064    public BooleanType getPrimarySourceElement() { 
2065      if (this.primarySource == null)
2066        if (Configuration.errorOnAutoCreate())
2067          throw new Error("Attempt to auto-create Immunization.primarySource");
2068        else if (Configuration.doAutoCreate())
2069          this.primarySource = new BooleanType(); // bb
2070      return this.primarySource;
2071    }
2072
2073    public boolean hasPrimarySourceElement() { 
2074      return this.primarySource != null && !this.primarySource.isEmpty();
2075    }
2076
2077    public boolean hasPrimarySource() { 
2078      return this.primarySource != null && !this.primarySource.isEmpty();
2079    }
2080
2081    /**
2082     * @param value {@link #primarySource} (An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.). This is the underlying object with id, value and extensions. The accessor "getPrimarySource" gives direct access to the value
2083     */
2084    public Immunization setPrimarySourceElement(BooleanType value) { 
2085      this.primarySource = value;
2086      return this;
2087    }
2088
2089    /**
2090     * @return An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.
2091     */
2092    public boolean getPrimarySource() { 
2093      return this.primarySource == null || this.primarySource.isEmpty() ? false : this.primarySource.getValue();
2094    }
2095
2096    /**
2097     * @param value An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.
2098     */
2099    public Immunization setPrimarySource(boolean value) { 
2100        if (this.primarySource == null)
2101          this.primarySource = new BooleanType();
2102        this.primarySource.setValue(value);
2103      return this;
2104    }
2105
2106    /**
2107     * @return {@link #reportOrigin} (The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.)
2108     */
2109    public CodeableConcept getReportOrigin() { 
2110      if (this.reportOrigin == null)
2111        if (Configuration.errorOnAutoCreate())
2112          throw new Error("Attempt to auto-create Immunization.reportOrigin");
2113        else if (Configuration.doAutoCreate())
2114          this.reportOrigin = new CodeableConcept(); // cc
2115      return this.reportOrigin;
2116    }
2117
2118    public boolean hasReportOrigin() { 
2119      return this.reportOrigin != null && !this.reportOrigin.isEmpty();
2120    }
2121
2122    /**
2123     * @param value {@link #reportOrigin} (The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.)
2124     */
2125    public Immunization setReportOrigin(CodeableConcept value) { 
2126      this.reportOrigin = value;
2127      return this;
2128    }
2129
2130    /**
2131     * @return {@link #location} (The service delivery location where the vaccine administration occurred.)
2132     */
2133    public Reference getLocation() { 
2134      if (this.location == null)
2135        if (Configuration.errorOnAutoCreate())
2136          throw new Error("Attempt to auto-create Immunization.location");
2137        else if (Configuration.doAutoCreate())
2138          this.location = new Reference(); // cc
2139      return this.location;
2140    }
2141
2142    public boolean hasLocation() { 
2143      return this.location != null && !this.location.isEmpty();
2144    }
2145
2146    /**
2147     * @param value {@link #location} (The service delivery location where the vaccine administration occurred.)
2148     */
2149    public Immunization setLocation(Reference value) { 
2150      this.location = value;
2151      return this;
2152    }
2153
2154    /**
2155     * @return {@link #manufacturer} (Name of vaccine manufacturer.)
2156     */
2157    public Reference getManufacturer() { 
2158      if (this.manufacturer == null)
2159        if (Configuration.errorOnAutoCreate())
2160          throw new Error("Attempt to auto-create Immunization.manufacturer");
2161        else if (Configuration.doAutoCreate())
2162          this.manufacturer = new Reference(); // cc
2163      return this.manufacturer;
2164    }
2165
2166    public boolean hasManufacturer() { 
2167      return this.manufacturer != null && !this.manufacturer.isEmpty();
2168    }
2169
2170    /**
2171     * @param value {@link #manufacturer} (Name of vaccine manufacturer.)
2172     */
2173    public Immunization setManufacturer(Reference value) { 
2174      this.manufacturer = value;
2175      return this;
2176    }
2177
2178    /**
2179     * @return {@link #lotNumber} (Lot number of the  vaccine product.). This is the underlying object with id, value and extensions. The accessor "getLotNumber" gives direct access to the value
2180     */
2181    public StringType getLotNumberElement() { 
2182      if (this.lotNumber == null)
2183        if (Configuration.errorOnAutoCreate())
2184          throw new Error("Attempt to auto-create Immunization.lotNumber");
2185        else if (Configuration.doAutoCreate())
2186          this.lotNumber = new StringType(); // bb
2187      return this.lotNumber;
2188    }
2189
2190    public boolean hasLotNumberElement() { 
2191      return this.lotNumber != null && !this.lotNumber.isEmpty();
2192    }
2193
2194    public boolean hasLotNumber() { 
2195      return this.lotNumber != null && !this.lotNumber.isEmpty();
2196    }
2197
2198    /**
2199     * @param value {@link #lotNumber} (Lot number of the  vaccine product.). This is the underlying object with id, value and extensions. The accessor "getLotNumber" gives direct access to the value
2200     */
2201    public Immunization setLotNumberElement(StringType value) { 
2202      this.lotNumber = value;
2203      return this;
2204    }
2205
2206    /**
2207     * @return Lot number of the  vaccine product.
2208     */
2209    public String getLotNumber() { 
2210      return this.lotNumber == null ? null : this.lotNumber.getValue();
2211    }
2212
2213    /**
2214     * @param value Lot number of the  vaccine product.
2215     */
2216    public Immunization setLotNumber(String value) { 
2217      if (Utilities.noString(value))
2218        this.lotNumber = null;
2219      else {
2220        if (this.lotNumber == null)
2221          this.lotNumber = new StringType();
2222        this.lotNumber.setValue(value);
2223      }
2224      return this;
2225    }
2226
2227    /**
2228     * @return {@link #expirationDate} (Date vaccine batch expires.). This is the underlying object with id, value and extensions. The accessor "getExpirationDate" gives direct access to the value
2229     */
2230    public DateType getExpirationDateElement() { 
2231      if (this.expirationDate == null)
2232        if (Configuration.errorOnAutoCreate())
2233          throw new Error("Attempt to auto-create Immunization.expirationDate");
2234        else if (Configuration.doAutoCreate())
2235          this.expirationDate = new DateType(); // bb
2236      return this.expirationDate;
2237    }
2238
2239    public boolean hasExpirationDateElement() { 
2240      return this.expirationDate != null && !this.expirationDate.isEmpty();
2241    }
2242
2243    public boolean hasExpirationDate() { 
2244      return this.expirationDate != null && !this.expirationDate.isEmpty();
2245    }
2246
2247    /**
2248     * @param value {@link #expirationDate} (Date vaccine batch expires.). This is the underlying object with id, value and extensions. The accessor "getExpirationDate" gives direct access to the value
2249     */
2250    public Immunization setExpirationDateElement(DateType value) { 
2251      this.expirationDate = value;
2252      return this;
2253    }
2254
2255    /**
2256     * @return Date vaccine batch expires.
2257     */
2258    public Date getExpirationDate() { 
2259      return this.expirationDate == null ? null : this.expirationDate.getValue();
2260    }
2261
2262    /**
2263     * @param value Date vaccine batch expires.
2264     */
2265    public Immunization setExpirationDate(Date value) { 
2266      if (value == null)
2267        this.expirationDate = null;
2268      else {
2269        if (this.expirationDate == null)
2270          this.expirationDate = new DateType();
2271        this.expirationDate.setValue(value);
2272      }
2273      return this;
2274    }
2275
2276    /**
2277     * @return {@link #site} (Body site where vaccine was administered.)
2278     */
2279    public CodeableConcept getSite() { 
2280      if (this.site == null)
2281        if (Configuration.errorOnAutoCreate())
2282          throw new Error("Attempt to auto-create Immunization.site");
2283        else if (Configuration.doAutoCreate())
2284          this.site = new CodeableConcept(); // cc
2285      return this.site;
2286    }
2287
2288    public boolean hasSite() { 
2289      return this.site != null && !this.site.isEmpty();
2290    }
2291
2292    /**
2293     * @param value {@link #site} (Body site where vaccine was administered.)
2294     */
2295    public Immunization setSite(CodeableConcept value) { 
2296      this.site = value;
2297      return this;
2298    }
2299
2300    /**
2301     * @return {@link #route} (The path by which the vaccine product is taken into the body.)
2302     */
2303    public CodeableConcept getRoute() { 
2304      if (this.route == null)
2305        if (Configuration.errorOnAutoCreate())
2306          throw new Error("Attempt to auto-create Immunization.route");
2307        else if (Configuration.doAutoCreate())
2308          this.route = new CodeableConcept(); // cc
2309      return this.route;
2310    }
2311
2312    public boolean hasRoute() { 
2313      return this.route != null && !this.route.isEmpty();
2314    }
2315
2316    /**
2317     * @param value {@link #route} (The path by which the vaccine product is taken into the body.)
2318     */
2319    public Immunization setRoute(CodeableConcept value) { 
2320      this.route = value;
2321      return this;
2322    }
2323
2324    /**
2325     * @return {@link #doseQuantity} (The quantity of vaccine product that was administered.)
2326     */
2327    public Quantity getDoseQuantity() { 
2328      if (this.doseQuantity == null)
2329        if (Configuration.errorOnAutoCreate())
2330          throw new Error("Attempt to auto-create Immunization.doseQuantity");
2331        else if (Configuration.doAutoCreate())
2332          this.doseQuantity = new Quantity(); // cc
2333      return this.doseQuantity;
2334    }
2335
2336    public boolean hasDoseQuantity() { 
2337      return this.doseQuantity != null && !this.doseQuantity.isEmpty();
2338    }
2339
2340    /**
2341     * @param value {@link #doseQuantity} (The quantity of vaccine product that was administered.)
2342     */
2343    public Immunization setDoseQuantity(Quantity value) { 
2344      this.doseQuantity = value;
2345      return this;
2346    }
2347
2348    /**
2349     * @return {@link #performer} (Indicates who performed the immunization event.)
2350     */
2351    public List<ImmunizationPerformerComponent> getPerformer() { 
2352      if (this.performer == null)
2353        this.performer = new ArrayList<ImmunizationPerformerComponent>();
2354      return this.performer;
2355    }
2356
2357    /**
2358     * @return Returns a reference to <code>this</code> for easy method chaining
2359     */
2360    public Immunization setPerformer(List<ImmunizationPerformerComponent> thePerformer) { 
2361      this.performer = thePerformer;
2362      return this;
2363    }
2364
2365    public boolean hasPerformer() { 
2366      if (this.performer == null)
2367        return false;
2368      for (ImmunizationPerformerComponent item : this.performer)
2369        if (!item.isEmpty())
2370          return true;
2371      return false;
2372    }
2373
2374    public ImmunizationPerformerComponent addPerformer() { //3
2375      ImmunizationPerformerComponent t = new ImmunizationPerformerComponent();
2376      if (this.performer == null)
2377        this.performer = new ArrayList<ImmunizationPerformerComponent>();
2378      this.performer.add(t);
2379      return t;
2380    }
2381
2382    public Immunization addPerformer(ImmunizationPerformerComponent t) { //3
2383      if (t == null)
2384        return this;
2385      if (this.performer == null)
2386        this.performer = new ArrayList<ImmunizationPerformerComponent>();
2387      this.performer.add(t);
2388      return this;
2389    }
2390
2391    /**
2392     * @return The first repetition of repeating field {@link #performer}, creating it if it does not already exist {3}
2393     */
2394    public ImmunizationPerformerComponent getPerformerFirstRep() { 
2395      if (getPerformer().isEmpty()) {
2396        addPerformer();
2397      }
2398      return getPerformer().get(0);
2399    }
2400
2401    /**
2402     * @return {@link #note} (Extra information about the immunization that is not conveyed by the other attributes.)
2403     */
2404    public List<Annotation> getNote() { 
2405      if (this.note == null)
2406        this.note = new ArrayList<Annotation>();
2407      return this.note;
2408    }
2409
2410    /**
2411     * @return Returns a reference to <code>this</code> for easy method chaining
2412     */
2413    public Immunization setNote(List<Annotation> theNote) { 
2414      this.note = theNote;
2415      return this;
2416    }
2417
2418    public boolean hasNote() { 
2419      if (this.note == null)
2420        return false;
2421      for (Annotation item : this.note)
2422        if (!item.isEmpty())
2423          return true;
2424      return false;
2425    }
2426
2427    public Annotation addNote() { //3
2428      Annotation t = new Annotation();
2429      if (this.note == null)
2430        this.note = new ArrayList<Annotation>();
2431      this.note.add(t);
2432      return t;
2433    }
2434
2435    public Immunization addNote(Annotation t) { //3
2436      if (t == null)
2437        return this;
2438      if (this.note == null)
2439        this.note = new ArrayList<Annotation>();
2440      this.note.add(t);
2441      return this;
2442    }
2443
2444    /**
2445     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
2446     */
2447    public Annotation getNoteFirstRep() { 
2448      if (getNote().isEmpty()) {
2449        addNote();
2450      }
2451      return getNote().get(0);
2452    }
2453
2454    /**
2455     * @return {@link #reasonCode} (Reasons why the vaccine was administered.)
2456     */
2457    public List<CodeableConcept> getReasonCode() { 
2458      if (this.reasonCode == null)
2459        this.reasonCode = new ArrayList<CodeableConcept>();
2460      return this.reasonCode;
2461    }
2462
2463    /**
2464     * @return Returns a reference to <code>this</code> for easy method chaining
2465     */
2466    public Immunization setReasonCode(List<CodeableConcept> theReasonCode) { 
2467      this.reasonCode = theReasonCode;
2468      return this;
2469    }
2470
2471    public boolean hasReasonCode() { 
2472      if (this.reasonCode == null)
2473        return false;
2474      for (CodeableConcept item : this.reasonCode)
2475        if (!item.isEmpty())
2476          return true;
2477      return false;
2478    }
2479
2480    public CodeableConcept addReasonCode() { //3
2481      CodeableConcept t = new CodeableConcept();
2482      if (this.reasonCode == null)
2483        this.reasonCode = new ArrayList<CodeableConcept>();
2484      this.reasonCode.add(t);
2485      return t;
2486    }
2487
2488    public Immunization addReasonCode(CodeableConcept t) { //3
2489      if (t == null)
2490        return this;
2491      if (this.reasonCode == null)
2492        this.reasonCode = new ArrayList<CodeableConcept>();
2493      this.reasonCode.add(t);
2494      return this;
2495    }
2496
2497    /**
2498     * @return The first repetition of repeating field {@link #reasonCode}, creating it if it does not already exist {3}
2499     */
2500    public CodeableConcept getReasonCodeFirstRep() { 
2501      if (getReasonCode().isEmpty()) {
2502        addReasonCode();
2503      }
2504      return getReasonCode().get(0);
2505    }
2506
2507    /**
2508     * @return {@link #reasonReference} (Condition, Observation or DiagnosticReport that supports why the immunization was administered.)
2509     */
2510    public List<Reference> getReasonReference() { 
2511      if (this.reasonReference == null)
2512        this.reasonReference = new ArrayList<Reference>();
2513      return this.reasonReference;
2514    }
2515
2516    /**
2517     * @return Returns a reference to <code>this</code> for easy method chaining
2518     */
2519    public Immunization setReasonReference(List<Reference> theReasonReference) { 
2520      this.reasonReference = theReasonReference;
2521      return this;
2522    }
2523
2524    public boolean hasReasonReference() { 
2525      if (this.reasonReference == null)
2526        return false;
2527      for (Reference item : this.reasonReference)
2528        if (!item.isEmpty())
2529          return true;
2530      return false;
2531    }
2532
2533    public Reference addReasonReference() { //3
2534      Reference t = new Reference();
2535      if (this.reasonReference == null)
2536        this.reasonReference = new ArrayList<Reference>();
2537      this.reasonReference.add(t);
2538      return t;
2539    }
2540
2541    public Immunization addReasonReference(Reference t) { //3
2542      if (t == null)
2543        return this;
2544      if (this.reasonReference == null)
2545        this.reasonReference = new ArrayList<Reference>();
2546      this.reasonReference.add(t);
2547      return this;
2548    }
2549
2550    /**
2551     * @return The first repetition of repeating field {@link #reasonReference}, creating it if it does not already exist {3}
2552     */
2553    public Reference getReasonReferenceFirstRep() { 
2554      if (getReasonReference().isEmpty()) {
2555        addReasonReference();
2556      }
2557      return getReasonReference().get(0);
2558    }
2559
2560    /**
2561     * @return {@link #isSubpotent} (Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.). This is the underlying object with id, value and extensions. The accessor "getIsSubpotent" gives direct access to the value
2562     */
2563    public BooleanType getIsSubpotentElement() { 
2564      if (this.isSubpotent == null)
2565        if (Configuration.errorOnAutoCreate())
2566          throw new Error("Attempt to auto-create Immunization.isSubpotent");
2567        else if (Configuration.doAutoCreate())
2568          this.isSubpotent = new BooleanType(); // bb
2569      return this.isSubpotent;
2570    }
2571
2572    public boolean hasIsSubpotentElement() { 
2573      return this.isSubpotent != null && !this.isSubpotent.isEmpty();
2574    }
2575
2576    public boolean hasIsSubpotent() { 
2577      return this.isSubpotent != null && !this.isSubpotent.isEmpty();
2578    }
2579
2580    /**
2581     * @param value {@link #isSubpotent} (Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.). This is the underlying object with id, value and extensions. The accessor "getIsSubpotent" gives direct access to the value
2582     */
2583    public Immunization setIsSubpotentElement(BooleanType value) { 
2584      this.isSubpotent = value;
2585      return this;
2586    }
2587
2588    /**
2589     * @return Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.
2590     */
2591    public boolean getIsSubpotent() { 
2592      return this.isSubpotent == null || this.isSubpotent.isEmpty() ? false : this.isSubpotent.getValue();
2593    }
2594
2595    /**
2596     * @param value Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.
2597     */
2598    public Immunization setIsSubpotent(boolean value) { 
2599        if (this.isSubpotent == null)
2600          this.isSubpotent = new BooleanType();
2601        this.isSubpotent.setValue(value);
2602      return this;
2603    }
2604
2605    /**
2606     * @return {@link #subpotentReason} (Reason why a dose is considered to be subpotent.)
2607     */
2608    public List<CodeableConcept> getSubpotentReason() { 
2609      if (this.subpotentReason == null)
2610        this.subpotentReason = new ArrayList<CodeableConcept>();
2611      return this.subpotentReason;
2612    }
2613
2614    /**
2615     * @return Returns a reference to <code>this</code> for easy method chaining
2616     */
2617    public Immunization setSubpotentReason(List<CodeableConcept> theSubpotentReason) { 
2618      this.subpotentReason = theSubpotentReason;
2619      return this;
2620    }
2621
2622    public boolean hasSubpotentReason() { 
2623      if (this.subpotentReason == null)
2624        return false;
2625      for (CodeableConcept item : this.subpotentReason)
2626        if (!item.isEmpty())
2627          return true;
2628      return false;
2629    }
2630
2631    public CodeableConcept addSubpotentReason() { //3
2632      CodeableConcept t = new CodeableConcept();
2633      if (this.subpotentReason == null)
2634        this.subpotentReason = new ArrayList<CodeableConcept>();
2635      this.subpotentReason.add(t);
2636      return t;
2637    }
2638
2639    public Immunization addSubpotentReason(CodeableConcept t) { //3
2640      if (t == null)
2641        return this;
2642      if (this.subpotentReason == null)
2643        this.subpotentReason = new ArrayList<CodeableConcept>();
2644      this.subpotentReason.add(t);
2645      return this;
2646    }
2647
2648    /**
2649     * @return The first repetition of repeating field {@link #subpotentReason}, creating it if it does not already exist {3}
2650     */
2651    public CodeableConcept getSubpotentReasonFirstRep() { 
2652      if (getSubpotentReason().isEmpty()) {
2653        addSubpotentReason();
2654      }
2655      return getSubpotentReason().get(0);
2656    }
2657
2658    /**
2659     * @return {@link #education} (Educational material presented to the patient (or guardian) at the time of vaccine administration.)
2660     */
2661    public List<ImmunizationEducationComponent> getEducation() { 
2662      if (this.education == null)
2663        this.education = new ArrayList<ImmunizationEducationComponent>();
2664      return this.education;
2665    }
2666
2667    /**
2668     * @return Returns a reference to <code>this</code> for easy method chaining
2669     */
2670    public Immunization setEducation(List<ImmunizationEducationComponent> theEducation) { 
2671      this.education = theEducation;
2672      return this;
2673    }
2674
2675    public boolean hasEducation() { 
2676      if (this.education == null)
2677        return false;
2678      for (ImmunizationEducationComponent item : this.education)
2679        if (!item.isEmpty())
2680          return true;
2681      return false;
2682    }
2683
2684    public ImmunizationEducationComponent addEducation() { //3
2685      ImmunizationEducationComponent t = new ImmunizationEducationComponent();
2686      if (this.education == null)
2687        this.education = new ArrayList<ImmunizationEducationComponent>();
2688      this.education.add(t);
2689      return t;
2690    }
2691
2692    public Immunization addEducation(ImmunizationEducationComponent t) { //3
2693      if (t == null)
2694        return this;
2695      if (this.education == null)
2696        this.education = new ArrayList<ImmunizationEducationComponent>();
2697      this.education.add(t);
2698      return this;
2699    }
2700
2701    /**
2702     * @return The first repetition of repeating field {@link #education}, creating it if it does not already exist {3}
2703     */
2704    public ImmunizationEducationComponent getEducationFirstRep() { 
2705      if (getEducation().isEmpty()) {
2706        addEducation();
2707      }
2708      return getEducation().get(0);
2709    }
2710
2711    /**
2712     * @return {@link #programEligibility} (Indicates a patient's eligibility for a funding program.)
2713     */
2714    public List<CodeableConcept> getProgramEligibility() { 
2715      if (this.programEligibility == null)
2716        this.programEligibility = new ArrayList<CodeableConcept>();
2717      return this.programEligibility;
2718    }
2719
2720    /**
2721     * @return Returns a reference to <code>this</code> for easy method chaining
2722     */
2723    public Immunization setProgramEligibility(List<CodeableConcept> theProgramEligibility) { 
2724      this.programEligibility = theProgramEligibility;
2725      return this;
2726    }
2727
2728    public boolean hasProgramEligibility() { 
2729      if (this.programEligibility == null)
2730        return false;
2731      for (CodeableConcept item : this.programEligibility)
2732        if (!item.isEmpty())
2733          return true;
2734      return false;
2735    }
2736
2737    public CodeableConcept addProgramEligibility() { //3
2738      CodeableConcept t = new CodeableConcept();
2739      if (this.programEligibility == null)
2740        this.programEligibility = new ArrayList<CodeableConcept>();
2741      this.programEligibility.add(t);
2742      return t;
2743    }
2744
2745    public Immunization addProgramEligibility(CodeableConcept t) { //3
2746      if (t == null)
2747        return this;
2748      if (this.programEligibility == null)
2749        this.programEligibility = new ArrayList<CodeableConcept>();
2750      this.programEligibility.add(t);
2751      return this;
2752    }
2753
2754    /**
2755     * @return The first repetition of repeating field {@link #programEligibility}, creating it if it does not already exist {3}
2756     */
2757    public CodeableConcept getProgramEligibilityFirstRep() { 
2758      if (getProgramEligibility().isEmpty()) {
2759        addProgramEligibility();
2760      }
2761      return getProgramEligibility().get(0);
2762    }
2763
2764    /**
2765     * @return {@link #fundingSource} (Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered).)
2766     */
2767    public CodeableConcept getFundingSource() { 
2768      if (this.fundingSource == null)
2769        if (Configuration.errorOnAutoCreate())
2770          throw new Error("Attempt to auto-create Immunization.fundingSource");
2771        else if (Configuration.doAutoCreate())
2772          this.fundingSource = new CodeableConcept(); // cc
2773      return this.fundingSource;
2774    }
2775
2776    public boolean hasFundingSource() { 
2777      return this.fundingSource != null && !this.fundingSource.isEmpty();
2778    }
2779
2780    /**
2781     * @param value {@link #fundingSource} (Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered).)
2782     */
2783    public Immunization setFundingSource(CodeableConcept value) { 
2784      this.fundingSource = value;
2785      return this;
2786    }
2787
2788    /**
2789     * @return {@link #reaction} (Categorical data indicating that an adverse event is associated in time to an immunization.)
2790     */
2791    public List<ImmunizationReactionComponent> getReaction() { 
2792      if (this.reaction == null)
2793        this.reaction = new ArrayList<ImmunizationReactionComponent>();
2794      return this.reaction;
2795    }
2796
2797    /**
2798     * @return Returns a reference to <code>this</code> for easy method chaining
2799     */
2800    public Immunization setReaction(List<ImmunizationReactionComponent> theReaction) { 
2801      this.reaction = theReaction;
2802      return this;
2803    }
2804
2805    public boolean hasReaction() { 
2806      if (this.reaction == null)
2807        return false;
2808      for (ImmunizationReactionComponent item : this.reaction)
2809        if (!item.isEmpty())
2810          return true;
2811      return false;
2812    }
2813
2814    public ImmunizationReactionComponent addReaction() { //3
2815      ImmunizationReactionComponent t = new ImmunizationReactionComponent();
2816      if (this.reaction == null)
2817        this.reaction = new ArrayList<ImmunizationReactionComponent>();
2818      this.reaction.add(t);
2819      return t;
2820    }
2821
2822    public Immunization addReaction(ImmunizationReactionComponent t) { //3
2823      if (t == null)
2824        return this;
2825      if (this.reaction == null)
2826        this.reaction = new ArrayList<ImmunizationReactionComponent>();
2827      this.reaction.add(t);
2828      return this;
2829    }
2830
2831    /**
2832     * @return The first repetition of repeating field {@link #reaction}, creating it if it does not already exist {3}
2833     */
2834    public ImmunizationReactionComponent getReactionFirstRep() { 
2835      if (getReaction().isEmpty()) {
2836        addReaction();
2837      }
2838      return getReaction().get(0);
2839    }
2840
2841    /**
2842     * @return {@link #protocolApplied} (The protocol (set of recommendations) being followed by the provider who administered the dose.)
2843     */
2844    public List<ImmunizationProtocolAppliedComponent> getProtocolApplied() { 
2845      if (this.protocolApplied == null)
2846        this.protocolApplied = new ArrayList<ImmunizationProtocolAppliedComponent>();
2847      return this.protocolApplied;
2848    }
2849
2850    /**
2851     * @return Returns a reference to <code>this</code> for easy method chaining
2852     */
2853    public Immunization setProtocolApplied(List<ImmunizationProtocolAppliedComponent> theProtocolApplied) { 
2854      this.protocolApplied = theProtocolApplied;
2855      return this;
2856    }
2857
2858    public boolean hasProtocolApplied() { 
2859      if (this.protocolApplied == null)
2860        return false;
2861      for (ImmunizationProtocolAppliedComponent item : this.protocolApplied)
2862        if (!item.isEmpty())
2863          return true;
2864      return false;
2865    }
2866
2867    public ImmunizationProtocolAppliedComponent addProtocolApplied() { //3
2868      ImmunizationProtocolAppliedComponent t = new ImmunizationProtocolAppliedComponent();
2869      if (this.protocolApplied == null)
2870        this.protocolApplied = new ArrayList<ImmunizationProtocolAppliedComponent>();
2871      this.protocolApplied.add(t);
2872      return t;
2873    }
2874
2875    public Immunization addProtocolApplied(ImmunizationProtocolAppliedComponent t) { //3
2876      if (t == null)
2877        return this;
2878      if (this.protocolApplied == null)
2879        this.protocolApplied = new ArrayList<ImmunizationProtocolAppliedComponent>();
2880      this.protocolApplied.add(t);
2881      return this;
2882    }
2883
2884    /**
2885     * @return The first repetition of repeating field {@link #protocolApplied}, creating it if it does not already exist {3}
2886     */
2887    public ImmunizationProtocolAppliedComponent getProtocolAppliedFirstRep() { 
2888      if (getProtocolApplied().isEmpty()) {
2889        addProtocolApplied();
2890      }
2891      return getProtocolApplied().get(0);
2892    }
2893
2894      protected void listChildren(List<Property> children) {
2895        super.listChildren(children);
2896        children.add(new Property("identifier", "Identifier", "A unique identifier assigned to this immunization record.", 0, java.lang.Integer.MAX_VALUE, identifier));
2897        children.add(new Property("status", "code", "Indicates the current status of the immunization event.", 0, 1, status));
2898        children.add(new Property("statusReason", "CodeableConcept", "Indicates the reason the immunization event was not performed.", 0, 1, statusReason));
2899        children.add(new Property("vaccineCode", "CodeableConcept", "Vaccine that was administered or was to be administered.", 0, 1, vaccineCode));
2900        children.add(new Property("patient", "Reference(Patient)", "The patient who either received or did not receive the immunization.", 0, 1, patient));
2901        children.add(new Property("encounter", "Reference(Encounter)", "The visit or admission or other contact between patient and health care provider the immunization was performed as part of.", 0, 1, encounter));
2902        children.add(new Property("occurrence[x]", "dateTime|string", "Date vaccine administered or was to be administered.", 0, 1, occurrence));
2903        children.add(new Property("recorded", "dateTime", "The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event.", 0, 1, recorded));
2904        children.add(new Property("primarySource", "boolean", "An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.", 0, 1, primarySource));
2905        children.add(new Property("reportOrigin", "CodeableConcept", "The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.", 0, 1, reportOrigin));
2906        children.add(new Property("location", "Reference(Location)", "The service delivery location where the vaccine administration occurred.", 0, 1, location));
2907        children.add(new Property("manufacturer", "Reference(Organization)", "Name of vaccine manufacturer.", 0, 1, manufacturer));
2908        children.add(new Property("lotNumber", "string", "Lot number of the  vaccine product.", 0, 1, lotNumber));
2909        children.add(new Property("expirationDate", "date", "Date vaccine batch expires.", 0, 1, expirationDate));
2910        children.add(new Property("site", "CodeableConcept", "Body site where vaccine was administered.", 0, 1, site));
2911        children.add(new Property("route", "CodeableConcept", "The path by which the vaccine product is taken into the body.", 0, 1, route));
2912        children.add(new Property("doseQuantity", "Quantity", "The quantity of vaccine product that was administered.", 0, 1, doseQuantity));
2913        children.add(new Property("performer", "", "Indicates who performed the immunization event.", 0, java.lang.Integer.MAX_VALUE, performer));
2914        children.add(new Property("note", "Annotation", "Extra information about the immunization that is not conveyed by the other attributes.", 0, java.lang.Integer.MAX_VALUE, note));
2915        children.add(new Property("reasonCode", "CodeableConcept", "Reasons why the vaccine was administered.", 0, java.lang.Integer.MAX_VALUE, reasonCode));
2916        children.add(new Property("reasonReference", "Reference(Condition|Observation|DiagnosticReport)", "Condition, Observation or DiagnosticReport that supports why the immunization was administered.", 0, java.lang.Integer.MAX_VALUE, reasonReference));
2917        children.add(new Property("isSubpotent", "boolean", "Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.", 0, 1, isSubpotent));
2918        children.add(new Property("subpotentReason", "CodeableConcept", "Reason why a dose is considered to be subpotent.", 0, java.lang.Integer.MAX_VALUE, subpotentReason));
2919        children.add(new Property("education", "", "Educational material presented to the patient (or guardian) at the time of vaccine administration.", 0, java.lang.Integer.MAX_VALUE, education));
2920        children.add(new Property("programEligibility", "CodeableConcept", "Indicates a patient's eligibility for a funding program.", 0, java.lang.Integer.MAX_VALUE, programEligibility));
2921        children.add(new Property("fundingSource", "CodeableConcept", "Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered).", 0, 1, fundingSource));
2922        children.add(new Property("reaction", "", "Categorical data indicating that an adverse event is associated in time to an immunization.", 0, java.lang.Integer.MAX_VALUE, reaction));
2923        children.add(new Property("protocolApplied", "", "The protocol (set of recommendations) being followed by the provider who administered the dose.", 0, java.lang.Integer.MAX_VALUE, protocolApplied));
2924      }
2925
2926      @Override
2927      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2928        switch (_hash) {
2929        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A unique identifier assigned to this immunization record.", 0, java.lang.Integer.MAX_VALUE, identifier);
2930        case -892481550: /*status*/  return new Property("status", "code", "Indicates the current status of the immunization event.", 0, 1, status);
2931        case 2051346646: /*statusReason*/  return new Property("statusReason", "CodeableConcept", "Indicates the reason the immunization event was not performed.", 0, 1, statusReason);
2932        case 664556354: /*vaccineCode*/  return new Property("vaccineCode", "CodeableConcept", "Vaccine that was administered or was to be administered.", 0, 1, vaccineCode);
2933        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "The patient who either received or did not receive the immunization.", 0, 1, patient);
2934        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "The visit or admission or other contact between patient and health care provider the immunization was performed as part of.", 0, 1, encounter);
2935        case -2022646513: /*occurrence[x]*/  return new Property("occurrence[x]", "dateTime|string", "Date vaccine administered or was to be administered.", 0, 1, occurrence);
2936        case 1687874001: /*occurrence*/  return new Property("occurrence[x]", "dateTime|string", "Date vaccine administered or was to be administered.", 0, 1, occurrence);
2937        case -298443636: /*occurrenceDateTime*/  return new Property("occurrence[x]", "dateTime", "Date vaccine administered or was to be administered.", 0, 1, occurrence);
2938        case 1496896834: /*occurrenceString*/  return new Property("occurrence[x]", "string", "Date vaccine administered or was to be administered.", 0, 1, occurrence);
2939        case -799233872: /*recorded*/  return new Property("recorded", "dateTime", "The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event.", 0, 1, recorded);
2940        case -528721731: /*primarySource*/  return new Property("primarySource", "boolean", "An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.", 0, 1, primarySource);
2941        case 486750586: /*reportOrigin*/  return new Property("reportOrigin", "CodeableConcept", "The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.", 0, 1, reportOrigin);
2942        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "The service delivery location where the vaccine administration occurred.", 0, 1, location);
2943        case -1969347631: /*manufacturer*/  return new Property("manufacturer", "Reference(Organization)", "Name of vaccine manufacturer.", 0, 1, manufacturer);
2944        case 462547450: /*lotNumber*/  return new Property("lotNumber", "string", "Lot number of the  vaccine product.", 0, 1, lotNumber);
2945        case -668811523: /*expirationDate*/  return new Property("expirationDate", "date", "Date vaccine batch expires.", 0, 1, expirationDate);
2946        case 3530567: /*site*/  return new Property("site", "CodeableConcept", "Body site where vaccine was administered.", 0, 1, site);
2947        case 108704329: /*route*/  return new Property("route", "CodeableConcept", "The path by which the vaccine product is taken into the body.", 0, 1, route);
2948        case -2083618872: /*doseQuantity*/  return new Property("doseQuantity", "Quantity", "The quantity of vaccine product that was administered.", 0, 1, doseQuantity);
2949        case 481140686: /*performer*/  return new Property("performer", "", "Indicates who performed the immunization event.", 0, java.lang.Integer.MAX_VALUE, performer);
2950        case 3387378: /*note*/  return new Property("note", "Annotation", "Extra information about the immunization that is not conveyed by the other attributes.", 0, java.lang.Integer.MAX_VALUE, note);
2951        case 722137681: /*reasonCode*/  return new Property("reasonCode", "CodeableConcept", "Reasons why the vaccine was administered.", 0, java.lang.Integer.MAX_VALUE, reasonCode);
2952        case -1146218137: /*reasonReference*/  return new Property("reasonReference", "Reference(Condition|Observation|DiagnosticReport)", "Condition, Observation or DiagnosticReport that supports why the immunization was administered.", 0, java.lang.Integer.MAX_VALUE, reasonReference);
2953        case 1618512556: /*isSubpotent*/  return new Property("isSubpotent", "boolean", "Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.", 0, 1, isSubpotent);
2954        case 805168794: /*subpotentReason*/  return new Property("subpotentReason", "CodeableConcept", "Reason why a dose is considered to be subpotent.", 0, java.lang.Integer.MAX_VALUE, subpotentReason);
2955        case -290756696: /*education*/  return new Property("education", "", "Educational material presented to the patient (or guardian) at the time of vaccine administration.", 0, java.lang.Integer.MAX_VALUE, education);
2956        case 1207530089: /*programEligibility*/  return new Property("programEligibility", "CodeableConcept", "Indicates a patient's eligibility for a funding program.", 0, java.lang.Integer.MAX_VALUE, programEligibility);
2957        case 1120150904: /*fundingSource*/  return new Property("fundingSource", "CodeableConcept", "Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered).", 0, 1, fundingSource);
2958        case -867509719: /*reaction*/  return new Property("reaction", "", "Categorical data indicating that an adverse event is associated in time to an immunization.", 0, java.lang.Integer.MAX_VALUE, reaction);
2959        case 607985349: /*protocolApplied*/  return new Property("protocolApplied", "", "The protocol (set of recommendations) being followed by the provider who administered the dose.", 0, java.lang.Integer.MAX_VALUE, protocolApplied);
2960        default: return super.getNamedProperty(_hash, _name, _checkValid);
2961        }
2962
2963      }
2964
2965      @Override
2966      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2967        switch (hash) {
2968        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2969        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ImmunizationStatusCodes>
2970        case 2051346646: /*statusReason*/ return this.statusReason == null ? new Base[0] : new Base[] {this.statusReason}; // CodeableConcept
2971        case 664556354: /*vaccineCode*/ return this.vaccineCode == null ? new Base[0] : new Base[] {this.vaccineCode}; // CodeableConcept
2972        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
2973        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
2974        case 1687874001: /*occurrence*/ return this.occurrence == null ? new Base[0] : new Base[] {this.occurrence}; // DataType
2975        case -799233872: /*recorded*/ return this.recorded == null ? new Base[0] : new Base[] {this.recorded}; // DateTimeType
2976        case -528721731: /*primarySource*/ return this.primarySource == null ? new Base[0] : new Base[] {this.primarySource}; // BooleanType
2977        case 486750586: /*reportOrigin*/ return this.reportOrigin == null ? new Base[0] : new Base[] {this.reportOrigin}; // CodeableConcept
2978        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
2979        case -1969347631: /*manufacturer*/ return this.manufacturer == null ? new Base[0] : new Base[] {this.manufacturer}; // Reference
2980        case 462547450: /*lotNumber*/ return this.lotNumber == null ? new Base[0] : new Base[] {this.lotNumber}; // StringType
2981        case -668811523: /*expirationDate*/ return this.expirationDate == null ? new Base[0] : new Base[] {this.expirationDate}; // DateType
2982        case 3530567: /*site*/ return this.site == null ? new Base[0] : new Base[] {this.site}; // CodeableConcept
2983        case 108704329: /*route*/ return this.route == null ? new Base[0] : new Base[] {this.route}; // CodeableConcept
2984        case -2083618872: /*doseQuantity*/ return this.doseQuantity == null ? new Base[0] : new Base[] {this.doseQuantity}; // Quantity
2985        case 481140686: /*performer*/ return this.performer == null ? new Base[0] : this.performer.toArray(new Base[this.performer.size()]); // ImmunizationPerformerComponent
2986        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
2987        case 722137681: /*reasonCode*/ return this.reasonCode == null ? new Base[0] : this.reasonCode.toArray(new Base[this.reasonCode.size()]); // CodeableConcept
2988        case -1146218137: /*reasonReference*/ return this.reasonReference == null ? new Base[0] : this.reasonReference.toArray(new Base[this.reasonReference.size()]); // Reference
2989        case 1618512556: /*isSubpotent*/ return this.isSubpotent == null ? new Base[0] : new Base[] {this.isSubpotent}; // BooleanType
2990        case 805168794: /*subpotentReason*/ return this.subpotentReason == null ? new Base[0] : this.subpotentReason.toArray(new Base[this.subpotentReason.size()]); // CodeableConcept
2991        case -290756696: /*education*/ return this.education == null ? new Base[0] : this.education.toArray(new Base[this.education.size()]); // ImmunizationEducationComponent
2992        case 1207530089: /*programEligibility*/ return this.programEligibility == null ? new Base[0] : this.programEligibility.toArray(new Base[this.programEligibility.size()]); // CodeableConcept
2993        case 1120150904: /*fundingSource*/ return this.fundingSource == null ? new Base[0] : new Base[] {this.fundingSource}; // CodeableConcept
2994        case -867509719: /*reaction*/ return this.reaction == null ? new Base[0] : this.reaction.toArray(new Base[this.reaction.size()]); // ImmunizationReactionComponent
2995        case 607985349: /*protocolApplied*/ return this.protocolApplied == null ? new Base[0] : this.protocolApplied.toArray(new Base[this.protocolApplied.size()]); // ImmunizationProtocolAppliedComponent
2996        default: return super.getProperty(hash, name, checkValid);
2997        }
2998
2999      }
3000
3001      @Override
3002      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3003        switch (hash) {
3004        case -1618432855: // identifier
3005          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3006          return value;
3007        case -892481550: // status
3008          value = new ImmunizationStatusCodesEnumFactory().fromType(TypeConvertor.castToCode(value));
3009          this.status = (Enumeration) value; // Enumeration<ImmunizationStatusCodes>
3010          return value;
3011        case 2051346646: // statusReason
3012          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3013          return value;
3014        case 664556354: // vaccineCode
3015          this.vaccineCode = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3016          return value;
3017        case -791418107: // patient
3018          this.patient = TypeConvertor.castToReference(value); // Reference
3019          return value;
3020        case 1524132147: // encounter
3021          this.encounter = TypeConvertor.castToReference(value); // Reference
3022          return value;
3023        case 1687874001: // occurrence
3024          this.occurrence = TypeConvertor.castToType(value); // DataType
3025          return value;
3026        case -799233872: // recorded
3027          this.recorded = TypeConvertor.castToDateTime(value); // DateTimeType
3028          return value;
3029        case -528721731: // primarySource
3030          this.primarySource = TypeConvertor.castToBoolean(value); // BooleanType
3031          return value;
3032        case 486750586: // reportOrigin
3033          this.reportOrigin = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3034          return value;
3035        case 1901043637: // location
3036          this.location = TypeConvertor.castToReference(value); // Reference
3037          return value;
3038        case -1969347631: // manufacturer
3039          this.manufacturer = TypeConvertor.castToReference(value); // Reference
3040          return value;
3041        case 462547450: // lotNumber
3042          this.lotNumber = TypeConvertor.castToString(value); // StringType
3043          return value;
3044        case -668811523: // expirationDate
3045          this.expirationDate = TypeConvertor.castToDate(value); // DateType
3046          return value;
3047        case 3530567: // site
3048          this.site = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3049          return value;
3050        case 108704329: // route
3051          this.route = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3052          return value;
3053        case -2083618872: // doseQuantity
3054          this.doseQuantity = TypeConvertor.castToQuantity(value); // Quantity
3055          return value;
3056        case 481140686: // performer
3057          this.getPerformer().add((ImmunizationPerformerComponent) value); // ImmunizationPerformerComponent
3058          return value;
3059        case 3387378: // note
3060          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
3061          return value;
3062        case 722137681: // reasonCode
3063          this.getReasonCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3064          return value;
3065        case -1146218137: // reasonReference
3066          this.getReasonReference().add(TypeConvertor.castToReference(value)); // Reference
3067          return value;
3068        case 1618512556: // isSubpotent
3069          this.isSubpotent = TypeConvertor.castToBoolean(value); // BooleanType
3070          return value;
3071        case 805168794: // subpotentReason
3072          this.getSubpotentReason().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3073          return value;
3074        case -290756696: // education
3075          this.getEducation().add((ImmunizationEducationComponent) value); // ImmunizationEducationComponent
3076          return value;
3077        case 1207530089: // programEligibility
3078          this.getProgramEligibility().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3079          return value;
3080        case 1120150904: // fundingSource
3081          this.fundingSource = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3082          return value;
3083        case -867509719: // reaction
3084          this.getReaction().add((ImmunizationReactionComponent) value); // ImmunizationReactionComponent
3085          return value;
3086        case 607985349: // protocolApplied
3087          this.getProtocolApplied().add((ImmunizationProtocolAppliedComponent) value); // ImmunizationProtocolAppliedComponent
3088          return value;
3089        default: return super.setProperty(hash, name, value);
3090        }
3091
3092      }
3093
3094      @Override
3095      public Base setProperty(String name, Base value) throws FHIRException {
3096        if (name.equals("identifier")) {
3097          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3098        } else if (name.equals("status")) {
3099          value = new ImmunizationStatusCodesEnumFactory().fromType(TypeConvertor.castToCode(value));
3100          this.status = (Enumeration) value; // Enumeration<ImmunizationStatusCodes>
3101        } else if (name.equals("statusReason")) {
3102          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3103        } else if (name.equals("vaccineCode")) {
3104          this.vaccineCode = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3105        } else if (name.equals("patient")) {
3106          this.patient = TypeConvertor.castToReference(value); // Reference
3107        } else if (name.equals("encounter")) {
3108          this.encounter = TypeConvertor.castToReference(value); // Reference
3109        } else if (name.equals("occurrence[x]")) {
3110          this.occurrence = TypeConvertor.castToType(value); // DataType
3111        } else if (name.equals("recorded")) {
3112          this.recorded = TypeConvertor.castToDateTime(value); // DateTimeType
3113        } else if (name.equals("primarySource")) {
3114          this.primarySource = TypeConvertor.castToBoolean(value); // BooleanType
3115        } else if (name.equals("reportOrigin")) {
3116          this.reportOrigin = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3117        } else if (name.equals("location")) {
3118          this.location = TypeConvertor.castToReference(value); // Reference
3119        } else if (name.equals("manufacturer")) {
3120          this.manufacturer = TypeConvertor.castToReference(value); // Reference
3121        } else if (name.equals("lotNumber")) {
3122          this.lotNumber = TypeConvertor.castToString(value); // StringType
3123        } else if (name.equals("expirationDate")) {
3124          this.expirationDate = TypeConvertor.castToDate(value); // DateType
3125        } else if (name.equals("site")) {
3126          this.site = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3127        } else if (name.equals("route")) {
3128          this.route = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3129        } else if (name.equals("doseQuantity")) {
3130          this.doseQuantity = TypeConvertor.castToQuantity(value); // Quantity
3131        } else if (name.equals("performer")) {
3132          this.getPerformer().add((ImmunizationPerformerComponent) value);
3133        } else if (name.equals("note")) {
3134          this.getNote().add(TypeConvertor.castToAnnotation(value));
3135        } else if (name.equals("reasonCode")) {
3136          this.getReasonCode().add(TypeConvertor.castToCodeableConcept(value));
3137        } else if (name.equals("reasonReference")) {
3138          this.getReasonReference().add(TypeConvertor.castToReference(value));
3139        } else if (name.equals("isSubpotent")) {
3140          this.isSubpotent = TypeConvertor.castToBoolean(value); // BooleanType
3141        } else if (name.equals("subpotentReason")) {
3142          this.getSubpotentReason().add(TypeConvertor.castToCodeableConcept(value));
3143        } else if (name.equals("education")) {
3144          this.getEducation().add((ImmunizationEducationComponent) value);
3145        } else if (name.equals("programEligibility")) {
3146          this.getProgramEligibility().add(TypeConvertor.castToCodeableConcept(value));
3147        } else if (name.equals("fundingSource")) {
3148          this.fundingSource = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3149        } else if (name.equals("reaction")) {
3150          this.getReaction().add((ImmunizationReactionComponent) value);
3151        } else if (name.equals("protocolApplied")) {
3152          this.getProtocolApplied().add((ImmunizationProtocolAppliedComponent) value);
3153        } else
3154          return super.setProperty(name, value);
3155        return value;
3156      }
3157
3158      @Override
3159      public Base makeProperty(int hash, String name) throws FHIRException {
3160        switch (hash) {
3161        case -1618432855:  return addIdentifier(); 
3162        case -892481550:  return getStatusElement();
3163        case 2051346646:  return getStatusReason();
3164        case 664556354:  return getVaccineCode();
3165        case -791418107:  return getPatient();
3166        case 1524132147:  return getEncounter();
3167        case -2022646513:  return getOccurrence();
3168        case 1687874001:  return getOccurrence();
3169        case -799233872:  return getRecordedElement();
3170        case -528721731:  return getPrimarySourceElement();
3171        case 486750586:  return getReportOrigin();
3172        case 1901043637:  return getLocation();
3173        case -1969347631:  return getManufacturer();
3174        case 462547450:  return getLotNumberElement();
3175        case -668811523:  return getExpirationDateElement();
3176        case 3530567:  return getSite();
3177        case 108704329:  return getRoute();
3178        case -2083618872:  return getDoseQuantity();
3179        case 481140686:  return addPerformer(); 
3180        case 3387378:  return addNote(); 
3181        case 722137681:  return addReasonCode(); 
3182        case -1146218137:  return addReasonReference(); 
3183        case 1618512556:  return getIsSubpotentElement();
3184        case 805168794:  return addSubpotentReason(); 
3185        case -290756696:  return addEducation(); 
3186        case 1207530089:  return addProgramEligibility(); 
3187        case 1120150904:  return getFundingSource();
3188        case -867509719:  return addReaction(); 
3189        case 607985349:  return addProtocolApplied(); 
3190        default: return super.makeProperty(hash, name);
3191        }
3192
3193      }
3194
3195      @Override
3196      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3197        switch (hash) {
3198        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3199        case -892481550: /*status*/ return new String[] {"code"};
3200        case 2051346646: /*statusReason*/ return new String[] {"CodeableConcept"};
3201        case 664556354: /*vaccineCode*/ return new String[] {"CodeableConcept"};
3202        case -791418107: /*patient*/ return new String[] {"Reference"};
3203        case 1524132147: /*encounter*/ return new String[] {"Reference"};
3204        case 1687874001: /*occurrence*/ return new String[] {"dateTime", "string"};
3205        case -799233872: /*recorded*/ return new String[] {"dateTime"};
3206        case -528721731: /*primarySource*/ return new String[] {"boolean"};
3207        case 486750586: /*reportOrigin*/ return new String[] {"CodeableConcept"};
3208        case 1901043637: /*location*/ return new String[] {"Reference"};
3209        case -1969347631: /*manufacturer*/ return new String[] {"Reference"};
3210        case 462547450: /*lotNumber*/ return new String[] {"string"};
3211        case -668811523: /*expirationDate*/ return new String[] {"date"};
3212        case 3530567: /*site*/ return new String[] {"CodeableConcept"};
3213        case 108704329: /*route*/ return new String[] {"CodeableConcept"};
3214        case -2083618872: /*doseQuantity*/ return new String[] {"Quantity"};
3215        case 481140686: /*performer*/ return new String[] {};
3216        case 3387378: /*note*/ return new String[] {"Annotation"};
3217        case 722137681: /*reasonCode*/ return new String[] {"CodeableConcept"};
3218        case -1146218137: /*reasonReference*/ return new String[] {"Reference"};
3219        case 1618512556: /*isSubpotent*/ return new String[] {"boolean"};
3220        case 805168794: /*subpotentReason*/ return new String[] {"CodeableConcept"};
3221        case -290756696: /*education*/ return new String[] {};
3222        case 1207530089: /*programEligibility*/ return new String[] {"CodeableConcept"};
3223        case 1120150904: /*fundingSource*/ return new String[] {"CodeableConcept"};
3224        case -867509719: /*reaction*/ return new String[] {};
3225        case 607985349: /*protocolApplied*/ return new String[] {};
3226        default: return super.getTypesForProperty(hash, name);
3227        }
3228
3229      }
3230
3231      @Override
3232      public Base addChild(String name) throws FHIRException {
3233        if (name.equals("identifier")) {
3234          return addIdentifier();
3235        }
3236        else if (name.equals("status")) {
3237          throw new FHIRException("Cannot call addChild on a primitive type Immunization.status");
3238        }
3239        else if (name.equals("statusReason")) {
3240          this.statusReason = new CodeableConcept();
3241          return this.statusReason;
3242        }
3243        else if (name.equals("vaccineCode")) {
3244          this.vaccineCode = new CodeableConcept();
3245          return this.vaccineCode;
3246        }
3247        else if (name.equals("patient")) {
3248          this.patient = new Reference();
3249          return this.patient;
3250        }
3251        else if (name.equals("encounter")) {
3252          this.encounter = new Reference();
3253          return this.encounter;
3254        }
3255        else if (name.equals("occurrenceDateTime")) {
3256          this.occurrence = new DateTimeType();
3257          return this.occurrence;
3258        }
3259        else if (name.equals("occurrenceString")) {
3260          this.occurrence = new StringType();
3261          return this.occurrence;
3262        }
3263        else if (name.equals("recorded")) {
3264          throw new FHIRException("Cannot call addChild on a primitive type Immunization.recorded");
3265        }
3266        else if (name.equals("primarySource")) {
3267          throw new FHIRException("Cannot call addChild on a primitive type Immunization.primarySource");
3268        }
3269        else if (name.equals("reportOrigin")) {
3270          this.reportOrigin = new CodeableConcept();
3271          return this.reportOrigin;
3272        }
3273        else if (name.equals("location")) {
3274          this.location = new Reference();
3275          return this.location;
3276        }
3277        else if (name.equals("manufacturer")) {
3278          this.manufacturer = new Reference();
3279          return this.manufacturer;
3280        }
3281        else if (name.equals("lotNumber")) {
3282          throw new FHIRException("Cannot call addChild on a primitive type Immunization.lotNumber");
3283        }
3284        else if (name.equals("expirationDate")) {
3285          throw new FHIRException("Cannot call addChild on a primitive type Immunization.expirationDate");
3286        }
3287        else if (name.equals("site")) {
3288          this.site = new CodeableConcept();
3289          return this.site;
3290        }
3291        else if (name.equals("route")) {
3292          this.route = new CodeableConcept();
3293          return this.route;
3294        }
3295        else if (name.equals("doseQuantity")) {
3296          this.doseQuantity = new Quantity();
3297          return this.doseQuantity;
3298        }
3299        else if (name.equals("performer")) {
3300          return addPerformer();
3301        }
3302        else if (name.equals("note")) {
3303          return addNote();
3304        }
3305        else if (name.equals("reasonCode")) {
3306          return addReasonCode();
3307        }
3308        else if (name.equals("reasonReference")) {
3309          return addReasonReference();
3310        }
3311        else if (name.equals("isSubpotent")) {
3312          throw new FHIRException("Cannot call addChild on a primitive type Immunization.isSubpotent");
3313        }
3314        else if (name.equals("subpotentReason")) {
3315          return addSubpotentReason();
3316        }
3317        else if (name.equals("education")) {
3318          return addEducation();
3319        }
3320        else if (name.equals("programEligibility")) {
3321          return addProgramEligibility();
3322        }
3323        else if (name.equals("fundingSource")) {
3324          this.fundingSource = new CodeableConcept();
3325          return this.fundingSource;
3326        }
3327        else if (name.equals("reaction")) {
3328          return addReaction();
3329        }
3330        else if (name.equals("protocolApplied")) {
3331          return addProtocolApplied();
3332        }
3333        else
3334          return super.addChild(name);
3335      }
3336
3337  public String fhirType() {
3338    return "Immunization";
3339
3340  }
3341
3342      public Immunization copy() {
3343        Immunization dst = new Immunization();
3344        copyValues(dst);
3345        return dst;
3346      }
3347
3348      public void copyValues(Immunization dst) {
3349        super.copyValues(dst);
3350        if (identifier != null) {
3351          dst.identifier = new ArrayList<Identifier>();
3352          for (Identifier i : identifier)
3353            dst.identifier.add(i.copy());
3354        };
3355        dst.status = status == null ? null : status.copy();
3356        dst.statusReason = statusReason == null ? null : statusReason.copy();
3357        dst.vaccineCode = vaccineCode == null ? null : vaccineCode.copy();
3358        dst.patient = patient == null ? null : patient.copy();
3359        dst.encounter = encounter == null ? null : encounter.copy();
3360        dst.occurrence = occurrence == null ? null : occurrence.copy();
3361        dst.recorded = recorded == null ? null : recorded.copy();
3362        dst.primarySource = primarySource == null ? null : primarySource.copy();
3363        dst.reportOrigin = reportOrigin == null ? null : reportOrigin.copy();
3364        dst.location = location == null ? null : location.copy();
3365        dst.manufacturer = manufacturer == null ? null : manufacturer.copy();
3366        dst.lotNumber = lotNumber == null ? null : lotNumber.copy();
3367        dst.expirationDate = expirationDate == null ? null : expirationDate.copy();
3368        dst.site = site == null ? null : site.copy();
3369        dst.route = route == null ? null : route.copy();
3370        dst.doseQuantity = doseQuantity == null ? null : doseQuantity.copy();
3371        if (performer != null) {
3372          dst.performer = new ArrayList<ImmunizationPerformerComponent>();
3373          for (ImmunizationPerformerComponent i : performer)
3374            dst.performer.add(i.copy());
3375        };
3376        if (note != null) {
3377          dst.note = new ArrayList<Annotation>();
3378          for (Annotation i : note)
3379            dst.note.add(i.copy());
3380        };
3381        if (reasonCode != null) {
3382          dst.reasonCode = new ArrayList<CodeableConcept>();
3383          for (CodeableConcept i : reasonCode)
3384            dst.reasonCode.add(i.copy());
3385        };
3386        if (reasonReference != null) {
3387          dst.reasonReference = new ArrayList<Reference>();
3388          for (Reference i : reasonReference)
3389            dst.reasonReference.add(i.copy());
3390        };
3391        dst.isSubpotent = isSubpotent == null ? null : isSubpotent.copy();
3392        if (subpotentReason != null) {
3393          dst.subpotentReason = new ArrayList<CodeableConcept>();
3394          for (CodeableConcept i : subpotentReason)
3395            dst.subpotentReason.add(i.copy());
3396        };
3397        if (education != null) {
3398          dst.education = new ArrayList<ImmunizationEducationComponent>();
3399          for (ImmunizationEducationComponent i : education)
3400            dst.education.add(i.copy());
3401        };
3402        if (programEligibility != null) {
3403          dst.programEligibility = new ArrayList<CodeableConcept>();
3404          for (CodeableConcept i : programEligibility)
3405            dst.programEligibility.add(i.copy());
3406        };
3407        dst.fundingSource = fundingSource == null ? null : fundingSource.copy();
3408        if (reaction != null) {
3409          dst.reaction = new ArrayList<ImmunizationReactionComponent>();
3410          for (ImmunizationReactionComponent i : reaction)
3411            dst.reaction.add(i.copy());
3412        };
3413        if (protocolApplied != null) {
3414          dst.protocolApplied = new ArrayList<ImmunizationProtocolAppliedComponent>();
3415          for (ImmunizationProtocolAppliedComponent i : protocolApplied)
3416            dst.protocolApplied.add(i.copy());
3417        };
3418      }
3419
3420      protected Immunization typedCopy() {
3421        return copy();
3422      }
3423
3424      @Override
3425      public boolean equalsDeep(Base other_) {
3426        if (!super.equalsDeep(other_))
3427          return false;
3428        if (!(other_ instanceof Immunization))
3429          return false;
3430        Immunization o = (Immunization) other_;
3431        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(statusReason, o.statusReason, true)
3432           && compareDeep(vaccineCode, o.vaccineCode, true) && compareDeep(patient, o.patient, true) && compareDeep(encounter, o.encounter, true)
3433           && compareDeep(occurrence, o.occurrence, true) && compareDeep(recorded, o.recorded, true) && compareDeep(primarySource, o.primarySource, true)
3434           && compareDeep(reportOrigin, o.reportOrigin, true) && compareDeep(location, o.location, true) && compareDeep(manufacturer, o.manufacturer, true)
3435           && compareDeep(lotNumber, o.lotNumber, true) && compareDeep(expirationDate, o.expirationDate, true)
3436           && compareDeep(site, o.site, true) && compareDeep(route, o.route, true) && compareDeep(doseQuantity, o.doseQuantity, true)
3437           && compareDeep(performer, o.performer, true) && compareDeep(note, o.note, true) && compareDeep(reasonCode, o.reasonCode, true)
3438           && compareDeep(reasonReference, o.reasonReference, true) && compareDeep(isSubpotent, o.isSubpotent, true)
3439           && compareDeep(subpotentReason, o.subpotentReason, true) && compareDeep(education, o.education, true)
3440           && compareDeep(programEligibility, o.programEligibility, true) && compareDeep(fundingSource, o.fundingSource, true)
3441           && compareDeep(reaction, o.reaction, true) && compareDeep(protocolApplied, o.protocolApplied, true)
3442          ;
3443      }
3444
3445      @Override
3446      public boolean equalsShallow(Base other_) {
3447        if (!super.equalsShallow(other_))
3448          return false;
3449        if (!(other_ instanceof Immunization))
3450          return false;
3451        Immunization o = (Immunization) other_;
3452        return compareValues(status, o.status, true) && compareValues(recorded, o.recorded, true) && compareValues(primarySource, o.primarySource, true)
3453           && compareValues(lotNumber, o.lotNumber, true) && compareValues(expirationDate, o.expirationDate, true)
3454           && compareValues(isSubpotent, o.isSubpotent, true);
3455      }
3456
3457      public boolean isEmpty() {
3458        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, statusReason
3459          , vaccineCode, patient, encounter, occurrence, recorded, primarySource, reportOrigin
3460          , location, manufacturer, lotNumber, expirationDate, site, route, doseQuantity
3461          , performer, note, reasonCode, reasonReference, isSubpotent, subpotentReason, education
3462          , programEligibility, fundingSource, reaction, protocolApplied);
3463      }
3464
3465  @Override
3466  public ResourceType getResourceType() {
3467    return ResourceType.Immunization;
3468   }
3469
3470 /**
3471   * Search parameter: <b>location</b>
3472   * <p>
3473   * Description: <b>The service delivery location or facility in which the vaccine was / was to be administered</b><br>
3474   * Type: <b>reference</b><br>
3475   * Path: <b>Immunization.location</b><br>
3476   * </p>
3477   */
3478  @SearchParamDefinition(name="location", path="Immunization.location", description="The service delivery location or facility in which the vaccine was / was to be administered", type="reference", target={Location.class } )
3479  public static final String SP_LOCATION = "location";
3480 /**
3481   * <b>Fluent Client</b> search parameter constant for <b>location</b>
3482   * <p>
3483   * Description: <b>The service delivery location or facility in which the vaccine was / was to be administered</b><br>
3484   * Type: <b>reference</b><br>
3485   * Path: <b>Immunization.location</b><br>
3486   * </p>
3487   */
3488  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
3489
3490/**
3491   * Constant for fluent queries to be used to add include statements. Specifies
3492   * the path value of "<b>Immunization:location</b>".
3493   */
3494  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("Immunization:location").toLocked();
3495
3496 /**
3497   * Search parameter: <b>lot-number</b>
3498   * <p>
3499   * Description: <b>Vaccine Lot Number</b><br>
3500   * Type: <b>string</b><br>
3501   * Path: <b>Immunization.lotNumber</b><br>
3502   * </p>
3503   */
3504  @SearchParamDefinition(name="lot-number", path="Immunization.lotNumber", description="Vaccine Lot Number", type="string" )
3505  public static final String SP_LOT_NUMBER = "lot-number";
3506 /**
3507   * <b>Fluent Client</b> search parameter constant for <b>lot-number</b>
3508   * <p>
3509   * Description: <b>Vaccine Lot Number</b><br>
3510   * Type: <b>string</b><br>
3511   * Path: <b>Immunization.lotNumber</b><br>
3512   * </p>
3513   */
3514  public static final ca.uhn.fhir.rest.gclient.StringClientParam LOT_NUMBER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_LOT_NUMBER);
3515
3516 /**
3517   * Search parameter: <b>manufacturer</b>
3518   * <p>
3519   * Description: <b>Vaccine Manufacturer</b><br>
3520   * Type: <b>reference</b><br>
3521   * Path: <b>Immunization.manufacturer</b><br>
3522   * </p>
3523   */
3524  @SearchParamDefinition(name="manufacturer", path="Immunization.manufacturer", description="Vaccine Manufacturer", type="reference", target={Organization.class } )
3525  public static final String SP_MANUFACTURER = "manufacturer";
3526 /**
3527   * <b>Fluent Client</b> search parameter constant for <b>manufacturer</b>
3528   * <p>
3529   * Description: <b>Vaccine Manufacturer</b><br>
3530   * Type: <b>reference</b><br>
3531   * Path: <b>Immunization.manufacturer</b><br>
3532   * </p>
3533   */
3534  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MANUFACTURER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MANUFACTURER);
3535
3536/**
3537   * Constant for fluent queries to be used to add include statements. Specifies
3538   * the path value of "<b>Immunization:manufacturer</b>".
3539   */
3540  public static final ca.uhn.fhir.model.api.Include INCLUDE_MANUFACTURER = new ca.uhn.fhir.model.api.Include("Immunization:manufacturer").toLocked();
3541
3542 /**
3543   * Search parameter: <b>performer</b>
3544   * <p>
3545   * Description: <b>The practitioner or organization who played a role in the vaccination</b><br>
3546   * Type: <b>reference</b><br>
3547   * Path: <b>Immunization.performer.actor</b><br>
3548   * </p>
3549   */
3550  @SearchParamDefinition(name="performer", path="Immunization.performer.actor", description="The practitioner or organization who played a role in the vaccination", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Organization.class, Practitioner.class, PractitionerRole.class } )
3551  public static final String SP_PERFORMER = "performer";
3552 /**
3553   * <b>Fluent Client</b> search parameter constant for <b>performer</b>
3554   * <p>
3555   * Description: <b>The practitioner or organization who played a role in the vaccination</b><br>
3556   * Type: <b>reference</b><br>
3557   * Path: <b>Immunization.performer.actor</b><br>
3558   * </p>
3559   */
3560  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PERFORMER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PERFORMER);
3561
3562/**
3563   * Constant for fluent queries to be used to add include statements. Specifies
3564   * the path value of "<b>Immunization:performer</b>".
3565   */
3566  public static final ca.uhn.fhir.model.api.Include INCLUDE_PERFORMER = new ca.uhn.fhir.model.api.Include("Immunization:performer").toLocked();
3567
3568 /**
3569   * Search parameter: <b>reaction-date</b>
3570   * <p>
3571   * Description: <b>When reaction started</b><br>
3572   * Type: <b>date</b><br>
3573   * Path: <b>Immunization.reaction.date</b><br>
3574   * </p>
3575   */
3576  @SearchParamDefinition(name="reaction-date", path="Immunization.reaction.date", description="When reaction started", type="date" )
3577  public static final String SP_REACTION_DATE = "reaction-date";
3578 /**
3579   * <b>Fluent Client</b> search parameter constant for <b>reaction-date</b>
3580   * <p>
3581   * Description: <b>When reaction started</b><br>
3582   * Type: <b>date</b><br>
3583   * Path: <b>Immunization.reaction.date</b><br>
3584   * </p>
3585   */
3586  public static final ca.uhn.fhir.rest.gclient.DateClientParam REACTION_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_REACTION_DATE);
3587
3588 /**
3589   * Search parameter: <b>reaction</b>
3590   * <p>
3591   * Description: <b>Additional information on reaction</b><br>
3592   * Type: <b>reference</b><br>
3593   * Path: <b>Immunization.reaction.detail</b><br>
3594   * </p>
3595   */
3596  @SearchParamDefinition(name="reaction", path="Immunization.reaction.detail", description="Additional information on reaction", type="reference", target={Observation.class } )
3597  public static final String SP_REACTION = "reaction";
3598 /**
3599   * <b>Fluent Client</b> search parameter constant for <b>reaction</b>
3600   * <p>
3601   * Description: <b>Additional information on reaction</b><br>
3602   * Type: <b>reference</b><br>
3603   * Path: <b>Immunization.reaction.detail</b><br>
3604   * </p>
3605   */
3606  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REACTION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REACTION);
3607
3608/**
3609   * Constant for fluent queries to be used to add include statements. Specifies
3610   * the path value of "<b>Immunization:reaction</b>".
3611   */
3612  public static final ca.uhn.fhir.model.api.Include INCLUDE_REACTION = new ca.uhn.fhir.model.api.Include("Immunization:reaction").toLocked();
3613
3614 /**
3615   * Search parameter: <b>reason-code</b>
3616   * <p>
3617   * Description: <b>Reason why the vaccine was administered</b><br>
3618   * Type: <b>token</b><br>
3619   * Path: <b>Immunization.reasonCode</b><br>
3620   * </p>
3621   */
3622  @SearchParamDefinition(name="reason-code", path="Immunization.reasonCode", description="Reason why the vaccine was administered", type="token" )
3623  public static final String SP_REASON_CODE = "reason-code";
3624 /**
3625   * <b>Fluent Client</b> search parameter constant for <b>reason-code</b>
3626   * <p>
3627   * Description: <b>Reason why the vaccine was administered</b><br>
3628   * Type: <b>token</b><br>
3629   * Path: <b>Immunization.reasonCode</b><br>
3630   * </p>
3631   */
3632  public static final ca.uhn.fhir.rest.gclient.TokenClientParam REASON_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_REASON_CODE);
3633
3634 /**
3635   * Search parameter: <b>reason-reference</b>
3636   * <p>
3637   * Description: <b>Why immunization occurred</b><br>
3638   * Type: <b>reference</b><br>
3639   * Path: <b>Immunization.reasonReference</b><br>
3640   * </p>
3641   */
3642  @SearchParamDefinition(name="reason-reference", path="Immunization.reasonReference", description="Why immunization occurred", type="reference", target={Condition.class, DiagnosticReport.class, Observation.class } )
3643  public static final String SP_REASON_REFERENCE = "reason-reference";
3644 /**
3645   * <b>Fluent Client</b> search parameter constant for <b>reason-reference</b>
3646   * <p>
3647   * Description: <b>Why immunization occurred</b><br>
3648   * Type: <b>reference</b><br>
3649   * Path: <b>Immunization.reasonReference</b><br>
3650   * </p>
3651   */
3652  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REASON_REFERENCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REASON_REFERENCE);
3653
3654/**
3655   * Constant for fluent queries to be used to add include statements. Specifies
3656   * the path value of "<b>Immunization:reason-reference</b>".
3657   */
3658  public static final ca.uhn.fhir.model.api.Include INCLUDE_REASON_REFERENCE = new ca.uhn.fhir.model.api.Include("Immunization:reason-reference").toLocked();
3659
3660 /**
3661   * Search parameter: <b>series</b>
3662   * <p>
3663   * Description: <b>The series being followed by the provider</b><br>
3664   * Type: <b>string</b><br>
3665   * Path: <b>Immunization.protocolApplied.series</b><br>
3666   * </p>
3667   */
3668  @SearchParamDefinition(name="series", path="Immunization.protocolApplied.series", description="The series being followed by the provider", type="string" )
3669  public static final String SP_SERIES = "series";
3670 /**
3671   * <b>Fluent Client</b> search parameter constant for <b>series</b>
3672   * <p>
3673   * Description: <b>The series being followed by the provider</b><br>
3674   * Type: <b>string</b><br>
3675   * Path: <b>Immunization.protocolApplied.series</b><br>
3676   * </p>
3677   */
3678  public static final ca.uhn.fhir.rest.gclient.StringClientParam SERIES = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_SERIES);
3679
3680 /**
3681   * Search parameter: <b>status-reason</b>
3682   * <p>
3683   * Description: <b>Reason why the vaccine was not administered</b><br>
3684   * Type: <b>token</b><br>
3685   * Path: <b>Immunization.statusReason</b><br>
3686   * </p>
3687   */
3688  @SearchParamDefinition(name="status-reason", path="Immunization.statusReason", description="Reason why the vaccine was not administered", type="token" )
3689  public static final String SP_STATUS_REASON = "status-reason";
3690 /**
3691   * <b>Fluent Client</b> search parameter constant for <b>status-reason</b>
3692   * <p>
3693   * Description: <b>Reason why the vaccine was not administered</b><br>
3694   * Type: <b>token</b><br>
3695   * Path: <b>Immunization.statusReason</b><br>
3696   * </p>
3697   */
3698  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS_REASON = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS_REASON);
3699
3700 /**
3701   * Search parameter: <b>status</b>
3702   * <p>
3703   * Description: <b>Immunization event status</b><br>
3704   * Type: <b>token</b><br>
3705   * Path: <b>Immunization.status</b><br>
3706   * </p>
3707   */
3708  @SearchParamDefinition(name="status", path="Immunization.status", description="Immunization event status", type="token" )
3709  public static final String SP_STATUS = "status";
3710 /**
3711   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3712   * <p>
3713   * Description: <b>Immunization event status</b><br>
3714   * Type: <b>token</b><br>
3715   * Path: <b>Immunization.status</b><br>
3716   * </p>
3717   */
3718  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3719
3720 /**
3721   * Search parameter: <b>target-disease</b>
3722   * <p>
3723   * Description: <b>The target disease the dose is being administered against</b><br>
3724   * Type: <b>token</b><br>
3725   * Path: <b>Immunization.protocolApplied.targetDisease</b><br>
3726   * </p>
3727   */
3728  @SearchParamDefinition(name="target-disease", path="Immunization.protocolApplied.targetDisease", description="The target disease the dose is being administered against", type="token" )
3729  public static final String SP_TARGET_DISEASE = "target-disease";
3730 /**
3731   * <b>Fluent Client</b> search parameter constant for <b>target-disease</b>
3732   * <p>
3733   * Description: <b>The target disease the dose is being administered against</b><br>
3734   * Type: <b>token</b><br>
3735   * Path: <b>Immunization.protocolApplied.targetDisease</b><br>
3736   * </p>
3737   */
3738  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TARGET_DISEASE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TARGET_DISEASE);
3739
3740 /**
3741   * Search parameter: <b>vaccine-code</b>
3742   * <p>
3743   * Description: <b>Vaccine Product Administered</b><br>
3744   * Type: <b>token</b><br>
3745   * Path: <b>Immunization.vaccineCode</b><br>
3746   * </p>
3747   */
3748  @SearchParamDefinition(name="vaccine-code", path="Immunization.vaccineCode", description="Vaccine Product Administered", type="token" )
3749  public static final String SP_VACCINE_CODE = "vaccine-code";
3750 /**
3751   * <b>Fluent Client</b> search parameter constant for <b>vaccine-code</b>
3752   * <p>
3753   * Description: <b>Vaccine Product Administered</b><br>
3754   * Type: <b>token</b><br>
3755   * Path: <b>Immunization.vaccineCode</b><br>
3756   * </p>
3757   */
3758  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VACCINE_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VACCINE_CODE);
3759
3760 /**
3761   * Search parameter: <b>date</b>
3762   * <p>
3763   * Description: <b>Multiple Resources: 
3764
3765* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3766* [CarePlan](careplan.html): Time period plan covers
3767* [CareTeam](careteam.html): Time period team covers
3768* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3769* [Composition](composition.html): Composition editing time
3770* [Consent](consent.html): When this Consent was created or indexed
3771* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3772* [Encounter](encounter.html): A date within the period the Encounter lasted
3773* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3774* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3775* [Flag](flag.html): Time period when flag is active
3776* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3777* [List](list.html): When the list was prepared
3778* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3779* [Procedure](procedure.html): When the procedure was performed
3780* [RiskAssessment](riskassessment.html): When was assessment made?
3781* [SupplyRequest](supplyrequest.html): When the request was made
3782</b><br>
3783   * Type: <b>date</b><br>
3784   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3785   * </p>
3786   */
3787  @SearchParamDefinition(name="date", path="AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded\r\n* [CarePlan](careplan.html): Time period plan covers\r\n* [CareTeam](careteam.html): Time period team covers\r\n* [ClinicalImpression](clinicalimpression.html): When the assessment was documented\r\n* [Composition](composition.html): Composition editing time\r\n* [Consent](consent.html): When this Consent was created or indexed\r\n* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report\r\n* [Encounter](encounter.html): A date within the period the Encounter lasted\r\n* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period\r\n* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated\r\n* [Flag](flag.html): Time period when flag is active\r\n* [Immunization](immunization.html): Vaccination  (non)-Administration Date\r\n* [List](list.html): When the list was prepared\r\n* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period\r\n* [Procedure](procedure.html): When the procedure was performed\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
3788  public static final String SP_DATE = "date";
3789 /**
3790   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3791   * <p>
3792   * Description: <b>Multiple Resources: 
3793
3794* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3795* [CarePlan](careplan.html): Time period plan covers
3796* [CareTeam](careteam.html): Time period team covers
3797* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3798* [Composition](composition.html): Composition editing time
3799* [Consent](consent.html): When this Consent was created or indexed
3800* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3801* [Encounter](encounter.html): A date within the period the Encounter lasted
3802* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3803* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3804* [Flag](flag.html): Time period when flag is active
3805* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3806* [List](list.html): When the list was prepared
3807* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3808* [Procedure](procedure.html): When the procedure was performed
3809* [RiskAssessment](riskassessment.html): When was assessment made?
3810* [SupplyRequest](supplyrequest.html): When the request was made
3811</b><br>
3812   * Type: <b>date</b><br>
3813   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3814   * </p>
3815   */
3816  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3817
3818 /**
3819   * Search parameter: <b>identifier</b>
3820   * <p>
3821   * Description: <b>Multiple Resources: 
3822
3823* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3824* [CarePlan](careplan.html): External Ids for this plan
3825* [CareTeam](careteam.html): External Ids for this team
3826* [Composition](composition.html): Version-independent identifier for the Composition
3827* [Condition](condition.html): A unique identifier of the condition record
3828* [Consent](consent.html): Identifier for this record (external references)
3829* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3830* [DeviceRequest](devicerequest.html): Business identifier for request/order
3831* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3832* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3833* [DocumentReference](documentreference.html): Master Version Specific Identifier
3834* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3835* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3836* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3837* [Goal](goal.html): External Ids for this goal
3838* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number
3839* [Immunization](immunization.html): Business identifier
3840* [List](list.html): Business identifier
3841* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3842* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3843* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3844* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
3845* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3846* [Observation](observation.html): The unique id for a particular observation
3847* [Procedure](procedure.html): A unique identifier for a procedure
3848* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3849* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3850* [SupplyDelivery](supplydelivery.html): External identifier
3851* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3852* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3853</b><br>
3854   * Type: <b>token</b><br>
3855   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3856   * </p>
3857   */
3858  @SearchParamDefinition(name="identifier", path="AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): External ids for this item\r\n* [CarePlan](careplan.html): External Ids for this plan\r\n* [CareTeam](careteam.html): External Ids for this team\r\n* [Composition](composition.html): Version-independent identifier for the Composition\r\n* [Condition](condition.html): A unique identifier of the condition record\r\n* [Consent](consent.html): Identifier for this record (external references)\r\n* [DetectedIssue](detectedissue.html): Unique id for the detected issue\r\n* [DeviceRequest](devicerequest.html): Business identifier for request/order\r\n* [DiagnosticReport](diagnosticreport.html): An identifier for the report\r\n* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents\r\n* [DocumentReference](documentreference.html): Master Version Specific Identifier\r\n* [Encounter](encounter.html): Identifier(s) by which this encounter is known\r\n* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier\r\n* [Goal](goal.html): External Ids for this goal\r\n* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number\r\n* [Immunization](immunization.html): Business identifier\r\n* [List](list.html): Business identifier\r\n* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier\r\n* [MedicationStatement](medicationstatement.html): Return statements with this external identifier\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier\r\n* [Observation](observation.html): The unique id for a particular observation\r\n* [Procedure](procedure.html): A unique identifier for a procedure\r\n* [RiskAssessment](riskassessment.html): Unique identifier for the assessment\r\n* [ServiceRequest](servicerequest.html): Identifiers assigned to this order\r\n* [SupplyDelivery](supplydelivery.html): External identifier\r\n* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier\r\n", type="token" )
3859  public static final String SP_IDENTIFIER = "identifier";
3860 /**
3861   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3862   * <p>
3863   * Description: <b>Multiple Resources: 
3864
3865* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3866* [CarePlan](careplan.html): External Ids for this plan
3867* [CareTeam](careteam.html): External Ids for this team
3868* [Composition](composition.html): Version-independent identifier for the Composition
3869* [Condition](condition.html): A unique identifier of the condition record
3870* [Consent](consent.html): Identifier for this record (external references)
3871* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3872* [DeviceRequest](devicerequest.html): Business identifier for request/order
3873* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3874* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3875* [DocumentReference](documentreference.html): Master Version Specific Identifier
3876* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3877* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3878* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3879* [Goal](goal.html): External Ids for this goal
3880* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number
3881* [Immunization](immunization.html): Business identifier
3882* [List](list.html): Business identifier
3883* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3884* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3885* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3886* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
3887* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3888* [Observation](observation.html): The unique id for a particular observation
3889* [Procedure](procedure.html): A unique identifier for a procedure
3890* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3891* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3892* [SupplyDelivery](supplydelivery.html): External identifier
3893* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3894* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3895</b><br>
3896   * Type: <b>token</b><br>
3897   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3898   * </p>
3899   */
3900  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3901
3902 /**
3903   * Search parameter: <b>patient</b>
3904   * <p>
3905   * Description: <b>Multiple Resources: 
3906
3907* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3908* [CarePlan](careplan.html): Who the care plan is for
3909* [CareTeam](careteam.html): Who care team is for
3910* [ClinicalImpression](clinicalimpression.html): Patient or group assessed
3911* [Composition](composition.html): Who and/or what the composition is about
3912* [Condition](condition.html): Who has the condition?
3913* [Consent](consent.html): Who the consent applies to
3914* [DetectedIssue](detectedissue.html): Associated patient
3915* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3916* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient
3917* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3918* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3919* [DocumentReference](documentreference.html): Who/what is the subject of the document
3920* [Encounter](encounter.html): The patient or group present at the encounter
3921* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3922* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3923* [Flag](flag.html): The identity of a subject to list flags for
3924* [Goal](goal.html): Who this goal is intended for
3925* [ImagingStudy](imagingstudy.html): Who the study is about
3926* [Immunization](immunization.html): The patient for the vaccination record
3927* [List](list.html): If all resources have the same subject
3928* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3929* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3930* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3931* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
3932* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3933* [Observation](observation.html): The subject that the observation is about (if patient)
3934* [Procedure](procedure.html): Search by subject - a patient
3935* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3936* [ServiceRequest](servicerequest.html): Search by subject - a patient
3937* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3938* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3939</b><br>
3940   * Type: <b>reference</b><br>
3941   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
3942   * </p>
3943   */
3944  @SearchParamDefinition(name="patient", path="AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for\r\n* [CarePlan](careplan.html): Who the care plan is for\r\n* [CareTeam](careteam.html): Who care team is for\r\n* [ClinicalImpression](clinicalimpression.html): Patient or group assessed\r\n* [Composition](composition.html): Who and/or what the composition is about\r\n* [Condition](condition.html): Who has the condition?\r\n* [Consent](consent.html): Who the consent applies to\r\n* [DetectedIssue](detectedissue.html): Associated patient\r\n* [DeviceRequest](devicerequest.html): Individual the service is ordered for\r\n* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient\r\n* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient\r\n* [DocumentManifest](documentmanifest.html): The subject of the set of documents\r\n* [DocumentReference](documentreference.html): Who/what is the subject of the document\r\n* [Encounter](encounter.html): The patient or group present at the encounter\r\n* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care\r\n* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for\r\n* [Flag](flag.html): The identity of a subject to list flags for\r\n* [Goal](goal.html): Who this goal is intended for\r\n* [ImagingStudy](imagingstudy.html): Who the study is about\r\n* [Immunization](immunization.html): The patient for the vaccination record\r\n* [List](list.html): If all resources have the same subject\r\n* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for\r\n* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for\r\n* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient\r\n* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.\r\n* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement\r\n* [Observation](observation.html): The subject that the observation is about (if patient)\r\n* [Procedure](procedure.html): Search by subject - a patient\r\n* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?\r\n* [ServiceRequest](servicerequest.html): Search by subject - a patient\r\n* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied\r\n* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for\r\n", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Account.class, ActivityDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, CatalogEntry.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceMetric.class, DeviceRequest.class, DeviceUseStatement.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Media.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestGroup.class, ResearchDefinition.class, ResearchElementDefinition.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3945  public static final String SP_PATIENT = "patient";
3946 /**
3947   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3948   * <p>
3949   * Description: <b>Multiple Resources: 
3950
3951* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3952* [CarePlan](careplan.html): Who the care plan is for
3953* [CareTeam](careteam.html): Who care team is for
3954* [ClinicalImpression](clinicalimpression.html): Patient or group assessed
3955* [Composition](composition.html): Who and/or what the composition is about
3956* [Condition](condition.html): Who has the condition?
3957* [Consent](consent.html): Who the consent applies to
3958* [DetectedIssue](detectedissue.html): Associated patient
3959* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3960* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient
3961* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3962* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3963* [DocumentReference](documentreference.html): Who/what is the subject of the document
3964* [Encounter](encounter.html): The patient or group present at the encounter
3965* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3966* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3967* [Flag](flag.html): The identity of a subject to list flags for
3968* [Goal](goal.html): Who this goal is intended for
3969* [ImagingStudy](imagingstudy.html): Who the study is about
3970* [Immunization](immunization.html): The patient for the vaccination record
3971* [List](list.html): If all resources have the same subject
3972* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3973* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3974* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3975* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
3976* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3977* [Observation](observation.html): The subject that the observation is about (if patient)
3978* [Procedure](procedure.html): Search by subject - a patient
3979* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3980* [ServiceRequest](servicerequest.html): Search by subject - a patient
3981* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3982* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3983</b><br>
3984   * Type: <b>reference</b><br>
3985   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
3986   * </p>
3987   */
3988  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3989
3990/**
3991   * Constant for fluent queries to be used to add include statements. Specifies
3992   * the path value of "<b>Immunization:patient</b>".
3993   */
3994  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Immunization:patient").toLocked();
3995
3996
3997}
3998