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