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