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