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 13, 2022 17:53+1100 for FHIR vcurrent
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 or related services.
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.
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." )
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.)
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.", 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.", 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=true, 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     * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
422     */
423    @Child(name = "gender", type = {CodeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
424    @Description(shortDefinition="male | female | other | unknown", formalDefinition="Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes." )
425    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/administrative-gender")
426    protected Enumeration<AdministrativeGender> gender;
427
428    /**
429     * The date of birth for the practitioner.
430     */
431    @Child(name = "birthDate", type = {DateType.class}, order=5, min=0, max=1, modifier=false, summary=true)
432    @Description(shortDefinition="The date  on which the practitioner was born", formalDefinition="The date of birth for the practitioner." )
433    protected DateType birthDate;
434
435    /**
436     * Indicates if the practitioner is deceased or not.
437     */
438    @Child(name = "deceased", type = {BooleanType.class, DateTimeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
439    @Description(shortDefinition="Indicates if the practitioner is deceased or not", formalDefinition="Indicates if the practitioner is deceased or not." )
440    protected DataType deceased;
441
442    /**
443     * Address(es) of the practitioner that are not role specific (typically home address). 
444Work addresses are not typically entered in this property as they are usually role dependent.
445     */
446    @Child(name = "address", type = {Address.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
447    @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." )
448    protected List<Address> address;
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 qualifications, certifications, accreditations, training, licenses (and other types of educations/skills/capabilities) that authorize or otherwise pertain to the provision of care by the practitioner.
459
460For example, a medical license issued by a medical board of licensure authorizing the practitioner to practice medicine within a certain locality.
461     */
462    @Child(name = "qualification", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
463    @Description(shortDefinition="Qualifications, certifications, accreditations, licenses, training, etc pertaining to the provision of care", formalDefinition="The official qualifications, certifications, accreditations, training, licenses (and other types of educations/skills/capabilities) that authorize or otherwise pertain to the provision of care by the practitioner.\r\rFor example, a medical license issued by a medical board of licensure authorizing the practitioner to practice medicine within a certain locality." )
464    protected List<PractitionerQualificationComponent> qualification;
465
466    /**
467     * A language the practitioner can use in patient communication.
468     */
469    @Child(name = "communication", type = {CodeableConcept.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
470    @Description(shortDefinition="A language the practitioner can use in patient communication", formalDefinition="A language the practitioner can use in patient communication." )
471    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
472    protected List<CodeableConcept> communication;
473
474    private static final long serialVersionUID = 20718373L;
475
476  /**
477   * Constructor
478   */
479    public Practitioner() {
480      super();
481    }
482
483    /**
484     * @return {@link #identifier} (An identifier that applies to this person in this role.)
485     */
486    public List<Identifier> getIdentifier() { 
487      if (this.identifier == null)
488        this.identifier = new ArrayList<Identifier>();
489      return this.identifier;
490    }
491
492    /**
493     * @return Returns a reference to <code>this</code> for easy method chaining
494     */
495    public Practitioner setIdentifier(List<Identifier> theIdentifier) { 
496      this.identifier = theIdentifier;
497      return this;
498    }
499
500    public boolean hasIdentifier() { 
501      if (this.identifier == null)
502        return false;
503      for (Identifier item : this.identifier)
504        if (!item.isEmpty())
505          return true;
506      return false;
507    }
508
509    public Identifier addIdentifier() { //3
510      Identifier t = new Identifier();
511      if (this.identifier == null)
512        this.identifier = new ArrayList<Identifier>();
513      this.identifier.add(t);
514      return t;
515    }
516
517    public Practitioner addIdentifier(Identifier t) { //3
518      if (t == null)
519        return this;
520      if (this.identifier == null)
521        this.identifier = new ArrayList<Identifier>();
522      this.identifier.add(t);
523      return this;
524    }
525
526    /**
527     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
528     */
529    public Identifier getIdentifierFirstRep() { 
530      if (getIdentifier().isEmpty()) {
531        addIdentifier();
532      }
533      return getIdentifier().get(0);
534    }
535
536    /**
537     * @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
538     */
539    public BooleanType getActiveElement() { 
540      if (this.active == null)
541        if (Configuration.errorOnAutoCreate())
542          throw new Error("Attempt to auto-create Practitioner.active");
543        else if (Configuration.doAutoCreate())
544          this.active = new BooleanType(); // bb
545      return this.active;
546    }
547
548    public boolean hasActiveElement() { 
549      return this.active != null && !this.active.isEmpty();
550    }
551
552    public boolean hasActive() { 
553      return this.active != null && !this.active.isEmpty();
554    }
555
556    /**
557     * @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
558     */
559    public Practitioner setActiveElement(BooleanType value) { 
560      this.active = value;
561      return this;
562    }
563
564    /**
565     * @return Whether this practitioner's record is in active use.
566     */
567    public boolean getActive() { 
568      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
569    }
570
571    /**
572     * @param value Whether this practitioner's record is in active use.
573     */
574    public Practitioner setActive(boolean value) { 
575        if (this.active == null)
576          this.active = new BooleanType();
577        this.active.setValue(value);
578      return this;
579    }
580
581    /**
582     * @return {@link #name} (The name(s) associated with the practitioner.)
583     */
584    public List<HumanName> getName() { 
585      if (this.name == null)
586        this.name = new ArrayList<HumanName>();
587      return this.name;
588    }
589
590    /**
591     * @return Returns a reference to <code>this</code> for easy method chaining
592     */
593    public Practitioner setName(List<HumanName> theName) { 
594      this.name = theName;
595      return this;
596    }
597
598    public boolean hasName() { 
599      if (this.name == null)
600        return false;
601      for (HumanName item : this.name)
602        if (!item.isEmpty())
603          return true;
604      return false;
605    }
606
607    public HumanName addName() { //3
608      HumanName t = new HumanName();
609      if (this.name == null)
610        this.name = new ArrayList<HumanName>();
611      this.name.add(t);
612      return t;
613    }
614
615    public Practitioner addName(HumanName t) { //3
616      if (t == null)
617        return this;
618      if (this.name == null)
619        this.name = new ArrayList<HumanName>();
620      this.name.add(t);
621      return this;
622    }
623
624    /**
625     * @return The first repetition of repeating field {@link #name}, creating it if it does not already exist {3}
626     */
627    public HumanName getNameFirstRep() { 
628      if (getName().isEmpty()) {
629        addName();
630      }
631      return getName().get(0);
632    }
633
634    /**
635     * @return {@link #telecom} (A contact detail for the practitioner, e.g. a telephone number or an email address.)
636     */
637    public List<ContactPoint> getTelecom() { 
638      if (this.telecom == null)
639        this.telecom = new ArrayList<ContactPoint>();
640      return this.telecom;
641    }
642
643    /**
644     * @return Returns a reference to <code>this</code> for easy method chaining
645     */
646    public Practitioner setTelecom(List<ContactPoint> theTelecom) { 
647      this.telecom = theTelecom;
648      return this;
649    }
650
651    public boolean hasTelecom() { 
652      if (this.telecom == null)
653        return false;
654      for (ContactPoint item : this.telecom)
655        if (!item.isEmpty())
656          return true;
657      return false;
658    }
659
660    public ContactPoint addTelecom() { //3
661      ContactPoint t = new ContactPoint();
662      if (this.telecom == null)
663        this.telecom = new ArrayList<ContactPoint>();
664      this.telecom.add(t);
665      return t;
666    }
667
668    public Practitioner addTelecom(ContactPoint t) { //3
669      if (t == null)
670        return this;
671      if (this.telecom == null)
672        this.telecom = new ArrayList<ContactPoint>();
673      this.telecom.add(t);
674      return this;
675    }
676
677    /**
678     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist {3}
679     */
680    public ContactPoint getTelecomFirstRep() { 
681      if (getTelecom().isEmpty()) {
682        addTelecom();
683      }
684      return getTelecom().get(0);
685    }
686
687    /**
688     * @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
689     */
690    public Enumeration<AdministrativeGender> getGenderElement() { 
691      if (this.gender == null)
692        if (Configuration.errorOnAutoCreate())
693          throw new Error("Attempt to auto-create Practitioner.gender");
694        else if (Configuration.doAutoCreate())
695          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory()); // bb
696      return this.gender;
697    }
698
699    public boolean hasGenderElement() { 
700      return this.gender != null && !this.gender.isEmpty();
701    }
702
703    public boolean hasGender() { 
704      return this.gender != null && !this.gender.isEmpty();
705    }
706
707    /**
708     * @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
709     */
710    public Practitioner setGenderElement(Enumeration<AdministrativeGender> value) { 
711      this.gender = value;
712      return this;
713    }
714
715    /**
716     * @return Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
717     */
718    public AdministrativeGender getGender() { 
719      return this.gender == null ? null : this.gender.getValue();
720    }
721
722    /**
723     * @param value Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
724     */
725    public Practitioner setGender(AdministrativeGender value) { 
726      if (value == null)
727        this.gender = null;
728      else {
729        if (this.gender == null)
730          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory());
731        this.gender.setValue(value);
732      }
733      return this;
734    }
735
736    /**
737     * @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
738     */
739    public DateType getBirthDateElement() { 
740      if (this.birthDate == null)
741        if (Configuration.errorOnAutoCreate())
742          throw new Error("Attempt to auto-create Practitioner.birthDate");
743        else if (Configuration.doAutoCreate())
744          this.birthDate = new DateType(); // bb
745      return this.birthDate;
746    }
747
748    public boolean hasBirthDateElement() { 
749      return this.birthDate != null && !this.birthDate.isEmpty();
750    }
751
752    public boolean hasBirthDate() { 
753      return this.birthDate != null && !this.birthDate.isEmpty();
754    }
755
756    /**
757     * @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
758     */
759    public Practitioner setBirthDateElement(DateType value) { 
760      this.birthDate = value;
761      return this;
762    }
763
764    /**
765     * @return The date of birth for the practitioner.
766     */
767    public Date getBirthDate() { 
768      return this.birthDate == null ? null : this.birthDate.getValue();
769    }
770
771    /**
772     * @param value The date of birth for the practitioner.
773     */
774    public Practitioner setBirthDate(Date value) { 
775      if (value == null)
776        this.birthDate = null;
777      else {
778        if (this.birthDate == null)
779          this.birthDate = new DateType();
780        this.birthDate.setValue(value);
781      }
782      return this;
783    }
784
785    /**
786     * @return {@link #deceased} (Indicates if the practitioner is deceased or not.)
787     */
788    public DataType getDeceased() { 
789      return this.deceased;
790    }
791
792    /**
793     * @return {@link #deceased} (Indicates if the practitioner is deceased or not.)
794     */
795    public BooleanType getDeceasedBooleanType() throws FHIRException { 
796      if (this.deceased == null)
797        this.deceased = new BooleanType();
798      if (!(this.deceased instanceof BooleanType))
799        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.deceased.getClass().getName()+" was encountered");
800      return (BooleanType) this.deceased;
801    }
802
803    public boolean hasDeceasedBooleanType() { 
804      return this != null && this.deceased instanceof BooleanType;
805    }
806
807    /**
808     * @return {@link #deceased} (Indicates if the practitioner is deceased or not.)
809     */
810    public DateTimeType getDeceasedDateTimeType() throws FHIRException { 
811      if (this.deceased == null)
812        this.deceased = new DateTimeType();
813      if (!(this.deceased instanceof DateTimeType))
814        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.deceased.getClass().getName()+" was encountered");
815      return (DateTimeType) this.deceased;
816    }
817
818    public boolean hasDeceasedDateTimeType() { 
819      return this != null && this.deceased instanceof DateTimeType;
820    }
821
822    public boolean hasDeceased() { 
823      return this.deceased != null && !this.deceased.isEmpty();
824    }
825
826    /**
827     * @param value {@link #deceased} (Indicates if the practitioner is deceased or not.)
828     */
829    public Practitioner setDeceased(DataType value) { 
830      if (value != null && !(value instanceof BooleanType || value instanceof DateTimeType))
831        throw new Error("Not the right type for Practitioner.deceased[x]: "+value.fhirType());
832      this.deceased = value;
833      return this;
834    }
835
836    /**
837     * @return {@link #address} (Address(es) of the practitioner that are not role specific (typically home address). 
838Work addresses are not typically entered in this property as they are usually role dependent.)
839     */
840    public List<Address> getAddress() { 
841      if (this.address == null)
842        this.address = new ArrayList<Address>();
843      return this.address;
844    }
845
846    /**
847     * @return Returns a reference to <code>this</code> for easy method chaining
848     */
849    public Practitioner setAddress(List<Address> theAddress) { 
850      this.address = theAddress;
851      return this;
852    }
853
854    public boolean hasAddress() { 
855      if (this.address == null)
856        return false;
857      for (Address item : this.address)
858        if (!item.isEmpty())
859          return true;
860      return false;
861    }
862
863    public Address addAddress() { //3
864      Address t = new Address();
865      if (this.address == null)
866        this.address = new ArrayList<Address>();
867      this.address.add(t);
868      return t;
869    }
870
871    public Practitioner addAddress(Address t) { //3
872      if (t == null)
873        return this;
874      if (this.address == null)
875        this.address = new ArrayList<Address>();
876      this.address.add(t);
877      return this;
878    }
879
880    /**
881     * @return The first repetition of repeating field {@link #address}, creating it if it does not already exist {3}
882     */
883    public Address getAddressFirstRep() { 
884      if (getAddress().isEmpty()) {
885        addAddress();
886      }
887      return getAddress().get(0);
888    }
889
890    /**
891     * @return {@link #photo} (Image of the person.)
892     */
893    public List<Attachment> getPhoto() { 
894      if (this.photo == null)
895        this.photo = new ArrayList<Attachment>();
896      return this.photo;
897    }
898
899    /**
900     * @return Returns a reference to <code>this</code> for easy method chaining
901     */
902    public Practitioner setPhoto(List<Attachment> thePhoto) { 
903      this.photo = thePhoto;
904      return this;
905    }
906
907    public boolean hasPhoto() { 
908      if (this.photo == null)
909        return false;
910      for (Attachment item : this.photo)
911        if (!item.isEmpty())
912          return true;
913      return false;
914    }
915
916    public Attachment addPhoto() { //3
917      Attachment t = new Attachment();
918      if (this.photo == null)
919        this.photo = new ArrayList<Attachment>();
920      this.photo.add(t);
921      return t;
922    }
923
924    public Practitioner addPhoto(Attachment t) { //3
925      if (t == null)
926        return this;
927      if (this.photo == null)
928        this.photo = new ArrayList<Attachment>();
929      this.photo.add(t);
930      return this;
931    }
932
933    /**
934     * @return The first repetition of repeating field {@link #photo}, creating it if it does not already exist {3}
935     */
936    public Attachment getPhotoFirstRep() { 
937      if (getPhoto().isEmpty()) {
938        addPhoto();
939      }
940      return getPhoto().get(0);
941    }
942
943    /**
944     * @return {@link #qualification} (The official qualifications, certifications, accreditations, training, licenses (and other types of educations/skills/capabilities) that authorize or otherwise pertain to the provision of care by the practitioner.
945
946For example, a medical license issued by a medical board of licensure authorizing the practitioner to practice medicine within a certain locality.)
947     */
948    public List<PractitionerQualificationComponent> getQualification() { 
949      if (this.qualification == null)
950        this.qualification = new ArrayList<PractitionerQualificationComponent>();
951      return this.qualification;
952    }
953
954    /**
955     * @return Returns a reference to <code>this</code> for easy method chaining
956     */
957    public Practitioner setQualification(List<PractitionerQualificationComponent> theQualification) { 
958      this.qualification = theQualification;
959      return this;
960    }
961
962    public boolean hasQualification() { 
963      if (this.qualification == null)
964        return false;
965      for (PractitionerQualificationComponent item : this.qualification)
966        if (!item.isEmpty())
967          return true;
968      return false;
969    }
970
971    public PractitionerQualificationComponent addQualification() { //3
972      PractitionerQualificationComponent t = new PractitionerQualificationComponent();
973      if (this.qualification == null)
974        this.qualification = new ArrayList<PractitionerQualificationComponent>();
975      this.qualification.add(t);
976      return t;
977    }
978
979    public Practitioner addQualification(PractitionerQualificationComponent t) { //3
980      if (t == null)
981        return this;
982      if (this.qualification == null)
983        this.qualification = new ArrayList<PractitionerQualificationComponent>();
984      this.qualification.add(t);
985      return this;
986    }
987
988    /**
989     * @return The first repetition of repeating field {@link #qualification}, creating it if it does not already exist {3}
990     */
991    public PractitionerQualificationComponent getQualificationFirstRep() { 
992      if (getQualification().isEmpty()) {
993        addQualification();
994      }
995      return getQualification().get(0);
996    }
997
998    /**
999     * @return {@link #communication} (A language the practitioner can use in patient communication.)
1000     */
1001    public List<CodeableConcept> getCommunication() { 
1002      if (this.communication == null)
1003        this.communication = new ArrayList<CodeableConcept>();
1004      return this.communication;
1005    }
1006
1007    /**
1008     * @return Returns a reference to <code>this</code> for easy method chaining
1009     */
1010    public Practitioner setCommunication(List<CodeableConcept> theCommunication) { 
1011      this.communication = theCommunication;
1012      return this;
1013    }
1014
1015    public boolean hasCommunication() { 
1016      if (this.communication == null)
1017        return false;
1018      for (CodeableConcept item : this.communication)
1019        if (!item.isEmpty())
1020          return true;
1021      return false;
1022    }
1023
1024    public CodeableConcept addCommunication() { //3
1025      CodeableConcept t = new CodeableConcept();
1026      if (this.communication == null)
1027        this.communication = new ArrayList<CodeableConcept>();
1028      this.communication.add(t);
1029      return t;
1030    }
1031
1032    public Practitioner addCommunication(CodeableConcept t) { //3
1033      if (t == null)
1034        return this;
1035      if (this.communication == null)
1036        this.communication = new ArrayList<CodeableConcept>();
1037      this.communication.add(t);
1038      return this;
1039    }
1040
1041    /**
1042     * @return The first repetition of repeating field {@link #communication}, creating it if it does not already exist {3}
1043     */
1044    public CodeableConcept getCommunicationFirstRep() { 
1045      if (getCommunication().isEmpty()) {
1046        addCommunication();
1047      }
1048      return getCommunication().get(0);
1049    }
1050
1051      protected void listChildren(List<Property> children) {
1052        super.listChildren(children);
1053        children.add(new Property("identifier", "Identifier", "An identifier that applies to this person in this role.", 0, java.lang.Integer.MAX_VALUE, identifier));
1054        children.add(new Property("active", "boolean", "Whether this practitioner's record is in active use.", 0, 1, active));
1055        children.add(new Property("name", "HumanName", "The name(s) associated with the practitioner.", 0, java.lang.Integer.MAX_VALUE, name));
1056        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));
1057        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));
1058        children.add(new Property("birthDate", "date", "The date of birth for the practitioner.", 0, 1, birthDate));
1059        children.add(new Property("deceased[x]", "boolean|dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased));
1060        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));
1061        children.add(new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo));
1062        children.add(new Property("qualification", "", "The official qualifications, certifications, accreditations, training, licenses (and other types of educations/skills/capabilities) that authorize or otherwise pertain to the provision of care by the practitioner.\r\rFor example, a medical license issued by a medical board of licensure authorizing the practitioner to practice medicine within a certain locality.", 0, java.lang.Integer.MAX_VALUE, qualification));
1063        children.add(new Property("communication", "CodeableConcept", "A language the practitioner can use in patient communication.", 0, java.lang.Integer.MAX_VALUE, communication));
1064      }
1065
1066      @Override
1067      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1068        switch (_hash) {
1069        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);
1070        case -1422950650: /*active*/  return new Property("active", "boolean", "Whether this practitioner's record is in active use.", 0, 1, active);
1071        case 3373707: /*name*/  return new Property("name", "HumanName", "The name(s) associated with the practitioner.", 0, java.lang.Integer.MAX_VALUE, name);
1072        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);
1073        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);
1074        case -1210031859: /*birthDate*/  return new Property("birthDate", "date", "The date of birth for the practitioner.", 0, 1, birthDate);
1075        case -1311442804: /*deceased[x]*/  return new Property("deceased[x]", "boolean|dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1076        case 561497972: /*deceased*/  return new Property("deceased[x]", "boolean|dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1077        case 497463828: /*deceasedBoolean*/  return new Property("deceased[x]", "boolean", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1078        case -1971804369: /*deceasedDateTime*/  return new Property("deceased[x]", "dateTime", "Indicates if the practitioner is deceased or not.", 0, 1, deceased);
1079        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);
1080        case 106642994: /*photo*/  return new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo);
1081        case -631333393: /*qualification*/  return new Property("qualification", "", "The official qualifications, certifications, accreditations, training, licenses (and other types of educations/skills/capabilities) that authorize or otherwise pertain to the provision of care by the practitioner.\r\rFor example, a medical license issued by a medical board of licensure authorizing the practitioner to practice medicine within a certain locality.", 0, java.lang.Integer.MAX_VALUE, qualification);
1082        case -1035284522: /*communication*/  return new Property("communication", "CodeableConcept", "A language the practitioner can use in patient communication.", 0, java.lang.Integer.MAX_VALUE, communication);
1083        default: return super.getNamedProperty(_hash, _name, _checkValid);
1084        }
1085
1086      }
1087
1088      @Override
1089      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1090        switch (hash) {
1091        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1092        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1093        case 3373707: /*name*/ return this.name == null ? new Base[0] : this.name.toArray(new Base[this.name.size()]); // HumanName
1094        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
1095        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // Enumeration<AdministrativeGender>
1096        case -1210031859: /*birthDate*/ return this.birthDate == null ? new Base[0] : new Base[] {this.birthDate}; // DateType
1097        case 561497972: /*deceased*/ return this.deceased == null ? new Base[0] : new Base[] {this.deceased}; // DataType
1098        case -1147692044: /*address*/ return this.address == null ? new Base[0] : this.address.toArray(new Base[this.address.size()]); // Address
1099        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : this.photo.toArray(new Base[this.photo.size()]); // Attachment
1100        case -631333393: /*qualification*/ return this.qualification == null ? new Base[0] : this.qualification.toArray(new Base[this.qualification.size()]); // PractitionerQualificationComponent
1101        case -1035284522: /*communication*/ return this.communication == null ? new Base[0] : this.communication.toArray(new Base[this.communication.size()]); // CodeableConcept
1102        default: return super.getProperty(hash, name, checkValid);
1103        }
1104
1105      }
1106
1107      @Override
1108      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1109        switch (hash) {
1110        case -1618432855: // identifier
1111          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1112          return value;
1113        case -1422950650: // active
1114          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1115          return value;
1116        case 3373707: // name
1117          this.getName().add(TypeConvertor.castToHumanName(value)); // HumanName
1118          return value;
1119        case -1429363305: // telecom
1120          this.getTelecom().add(TypeConvertor.castToContactPoint(value)); // ContactPoint
1121          return value;
1122        case -1249512767: // gender
1123          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1124          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1125          return value;
1126        case -1210031859: // birthDate
1127          this.birthDate = TypeConvertor.castToDate(value); // DateType
1128          return value;
1129        case 561497972: // deceased
1130          this.deceased = TypeConvertor.castToType(value); // DataType
1131          return value;
1132        case -1147692044: // address
1133          this.getAddress().add(TypeConvertor.castToAddress(value)); // Address
1134          return value;
1135        case 106642994: // photo
1136          this.getPhoto().add(TypeConvertor.castToAttachment(value)); // Attachment
1137          return value;
1138        case -631333393: // qualification
1139          this.getQualification().add((PractitionerQualificationComponent) value); // PractitionerQualificationComponent
1140          return value;
1141        case -1035284522: // communication
1142          this.getCommunication().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1143          return value;
1144        default: return super.setProperty(hash, name, value);
1145        }
1146
1147      }
1148
1149      @Override
1150      public Base setProperty(String name, Base value) throws FHIRException {
1151        if (name.equals("identifier")) {
1152          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1153        } else if (name.equals("active")) {
1154          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1155        } else if (name.equals("name")) {
1156          this.getName().add(TypeConvertor.castToHumanName(value));
1157        } else if (name.equals("telecom")) {
1158          this.getTelecom().add(TypeConvertor.castToContactPoint(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("deceased[x]")) {
1165          this.deceased = TypeConvertor.castToType(value); // DataType
1166        } else if (name.equals("address")) {
1167          this.getAddress().add(TypeConvertor.castToAddress(value));
1168        } else if (name.equals("photo")) {
1169          this.getPhoto().add(TypeConvertor.castToAttachment(value));
1170        } else if (name.equals("qualification")) {
1171          this.getQualification().add((PractitionerQualificationComponent) value);
1172        } else if (name.equals("communication")) {
1173          this.getCommunication().add(TypeConvertor.castToCodeableConcept(value));
1174        } else
1175          return super.setProperty(name, value);
1176        return value;
1177      }
1178
1179      @Override
1180      public Base makeProperty(int hash, String name) throws FHIRException {
1181        switch (hash) {
1182        case -1618432855:  return addIdentifier(); 
1183        case -1422950650:  return getActiveElement();
1184        case 3373707:  return addName(); 
1185        case -1429363305:  return addTelecom(); 
1186        case -1249512767:  return getGenderElement();
1187        case -1210031859:  return getBirthDateElement();
1188        case -1311442804:  return getDeceased();
1189        case 561497972:  return getDeceased();
1190        case -1147692044:  return addAddress(); 
1191        case 106642994:  return addPhoto(); 
1192        case -631333393:  return addQualification(); 
1193        case -1035284522:  return addCommunication(); 
1194        default: return super.makeProperty(hash, name);
1195        }
1196
1197      }
1198
1199      @Override
1200      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1201        switch (hash) {
1202        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1203        case -1422950650: /*active*/ return new String[] {"boolean"};
1204        case 3373707: /*name*/ return new String[] {"HumanName"};
1205        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
1206        case -1249512767: /*gender*/ return new String[] {"code"};
1207        case -1210031859: /*birthDate*/ return new String[] {"date"};
1208        case 561497972: /*deceased*/ return new String[] {"boolean", "dateTime"};
1209        case -1147692044: /*address*/ return new String[] {"Address"};
1210        case 106642994: /*photo*/ return new String[] {"Attachment"};
1211        case -631333393: /*qualification*/ return new String[] {};
1212        case -1035284522: /*communication*/ return new String[] {"CodeableConcept"};
1213        default: return super.getTypesForProperty(hash, name);
1214        }
1215
1216      }
1217
1218      @Override
1219      public Base addChild(String name) throws FHIRException {
1220        if (name.equals("identifier")) {
1221          return addIdentifier();
1222        }
1223        else if (name.equals("active")) {
1224          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.active");
1225        }
1226        else if (name.equals("name")) {
1227          return addName();
1228        }
1229        else if (name.equals("telecom")) {
1230          return addTelecom();
1231        }
1232        else if (name.equals("gender")) {
1233          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.gender");
1234        }
1235        else if (name.equals("birthDate")) {
1236          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.birthDate");
1237        }
1238        else if (name.equals("deceasedBoolean")) {
1239          this.deceased = new BooleanType();
1240          return this.deceased;
1241        }
1242        else if (name.equals("deceasedDateTime")) {
1243          this.deceased = new DateTimeType();
1244          return this.deceased;
1245        }
1246        else if (name.equals("address")) {
1247          return addAddress();
1248        }
1249        else if (name.equals("photo")) {
1250          return addPhoto();
1251        }
1252        else if (name.equals("qualification")) {
1253          return addQualification();
1254        }
1255        else if (name.equals("communication")) {
1256          return addCommunication();
1257        }
1258        else
1259          return super.addChild(name);
1260      }
1261
1262  public String fhirType() {
1263    return "Practitioner";
1264
1265  }
1266
1267      public Practitioner copy() {
1268        Practitioner dst = new Practitioner();
1269        copyValues(dst);
1270        return dst;
1271      }
1272
1273      public void copyValues(Practitioner dst) {
1274        super.copyValues(dst);
1275        if (identifier != null) {
1276          dst.identifier = new ArrayList<Identifier>();
1277          for (Identifier i : identifier)
1278            dst.identifier.add(i.copy());
1279        };
1280        dst.active = active == null ? null : active.copy();
1281        if (name != null) {
1282          dst.name = new ArrayList<HumanName>();
1283          for (HumanName i : name)
1284            dst.name.add(i.copy());
1285        };
1286        if (telecom != null) {
1287          dst.telecom = new ArrayList<ContactPoint>();
1288          for (ContactPoint i : telecom)
1289            dst.telecom.add(i.copy());
1290        };
1291        dst.gender = gender == null ? null : gender.copy();
1292        dst.birthDate = birthDate == null ? null : birthDate.copy();
1293        dst.deceased = deceased == null ? null : deceased.copy();
1294        if (address != null) {
1295          dst.address = new ArrayList<Address>();
1296          for (Address i : address)
1297            dst.address.add(i.copy());
1298        };
1299        if (photo != null) {
1300          dst.photo = new ArrayList<Attachment>();
1301          for (Attachment i : photo)
1302            dst.photo.add(i.copy());
1303        };
1304        if (qualification != null) {
1305          dst.qualification = new ArrayList<PractitionerQualificationComponent>();
1306          for (PractitionerQualificationComponent i : qualification)
1307            dst.qualification.add(i.copy());
1308        };
1309        if (communication != null) {
1310          dst.communication = new ArrayList<CodeableConcept>();
1311          for (CodeableConcept i : communication)
1312            dst.communication.add(i.copy());
1313        };
1314      }
1315
1316      protected Practitioner typedCopy() {
1317        return copy();
1318      }
1319
1320      @Override
1321      public boolean equalsDeep(Base other_) {
1322        if (!super.equalsDeep(other_))
1323          return false;
1324        if (!(other_ instanceof Practitioner))
1325          return false;
1326        Practitioner o = (Practitioner) other_;
1327        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(name, o.name, true)
1328           && compareDeep(telecom, o.telecom, true) && compareDeep(gender, o.gender, true) && compareDeep(birthDate, o.birthDate, true)
1329           && compareDeep(deceased, o.deceased, true) && compareDeep(address, o.address, true) && compareDeep(photo, o.photo, true)
1330           && compareDeep(qualification, o.qualification, true) && compareDeep(communication, o.communication, true)
1331          ;
1332      }
1333
1334      @Override
1335      public boolean equalsShallow(Base other_) {
1336        if (!super.equalsShallow(other_))
1337          return false;
1338        if (!(other_ instanceof Practitioner))
1339          return false;
1340        Practitioner o = (Practitioner) other_;
1341        return compareValues(active, o.active, true) && compareValues(gender, o.gender, true) && compareValues(birthDate, o.birthDate, true)
1342          ;
1343      }
1344
1345      public boolean isEmpty() {
1346        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, name
1347          , telecom, gender, birthDate, deceased, address, photo, qualification, communication
1348          );
1349      }
1350
1351  @Override
1352  public ResourceType getResourceType() {
1353    return ResourceType.Practitioner;
1354   }
1355
1356 /**
1357   * Search parameter: <b>active</b>
1358   * <p>
1359   * Description: <b>Whether the practitioner record is active</b><br>
1360   * Type: <b>token</b><br>
1361   * Path: <b>Practitioner.active</b><br>
1362   * </p>
1363   */
1364  @SearchParamDefinition(name="active", path="Practitioner.active", description="Whether the practitioner record is active", type="token" )
1365  public static final String SP_ACTIVE = "active";
1366 /**
1367   * <b>Fluent Client</b> search parameter constant for <b>active</b>
1368   * <p>
1369   * Description: <b>Whether the practitioner record is active</b><br>
1370   * Type: <b>token</b><br>
1371   * Path: <b>Practitioner.active</b><br>
1372   * </p>
1373   */
1374  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
1375
1376 /**
1377   * Search parameter: <b>communication</b>
1378   * <p>
1379   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1380   * Type: <b>token</b><br>
1381   * Path: <b>Practitioner.communication</b><br>
1382   * </p>
1383   */
1384  @SearchParamDefinition(name="communication", path="Practitioner.communication", description="One of the languages that the practitioner can communicate with", type="token" )
1385  public static final String SP_COMMUNICATION = "communication";
1386 /**
1387   * <b>Fluent Client</b> search parameter constant for <b>communication</b>
1388   * <p>
1389   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1390   * Type: <b>token</b><br>
1391   * Path: <b>Practitioner.communication</b><br>
1392   * </p>
1393   */
1394  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMMUNICATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMMUNICATION);
1395
1396 /**
1397   * Search parameter: <b>death-date</b>
1398   * <p>
1399   * Description: <b>The date of death has been provided and satisfies this search value</b><br>
1400   * Type: <b>date</b><br>
1401   * Path: <b>(Practitioner.deceased as dateTime)</b><br>
1402   * </p>
1403   */
1404  @SearchParamDefinition(name="death-date", path="(Practitioner.deceased as dateTime)", description="The date of death has been provided and satisfies this search value", type="date" )
1405  public static final String SP_DEATH_DATE = "death-date";
1406 /**
1407   * <b>Fluent Client</b> search parameter constant for <b>death-date</b>
1408   * <p>
1409   * Description: <b>The date of death has been provided and satisfies this search value</b><br>
1410   * Type: <b>date</b><br>
1411   * Path: <b>(Practitioner.deceased as dateTime)</b><br>
1412   * </p>
1413   */
1414  public static final ca.uhn.fhir.rest.gclient.DateClientParam DEATH_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DEATH_DATE);
1415
1416 /**
1417   * Search parameter: <b>deceased</b>
1418   * <p>
1419   * Description: <b>This Practitioner has been marked as deceased, or has a death date entered</b><br>
1420   * Type: <b>token</b><br>
1421   * Path: <b>Practitioner.deceased.exists() and Practitioner.deceased != false</b><br>
1422   * </p>
1423   */
1424  @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" )
1425  public static final String SP_DECEASED = "deceased";
1426 /**
1427   * <b>Fluent Client</b> search parameter constant for <b>deceased</b>
1428   * <p>
1429   * Description: <b>This Practitioner has been marked as deceased, or has a death date entered</b><br>
1430   * Type: <b>token</b><br>
1431   * Path: <b>Practitioner.deceased.exists() and Practitioner.deceased != false</b><br>
1432   * </p>
1433   */
1434  public static final ca.uhn.fhir.rest.gclient.TokenClientParam DECEASED = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_DECEASED);
1435
1436 /**
1437   * Search parameter: <b>identifier</b>
1438   * <p>
1439   * Description: <b>A practitioner's Identifier</b><br>
1440   * Type: <b>token</b><br>
1441   * Path: <b>Practitioner.identifier | Practitioner.qualification.identifier</b><br>
1442   * </p>
1443   */
1444  @SearchParamDefinition(name="identifier", path="Practitioner.identifier | Practitioner.qualification.identifier", description="A practitioner's Identifier", type="token" )
1445  public static final String SP_IDENTIFIER = "identifier";
1446 /**
1447   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1448   * <p>
1449   * Description: <b>A practitioner's Identifier</b><br>
1450   * Type: <b>token</b><br>
1451   * Path: <b>Practitioner.identifier | Practitioner.qualification.identifier</b><br>
1452   * </p>
1453   */
1454  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1455
1456 /**
1457   * Search parameter: <b>name</b>
1458   * <p>
1459   * 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>
1460   * Type: <b>string</b><br>
1461   * Path: <b>Practitioner.name</b><br>
1462   * </p>
1463   */
1464  @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" )
1465  public static final String SP_NAME = "name";
1466 /**
1467   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1468   * <p>
1469   * 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>
1470   * Type: <b>string</b><br>
1471   * Path: <b>Practitioner.name</b><br>
1472   * </p>
1473   */
1474  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1475
1476 /**
1477   * Search parameter: <b>qualification-period</b>
1478   * <p>
1479   * Description: <b>The date(s) a qualification is valid for</b><br>
1480   * Type: <b>date</b><br>
1481   * Path: <b>Practitioner.qualification.period</b><br>
1482   * </p>
1483   */
1484  @SearchParamDefinition(name="qualification-period", path="Practitioner.qualification.period", description="The date(s) a qualification is valid for", type="date" )
1485  public static final String SP_QUALIFICATION_PERIOD = "qualification-period";
1486 /**
1487   * <b>Fluent Client</b> search parameter constant for <b>qualification-period</b>
1488   * <p>
1489   * Description: <b>The date(s) a qualification is valid for</b><br>
1490   * Type: <b>date</b><br>
1491   * Path: <b>Practitioner.qualification.period</b><br>
1492   * </p>
1493   */
1494  public static final ca.uhn.fhir.rest.gclient.DateClientParam QUALIFICATION_PERIOD = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_QUALIFICATION_PERIOD);
1495
1496 /**
1497   * Search parameter: <b>address-city</b>
1498   * <p>
1499   * Description: <b>Multiple Resources: 
1500
1501* [Patient](patient.html): A city specified in an address
1502* [Person](person.html): A city specified in an address
1503* [Practitioner](practitioner.html): A city specified in an address
1504* [RelatedPerson](relatedperson.html): A city specified in an address
1505</b><br>
1506   * Type: <b>string</b><br>
1507   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1508   * </p>
1509   */
1510  @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" )
1511  public static final String SP_ADDRESS_CITY = "address-city";
1512 /**
1513   * <b>Fluent Client</b> search parameter constant for <b>address-city</b>
1514   * <p>
1515   * Description: <b>Multiple Resources: 
1516
1517* [Patient](patient.html): A city specified in an address
1518* [Person](person.html): A city specified in an address
1519* [Practitioner](practitioner.html): A city specified in an address
1520* [RelatedPerson](relatedperson.html): A city specified in an address
1521</b><br>
1522   * Type: <b>string</b><br>
1523   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1524   * </p>
1525   */
1526  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_CITY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_CITY);
1527
1528 /**
1529   * Search parameter: <b>address-country</b>
1530   * <p>
1531   * Description: <b>Multiple Resources: 
1532
1533* [Patient](patient.html): A country specified in an address
1534* [Person](person.html): A country specified in an address
1535* [Practitioner](practitioner.html): A country specified in an address
1536* [RelatedPerson](relatedperson.html): A country specified in an address
1537</b><br>
1538   * Type: <b>string</b><br>
1539   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
1540   * </p>
1541   */
1542  @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" )
1543  public static final String SP_ADDRESS_COUNTRY = "address-country";
1544 /**
1545   * <b>Fluent Client</b> search parameter constant for <b>address-country</b>
1546   * <p>
1547   * Description: <b>Multiple Resources: 
1548
1549* [Patient](patient.html): A country specified in an address
1550* [Person](person.html): A country specified in an address
1551* [Practitioner](practitioner.html): A country specified in an address
1552* [RelatedPerson](relatedperson.html): A country specified in an address
1553</b><br>
1554   * Type: <b>string</b><br>
1555   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
1556   * </p>
1557   */
1558  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_COUNTRY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_COUNTRY);
1559
1560 /**
1561   * Search parameter: <b>address-postalcode</b>
1562   * <p>
1563   * Description: <b>Multiple Resources: 
1564
1565* [Patient](patient.html): A postalCode specified in an address
1566* [Person](person.html): A postal code specified in an address
1567* [Practitioner](practitioner.html): A postalCode specified in an address
1568* [RelatedPerson](relatedperson.html): A postal code specified in an address
1569</b><br>
1570   * Type: <b>string</b><br>
1571   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
1572   * </p>
1573   */
1574  @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" )
1575  public static final String SP_ADDRESS_POSTALCODE = "address-postalcode";
1576 /**
1577   * <b>Fluent Client</b> search parameter constant for <b>address-postalcode</b>
1578   * <p>
1579   * Description: <b>Multiple Resources: 
1580
1581* [Patient](patient.html): A postalCode specified in an address
1582* [Person](person.html): A postal code specified in an address
1583* [Practitioner](practitioner.html): A postalCode specified in an address
1584* [RelatedPerson](relatedperson.html): A postal code specified in an address
1585</b><br>
1586   * Type: <b>string</b><br>
1587   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
1588   * </p>
1589   */
1590  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_POSTALCODE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_POSTALCODE);
1591
1592 /**
1593   * Search parameter: <b>address-state</b>
1594   * <p>
1595   * Description: <b>Multiple Resources: 
1596
1597* [Patient](patient.html): A state specified in an address
1598* [Person](person.html): A state specified in an address
1599* [Practitioner](practitioner.html): A state specified in an address
1600* [RelatedPerson](relatedperson.html): A state specified in an address
1601</b><br>
1602   * Type: <b>string</b><br>
1603   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
1604   * </p>
1605   */
1606  @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" )
1607  public static final String SP_ADDRESS_STATE = "address-state";
1608 /**
1609   * <b>Fluent Client</b> search parameter constant for <b>address-state</b>
1610   * <p>
1611   * Description: <b>Multiple Resources: 
1612
1613* [Patient](patient.html): A state specified in an address
1614* [Person](person.html): A state specified in an address
1615* [Practitioner](practitioner.html): A state specified in an address
1616* [RelatedPerson](relatedperson.html): A state specified in an address
1617</b><br>
1618   * Type: <b>string</b><br>
1619   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
1620   * </p>
1621   */
1622  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_STATE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_STATE);
1623
1624 /**
1625   * Search parameter: <b>address-use</b>
1626   * <p>
1627   * Description: <b>Multiple Resources: 
1628
1629* [Patient](patient.html): A use code specified in an address
1630* [Person](person.html): A use code specified in an address
1631* [Practitioner](practitioner.html): A use code specified in an address
1632* [RelatedPerson](relatedperson.html): A use code specified in an address
1633</b><br>
1634   * Type: <b>token</b><br>
1635   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
1636   * </p>
1637   */
1638  @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" )
1639  public static final String SP_ADDRESS_USE = "address-use";
1640 /**
1641   * <b>Fluent Client</b> search parameter constant for <b>address-use</b>
1642   * <p>
1643   * Description: <b>Multiple Resources: 
1644
1645* [Patient](patient.html): A use code specified in an address
1646* [Person](person.html): A use code specified in an address
1647* [Practitioner](practitioner.html): A use code specified in an address
1648* [RelatedPerson](relatedperson.html): A use code specified in an address
1649</b><br>
1650   * Type: <b>token</b><br>
1651   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
1652   * </p>
1653   */
1654  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDRESS_USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDRESS_USE);
1655
1656 /**
1657   * Search parameter: <b>address</b>
1658   * <p>
1659   * Description: <b>Multiple Resources: 
1660
1661* [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
1662* [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
1663* [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
1664* [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
1665</b><br>
1666   * Type: <b>string</b><br>
1667   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
1668   * </p>
1669   */
1670  @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" )
1671  public static final String SP_ADDRESS = "address";
1672 /**
1673   * <b>Fluent Client</b> search parameter constant for <b>address</b>
1674   * <p>
1675   * Description: <b>Multiple Resources: 
1676
1677* [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
1678* [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
1679* [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
1680* [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
1681</b><br>
1682   * Type: <b>string</b><br>
1683   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
1684   * </p>
1685   */
1686  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS);
1687
1688 /**
1689   * Search parameter: <b>email</b>
1690   * <p>
1691   * Description: <b>Multiple Resources: 
1692
1693* [Patient](patient.html): A value in an email contact
1694* [Person](person.html): A value in an email contact
1695* [Practitioner](practitioner.html): A value in an email contact
1696* [PractitionerRole](practitionerrole.html): A value in an email contact
1697* [RelatedPerson](relatedperson.html): A value in an email contact
1698</b><br>
1699   * Type: <b>token</b><br>
1700   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.contact.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1701   * </p>
1702   */
1703  @SearchParamDefinition(name="email", path="Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.contact.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" )
1704  public static final String SP_EMAIL = "email";
1705 /**
1706   * <b>Fluent Client</b> search parameter constant for <b>email</b>
1707   * <p>
1708   * Description: <b>Multiple Resources: 
1709
1710* [Patient](patient.html): A value in an email contact
1711* [Person](person.html): A value in an email contact
1712* [Practitioner](practitioner.html): A value in an email contact
1713* [PractitionerRole](practitionerrole.html): A value in an email contact
1714* [RelatedPerson](relatedperson.html): A value in an email contact
1715</b><br>
1716   * Type: <b>token</b><br>
1717   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.contact.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1718   * </p>
1719   */
1720  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
1721
1722 /**
1723   * Search parameter: <b>family</b>
1724   * <p>
1725   * Description: <b>Multiple Resources: 
1726
1727* [Patient](patient.html): A portion of the family name of the patient
1728* [Practitioner](practitioner.html): A portion of the family name
1729</b><br>
1730   * Type: <b>string</b><br>
1731   * Path: <b>Patient.name.family | Practitioner.name.family</b><br>
1732   * </p>
1733   */
1734  @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" )
1735  public static final String SP_FAMILY = "family";
1736 /**
1737   * <b>Fluent Client</b> search parameter constant for <b>family</b>
1738   * <p>
1739   * Description: <b>Multiple Resources: 
1740
1741* [Patient](patient.html): A portion of the family name of the patient
1742* [Practitioner](practitioner.html): A portion of the family name
1743</b><br>
1744   * Type: <b>string</b><br>
1745   * Path: <b>Patient.name.family | Practitioner.name.family</b><br>
1746   * </p>
1747   */
1748  public static final ca.uhn.fhir.rest.gclient.StringClientParam FAMILY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_FAMILY);
1749
1750 /**
1751   * Search parameter: <b>gender</b>
1752   * <p>
1753   * Description: <b>Multiple Resources: 
1754
1755* [Patient](patient.html): Gender of the patient
1756* [Person](person.html): The gender of the person
1757* [Practitioner](practitioner.html): Gender of the practitioner
1758* [RelatedPerson](relatedperson.html): Gender of the related person
1759</b><br>
1760   * Type: <b>token</b><br>
1761   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
1762   * </p>
1763   */
1764  @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" )
1765  public static final String SP_GENDER = "gender";
1766 /**
1767   * <b>Fluent Client</b> search parameter constant for <b>gender</b>
1768   * <p>
1769   * Description: <b>Multiple Resources: 
1770
1771* [Patient](patient.html): Gender of the patient
1772* [Person](person.html): The gender of the person
1773* [Practitioner](practitioner.html): Gender of the practitioner
1774* [RelatedPerson](relatedperson.html): Gender of the related person
1775</b><br>
1776   * Type: <b>token</b><br>
1777   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
1778   * </p>
1779   */
1780  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GENDER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GENDER);
1781
1782 /**
1783   * Search parameter: <b>given</b>
1784   * <p>
1785   * Description: <b>Multiple Resources: 
1786
1787* [Patient](patient.html): A portion of the given name of the patient
1788* [Practitioner](practitioner.html): A portion of the given name
1789</b><br>
1790   * Type: <b>string</b><br>
1791   * Path: <b>Patient.name.given | Practitioner.name.given</b><br>
1792   * </p>
1793   */
1794  @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" )
1795  public static final String SP_GIVEN = "given";
1796 /**
1797   * <b>Fluent Client</b> search parameter constant for <b>given</b>
1798   * <p>
1799   * Description: <b>Multiple Resources: 
1800
1801* [Patient](patient.html): A portion of the given name of the patient
1802* [Practitioner](practitioner.html): A portion of the given name
1803</b><br>
1804   * Type: <b>string</b><br>
1805   * Path: <b>Patient.name.given | Practitioner.name.given</b><br>
1806   * </p>
1807   */
1808  public static final ca.uhn.fhir.rest.gclient.StringClientParam GIVEN = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_GIVEN);
1809
1810 /**
1811   * Search parameter: <b>phone</b>
1812   * <p>
1813   * Description: <b>Multiple Resources: 
1814
1815* [Patient](patient.html): A value in a phone contact
1816* [Person](person.html): A value in a phone contact
1817* [Practitioner](practitioner.html): A value in a phone contact
1818* [PractitionerRole](practitionerrole.html): A value in a phone contact
1819* [RelatedPerson](relatedperson.html): A value in a phone contact
1820</b><br>
1821   * Type: <b>token</b><br>
1822   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.contact.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1823   * </p>
1824   */
1825  @SearchParamDefinition(name="phone", path="Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.contact.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" )
1826  public static final String SP_PHONE = "phone";
1827 /**
1828   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
1829   * <p>
1830   * Description: <b>Multiple Resources: 
1831
1832* [Patient](patient.html): A value in a phone contact
1833* [Person](person.html): A value in a phone contact
1834* [Practitioner](practitioner.html): A value in a phone contact
1835* [PractitionerRole](practitionerrole.html): A value in a phone contact
1836* [RelatedPerson](relatedperson.html): A value in a phone contact
1837</b><br>
1838   * Type: <b>token</b><br>
1839   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.contact.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1840   * </p>
1841   */
1842  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
1843
1844 /**
1845   * Search parameter: <b>phonetic</b>
1846   * <p>
1847   * Description: <b>Multiple Resources: 
1848
1849* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
1850* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
1851* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
1852* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
1853</b><br>
1854   * Type: <b>string</b><br>
1855   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
1856   * </p>
1857   */
1858  @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" )
1859  public static final String SP_PHONETIC = "phonetic";
1860 /**
1861   * <b>Fluent Client</b> search parameter constant for <b>phonetic</b>
1862   * <p>
1863   * Description: <b>Multiple Resources: 
1864
1865* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
1866* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
1867* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
1868* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
1869</b><br>
1870   * Type: <b>string</b><br>
1871   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
1872   * </p>
1873   */
1874  public static final ca.uhn.fhir.rest.gclient.StringClientParam PHONETIC = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PHONETIC);
1875
1876 /**
1877   * Search parameter: <b>telecom</b>
1878   * <p>
1879   * Description: <b>Multiple Resources: 
1880
1881* [Patient](patient.html): The value in any kind of telecom details of the patient
1882* [Person](person.html): The value in any kind of contact
1883* [Practitioner](practitioner.html): The value in any kind of contact
1884* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1885* [RelatedPerson](relatedperson.html): The value in any kind of contact
1886</b><br>
1887   * Type: <b>token</b><br>
1888   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.contact.telecom | RelatedPerson.telecom</b><br>
1889   * </p>
1890   */
1891  @SearchParamDefinition(name="telecom", path="Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.contact.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" )
1892  public static final String SP_TELECOM = "telecom";
1893 /**
1894   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
1895   * <p>
1896   * Description: <b>Multiple Resources: 
1897
1898* [Patient](patient.html): The value in any kind of telecom details of the patient
1899* [Person](person.html): The value in any kind of contact
1900* [Practitioner](practitioner.html): The value in any kind of contact
1901* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1902* [RelatedPerson](relatedperson.html): The value in any kind of contact
1903</b><br>
1904   * Type: <b>token</b><br>
1905   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.contact.telecom | RelatedPerson.telecom</b><br>
1906   * </p>
1907   */
1908  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
1909
1910
1911}
1912