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