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