001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Tue, Dec 28, 2021 07:16+1100 for FHIR v5.0.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A person who is directly or indirectly involved in the provisioning of healthcare.
052 */
053@ResourceDef(name="Practitioner", profile="http://hl7.org/fhir/StructureDefinition/Practitioner")
054public class Practitioner extends DomainResource {
055
056    @Block()
057    public static class PractitionerQualificationComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * An identifier that applies to this person's qualification in this role.
060         */
061        @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
062        @Description(shortDefinition="An identifier for this qualification for the practitioner", formalDefinition="An identifier that applies to this person's qualification in this role." )
063        protected List<Identifier> identifier;
064
065        /**
066         * Coded representation of the qualification.
067         */
068        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=false)
069        @Description(shortDefinition="Coded representation of the qualification", formalDefinition="Coded representation of the qualification." )
070        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v2-0360")
071        protected CodeableConcept code;
072
073        /**
074         * Period during which the qualification is valid.
075         */
076        @Child(name = "period", type = {Period.class}, order=3, min=0, max=1, modifier=false, summary=false)
077        @Description(shortDefinition="Period during which the qualification is valid", formalDefinition="Period during which the qualification is valid." )
078        protected Period period;
079
080        /**
081         * Organization that regulates and issues the qualification.
082         */
083        @Child(name = "issuer", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=false)
084        @Description(shortDefinition="Organization that regulates and issues the qualification", formalDefinition="Organization that regulates and issues the qualification." )
085        protected Reference issuer;
086
087        private static final long serialVersionUID = 1561812204L;
088
089    /**
090     * Constructor
091     */
092      public PractitionerQualificationComponent() {
093        super();
094      }
095
096    /**
097     * Constructor
098     */
099      public PractitionerQualificationComponent(CodeableConcept code) {
100        super();
101        this.setCode(code);
102      }
103
104        /**
105         * @return {@link #identifier} (An identifier that applies to this person's qualification in this role.)
106         */
107        public List<Identifier> getIdentifier() { 
108          if (this.identifier == null)
109            this.identifier = new ArrayList<Identifier>();
110          return this.identifier;
111        }
112
113        /**
114         * @return Returns a reference to <code>this</code> for easy method chaining
115         */
116        public PractitionerQualificationComponent setIdentifier(List<Identifier> theIdentifier) { 
117          this.identifier = theIdentifier;
118          return this;
119        }
120
121        public boolean hasIdentifier() { 
122          if (this.identifier == null)
123            return false;
124          for (Identifier item : this.identifier)
125            if (!item.isEmpty())
126              return true;
127          return false;
128        }
129
130        public Identifier addIdentifier() { //3
131          Identifier t = new Identifier();
132          if (this.identifier == null)
133            this.identifier = new ArrayList<Identifier>();
134          this.identifier.add(t);
135          return t;
136        }
137
138        public PractitionerQualificationComponent addIdentifier(Identifier t) { //3
139          if (t == null)
140            return this;
141          if (this.identifier == null)
142            this.identifier = new ArrayList<Identifier>();
143          this.identifier.add(t);
144          return this;
145        }
146
147        /**
148         * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
149         */
150        public Identifier getIdentifierFirstRep() { 
151          if (getIdentifier().isEmpty()) {
152            addIdentifier();
153          }
154          return getIdentifier().get(0);
155        }
156
157        /**
158         * @return {@link #code} (Coded representation of the qualification.)
159         */
160        public CodeableConcept getCode() { 
161          if (this.code == null)
162            if (Configuration.errorOnAutoCreate())
163              throw new Error("Attempt to auto-create PractitionerQualificationComponent.code");
164            else if (Configuration.doAutoCreate())
165              this.code = new CodeableConcept(); // cc
166          return this.code;
167        }
168
169        public boolean hasCode() { 
170          return this.code != null && !this.code.isEmpty();
171        }
172
173        /**
174         * @param value {@link #code} (Coded representation of the qualification.)
175         */
176        public PractitionerQualificationComponent setCode(CodeableConcept value) { 
177          this.code = value;
178          return this;
179        }
180
181        /**
182         * @return {@link #period} (Period during which the qualification is valid.)
183         */
184        public Period getPeriod() { 
185          if (this.period == null)
186            if (Configuration.errorOnAutoCreate())
187              throw new Error("Attempt to auto-create PractitionerQualificationComponent.period");
188            else if (Configuration.doAutoCreate())
189              this.period = new Period(); // cc
190          return this.period;
191        }
192
193        public boolean hasPeriod() { 
194          return this.period != null && !this.period.isEmpty();
195        }
196
197        /**
198         * @param value {@link #period} (Period during which the qualification is valid.)
199         */
200        public PractitionerQualificationComponent setPeriod(Period value) { 
201          this.period = value;
202          return this;
203        }
204
205        /**
206         * @return {@link #issuer} (Organization that regulates and issues the qualification.)
207         */
208        public Reference getIssuer() { 
209          if (this.issuer == null)
210            if (Configuration.errorOnAutoCreate())
211              throw new Error("Attempt to auto-create PractitionerQualificationComponent.issuer");
212            else if (Configuration.doAutoCreate())
213              this.issuer = new Reference(); // cc
214          return this.issuer;
215        }
216
217        public boolean hasIssuer() { 
218          return this.issuer != null && !this.issuer.isEmpty();
219        }
220
221        /**
222         * @param value {@link #issuer} (Organization that regulates and issues the qualification.)
223         */
224        public PractitionerQualificationComponent setIssuer(Reference value) { 
225          this.issuer = value;
226          return this;
227        }
228
229        protected void listChildren(List<Property> children) {
230          super.listChildren(children);
231          children.add(new Property("identifier", "Identifier", "An identifier that applies to this person's qualification in this role.", 0, java.lang.Integer.MAX_VALUE, identifier));
232          children.add(new Property("code", "CodeableConcept", "Coded representation of the qualification.", 0, 1, code));
233          children.add(new Property("period", "Period", "Period during which the qualification is valid.", 0, 1, period));
234          children.add(new Property("issuer", "Reference(Organization)", "Organization that regulates and issues the qualification.", 0, 1, issuer));
235        }
236
237        @Override
238        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
239          switch (_hash) {
240          case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "An identifier that applies to this person's qualification in this role.", 0, java.lang.Integer.MAX_VALUE, identifier);
241          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Coded representation of the qualification.", 0, 1, code);
242          case -991726143: /*period*/  return new Property("period", "Period", "Period during which the qualification is valid.", 0, 1, period);
243          case -1179159879: /*issuer*/  return new Property("issuer", "Reference(Organization)", "Organization that regulates and issues the qualification.", 0, 1, issuer);
244          default: return super.getNamedProperty(_hash, _name, _checkValid);
245          }
246
247        }
248
249      @Override
250      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
251        switch (hash) {
252        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
253        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
254        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
255        case -1179159879: /*issuer*/ return this.issuer == null ? new Base[0] : new Base[] {this.issuer}; // Reference
256        default: return super.getProperty(hash, name, checkValid);
257        }
258
259      }
260
261      @Override
262      public Base setProperty(int hash, String name, Base value) throws FHIRException {
263        switch (hash) {
264        case -1618432855: // identifier
265          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
266          return value;
267        case 3059181: // code
268          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
269          return value;
270        case -991726143: // period
271          this.period = TypeConvertor.castToPeriod(value); // Period
272          return value;
273        case -1179159879: // issuer
274          this.issuer = TypeConvertor.castToReference(value); // Reference
275          return value;
276        default: return super.setProperty(hash, name, value);
277        }
278
279      }
280
281      @Override
282      public Base setProperty(String name, Base value) throws FHIRException {
283        if (name.equals("identifier")) {
284          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
285        } else if (name.equals("code")) {
286          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
287        } else if (name.equals("period")) {
288          this.period = TypeConvertor.castToPeriod(value); // Period
289        } else if (name.equals("issuer")) {
290          this.issuer = TypeConvertor.castToReference(value); // Reference
291        } else
292          return super.setProperty(name, value);
293        return value;
294      }
295
296      @Override
297      public Base makeProperty(int hash, String name) throws FHIRException {
298        switch (hash) {
299        case -1618432855:  return addIdentifier(); 
300        case 3059181:  return getCode();
301        case -991726143:  return getPeriod();
302        case -1179159879:  return getIssuer();
303        default: return super.makeProperty(hash, name);
304        }
305
306      }
307
308      @Override
309      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
310        switch (hash) {
311        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
312        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
313        case -991726143: /*period*/ return new String[] {"Period"};
314        case -1179159879: /*issuer*/ return new String[] {"Reference"};
315        default: return super.getTypesForProperty(hash, name);
316        }
317
318      }
319
320      @Override
321      public Base addChild(String name) throws FHIRException {
322        if (name.equals("identifier")) {
323          return addIdentifier();
324        }
325        else if (name.equals("code")) {
326          this.code = new CodeableConcept();
327          return this.code;
328        }
329        else if (name.equals("period")) {
330          this.period = new Period();
331          return this.period;
332        }
333        else if (name.equals("issuer")) {
334          this.issuer = new Reference();
335          return this.issuer;
336        }
337        else
338          return super.addChild(name);
339      }
340
341      public PractitionerQualificationComponent copy() {
342        PractitionerQualificationComponent dst = new PractitionerQualificationComponent();
343        copyValues(dst);
344        return dst;
345      }
346
347      public void copyValues(PractitionerQualificationComponent dst) {
348        super.copyValues(dst);
349        if (identifier != null) {
350          dst.identifier = new ArrayList<Identifier>();
351          for (Identifier i : identifier)
352            dst.identifier.add(i.copy());
353        };
354        dst.code = code == null ? null : code.copy();
355        dst.period = period == null ? null : period.copy();
356        dst.issuer = issuer == null ? null : issuer.copy();
357      }
358
359      @Override
360      public boolean equalsDeep(Base other_) {
361        if (!super.equalsDeep(other_))
362          return false;
363        if (!(other_ instanceof PractitionerQualificationComponent))
364          return false;
365        PractitionerQualificationComponent o = (PractitionerQualificationComponent) other_;
366        return compareDeep(identifier, o.identifier, true) && compareDeep(code, o.code, true) && compareDeep(period, o.period, true)
367           && compareDeep(issuer, o.issuer, true);
368      }
369
370      @Override
371      public boolean equalsShallow(Base other_) {
372        if (!super.equalsShallow(other_))
373          return false;
374        if (!(other_ instanceof PractitionerQualificationComponent))
375          return false;
376        PractitionerQualificationComponent o = (PractitionerQualificationComponent) other_;
377        return true;
378      }
379
380      public boolean isEmpty() {
381        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, code, period
382          , issuer);
383      }
384
385  public String fhirType() {
386    return "Practitioner.qualification";
387
388  }
389
390  }
391
392    /**
393     * An identifier that applies to this person in this role.
394     */
395    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
396    @Description(shortDefinition="An identifier for the person as this agent", formalDefinition="An identifier that applies to this person in this role." )
397    protected List<Identifier> identifier;
398
399    /**
400     * Whether this practitioner's record is in active use.
401     */
402    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=true)
403    @Description(shortDefinition="Whether this practitioner's record is in active use", formalDefinition="Whether this practitioner's record is in active use." )
404    protected BooleanType active;
405
406    /**
407     * The name(s) associated with the practitioner.
408     */
409    @Child(name = "name", type = {HumanName.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
410    @Description(shortDefinition="The name(s) associated with the practitioner", formalDefinition="The name(s) associated with the practitioner." )
411    protected List<HumanName> name;
412
413    /**
414     * A contact detail for the practitioner, e.g. a telephone number or an email address.
415     */
416    @Child(name = "telecom", type = {ContactPoint.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
417    @Description(shortDefinition="A contact detail for the practitioner (that apply to all roles)", formalDefinition="A contact detail for the practitioner, e.g. a telephone number or an email address." )
418    protected List<ContactPoint> telecom;
419
420    /**
421     * Indicates if the practitioner is deceased or not.
422     */
423    @Child(name = "deceased", type = {BooleanType.class, DateTimeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
424    @Description(shortDefinition="Indicates if the practitioner is deceased or not", formalDefinition="Indicates if the practitioner is deceased or not." )
425    protected DataType deceased;
426
427    /**
428     * Address(es) of the practitioner that are not role specific (typically home address). 
429Work addresses are not typically entered in this property as they are usually role dependent.
430     */
431    @Child(name = "address", type = {Address.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
432    @Description(shortDefinition="Address(es) of the practitioner that are not role specific (typically home address)", formalDefinition="Address(es) of the practitioner that are not role specific (typically home address). \rWork addresses are not typically entered in this property as they are usually role dependent." )
433    protected List<Address> address;
434
435    /**
436     * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
437     */
438    @Child(name = "gender", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
439    @Description(shortDefinition="male | female | other | unknown", formalDefinition="Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes." )
440    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/administrative-gender")
441    protected Enumeration<AdministrativeGender> gender;
442
443    /**
444     * The date of birth for the practitioner.
445     */
446    @Child(name = "birthDate", type = {DateType.class}, order=7, min=0, max=1, modifier=false, summary=true)
447    @Description(shortDefinition="The date  on which the practitioner was born", formalDefinition="The date of birth for the practitioner." )
448    protected DateType birthDate;
449
450    /**
451     * Image of the person.
452     */
453    @Child(name = "photo", type = {Attachment.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
454    @Description(shortDefinition="Image of the person", formalDefinition="Image of the person." )
455    protected List<Attachment> photo;
456
457    /**
458     * The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner.  For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certain locality.
459     */
460    @Child(name = "qualification", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
461    @Description(shortDefinition="Certification, licenses, or training pertaining to the provision of care", formalDefinition="The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner.  For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certain locality." )
462    protected List<PractitionerQualificationComponent> qualification;
463
464    /**
465     * A language the practitioner can use in patient communication.
466     */
467    @Child(name = "communication", type = {CodeableConcept.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
468    @Description(shortDefinition="A language the practitioner can use in patient communication", formalDefinition="A language the practitioner can use in patient communication." )
469    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
470    protected List<CodeableConcept> communication;
471
472    private static final long serialVersionUID = 908417317L;
473
474  /**
475   * Constructor
476   */
477    public Practitioner() {
478      super();
479    }
480
481    /**
482     * @return {@link #identifier} (An identifier that applies to this person in this role.)
483     */
484    public List<Identifier> getIdentifier() { 
485      if (this.identifier == null)
486        this.identifier = new ArrayList<Identifier>();
487      return this.identifier;
488    }
489
490    /**
491     * @return Returns a reference to <code>this</code> for easy method chaining
492     */
493    public Practitioner setIdentifier(List<Identifier> theIdentifier) { 
494      this.identifier = theIdentifier;
495      return this;
496    }
497
498    public boolean hasIdentifier() { 
499      if (this.identifier == null)
500        return false;
501      for (Identifier item : this.identifier)
502        if (!item.isEmpty())
503          return true;
504      return false;
505    }
506
507    public Identifier addIdentifier() { //3
508      Identifier t = new Identifier();
509      if (this.identifier == null)
510        this.identifier = new ArrayList<Identifier>();
511      this.identifier.add(t);
512      return t;
513    }
514
515    public Practitioner addIdentifier(Identifier t) { //3
516      if (t == null)
517        return this;
518      if (this.identifier == null)
519        this.identifier = new ArrayList<Identifier>();
520      this.identifier.add(t);
521      return this;
522    }
523
524    /**
525     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
526     */
527    public Identifier getIdentifierFirstRep() { 
528      if (getIdentifier().isEmpty()) {
529        addIdentifier();
530      }
531      return getIdentifier().get(0);
532    }
533
534    /**
535     * @return {@link #active} (Whether this practitioner's record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
536     */
537    public BooleanType getActiveElement() { 
538      if (this.active == null)
539        if (Configuration.errorOnAutoCreate())
540          throw new Error("Attempt to auto-create Practitioner.active");
541        else if (Configuration.doAutoCreate())
542          this.active = new BooleanType(); // bb
543      return this.active;
544    }
545
546    public boolean hasActiveElement() { 
547      return this.active != null && !this.active.isEmpty();
548    }
549
550    public boolean hasActive() { 
551      return this.active != null && !this.active.isEmpty();
552    }
553
554    /**
555     * @param value {@link #active} (Whether this practitioner's record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
556     */
557    public Practitioner setActiveElement(BooleanType value) { 
558      this.active = value;
559      return this;
560    }
561
562    /**
563     * @return Whether this practitioner's record is in active use.
564     */
565    public boolean getActive() { 
566      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
567    }
568
569    /**
570     * @param value Whether this practitioner's record is in active use.
571     */
572    public Practitioner setActive(boolean value) { 
573        if (this.active == null)
574          this.active = new BooleanType();
575        this.active.setValue(value);
576      return this;
577    }
578
579    /**
580     * @return {@link #name} (The name(s) associated with the practitioner.)
581     */
582    public List<HumanName> getName() { 
583      if (this.name == null)
584        this.name = new ArrayList<HumanName>();
585      return this.name;
586    }
587
588    /**
589     * @return Returns a reference to <code>this</code> for easy method chaining
590     */
591    public Practitioner setName(List<HumanName> theName) { 
592      this.name = theName;
593      return this;
594    }
595
596    public boolean hasName() { 
597      if (this.name == null)
598        return false;
599      for (HumanName item : this.name)
600        if (!item.isEmpty())
601          return true;
602      return false;
603    }
604
605    public HumanName addName() { //3
606      HumanName t = new HumanName();
607      if (this.name == null)
608        this.name = new ArrayList<HumanName>();
609      this.name.add(t);
610      return t;
611    }
612
613    public Practitioner addName(HumanName t) { //3
614      if (t == null)
615        return this;
616      if (this.name == null)
617        this.name = new ArrayList<HumanName>();
618      this.name.add(t);
619      return this;
620    }
621
622    /**
623     * @return The first repetition of repeating field {@link #name}, creating it if it does not already exist {3}
624     */
625    public HumanName getNameFirstRep() { 
626      if (getName().isEmpty()) {
627        addName();
628      }
629      return getName().get(0);
630    }
631
632    /**
633     * @return {@link #telecom} (A contact detail for the practitioner, e.g. a telephone number or an email address.)
634     */
635    public List<ContactPoint> getTelecom() { 
636      if (this.telecom == null)
637        this.telecom = new ArrayList<ContactPoint>();
638      return this.telecom;
639    }
640
641    /**
642     * @return Returns a reference to <code>this</code> for easy method chaining
643     */
644    public Practitioner setTelecom(List<ContactPoint> theTelecom) { 
645      this.telecom = theTelecom;
646      return this;
647    }
648
649    public boolean hasTelecom() { 
650      if (this.telecom == null)
651        return false;
652      for (ContactPoint item : this.telecom)
653        if (!item.isEmpty())
654          return true;
655      return false;
656    }
657
658    public ContactPoint addTelecom() { //3
659      ContactPoint t = new ContactPoint();
660      if (this.telecom == null)
661        this.telecom = new ArrayList<ContactPoint>();
662      this.telecom.add(t);
663      return t;
664    }
665
666    public Practitioner addTelecom(ContactPoint t) { //3
667      if (t == null)
668        return this;
669      if (this.telecom == null)
670        this.telecom = new ArrayList<ContactPoint>();
671      this.telecom.add(t);
672      return this;
673    }
674
675    /**
676     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist {3}
677     */
678    public ContactPoint getTelecomFirstRep() { 
679      if (getTelecom().isEmpty()) {
680        addTelecom();
681      }
682      return getTelecom().get(0);
683    }
684
685    /**
686     * @return {@link #deceased} (Indicates if the practitioner is deceased or not.)
687     */
688    public DataType getDeceased() { 
689      return this.deceased;
690    }
691
692    /**
693     * @return {@link #deceased} (Indicates if the practitioner is deceased or not.)
694     */
695    public BooleanType getDeceasedBooleanType() throws FHIRException { 
696      if (this.deceased == null)
697        this.deceased = new BooleanType();
698      if (!(this.deceased instanceof BooleanType))
699        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.deceased.getClass().getName()+" was encountered");
700      return (BooleanType) this.deceased;
701    }
702
703    public boolean hasDeceasedBooleanType() { 
704      return this != null && this.deceased instanceof BooleanType;
705    }
706
707    /**
708     * @return {@link #deceased} (Indicates if the practitioner is deceased or not.)
709     */
710    public DateTimeType getDeceasedDateTimeType() throws FHIRException { 
711      if (this.deceased == null)
712        this.deceased = new DateTimeType();
713      if (!(this.deceased instanceof DateTimeType))
714        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.deceased.getClass().getName()+" was encountered");
715      return (DateTimeType) this.deceased;
716    }
717
718    public boolean hasDeceasedDateTimeType() { 
719      return this != null && this.deceased instanceof DateTimeType;
720    }
721
722    public boolean hasDeceased() { 
723      return this.deceased != null && !this.deceased.isEmpty();
724    }
725
726    /**
727     * @param value {@link #deceased} (Indicates if the practitioner is deceased or not.)
728     */
729    public Practitioner setDeceased(DataType value) { 
730      if (value != null && !(value instanceof BooleanType || value instanceof DateTimeType))
731        throw new Error("Not the right type for Practitioner.deceased[x]: "+value.fhirType());
732      this.deceased = value;
733      return this;
734    }
735
736    /**
737     * @return {@link #address} (Address(es) of the practitioner that are not role specific (typically home address). 
738Work addresses are not typically entered in this property as they are usually role dependent.)
739     */
740    public List<Address> getAddress() { 
741      if (this.address == null)
742        this.address = new ArrayList<Address>();
743      return this.address;
744    }
745
746    /**
747     * @return Returns a reference to <code>this</code> for easy method chaining
748     */
749    public Practitioner setAddress(List<Address> theAddress) { 
750      this.address = theAddress;
751      return this;
752    }
753
754    public boolean hasAddress() { 
755      if (this.address == null)
756        return false;
757      for (Address item : this.address)
758        if (!item.isEmpty())
759          return true;
760      return false;
761    }
762
763    public Address addAddress() { //3
764      Address t = new Address();
765      if (this.address == null)
766        this.address = new ArrayList<Address>();
767      this.address.add(t);
768      return t;
769    }
770
771    public Practitioner addAddress(Address t) { //3
772      if (t == null)
773        return this;
774      if (this.address == null)
775        this.address = new ArrayList<Address>();
776      this.address.add(t);
777      return this;
778    }
779
780    /**
781     * @return The first repetition of repeating field {@link #address}, creating it if it does not already exist {3}
782     */
783    public Address getAddressFirstRep() { 
784      if (getAddress().isEmpty()) {
785        addAddress();
786      }
787      return getAddress().get(0);
788    }
789
790    /**
791     * @return {@link #gender} (Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
792     */
793    public Enumeration<AdministrativeGender> getGenderElement() { 
794      if (this.gender == null)
795        if (Configuration.errorOnAutoCreate())
796          throw new Error("Attempt to auto-create Practitioner.gender");
797        else if (Configuration.doAutoCreate())
798          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory()); // bb
799      return this.gender;
800    }
801
802    public boolean hasGenderElement() { 
803      return this.gender != null && !this.gender.isEmpty();
804    }
805
806    public boolean hasGender() { 
807      return this.gender != null && !this.gender.isEmpty();
808    }
809
810    /**
811     * @param value {@link #gender} (Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
812     */
813    public Practitioner setGenderElement(Enumeration<AdministrativeGender> value) { 
814      this.gender = value;
815      return this;
816    }
817
818    /**
819     * @return Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
820     */
821    public AdministrativeGender getGender() { 
822      return this.gender == null ? null : this.gender.getValue();
823    }
824
825    /**
826     * @param value Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
827     */
828    public Practitioner setGender(AdministrativeGender value) { 
829      if (value == null)
830        this.gender = null;
831      else {
832        if (this.gender == null)
833          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory());
834        this.gender.setValue(value);
835      }
836      return this;
837    }
838
839    /**
840     * @return {@link #birthDate} (The date of birth for the practitioner.). This is the underlying object with id, value and extensions. The accessor "getBirthDate" gives direct access to the value
841     */
842    public DateType getBirthDateElement() { 
843      if (this.birthDate == null)
844        if (Configuration.errorOnAutoCreate())
845          throw new Error("Attempt to auto-create Practitioner.birthDate");
846        else if (Configuration.doAutoCreate())
847          this.birthDate = new DateType(); // bb
848      return this.birthDate;
849    }
850
851    public boolean hasBirthDateElement() { 
852      return this.birthDate != null && !this.birthDate.isEmpty();
853    }
854
855    public boolean hasBirthDate() { 
856      return this.birthDate != null && !this.birthDate.isEmpty();
857    }
858
859    /**
860     * @param value {@link #birthDate} (The date of birth for the practitioner.). This is the underlying object with id, value and extensions. The accessor "getBirthDate" gives direct access to the value
861     */
862    public Practitioner setBirthDateElement(DateType value) { 
863      this.birthDate = value;
864      return this;
865    }
866
867    /**
868     * @return The date of birth for the practitioner.
869     */
870    public Date getBirthDate() { 
871      return this.birthDate == null ? null : this.birthDate.getValue();
872    }
873
874    /**
875     * @param value The date of birth for the practitioner.
876     */
877    public Practitioner setBirthDate(Date value) { 
878      if (value == null)
879        this.birthDate = null;
880      else {
881        if (this.birthDate == null)
882          this.birthDate = new DateType();
883        this.birthDate.setValue(value);
884      }
885      return this;
886    }
887
888    /**
889     * @return {@link #photo} (Image of the person.)
890     */
891    public List<Attachment> getPhoto() { 
892      if (this.photo == null)
893        this.photo = new ArrayList<Attachment>();
894      return this.photo;
895    }
896
897    /**
898     * @return Returns a reference to <code>this</code> for easy method chaining
899     */
900    public Practitioner setPhoto(List<Attachment> thePhoto) { 
901      this.photo = thePhoto;
902      return this;
903    }
904
905    public boolean hasPhoto() { 
906      if (this.photo == null)
907        return false;
908      for (Attachment item : this.photo)
909        if (!item.isEmpty())
910          return true;
911      return false;
912    }
913
914    public Attachment addPhoto() { //3
915      Attachment t = new Attachment();
916      if (this.photo == null)
917        this.photo = new ArrayList<Attachment>();
918      this.photo.add(t);
919      return t;
920    }
921
922    public Practitioner addPhoto(Attachment t) { //3
923      if (t == null)
924        return this;
925      if (this.photo == null)
926        this.photo = new ArrayList<Attachment>();
927      this.photo.add(t);
928      return this;
929    }
930
931    /**
932     * @return The first repetition of repeating field {@link #photo}, creating it if it does not already exist {3}
933     */
934    public Attachment getPhotoFirstRep() { 
935      if (getPhoto().isEmpty()) {
936        addPhoto();
937      }
938      return getPhoto().get(0);
939    }
940
941    /**
942     * @return {@link #qualification} (The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner.  For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certain locality.)
943     */
944    public List<PractitionerQualificationComponent> getQualification() { 
945      if (this.qualification == null)
946        this.qualification = new ArrayList<PractitionerQualificationComponent>();
947      return this.qualification;
948    }
949
950    /**
951     * @return Returns a reference to <code>this</code> for easy method chaining
952     */
953    public Practitioner setQualification(List<PractitionerQualificationComponent> theQualification) { 
954      this.qualification = theQualification;
955      return this;
956    }
957
958    public boolean hasQualification() { 
959      if (this.qualification == null)
960        return false;
961      for (PractitionerQualificationComponent item : this.qualification)
962        if (!item.isEmpty())
963          return true;
964      return false;
965    }
966
967    public PractitionerQualificationComponent addQualification() { //3
968      PractitionerQualificationComponent t = new PractitionerQualificationComponent();
969      if (this.qualification == null)
970        this.qualification = new ArrayList<PractitionerQualificationComponent>();
971      this.qualification.add(t);
972      return t;
973    }
974
975    public Practitioner addQualification(PractitionerQualificationComponent t) { //3
976      if (t == null)
977        return this;
978      if (this.qualification == null)
979        this.qualification = new ArrayList<PractitionerQualificationComponent>();
980      this.qualification.add(t);
981      return this;
982    }
983
984    /**
985     * @return The first repetition of repeating field {@link #qualification}, creating it if it does not already exist {3}
986     */
987    public PractitionerQualificationComponent getQualificationFirstRep() { 
988      if (getQualification().isEmpty()) {
989        addQualification();
990      }
991      return getQualification().get(0);
992    }
993
994    /**
995     * @return {@link #communication} (A language the practitioner can use in patient communication.)
996     */
997    public List<CodeableConcept> getCommunication() { 
998      if (this.communication == null)
999        this.communication = new ArrayList<CodeableConcept>();
1000      return this.communication;
1001    }
1002
1003    /**
1004     * @return Returns a reference to <code>this</code> for easy method chaining
1005     */
1006    public Practitioner setCommunication(List<CodeableConcept> theCommunication) { 
1007      this.communication = theCommunication;
1008      return this;
1009    }
1010
1011    public boolean hasCommunication() { 
1012      if (this.communication == null)
1013        return false;
1014      for (CodeableConcept item : this.communication)
1015        if (!item.isEmpty())
1016          return true;
1017      return false;
1018    }
1019
1020    public CodeableConcept addCommunication() { //3
1021      CodeableConcept t = new CodeableConcept();
1022      if (this.communication == null)
1023        this.communication = new ArrayList<CodeableConcept>();
1024      this.communication.add(t);
1025      return t;
1026    }
1027
1028    public Practitioner addCommunication(CodeableConcept t) { //3
1029      if (t == null)
1030        return this;
1031      if (this.communication == null)
1032        this.communication = new ArrayList<CodeableConcept>();
1033      this.communication.add(t);
1034      return this;
1035    }
1036
1037    /**
1038     * @return The first repetition of repeating field {@link #communication}, creating it if it does not already exist {3}
1039     */
1040    public CodeableConcept getCommunicationFirstRep() { 
1041      if (getCommunication().isEmpty()) {
1042        addCommunication();
1043      }
1044      return getCommunication().get(0);
1045    }
1046
1047      protected void listChildren(List<Property> children) {
1048        super.listChildren(children);
1049        children.add(new Property("identifier", "Identifier", "An identifier that applies to this person in this role.", 0, java.lang.Integer.MAX_VALUE, identifier));
1050        children.add(new Property("active", "boolean", "Whether this practitioner's record is in active use.", 0, 1, active));
1051        children.add(new Property("name", "HumanName", "The name(s) associated with the practitioner.", 0, java.lang.Integer.MAX_VALUE, name));
1052        children.add(new Property("telecom", "ContactPoint", "A contact detail for the practitioner, e.g. a telephone number or an email address.", 0, java.lang.Integer.MAX_VALUE, telecom));
1053        children.add(new Property("deceased[x]", "boolean|dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased));
1054        children.add(new Property("address", "Address", "Address(es) of the practitioner that are not role specific (typically home address). \rWork addresses are not typically entered in this property as they are usually role dependent.", 0, java.lang.Integer.MAX_VALUE, address));
1055        children.add(new Property("gender", "code", "Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.", 0, 1, gender));
1056        children.add(new Property("birthDate", "date", "The date of birth for the practitioner.", 0, 1, birthDate));
1057        children.add(new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo));
1058        children.add(new Property("qualification", "", "The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner.  For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certain locality.", 0, java.lang.Integer.MAX_VALUE, qualification));
1059        children.add(new Property("communication", "CodeableConcept", "A language the practitioner can use in patient communication.", 0, java.lang.Integer.MAX_VALUE, communication));
1060      }
1061
1062      @Override
1063      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1064        switch (_hash) {
1065        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "An identifier that applies to this person in this role.", 0, java.lang.Integer.MAX_VALUE, identifier);
1066        case -1422950650: /*active*/  return new Property("active", "boolean", "Whether this practitioner's record is in active use.", 0, 1, active);
1067        case 3373707: /*name*/  return new Property("name", "HumanName", "The name(s) associated with the practitioner.", 0, java.lang.Integer.MAX_VALUE, name);
1068        case -1429363305: /*telecom*/  return new Property("telecom", "ContactPoint", "A contact detail for the practitioner, e.g. a telephone number or an email address.", 0, java.lang.Integer.MAX_VALUE, telecom);
1069        case -1311442804: /*deceased[x]*/  return new Property("deceased[x]", "boolean|dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1070        case 561497972: /*deceased*/  return new Property("deceased[x]", "boolean|dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1071        case 497463828: /*deceasedBoolean*/  return new Property("deceased[x]", "boolean", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1072        case -1971804369: /*deceasedDateTime*/  return new Property("deceased[x]", "dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1073        case -1147692044: /*address*/  return new Property("address", "Address", "Address(es) of the practitioner that are not role specific (typically home address). \rWork addresses are not typically entered in this property as they are usually role dependent.", 0, java.lang.Integer.MAX_VALUE, address);
1074        case -1249512767: /*gender*/  return new Property("gender", "code", "Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.", 0, 1, gender);
1075        case -1210031859: /*birthDate*/  return new Property("birthDate", "date", "The date of birth for the practitioner.", 0, 1, birthDate);
1076        case 106642994: /*photo*/  return new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo);
1077        case -631333393: /*qualification*/  return new Property("qualification", "", "The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner.  For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certain locality.", 0, java.lang.Integer.MAX_VALUE, qualification);
1078        case -1035284522: /*communication*/  return new Property("communication", "CodeableConcept", "A language the practitioner can use in patient communication.", 0, java.lang.Integer.MAX_VALUE, communication);
1079        default: return super.getNamedProperty(_hash, _name, _checkValid);
1080        }
1081
1082      }
1083
1084      @Override
1085      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1086        switch (hash) {
1087        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1088        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1089        case 3373707: /*name*/ return this.name == null ? new Base[0] : this.name.toArray(new Base[this.name.size()]); // HumanName
1090        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
1091        case 561497972: /*deceased*/ return this.deceased == null ? new Base[0] : new Base[] {this.deceased}; // DataType
1092        case -1147692044: /*address*/ return this.address == null ? new Base[0] : this.address.toArray(new Base[this.address.size()]); // Address
1093        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // Enumeration<AdministrativeGender>
1094        case -1210031859: /*birthDate*/ return this.birthDate == null ? new Base[0] : new Base[] {this.birthDate}; // DateType
1095        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : this.photo.toArray(new Base[this.photo.size()]); // Attachment
1096        case -631333393: /*qualification*/ return this.qualification == null ? new Base[0] : this.qualification.toArray(new Base[this.qualification.size()]); // PractitionerQualificationComponent
1097        case -1035284522: /*communication*/ return this.communication == null ? new Base[0] : this.communication.toArray(new Base[this.communication.size()]); // CodeableConcept
1098        default: return super.getProperty(hash, name, checkValid);
1099        }
1100
1101      }
1102
1103      @Override
1104      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1105        switch (hash) {
1106        case -1618432855: // identifier
1107          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1108          return value;
1109        case -1422950650: // active
1110          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1111          return value;
1112        case 3373707: // name
1113          this.getName().add(TypeConvertor.castToHumanName(value)); // HumanName
1114          return value;
1115        case -1429363305: // telecom
1116          this.getTelecom().add(TypeConvertor.castToContactPoint(value)); // ContactPoint
1117          return value;
1118        case 561497972: // deceased
1119          this.deceased = TypeConvertor.castToType(value); // DataType
1120          return value;
1121        case -1147692044: // address
1122          this.getAddress().add(TypeConvertor.castToAddress(value)); // Address
1123          return value;
1124        case -1249512767: // gender
1125          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1126          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1127          return value;
1128        case -1210031859: // birthDate
1129          this.birthDate = TypeConvertor.castToDate(value); // DateType
1130          return value;
1131        case 106642994: // photo
1132          this.getPhoto().add(TypeConvertor.castToAttachment(value)); // Attachment
1133          return value;
1134        case -631333393: // qualification
1135          this.getQualification().add((PractitionerQualificationComponent) value); // PractitionerQualificationComponent
1136          return value;
1137        case -1035284522: // communication
1138          this.getCommunication().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1139          return value;
1140        default: return super.setProperty(hash, name, value);
1141        }
1142
1143      }
1144
1145      @Override
1146      public Base setProperty(String name, Base value) throws FHIRException {
1147        if (name.equals("identifier")) {
1148          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1149        } else if (name.equals("active")) {
1150          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1151        } else if (name.equals("name")) {
1152          this.getName().add(TypeConvertor.castToHumanName(value));
1153        } else if (name.equals("telecom")) {
1154          this.getTelecom().add(TypeConvertor.castToContactPoint(value));
1155        } else if (name.equals("deceased[x]")) {
1156          this.deceased = TypeConvertor.castToType(value); // DataType
1157        } else if (name.equals("address")) {
1158          this.getAddress().add(TypeConvertor.castToAddress(value));
1159        } else if (name.equals("gender")) {
1160          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1161          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1162        } else if (name.equals("birthDate")) {
1163          this.birthDate = TypeConvertor.castToDate(value); // DateType
1164        } else if (name.equals("photo")) {
1165          this.getPhoto().add(TypeConvertor.castToAttachment(value));
1166        } else if (name.equals("qualification")) {
1167          this.getQualification().add((PractitionerQualificationComponent) value);
1168        } else if (name.equals("communication")) {
1169          this.getCommunication().add(TypeConvertor.castToCodeableConcept(value));
1170        } else
1171          return super.setProperty(name, value);
1172        return value;
1173      }
1174
1175      @Override
1176      public Base makeProperty(int hash, String name) throws FHIRException {
1177        switch (hash) {
1178        case -1618432855:  return addIdentifier(); 
1179        case -1422950650:  return getActiveElement();
1180        case 3373707:  return addName(); 
1181        case -1429363305:  return addTelecom(); 
1182        case -1311442804:  return getDeceased();
1183        case 561497972:  return getDeceased();
1184        case -1147692044:  return addAddress(); 
1185        case -1249512767:  return getGenderElement();
1186        case -1210031859:  return getBirthDateElement();
1187        case 106642994:  return addPhoto(); 
1188        case -631333393:  return addQualification(); 
1189        case -1035284522:  return addCommunication(); 
1190        default: return super.makeProperty(hash, name);
1191        }
1192
1193      }
1194
1195      @Override
1196      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1197        switch (hash) {
1198        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1199        case -1422950650: /*active*/ return new String[] {"boolean"};
1200        case 3373707: /*name*/ return new String[] {"HumanName"};
1201        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
1202        case 561497972: /*deceased*/ return new String[] {"boolean", "dateTime"};
1203        case -1147692044: /*address*/ return new String[] {"Address"};
1204        case -1249512767: /*gender*/ return new String[] {"code"};
1205        case -1210031859: /*birthDate*/ return new String[] {"date"};
1206        case 106642994: /*photo*/ return new String[] {"Attachment"};
1207        case -631333393: /*qualification*/ return new String[] {};
1208        case -1035284522: /*communication*/ return new String[] {"CodeableConcept"};
1209        default: return super.getTypesForProperty(hash, name);
1210        }
1211
1212      }
1213
1214      @Override
1215      public Base addChild(String name) throws FHIRException {
1216        if (name.equals("identifier")) {
1217          return addIdentifier();
1218        }
1219        else if (name.equals("active")) {
1220          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.active");
1221        }
1222        else if (name.equals("name")) {
1223          return addName();
1224        }
1225        else if (name.equals("telecom")) {
1226          return addTelecom();
1227        }
1228        else if (name.equals("deceasedBoolean")) {
1229          this.deceased = new BooleanType();
1230          return this.deceased;
1231        }
1232        else if (name.equals("deceasedDateTime")) {
1233          this.deceased = new DateTimeType();
1234          return this.deceased;
1235        }
1236        else if (name.equals("address")) {
1237          return addAddress();
1238        }
1239        else if (name.equals("gender")) {
1240          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.gender");
1241        }
1242        else if (name.equals("birthDate")) {
1243          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.birthDate");
1244        }
1245        else if (name.equals("photo")) {
1246          return addPhoto();
1247        }
1248        else if (name.equals("qualification")) {
1249          return addQualification();
1250        }
1251        else if (name.equals("communication")) {
1252          return addCommunication();
1253        }
1254        else
1255          return super.addChild(name);
1256      }
1257
1258  public String fhirType() {
1259    return "Practitioner";
1260
1261  }
1262
1263      public Practitioner copy() {
1264        Practitioner dst = new Practitioner();
1265        copyValues(dst);
1266        return dst;
1267      }
1268
1269      public void copyValues(Practitioner dst) {
1270        super.copyValues(dst);
1271        if (identifier != null) {
1272          dst.identifier = new ArrayList<Identifier>();
1273          for (Identifier i : identifier)
1274            dst.identifier.add(i.copy());
1275        };
1276        dst.active = active == null ? null : active.copy();
1277        if (name != null) {
1278          dst.name = new ArrayList<HumanName>();
1279          for (HumanName i : name)
1280            dst.name.add(i.copy());
1281        };
1282        if (telecom != null) {
1283          dst.telecom = new ArrayList<ContactPoint>();
1284          for (ContactPoint i : telecom)
1285            dst.telecom.add(i.copy());
1286        };
1287        dst.deceased = deceased == null ? null : deceased.copy();
1288        if (address != null) {
1289          dst.address = new ArrayList<Address>();
1290          for (Address i : address)
1291            dst.address.add(i.copy());
1292        };
1293        dst.gender = gender == null ? null : gender.copy();
1294        dst.birthDate = birthDate == null ? null : birthDate.copy();
1295        if (photo != null) {
1296          dst.photo = new ArrayList<Attachment>();
1297          for (Attachment i : photo)
1298            dst.photo.add(i.copy());
1299        };
1300        if (qualification != null) {
1301          dst.qualification = new ArrayList<PractitionerQualificationComponent>();
1302          for (PractitionerQualificationComponent i : qualification)
1303            dst.qualification.add(i.copy());
1304        };
1305        if (communication != null) {
1306          dst.communication = new ArrayList<CodeableConcept>();
1307          for (CodeableConcept i : communication)
1308            dst.communication.add(i.copy());
1309        };
1310      }
1311
1312      protected Practitioner typedCopy() {
1313        return copy();
1314      }
1315
1316      @Override
1317      public boolean equalsDeep(Base other_) {
1318        if (!super.equalsDeep(other_))
1319          return false;
1320        if (!(other_ instanceof Practitioner))
1321          return false;
1322        Practitioner o = (Practitioner) other_;
1323        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(name, o.name, true)
1324           && compareDeep(telecom, o.telecom, true) && compareDeep(deceased, o.deceased, true) && compareDeep(address, o.address, true)
1325           && compareDeep(gender, o.gender, true) && compareDeep(birthDate, o.birthDate, true) && compareDeep(photo, o.photo, true)
1326           && compareDeep(qualification, o.qualification, true) && compareDeep(communication, o.communication, true)
1327          ;
1328      }
1329
1330      @Override
1331      public boolean equalsShallow(Base other_) {
1332        if (!super.equalsShallow(other_))
1333          return false;
1334        if (!(other_ instanceof Practitioner))
1335          return false;
1336        Practitioner o = (Practitioner) other_;
1337        return compareValues(active, o.active, true) && compareValues(gender, o.gender, true) && compareValues(birthDate, o.birthDate, true)
1338          ;
1339      }
1340
1341      public boolean isEmpty() {
1342        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, name
1343          , telecom, deceased, address, gender, birthDate, photo, qualification, communication
1344          );
1345      }
1346
1347  @Override
1348  public ResourceType getResourceType() {
1349    return ResourceType.Practitioner;
1350   }
1351
1352 /**
1353   * Search parameter: <b>active</b>
1354   * <p>
1355   * Description: <b>Whether the practitioner record is active</b><br>
1356   * Type: <b>token</b><br>
1357   * Path: <b>Practitioner.active</b><br>
1358   * </p>
1359   */
1360  @SearchParamDefinition(name="active", path="Practitioner.active", description="Whether the practitioner record is active", type="token" )
1361  public static final String SP_ACTIVE = "active";
1362 /**
1363   * <b>Fluent Client</b> search parameter constant for <b>active</b>
1364   * <p>
1365   * Description: <b>Whether the practitioner record is active</b><br>
1366   * Type: <b>token</b><br>
1367   * Path: <b>Practitioner.active</b><br>
1368   * </p>
1369   */
1370  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
1371
1372 /**
1373   * Search parameter: <b>communication</b>
1374   * <p>
1375   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1376   * Type: <b>token</b><br>
1377   * Path: <b>Practitioner.communication</b><br>
1378   * </p>
1379   */
1380  @SearchParamDefinition(name="communication", path="Practitioner.communication", description="One of the languages that the practitioner can communicate with", type="token" )
1381  public static final String SP_COMMUNICATION = "communication";
1382 /**
1383   * <b>Fluent Client</b> search parameter constant for <b>communication</b>
1384   * <p>
1385   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1386   * Type: <b>token</b><br>
1387   * Path: <b>Practitioner.communication</b><br>
1388   * </p>
1389   */
1390  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMMUNICATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMMUNICATION);
1391
1392 /**
1393   * Search parameter: <b>death-date</b>
1394   * <p>
1395   * Description: <b>The date of death has been provided and satisfies this search value</b><br>
1396   * Type: <b>date</b><br>
1397   * Path: <b>(Practitioner.deceased as dateTime)</b><br>
1398   * </p>
1399   */
1400  @SearchParamDefinition(name="death-date", path="(Practitioner.deceased as dateTime)", description="The date of death has been provided and satisfies this search value", type="date" )
1401  public static final String SP_DEATH_DATE = "death-date";
1402 /**
1403   * <b>Fluent Client</b> search parameter constant for <b>death-date</b>
1404   * <p>
1405   * Description: <b>The date of death has been provided and satisfies this search value</b><br>
1406   * Type: <b>date</b><br>
1407   * Path: <b>(Practitioner.deceased as dateTime)</b><br>
1408   * </p>
1409   */
1410  public static final ca.uhn.fhir.rest.gclient.DateClientParam DEATH_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DEATH_DATE);
1411
1412 /**
1413   * Search parameter: <b>deceased</b>
1414   * <p>
1415   * Description: <b>This Practitioner has been marked as deceased, or has a death date entered</b><br>
1416   * Type: <b>token</b><br>
1417   * Path: <b>Practitioner.deceased.exists() and Practitioner.deceased != false</b><br>
1418   * </p>
1419   */
1420  @SearchParamDefinition(name="deceased", path="Practitioner.deceased.exists() and Practitioner.deceased != false", description="This Practitioner has been marked as deceased, or has a death date entered", type="token" )
1421  public static final String SP_DECEASED = "deceased";
1422 /**
1423   * <b>Fluent Client</b> search parameter constant for <b>deceased</b>
1424   * <p>
1425   * Description: <b>This Practitioner has been marked as deceased, or has a death date entered</b><br>
1426   * Type: <b>token</b><br>
1427   * Path: <b>Practitioner.deceased.exists() and Practitioner.deceased != false</b><br>
1428   * </p>
1429   */
1430  public static final ca.uhn.fhir.rest.gclient.TokenClientParam DECEASED = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_DECEASED);
1431
1432 /**
1433   * Search parameter: <b>identifier</b>
1434   * <p>
1435   * Description: <b>A practitioner's Identifier</b><br>
1436   * Type: <b>token</b><br>
1437   * Path: <b>Practitioner.identifier</b><br>
1438   * </p>
1439   */
1440  @SearchParamDefinition(name="identifier", path="Practitioner.identifier", description="A practitioner's Identifier", type="token" )
1441  public static final String SP_IDENTIFIER = "identifier";
1442 /**
1443   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1444   * <p>
1445   * Description: <b>A practitioner's Identifier</b><br>
1446   * Type: <b>token</b><br>
1447   * Path: <b>Practitioner.identifier</b><br>
1448   * </p>
1449   */
1450  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1451
1452 /**
1453   * Search parameter: <b>name</b>
1454   * <p>
1455   * Description: <b>A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text</b><br>
1456   * Type: <b>string</b><br>
1457   * Path: <b>Practitioner.name</b><br>
1458   * </p>
1459   */
1460  @SearchParamDefinition(name="name", path="Practitioner.name", description="A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text", type="string" )
1461  public static final String SP_NAME = "name";
1462 /**
1463   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1464   * <p>
1465   * Description: <b>A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text</b><br>
1466   * Type: <b>string</b><br>
1467   * Path: <b>Practitioner.name</b><br>
1468   * </p>
1469   */
1470  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1471
1472 /**
1473   * Search parameter: <b>address-city</b>
1474   * <p>
1475   * Description: <b>Multiple Resources: 
1476
1477* [Patient](patient.html): A city specified in an address
1478* [Person](person.html): A city specified in an address
1479* [Practitioner](practitioner.html): A city specified in an address
1480* [RelatedPerson](relatedperson.html): A city specified in an address
1481</b><br>
1482   * Type: <b>string</b><br>
1483   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1484   * </p>
1485   */
1486  @SearchParamDefinition(name="address-city", path="Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A city specified in an address\r\n* [Person](person.html): A city specified in an address\r\n* [Practitioner](practitioner.html): A city specified in an address\r\n* [RelatedPerson](relatedperson.html): A city specified in an address\r\n", type="string" )
1487  public static final String SP_ADDRESS_CITY = "address-city";
1488 /**
1489   * <b>Fluent Client</b> search parameter constant for <b>address-city</b>
1490   * <p>
1491   * Description: <b>Multiple Resources: 
1492
1493* [Patient](patient.html): A city specified in an address
1494* [Person](person.html): A city specified in an address
1495* [Practitioner](practitioner.html): A city specified in an address
1496* [RelatedPerson](relatedperson.html): A city specified in an address
1497</b><br>
1498   * Type: <b>string</b><br>
1499   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1500   * </p>
1501   */
1502  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_CITY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_CITY);
1503
1504 /**
1505   * Search parameter: <b>address-country</b>
1506   * <p>
1507   * Description: <b>Multiple Resources: 
1508
1509* [Patient](patient.html): A country specified in an address
1510* [Person](person.html): A country specified in an address
1511* [Practitioner](practitioner.html): A country specified in an address
1512* [RelatedPerson](relatedperson.html): A country specified in an address
1513</b><br>
1514   * Type: <b>string</b><br>
1515   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
1516   * </p>
1517   */
1518  @SearchParamDefinition(name="address-country", path="Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A country specified in an address\r\n* [Person](person.html): A country specified in an address\r\n* [Practitioner](practitioner.html): A country specified in an address\r\n* [RelatedPerson](relatedperson.html): A country specified in an address\r\n", type="string" )
1519  public static final String SP_ADDRESS_COUNTRY = "address-country";
1520 /**
1521   * <b>Fluent Client</b> search parameter constant for <b>address-country</b>
1522   * <p>
1523   * Description: <b>Multiple Resources: 
1524
1525* [Patient](patient.html): A country specified in an address
1526* [Person](person.html): A country specified in an address
1527* [Practitioner](practitioner.html): A country specified in an address
1528* [RelatedPerson](relatedperson.html): A country specified in an address
1529</b><br>
1530   * Type: <b>string</b><br>
1531   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
1532   * </p>
1533   */
1534  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_COUNTRY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_COUNTRY);
1535
1536 /**
1537   * Search parameter: <b>address-postalcode</b>
1538   * <p>
1539   * Description: <b>Multiple Resources: 
1540
1541* [Patient](patient.html): A postalCode specified in an address
1542* [Person](person.html): A postal code specified in an address
1543* [Practitioner](practitioner.html): A postalCode specified in an address
1544* [RelatedPerson](relatedperson.html): A postal code specified in an address
1545</b><br>
1546   * Type: <b>string</b><br>
1547   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
1548   * </p>
1549   */
1550  @SearchParamDefinition(name="address-postalcode", path="Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A postalCode specified in an address\r\n* [Person](person.html): A postal code specified in an address\r\n* [Practitioner](practitioner.html): A postalCode specified in an address\r\n* [RelatedPerson](relatedperson.html): A postal code specified in an address\r\n", type="string" )
1551  public static final String SP_ADDRESS_POSTALCODE = "address-postalcode";
1552 /**
1553   * <b>Fluent Client</b> search parameter constant for <b>address-postalcode</b>
1554   * <p>
1555   * Description: <b>Multiple Resources: 
1556
1557* [Patient](patient.html): A postalCode specified in an address
1558* [Person](person.html): A postal code specified in an address
1559* [Practitioner](practitioner.html): A postalCode specified in an address
1560* [RelatedPerson](relatedperson.html): A postal code specified in an address
1561</b><br>
1562   * Type: <b>string</b><br>
1563   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
1564   * </p>
1565   */
1566  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_POSTALCODE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_POSTALCODE);
1567
1568 /**
1569   * Search parameter: <b>address-state</b>
1570   * <p>
1571   * Description: <b>Multiple Resources: 
1572
1573* [Patient](patient.html): A state specified in an address
1574* [Person](person.html): A state specified in an address
1575* [Practitioner](practitioner.html): A state specified in an address
1576* [RelatedPerson](relatedperson.html): A state specified in an address
1577</b><br>
1578   * Type: <b>string</b><br>
1579   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
1580   * </p>
1581   */
1582  @SearchParamDefinition(name="address-state", path="Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A state specified in an address\r\n* [Person](person.html): A state specified in an address\r\n* [Practitioner](practitioner.html): A state specified in an address\r\n* [RelatedPerson](relatedperson.html): A state specified in an address\r\n", type="string" )
1583  public static final String SP_ADDRESS_STATE = "address-state";
1584 /**
1585   * <b>Fluent Client</b> search parameter constant for <b>address-state</b>
1586   * <p>
1587   * Description: <b>Multiple Resources: 
1588
1589* [Patient](patient.html): A state specified in an address
1590* [Person](person.html): A state specified in an address
1591* [Practitioner](practitioner.html): A state specified in an address
1592* [RelatedPerson](relatedperson.html): A state specified in an address
1593</b><br>
1594   * Type: <b>string</b><br>
1595   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
1596   * </p>
1597   */
1598  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_STATE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_STATE);
1599
1600 /**
1601   * Search parameter: <b>address-use</b>
1602   * <p>
1603   * Description: <b>Multiple Resources: 
1604
1605* [Patient](patient.html): A use code specified in an address
1606* [Person](person.html): A use code specified in an address
1607* [Practitioner](practitioner.html): A use code specified in an address
1608* [RelatedPerson](relatedperson.html): A use code specified in an address
1609</b><br>
1610   * Type: <b>token</b><br>
1611   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
1612   * </p>
1613   */
1614  @SearchParamDefinition(name="address-use", path="Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A use code specified in an address\r\n* [Person](person.html): A use code specified in an address\r\n* [Practitioner](practitioner.html): A use code specified in an address\r\n* [RelatedPerson](relatedperson.html): A use code specified in an address\r\n", type="token" )
1615  public static final String SP_ADDRESS_USE = "address-use";
1616 /**
1617   * <b>Fluent Client</b> search parameter constant for <b>address-use</b>
1618   * <p>
1619   * Description: <b>Multiple Resources: 
1620
1621* [Patient](patient.html): A use code specified in an address
1622* [Person](person.html): A use code specified in an address
1623* [Practitioner](practitioner.html): A use code specified in an address
1624* [RelatedPerson](relatedperson.html): A use code specified in an address
1625</b><br>
1626   * Type: <b>token</b><br>
1627   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
1628   * </p>
1629   */
1630  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDRESS_USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDRESS_USE);
1631
1632 /**
1633   * Search parameter: <b>address</b>
1634   * <p>
1635   * Description: <b>Multiple Resources: 
1636
1637* [Patient](patient.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1638* [Person](person.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1639* [Practitioner](practitioner.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1640* [RelatedPerson](relatedperson.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1641</b><br>
1642   * Type: <b>string</b><br>
1643   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
1644   * </p>
1645   */
1646  @SearchParamDefinition(name="address", path="Patient.address | Person.address | Practitioner.address | RelatedPerson.address", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n* [Person](person.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n* [Practitioner](practitioner.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n* [RelatedPerson](relatedperson.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n", type="string" )
1647  public static final String SP_ADDRESS = "address";
1648 /**
1649   * <b>Fluent Client</b> search parameter constant for <b>address</b>
1650   * <p>
1651   * Description: <b>Multiple Resources: 
1652
1653* [Patient](patient.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1654* [Person](person.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1655* [Practitioner](practitioner.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1656* [RelatedPerson](relatedperson.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1657</b><br>
1658   * Type: <b>string</b><br>
1659   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
1660   * </p>
1661   */
1662  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS);
1663
1664 /**
1665   * Search parameter: <b>email</b>
1666   * <p>
1667   * Description: <b>Multiple Resources: 
1668
1669* [Patient](patient.html): A value in an email contact
1670* [Person](person.html): A value in an email contact
1671* [Practitioner](practitioner.html): A value in an email contact
1672* [PractitionerRole](practitionerrole.html): A value in an email contact
1673* [RelatedPerson](relatedperson.html): A value in an email contact
1674</b><br>
1675   * Type: <b>token</b><br>
1676   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1677   * </p>
1678   */
1679  @SearchParamDefinition(name="email", path="Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A value in an email contact\r\n* [Person](person.html): A value in an email contact\r\n* [Practitioner](practitioner.html): A value in an email contact\r\n* [PractitionerRole](practitionerrole.html): A value in an email contact\r\n* [RelatedPerson](relatedperson.html): A value in an email contact\r\n", type="token" )
1680  public static final String SP_EMAIL = "email";
1681 /**
1682   * <b>Fluent Client</b> search parameter constant for <b>email</b>
1683   * <p>
1684   * Description: <b>Multiple Resources: 
1685
1686* [Patient](patient.html): A value in an email contact
1687* [Person](person.html): A value in an email contact
1688* [Practitioner](practitioner.html): A value in an email contact
1689* [PractitionerRole](practitionerrole.html): A value in an email contact
1690* [RelatedPerson](relatedperson.html): A value in an email contact
1691</b><br>
1692   * Type: <b>token</b><br>
1693   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1694   * </p>
1695   */
1696  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
1697
1698 /**
1699   * Search parameter: <b>family</b>
1700   * <p>
1701   * Description: <b>Multiple Resources: 
1702
1703* [Patient](patient.html): A portion of the family name of the patient
1704* [Practitioner](practitioner.html): A portion of the family name
1705</b><br>
1706   * Type: <b>string</b><br>
1707   * Path: <b>Patient.name.family | Practitioner.name.family</b><br>
1708   * </p>
1709   */
1710  @SearchParamDefinition(name="family", path="Patient.name.family | Practitioner.name.family", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A portion of the family name of the patient\r\n* [Practitioner](practitioner.html): A portion of the family name\r\n", type="string" )
1711  public static final String SP_FAMILY = "family";
1712 /**
1713   * <b>Fluent Client</b> search parameter constant for <b>family</b>
1714   * <p>
1715   * Description: <b>Multiple Resources: 
1716
1717* [Patient](patient.html): A portion of the family name of the patient
1718* [Practitioner](practitioner.html): A portion of the family name
1719</b><br>
1720   * Type: <b>string</b><br>
1721   * Path: <b>Patient.name.family | Practitioner.name.family</b><br>
1722   * </p>
1723   */
1724  public static final ca.uhn.fhir.rest.gclient.StringClientParam FAMILY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_FAMILY);
1725
1726 /**
1727   * Search parameter: <b>gender</b>
1728   * <p>
1729   * Description: <b>Multiple Resources: 
1730
1731* [Patient](patient.html): Gender of the patient
1732* [Person](person.html): The gender of the person
1733* [Practitioner](practitioner.html): Gender of the practitioner
1734* [RelatedPerson](relatedperson.html): Gender of the related person
1735</b><br>
1736   * Type: <b>token</b><br>
1737   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
1738   * </p>
1739   */
1740  @SearchParamDefinition(name="gender", path="Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): Gender of the patient\r\n* [Person](person.html): The gender of the person\r\n* [Practitioner](practitioner.html): Gender of the practitioner\r\n* [RelatedPerson](relatedperson.html): Gender of the related person\r\n", type="token" )
1741  public static final String SP_GENDER = "gender";
1742 /**
1743   * <b>Fluent Client</b> search parameter constant for <b>gender</b>
1744   * <p>
1745   * Description: <b>Multiple Resources: 
1746
1747* [Patient](patient.html): Gender of the patient
1748* [Person](person.html): The gender of the person
1749* [Practitioner](practitioner.html): Gender of the practitioner
1750* [RelatedPerson](relatedperson.html): Gender of the related person
1751</b><br>
1752   * Type: <b>token</b><br>
1753   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
1754   * </p>
1755   */
1756  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GENDER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GENDER);
1757
1758 /**
1759   * Search parameter: <b>given</b>
1760   * <p>
1761   * Description: <b>Multiple Resources: 
1762
1763* [Patient](patient.html): A portion of the given name of the patient
1764* [Practitioner](practitioner.html): A portion of the given name
1765</b><br>
1766   * Type: <b>string</b><br>
1767   * Path: <b>Patient.name.given | Practitioner.name.given</b><br>
1768   * </p>
1769   */
1770  @SearchParamDefinition(name="given", path="Patient.name.given | Practitioner.name.given", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A portion of the given name of the patient\r\n* [Practitioner](practitioner.html): A portion of the given name\r\n", type="string" )
1771  public static final String SP_GIVEN = "given";
1772 /**
1773   * <b>Fluent Client</b> search parameter constant for <b>given</b>
1774   * <p>
1775   * Description: <b>Multiple Resources: 
1776
1777* [Patient](patient.html): A portion of the given name of the patient
1778* [Practitioner](practitioner.html): A portion of the given name
1779</b><br>
1780   * Type: <b>string</b><br>
1781   * Path: <b>Patient.name.given | Practitioner.name.given</b><br>
1782   * </p>
1783   */
1784  public static final ca.uhn.fhir.rest.gclient.StringClientParam GIVEN = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_GIVEN);
1785
1786 /**
1787   * Search parameter: <b>phone</b>
1788   * <p>
1789   * Description: <b>Multiple Resources: 
1790
1791* [Patient](patient.html): A value in a phone contact
1792* [Person](person.html): A value in a phone contact
1793* [Practitioner](practitioner.html): A value in a phone contact
1794* [PractitionerRole](practitionerrole.html): A value in a phone contact
1795* [RelatedPerson](relatedperson.html): A value in a phone contact
1796</b><br>
1797   * Type: <b>token</b><br>
1798   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1799   * </p>
1800   */
1801  @SearchParamDefinition(name="phone", path="Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A value in a phone contact\r\n* [Person](person.html): A value in a phone contact\r\n* [Practitioner](practitioner.html): A value in a phone contact\r\n* [PractitionerRole](practitionerrole.html): A value in a phone contact\r\n* [RelatedPerson](relatedperson.html): A value in a phone contact\r\n", type="token" )
1802  public static final String SP_PHONE = "phone";
1803 /**
1804   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
1805   * <p>
1806   * Description: <b>Multiple Resources: 
1807
1808* [Patient](patient.html): A value in a phone contact
1809* [Person](person.html): A value in a phone contact
1810* [Practitioner](practitioner.html): A value in a phone contact
1811* [PractitionerRole](practitionerrole.html): A value in a phone contact
1812* [RelatedPerson](relatedperson.html): A value in a phone contact
1813</b><br>
1814   * Type: <b>token</b><br>
1815   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1816   * </p>
1817   */
1818  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
1819
1820 /**
1821   * Search parameter: <b>phonetic</b>
1822   * <p>
1823   * Description: <b>Multiple Resources: 
1824
1825* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
1826* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
1827* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
1828* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
1829</b><br>
1830   * Type: <b>string</b><br>
1831   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
1832   * </p>
1833   */
1834  @SearchParamDefinition(name="phonetic", path="Patient.name | Person.name | Practitioner.name | RelatedPerson.name", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm\r\n* [Person](person.html): A portion of name using some kind of phonetic matching algorithm\r\n* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm\r\n* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm\r\n", type="string" )
1835  public static final String SP_PHONETIC = "phonetic";
1836 /**
1837   * <b>Fluent Client</b> search parameter constant for <b>phonetic</b>
1838   * <p>
1839   * Description: <b>Multiple Resources: 
1840
1841* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
1842* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
1843* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
1844* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
1845</b><br>
1846   * Type: <b>string</b><br>
1847   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
1848   * </p>
1849   */
1850  public static final ca.uhn.fhir.rest.gclient.StringClientParam PHONETIC = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PHONETIC);
1851
1852 /**
1853   * Search parameter: <b>telecom</b>
1854   * <p>
1855   * Description: <b>Multiple Resources: 
1856
1857* [Patient](patient.html): The value in any kind of telecom details of the patient
1858* [Person](person.html): The value in any kind of contact
1859* [Practitioner](practitioner.html): The value in any kind of contact
1860* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1861* [RelatedPerson](relatedperson.html): The value in any kind of contact
1862</b><br>
1863   * Type: <b>token</b><br>
1864   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom</b><br>
1865   * </p>
1866   */
1867  @SearchParamDefinition(name="telecom", path="Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): The value in any kind of telecom details of the patient\r\n* [Person](person.html): The value in any kind of contact\r\n* [Practitioner](practitioner.html): The value in any kind of contact\r\n* [PractitionerRole](practitionerrole.html): The value in any kind of contact\r\n* [RelatedPerson](relatedperson.html): The value in any kind of contact\r\n", type="token" )
1868  public static final String SP_TELECOM = "telecom";
1869 /**
1870   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
1871   * <p>
1872   * Description: <b>Multiple Resources: 
1873
1874* [Patient](patient.html): The value in any kind of telecom details of the patient
1875* [Person](person.html): The value in any kind of contact
1876* [Practitioner](practitioner.html): The value in any kind of contact
1877* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1878* [RelatedPerson](relatedperson.html): The value in any kind of contact
1879</b><br>
1880   * Type: <b>token</b><br>
1881   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom</b><br>
1882   * </p>
1883   */
1884  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
1885
1886
1887}
1888