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