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