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