001package org.hl7.fhir.dstu3.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 Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.dstu3.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> childrenList) {
251          super.listChildren(childrenList);
252          childrenList.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          childrenList.add(new Property("code", "CodeableConcept", "Coded representation of the qualification.", 0, java.lang.Integer.MAX_VALUE, code));
254          childrenList.add(new Property("period", "Period", "Period during which the qualification is valid.", 0, java.lang.Integer.MAX_VALUE, period));
255          childrenList.add(new Property("issuer", "Reference(Organization)", "Organization that regulates and issues the qualification.", 0, java.lang.Integer.MAX_VALUE, issuer));
256        }
257
258      @Override
259      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
260        switch (hash) {
261        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
262        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
263        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
264        case -1179159879: /*issuer*/ return this.issuer == null ? new Base[0] : new Base[] {this.issuer}; // Reference
265        default: return super.getProperty(hash, name, checkValid);
266        }
267
268      }
269
270      @Override
271      public Base setProperty(int hash, String name, Base value) throws FHIRException {
272        switch (hash) {
273        case -1618432855: // identifier
274          this.getIdentifier().add(castToIdentifier(value)); // Identifier
275          return value;
276        case 3059181: // code
277          this.code = castToCodeableConcept(value); // CodeableConcept
278          return value;
279        case -991726143: // period
280          this.period = castToPeriod(value); // Period
281          return value;
282        case -1179159879: // issuer
283          this.issuer = castToReference(value); // Reference
284          return value;
285        default: return super.setProperty(hash, name, value);
286        }
287
288      }
289
290      @Override
291      public Base setProperty(String name, Base value) throws FHIRException {
292        if (name.equals("identifier")) {
293          this.getIdentifier().add(castToIdentifier(value));
294        } else if (name.equals("code")) {
295          this.code = castToCodeableConcept(value); // CodeableConcept
296        } else if (name.equals("period")) {
297          this.period = castToPeriod(value); // Period
298        } else if (name.equals("issuer")) {
299          this.issuer = castToReference(value); // Reference
300        } else
301          return super.setProperty(name, value);
302        return value;
303      }
304
305      @Override
306      public Base makeProperty(int hash, String name) throws FHIRException {
307        switch (hash) {
308        case -1618432855:  return addIdentifier(); 
309        case 3059181:  return getCode(); 
310        case -991726143:  return getPeriod(); 
311        case -1179159879:  return getIssuer(); 
312        default: return super.makeProperty(hash, name);
313        }
314
315      }
316
317      @Override
318      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
319        switch (hash) {
320        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
321        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
322        case -991726143: /*period*/ return new String[] {"Period"};
323        case -1179159879: /*issuer*/ return new String[] {"Reference"};
324        default: return super.getTypesForProperty(hash, name);
325        }
326
327      }
328
329      @Override
330      public Base addChild(String name) throws FHIRException {
331        if (name.equals("identifier")) {
332          return addIdentifier();
333        }
334        else if (name.equals("code")) {
335          this.code = new CodeableConcept();
336          return this.code;
337        }
338        else if (name.equals("period")) {
339          this.period = new Period();
340          return this.period;
341        }
342        else if (name.equals("issuer")) {
343          this.issuer = new Reference();
344          return this.issuer;
345        }
346        else
347          return super.addChild(name);
348      }
349
350      public PractitionerQualificationComponent copy() {
351        PractitionerQualificationComponent dst = new PractitionerQualificationComponent();
352        copyValues(dst);
353        if (identifier != null) {
354          dst.identifier = new ArrayList<Identifier>();
355          for (Identifier i : identifier)
356            dst.identifier.add(i.copy());
357        };
358        dst.code = code == null ? null : code.copy();
359        dst.period = period == null ? null : period.copy();
360        dst.issuer = issuer == null ? null : issuer.copy();
361        return dst;
362      }
363
364      @Override
365      public boolean equalsDeep(Base other) {
366        if (!super.equalsDeep(other))
367          return false;
368        if (!(other instanceof PractitionerQualificationComponent))
369          return false;
370        PractitionerQualificationComponent o = (PractitionerQualificationComponent) other;
371        return compareDeep(identifier, o.identifier, true) && compareDeep(code, o.code, true) && compareDeep(period, o.period, true)
372           && compareDeep(issuer, o.issuer, true);
373      }
374
375      @Override
376      public boolean equalsShallow(Base other) {
377        if (!super.equalsShallow(other))
378          return false;
379        if (!(other instanceof PractitionerQualificationComponent))
380          return false;
381        PractitionerQualificationComponent o = (PractitionerQualificationComponent) other;
382        return true;
383      }
384
385      public boolean isEmpty() {
386        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, code, period
387          , issuer);
388      }
389
390  public String fhirType() {
391    return "Practitioner.qualification";
392
393  }
394
395  }
396
397    /**
398     * An identifier that applies to this person in this role.
399     */
400    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
401    @Description(shortDefinition="A identifier for the person as this agent", formalDefinition="An identifier that applies to this person in this role." )
402    protected List<Identifier> identifier;
403
404    /**
405     * Whether this practitioner's record is in active use.
406     */
407    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=true)
408    @Description(shortDefinition="Whether this practitioner's record is in active use", formalDefinition="Whether this practitioner's record is in active use." )
409    protected BooleanType active;
410
411    /**
412     * The name(s) associated with the practitioner.
413     */
414    @Child(name = "name", type = {HumanName.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
415    @Description(shortDefinition="The name(s) associated with the practitioner", formalDefinition="The name(s) associated with the practitioner." )
416    protected List<HumanName> name;
417
418    /**
419     * A contact detail for the practitioner, e.g. a telephone number or an email address.
420     */
421    @Child(name = "telecom", type = {ContactPoint.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
422    @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." )
423    protected List<ContactPoint> telecom;
424
425    /**
426     * Address(es) of the practitioner that are not role specific (typically home address). 
427Work addresses are not typically entered in this property as they are usually role dependent.
428     */
429    @Child(name = "address", type = {Address.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
430    @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." )
431    protected List<Address> address;
432
433    /**
434     * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
435     */
436    @Child(name = "gender", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=true)
437    @Description(shortDefinition="male | female | other | unknown", formalDefinition="Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes." )
438    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/administrative-gender")
439    protected Enumeration<AdministrativeGender> gender;
440
441    /**
442     * The date of birth for the practitioner.
443     */
444    @Child(name = "birthDate", type = {DateType.class}, order=6, min=0, max=1, modifier=false, summary=true)
445    @Description(shortDefinition="The date  on which the practitioner was born", formalDefinition="The date of birth for the practitioner." )
446    protected DateType birthDate;
447
448    /**
449     * Image of the person.
450     */
451    @Child(name = "photo", type = {Attachment.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
452    @Description(shortDefinition="Image of the person", formalDefinition="Image of the person." )
453    protected List<Attachment> photo;
454
455    /**
456     * Qualifications obtained by training and certification.
457     */
458    @Child(name = "qualification", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
459    @Description(shortDefinition="Qualifications obtained by training and certification", formalDefinition="Qualifications obtained by training and certification." )
460    protected List<PractitionerQualificationComponent> qualification;
461
462    /**
463     * A language the practitioner is able to use in patient communication.
464     */
465    @Child(name = "communication", type = {CodeableConcept.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
466    @Description(shortDefinition="A language the practitioner is able to use in patient communication", formalDefinition="A language the practitioner is able to use in patient communication." )
467    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
468    protected List<CodeableConcept> communication;
469
470    private static final long serialVersionUID = 2128349259L;
471
472  /**
473   * Constructor
474   */
475    public Practitioner() {
476      super();
477    }
478
479    /**
480     * @return {@link #identifier} (An identifier that applies to this person in this role.)
481     */
482    public List<Identifier> getIdentifier() { 
483      if (this.identifier == null)
484        this.identifier = new ArrayList<Identifier>();
485      return this.identifier;
486    }
487
488    /**
489     * @return Returns a reference to <code>this</code> for easy method chaining
490     */
491    public Practitioner setIdentifier(List<Identifier> theIdentifier) { 
492      this.identifier = theIdentifier;
493      return this;
494    }
495
496    public boolean hasIdentifier() { 
497      if (this.identifier == null)
498        return false;
499      for (Identifier item : this.identifier)
500        if (!item.isEmpty())
501          return true;
502      return false;
503    }
504
505    public Identifier addIdentifier() { //3
506      Identifier t = new Identifier();
507      if (this.identifier == null)
508        this.identifier = new ArrayList<Identifier>();
509      this.identifier.add(t);
510      return t;
511    }
512
513    public Practitioner addIdentifier(Identifier t) { //3
514      if (t == null)
515        return this;
516      if (this.identifier == null)
517        this.identifier = new ArrayList<Identifier>();
518      this.identifier.add(t);
519      return this;
520    }
521
522    /**
523     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
524     */
525    public Identifier getIdentifierFirstRep() { 
526      if (getIdentifier().isEmpty()) {
527        addIdentifier();
528      }
529      return getIdentifier().get(0);
530    }
531
532    /**
533     * @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
534     */
535    public BooleanType getActiveElement() { 
536      if (this.active == null)
537        if (Configuration.errorOnAutoCreate())
538          throw new Error("Attempt to auto-create Practitioner.active");
539        else if (Configuration.doAutoCreate())
540          this.active = new BooleanType(); // bb
541      return this.active;
542    }
543
544    public boolean hasActiveElement() { 
545      return this.active != null && !this.active.isEmpty();
546    }
547
548    public boolean hasActive() { 
549      return this.active != null && !this.active.isEmpty();
550    }
551
552    /**
553     * @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
554     */
555    public Practitioner setActiveElement(BooleanType value) { 
556      this.active = value;
557      return this;
558    }
559
560    /**
561     * @return Whether this practitioner's record is in active use.
562     */
563    public boolean getActive() { 
564      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
565    }
566
567    /**
568     * @param value Whether this practitioner's record is in active use.
569     */
570    public Practitioner setActive(boolean value) { 
571        if (this.active == null)
572          this.active = new BooleanType();
573        this.active.setValue(value);
574      return this;
575    }
576
577    /**
578     * @return {@link #name} (The name(s) associated with the practitioner.)
579     */
580    public List<HumanName> getName() { 
581      if (this.name == null)
582        this.name = new ArrayList<HumanName>();
583      return this.name;
584    }
585
586    /**
587     * @return Returns a reference to <code>this</code> for easy method chaining
588     */
589    public Practitioner setName(List<HumanName> theName) { 
590      this.name = theName;
591      return this;
592    }
593
594    public boolean hasName() { 
595      if (this.name == null)
596        return false;
597      for (HumanName item : this.name)
598        if (!item.isEmpty())
599          return true;
600      return false;
601    }
602
603    public HumanName addName() { //3
604      HumanName t = new HumanName();
605      if (this.name == null)
606        this.name = new ArrayList<HumanName>();
607      this.name.add(t);
608      return t;
609    }
610
611    public Practitioner addName(HumanName t) { //3
612      if (t == null)
613        return this;
614      if (this.name == null)
615        this.name = new ArrayList<HumanName>();
616      this.name.add(t);
617      return this;
618    }
619
620    /**
621     * @return The first repetition of repeating field {@link #name}, creating it if it does not already exist
622     */
623    public HumanName getNameFirstRep() { 
624      if (getName().isEmpty()) {
625        addName();
626      }
627      return getName().get(0);
628    }
629
630    /**
631     * @return {@link #telecom} (A contact detail for the practitioner, e.g. a telephone number or an email address.)
632     */
633    public List<ContactPoint> getTelecom() { 
634      if (this.telecom == null)
635        this.telecom = new ArrayList<ContactPoint>();
636      return this.telecom;
637    }
638
639    /**
640     * @return Returns a reference to <code>this</code> for easy method chaining
641     */
642    public Practitioner setTelecom(List<ContactPoint> theTelecom) { 
643      this.telecom = theTelecom;
644      return this;
645    }
646
647    public boolean hasTelecom() { 
648      if (this.telecom == null)
649        return false;
650      for (ContactPoint item : this.telecom)
651        if (!item.isEmpty())
652          return true;
653      return false;
654    }
655
656    public ContactPoint addTelecom() { //3
657      ContactPoint t = new ContactPoint();
658      if (this.telecom == null)
659        this.telecom = new ArrayList<ContactPoint>();
660      this.telecom.add(t);
661      return t;
662    }
663
664    public Practitioner addTelecom(ContactPoint t) { //3
665      if (t == null)
666        return this;
667      if (this.telecom == null)
668        this.telecom = new ArrayList<ContactPoint>();
669      this.telecom.add(t);
670      return this;
671    }
672
673    /**
674     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist
675     */
676    public ContactPoint getTelecomFirstRep() { 
677      if (getTelecom().isEmpty()) {
678        addTelecom();
679      }
680      return getTelecom().get(0);
681    }
682
683    /**
684     * @return {@link #address} (Address(es) of the practitioner that are not role specific (typically home address). 
685Work addresses are not typically entered in this property as they are usually role dependent.)
686     */
687    public List<Address> getAddress() { 
688      if (this.address == null)
689        this.address = new ArrayList<Address>();
690      return this.address;
691    }
692
693    /**
694     * @return Returns a reference to <code>this</code> for easy method chaining
695     */
696    public Practitioner setAddress(List<Address> theAddress) { 
697      this.address = theAddress;
698      return this;
699    }
700
701    public boolean hasAddress() { 
702      if (this.address == null)
703        return false;
704      for (Address item : this.address)
705        if (!item.isEmpty())
706          return true;
707      return false;
708    }
709
710    public Address addAddress() { //3
711      Address t = new Address();
712      if (this.address == null)
713        this.address = new ArrayList<Address>();
714      this.address.add(t);
715      return t;
716    }
717
718    public Practitioner addAddress(Address t) { //3
719      if (t == null)
720        return this;
721      if (this.address == null)
722        this.address = new ArrayList<Address>();
723      this.address.add(t);
724      return this;
725    }
726
727    /**
728     * @return The first repetition of repeating field {@link #address}, creating it if it does not already exist
729     */
730    public Address getAddressFirstRep() { 
731      if (getAddress().isEmpty()) {
732        addAddress();
733      }
734      return getAddress().get(0);
735    }
736
737    /**
738     * @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
739     */
740    public Enumeration<AdministrativeGender> getGenderElement() { 
741      if (this.gender == null)
742        if (Configuration.errorOnAutoCreate())
743          throw new Error("Attempt to auto-create Practitioner.gender");
744        else if (Configuration.doAutoCreate())
745          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory()); // bb
746      return this.gender;
747    }
748
749    public boolean hasGenderElement() { 
750      return this.gender != null && !this.gender.isEmpty();
751    }
752
753    public boolean hasGender() { 
754      return this.gender != null && !this.gender.isEmpty();
755    }
756
757    /**
758     * @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
759     */
760    public Practitioner setGenderElement(Enumeration<AdministrativeGender> value) { 
761      this.gender = value;
762      return this;
763    }
764
765    /**
766     * @return Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
767     */
768    public AdministrativeGender getGender() { 
769      return this.gender == null ? null : this.gender.getValue();
770    }
771
772    /**
773     * @param value Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
774     */
775    public Practitioner setGender(AdministrativeGender value) { 
776      if (value == null)
777        this.gender = null;
778      else {
779        if (this.gender == null)
780          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory());
781        this.gender.setValue(value);
782      }
783      return this;
784    }
785
786    /**
787     * @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
788     */
789    public DateType getBirthDateElement() { 
790      if (this.birthDate == null)
791        if (Configuration.errorOnAutoCreate())
792          throw new Error("Attempt to auto-create Practitioner.birthDate");
793        else if (Configuration.doAutoCreate())
794          this.birthDate = new DateType(); // bb
795      return this.birthDate;
796    }
797
798    public boolean hasBirthDateElement() { 
799      return this.birthDate != null && !this.birthDate.isEmpty();
800    }
801
802    public boolean hasBirthDate() { 
803      return this.birthDate != null && !this.birthDate.isEmpty();
804    }
805
806    /**
807     * @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
808     */
809    public Practitioner setBirthDateElement(DateType value) { 
810      this.birthDate = value;
811      return this;
812    }
813
814    /**
815     * @return The date of birth for the practitioner.
816     */
817    public Date getBirthDate() { 
818      return this.birthDate == null ? null : this.birthDate.getValue();
819    }
820
821    /**
822     * @param value The date of birth for the practitioner.
823     */
824    public Practitioner setBirthDate(Date value) { 
825      if (value == null)
826        this.birthDate = null;
827      else {
828        if (this.birthDate == null)
829          this.birthDate = new DateType();
830        this.birthDate.setValue(value);
831      }
832      return this;
833    }
834
835    /**
836     * @return {@link #photo} (Image of the person.)
837     */
838    public List<Attachment> getPhoto() { 
839      if (this.photo == null)
840        this.photo = new ArrayList<Attachment>();
841      return this.photo;
842    }
843
844    /**
845     * @return Returns a reference to <code>this</code> for easy method chaining
846     */
847    public Practitioner setPhoto(List<Attachment> thePhoto) { 
848      this.photo = thePhoto;
849      return this;
850    }
851
852    public boolean hasPhoto() { 
853      if (this.photo == null)
854        return false;
855      for (Attachment item : this.photo)
856        if (!item.isEmpty())
857          return true;
858      return false;
859    }
860
861    public Attachment addPhoto() { //3
862      Attachment t = new Attachment();
863      if (this.photo == null)
864        this.photo = new ArrayList<Attachment>();
865      this.photo.add(t);
866      return t;
867    }
868
869    public Practitioner addPhoto(Attachment t) { //3
870      if (t == null)
871        return this;
872      if (this.photo == null)
873        this.photo = new ArrayList<Attachment>();
874      this.photo.add(t);
875      return this;
876    }
877
878    /**
879     * @return The first repetition of repeating field {@link #photo}, creating it if it does not already exist
880     */
881    public Attachment getPhotoFirstRep() { 
882      if (getPhoto().isEmpty()) {
883        addPhoto();
884      }
885      return getPhoto().get(0);
886    }
887
888    /**
889     * @return {@link #qualification} (Qualifications obtained by training and certification.)
890     */
891    public List<PractitionerQualificationComponent> getQualification() { 
892      if (this.qualification == null)
893        this.qualification = new ArrayList<PractitionerQualificationComponent>();
894      return this.qualification;
895    }
896
897    /**
898     * @return Returns a reference to <code>this</code> for easy method chaining
899     */
900    public Practitioner setQualification(List<PractitionerQualificationComponent> theQualification) { 
901      this.qualification = theQualification;
902      return this;
903    }
904
905    public boolean hasQualification() { 
906      if (this.qualification == null)
907        return false;
908      for (PractitionerQualificationComponent item : this.qualification)
909        if (!item.isEmpty())
910          return true;
911      return false;
912    }
913
914    public PractitionerQualificationComponent addQualification() { //3
915      PractitionerQualificationComponent t = new PractitionerQualificationComponent();
916      if (this.qualification == null)
917        this.qualification = new ArrayList<PractitionerQualificationComponent>();
918      this.qualification.add(t);
919      return t;
920    }
921
922    public Practitioner addQualification(PractitionerQualificationComponent t) { //3
923      if (t == null)
924        return this;
925      if (this.qualification == null)
926        this.qualification = new ArrayList<PractitionerQualificationComponent>();
927      this.qualification.add(t);
928      return this;
929    }
930
931    /**
932     * @return The first repetition of repeating field {@link #qualification}, creating it if it does not already exist
933     */
934    public PractitionerQualificationComponent getQualificationFirstRep() { 
935      if (getQualification().isEmpty()) {
936        addQualification();
937      }
938      return getQualification().get(0);
939    }
940
941    /**
942     * @return {@link #communication} (A language the practitioner is able to use in patient communication.)
943     */
944    public List<CodeableConcept> getCommunication() { 
945      if (this.communication == null)
946        this.communication = new ArrayList<CodeableConcept>();
947      return this.communication;
948    }
949
950    /**
951     * @return Returns a reference to <code>this</code> for easy method chaining
952     */
953    public Practitioner setCommunication(List<CodeableConcept> theCommunication) { 
954      this.communication = theCommunication;
955      return this;
956    }
957
958    public boolean hasCommunication() { 
959      if (this.communication == null)
960        return false;
961      for (CodeableConcept item : this.communication)
962        if (!item.isEmpty())
963          return true;
964      return false;
965    }
966
967    public CodeableConcept addCommunication() { //3
968      CodeableConcept t = new CodeableConcept();
969      if (this.communication == null)
970        this.communication = new ArrayList<CodeableConcept>();
971      this.communication.add(t);
972      return t;
973    }
974
975    public Practitioner addCommunication(CodeableConcept t) { //3
976      if (t == null)
977        return this;
978      if (this.communication == null)
979        this.communication = new ArrayList<CodeableConcept>();
980      this.communication.add(t);
981      return this;
982    }
983
984    /**
985     * @return The first repetition of repeating field {@link #communication}, creating it if it does not already exist
986     */
987    public CodeableConcept getCommunicationFirstRep() { 
988      if (getCommunication().isEmpty()) {
989        addCommunication();
990      }
991      return getCommunication().get(0);
992    }
993
994      protected void listChildren(List<Property> childrenList) {
995        super.listChildren(childrenList);
996        childrenList.add(new Property("identifier", "Identifier", "An identifier that applies to this person in this role.", 0, java.lang.Integer.MAX_VALUE, identifier));
997        childrenList.add(new Property("active", "boolean", "Whether this practitioner's record is in active use.", 0, java.lang.Integer.MAX_VALUE, active));
998        childrenList.add(new Property("name", "HumanName", "The name(s) associated with the practitioner.", 0, java.lang.Integer.MAX_VALUE, name));
999        childrenList.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));
1000        childrenList.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));
1001        childrenList.add(new Property("gender", "code", "Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.", 0, java.lang.Integer.MAX_VALUE, gender));
1002        childrenList.add(new Property("birthDate", "date", "The date of birth for the practitioner.", 0, java.lang.Integer.MAX_VALUE, birthDate));
1003        childrenList.add(new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo));
1004        childrenList.add(new Property("qualification", "", "Qualifications obtained by training and certification.", 0, java.lang.Integer.MAX_VALUE, qualification));
1005        childrenList.add(new Property("communication", "CodeableConcept", "A language the practitioner is able to use in patient communication.", 0, java.lang.Integer.MAX_VALUE, communication));
1006      }
1007
1008      @Override
1009      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1010        switch (hash) {
1011        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1012        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1013        case 3373707: /*name*/ return this.name == null ? new Base[0] : this.name.toArray(new Base[this.name.size()]); // HumanName
1014        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
1015        case -1147692044: /*address*/ return this.address == null ? new Base[0] : this.address.toArray(new Base[this.address.size()]); // Address
1016        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // Enumeration<AdministrativeGender>
1017        case -1210031859: /*birthDate*/ return this.birthDate == null ? new Base[0] : new Base[] {this.birthDate}; // DateType
1018        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : this.photo.toArray(new Base[this.photo.size()]); // Attachment
1019        case -631333393: /*qualification*/ return this.qualification == null ? new Base[0] : this.qualification.toArray(new Base[this.qualification.size()]); // PractitionerQualificationComponent
1020        case -1035284522: /*communication*/ return this.communication == null ? new Base[0] : this.communication.toArray(new Base[this.communication.size()]); // CodeableConcept
1021        default: return super.getProperty(hash, name, checkValid);
1022        }
1023
1024      }
1025
1026      @Override
1027      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1028        switch (hash) {
1029        case -1618432855: // identifier
1030          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1031          return value;
1032        case -1422950650: // active
1033          this.active = castToBoolean(value); // BooleanType
1034          return value;
1035        case 3373707: // name
1036          this.getName().add(castToHumanName(value)); // HumanName
1037          return value;
1038        case -1429363305: // telecom
1039          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
1040          return value;
1041        case -1147692044: // address
1042          this.getAddress().add(castToAddress(value)); // Address
1043          return value;
1044        case -1249512767: // gender
1045          value = new AdministrativeGenderEnumFactory().fromType(castToCode(value));
1046          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1047          return value;
1048        case -1210031859: // birthDate
1049          this.birthDate = castToDate(value); // DateType
1050          return value;
1051        case 106642994: // photo
1052          this.getPhoto().add(castToAttachment(value)); // Attachment
1053          return value;
1054        case -631333393: // qualification
1055          this.getQualification().add((PractitionerQualificationComponent) value); // PractitionerQualificationComponent
1056          return value;
1057        case -1035284522: // communication
1058          this.getCommunication().add(castToCodeableConcept(value)); // CodeableConcept
1059          return value;
1060        default: return super.setProperty(hash, name, value);
1061        }
1062
1063      }
1064
1065      @Override
1066      public Base setProperty(String name, Base value) throws FHIRException {
1067        if (name.equals("identifier")) {
1068          this.getIdentifier().add(castToIdentifier(value));
1069        } else if (name.equals("active")) {
1070          this.active = castToBoolean(value); // BooleanType
1071        } else if (name.equals("name")) {
1072          this.getName().add(castToHumanName(value));
1073        } else if (name.equals("telecom")) {
1074          this.getTelecom().add(castToContactPoint(value));
1075        } else if (name.equals("address")) {
1076          this.getAddress().add(castToAddress(value));
1077        } else if (name.equals("gender")) {
1078          value = new AdministrativeGenderEnumFactory().fromType(castToCode(value));
1079          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1080        } else if (name.equals("birthDate")) {
1081          this.birthDate = castToDate(value); // DateType
1082        } else if (name.equals("photo")) {
1083          this.getPhoto().add(castToAttachment(value));
1084        } else if (name.equals("qualification")) {
1085          this.getQualification().add((PractitionerQualificationComponent) value);
1086        } else if (name.equals("communication")) {
1087          this.getCommunication().add(castToCodeableConcept(value));
1088        } else
1089          return super.setProperty(name, value);
1090        return value;
1091      }
1092
1093      @Override
1094      public Base makeProperty(int hash, String name) throws FHIRException {
1095        switch (hash) {
1096        case -1618432855:  return addIdentifier(); 
1097        case -1422950650:  return getActiveElement();
1098        case 3373707:  return addName(); 
1099        case -1429363305:  return addTelecom(); 
1100        case -1147692044:  return addAddress(); 
1101        case -1249512767:  return getGenderElement();
1102        case -1210031859:  return getBirthDateElement();
1103        case 106642994:  return addPhoto(); 
1104        case -631333393:  return addQualification(); 
1105        case -1035284522:  return addCommunication(); 
1106        default: return super.makeProperty(hash, name);
1107        }
1108
1109      }
1110
1111      @Override
1112      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1113        switch (hash) {
1114        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1115        case -1422950650: /*active*/ return new String[] {"boolean"};
1116        case 3373707: /*name*/ return new String[] {"HumanName"};
1117        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
1118        case -1147692044: /*address*/ return new String[] {"Address"};
1119        case -1249512767: /*gender*/ return new String[] {"code"};
1120        case -1210031859: /*birthDate*/ return new String[] {"date"};
1121        case 106642994: /*photo*/ return new String[] {"Attachment"};
1122        case -631333393: /*qualification*/ return new String[] {};
1123        case -1035284522: /*communication*/ return new String[] {"CodeableConcept"};
1124        default: return super.getTypesForProperty(hash, name);
1125        }
1126
1127      }
1128
1129      @Override
1130      public Base addChild(String name) throws FHIRException {
1131        if (name.equals("identifier")) {
1132          return addIdentifier();
1133        }
1134        else if (name.equals("active")) {
1135          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.active");
1136        }
1137        else if (name.equals("name")) {
1138          return addName();
1139        }
1140        else if (name.equals("telecom")) {
1141          return addTelecom();
1142        }
1143        else if (name.equals("address")) {
1144          return addAddress();
1145        }
1146        else if (name.equals("gender")) {
1147          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.gender");
1148        }
1149        else if (name.equals("birthDate")) {
1150          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.birthDate");
1151        }
1152        else if (name.equals("photo")) {
1153          return addPhoto();
1154        }
1155        else if (name.equals("qualification")) {
1156          return addQualification();
1157        }
1158        else if (name.equals("communication")) {
1159          return addCommunication();
1160        }
1161        else
1162          return super.addChild(name);
1163      }
1164
1165  public String fhirType() {
1166    return "Practitioner";
1167
1168  }
1169
1170      public Practitioner copy() {
1171        Practitioner dst = new Practitioner();
1172        copyValues(dst);
1173        if (identifier != null) {
1174          dst.identifier = new ArrayList<Identifier>();
1175          for (Identifier i : identifier)
1176            dst.identifier.add(i.copy());
1177        };
1178        dst.active = active == null ? null : active.copy();
1179        if (name != null) {
1180          dst.name = new ArrayList<HumanName>();
1181          for (HumanName i : name)
1182            dst.name.add(i.copy());
1183        };
1184        if (telecom != null) {
1185          dst.telecom = new ArrayList<ContactPoint>();
1186          for (ContactPoint i : telecom)
1187            dst.telecom.add(i.copy());
1188        };
1189        if (address != null) {
1190          dst.address = new ArrayList<Address>();
1191          for (Address i : address)
1192            dst.address.add(i.copy());
1193        };
1194        dst.gender = gender == null ? null : gender.copy();
1195        dst.birthDate = birthDate == null ? null : birthDate.copy();
1196        if (photo != null) {
1197          dst.photo = new ArrayList<Attachment>();
1198          for (Attachment i : photo)
1199            dst.photo.add(i.copy());
1200        };
1201        if (qualification != null) {
1202          dst.qualification = new ArrayList<PractitionerQualificationComponent>();
1203          for (PractitionerQualificationComponent i : qualification)
1204            dst.qualification.add(i.copy());
1205        };
1206        if (communication != null) {
1207          dst.communication = new ArrayList<CodeableConcept>();
1208          for (CodeableConcept i : communication)
1209            dst.communication.add(i.copy());
1210        };
1211        return dst;
1212      }
1213
1214      protected Practitioner typedCopy() {
1215        return copy();
1216      }
1217
1218      @Override
1219      public boolean equalsDeep(Base other) {
1220        if (!super.equalsDeep(other))
1221          return false;
1222        if (!(other instanceof Practitioner))
1223          return false;
1224        Practitioner o = (Practitioner) other;
1225        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(name, o.name, true)
1226           && compareDeep(telecom, o.telecom, true) && compareDeep(address, o.address, true) && compareDeep(gender, o.gender, true)
1227           && compareDeep(birthDate, o.birthDate, true) && compareDeep(photo, o.photo, true) && compareDeep(qualification, o.qualification, true)
1228           && compareDeep(communication, o.communication, true);
1229      }
1230
1231      @Override
1232      public boolean equalsShallow(Base other) {
1233        if (!super.equalsShallow(other))
1234          return false;
1235        if (!(other instanceof Practitioner))
1236          return false;
1237        Practitioner o = (Practitioner) other;
1238        return compareValues(active, o.active, true) && compareValues(gender, o.gender, true) && compareValues(birthDate, o.birthDate, true)
1239          ;
1240      }
1241
1242      public boolean isEmpty() {
1243        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, name
1244          , telecom, address, gender, birthDate, photo, qualification, communication);
1245      }
1246
1247  @Override
1248  public ResourceType getResourceType() {
1249    return ResourceType.Practitioner;
1250   }
1251
1252 /**
1253   * Search parameter: <b>identifier</b>
1254   * <p>
1255   * Description: <b>A practitioner's Identifier</b><br>
1256   * Type: <b>token</b><br>
1257   * Path: <b>Practitioner.identifier</b><br>
1258   * </p>
1259   */
1260  @SearchParamDefinition(name="identifier", path="Practitioner.identifier", description="A practitioner's Identifier", type="token" )
1261  public static final String SP_IDENTIFIER = "identifier";
1262 /**
1263   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1264   * <p>
1265   * Description: <b>A practitioner's Identifier</b><br>
1266   * Type: <b>token</b><br>
1267   * Path: <b>Practitioner.identifier</b><br>
1268   * </p>
1269   */
1270  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1271
1272 /**
1273   * Search parameter: <b>given</b>
1274   * <p>
1275   * Description: <b>A portion of the given name</b><br>
1276   * Type: <b>string</b><br>
1277   * Path: <b>Practitioner.name.given</b><br>
1278   * </p>
1279   */
1280  @SearchParamDefinition(name="given", path="Practitioner.name.given", description="A portion of the given name", type="string" )
1281  public static final String SP_GIVEN = "given";
1282 /**
1283   * <b>Fluent Client</b> search parameter constant for <b>given</b>
1284   * <p>
1285   * Description: <b>A portion of the given name</b><br>
1286   * Type: <b>string</b><br>
1287   * Path: <b>Practitioner.name.given</b><br>
1288   * </p>
1289   */
1290  public static final ca.uhn.fhir.rest.gclient.StringClientParam GIVEN = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_GIVEN);
1291
1292 /**
1293   * Search parameter: <b>address</b>
1294   * <p>
1295   * Description: <b>A server defined search that may match any of the string fields in the Address, including line, city, state, country, postalCode, and/or text</b><br>
1296   * Type: <b>string</b><br>
1297   * Path: <b>Practitioner.address</b><br>
1298   * </p>
1299   */
1300  @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, state, country, postalCode, and/or text", type="string" )
1301  public static final String SP_ADDRESS = "address";
1302 /**
1303   * <b>Fluent Client</b> search parameter constant for <b>address</b>
1304   * <p>
1305   * Description: <b>A server defined search that may match any of the string fields in the Address, including line, city, state, country, postalCode, and/or text</b><br>
1306   * Type: <b>string</b><br>
1307   * Path: <b>Practitioner.address</b><br>
1308   * </p>
1309   */
1310  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS);
1311
1312 /**
1313   * Search parameter: <b>address-state</b>
1314   * <p>
1315   * Description: <b>A state specified in an address</b><br>
1316   * Type: <b>string</b><br>
1317   * Path: <b>Practitioner.address.state</b><br>
1318   * </p>
1319   */
1320  @SearchParamDefinition(name="address-state", path="Practitioner.address.state", description="A state specified in an address", type="string" )
1321  public static final String SP_ADDRESS_STATE = "address-state";
1322 /**
1323   * <b>Fluent Client</b> search parameter constant for <b>address-state</b>
1324   * <p>
1325   * Description: <b>A state specified in an address</b><br>
1326   * Type: <b>string</b><br>
1327   * Path: <b>Practitioner.address.state</b><br>
1328   * </p>
1329   */
1330  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_STATE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_STATE);
1331
1332 /**
1333   * Search parameter: <b>gender</b>
1334   * <p>
1335   * Description: <b>Gender of the practitioner</b><br>
1336   * Type: <b>token</b><br>
1337   * Path: <b>Practitioner.gender</b><br>
1338   * </p>
1339   */
1340  @SearchParamDefinition(name="gender", path="Practitioner.gender", description="Gender of the practitioner", type="token" )
1341  public static final String SP_GENDER = "gender";
1342 /**
1343   * <b>Fluent Client</b> search parameter constant for <b>gender</b>
1344   * <p>
1345   * Description: <b>Gender of the practitioner</b><br>
1346   * Type: <b>token</b><br>
1347   * Path: <b>Practitioner.gender</b><br>
1348   * </p>
1349   */
1350  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GENDER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GENDER);
1351
1352 /**
1353   * Search parameter: <b>active</b>
1354   * <p>
1355   * Description: <b>Whether the practitioner record is active</b><br>
1356   * Type: <b>token</b><br>
1357   * Path: <b>Practitioner.active</b><br>
1358   * </p>
1359   */
1360  @SearchParamDefinition(name="active", path="Practitioner.active", description="Whether the practitioner record is active", type="token" )
1361  public static final String SP_ACTIVE = "active";
1362 /**
1363   * <b>Fluent Client</b> search parameter constant for <b>active</b>
1364   * <p>
1365   * Description: <b>Whether the practitioner record is active</b><br>
1366   * Type: <b>token</b><br>
1367   * Path: <b>Practitioner.active</b><br>
1368   * </p>
1369   */
1370  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
1371
1372 /**
1373   * Search parameter: <b>address-postalcode</b>
1374   * <p>
1375   * Description: <b>A postalCode specified in an address</b><br>
1376   * Type: <b>string</b><br>
1377   * Path: <b>Practitioner.address.postalCode</b><br>
1378   * </p>
1379   */
1380  @SearchParamDefinition(name="address-postalcode", path="Practitioner.address.postalCode", description="A postalCode specified in an address", type="string" )
1381  public static final String SP_ADDRESS_POSTALCODE = "address-postalcode";
1382 /**
1383   * <b>Fluent Client</b> search parameter constant for <b>address-postalcode</b>
1384   * <p>
1385   * Description: <b>A postalCode specified in an address</b><br>
1386   * Type: <b>string</b><br>
1387   * Path: <b>Practitioner.address.postalCode</b><br>
1388   * </p>
1389   */
1390  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_POSTALCODE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_POSTALCODE);
1391
1392 /**
1393   * Search parameter: <b>address-country</b>
1394   * <p>
1395   * Description: <b>A country specified in an address</b><br>
1396   * Type: <b>string</b><br>
1397   * Path: <b>Practitioner.address.country</b><br>
1398   * </p>
1399   */
1400  @SearchParamDefinition(name="address-country", path="Practitioner.address.country", description="A country specified in an address", type="string" )
1401  public static final String SP_ADDRESS_COUNTRY = "address-country";
1402 /**
1403   * <b>Fluent Client</b> search parameter constant for <b>address-country</b>
1404   * <p>
1405   * Description: <b>A country specified in an address</b><br>
1406   * Type: <b>string</b><br>
1407   * Path: <b>Practitioner.address.country</b><br>
1408   * </p>
1409   */
1410  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_COUNTRY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_COUNTRY);
1411
1412 /**
1413   * Search parameter: <b>phonetic</b>
1414   * <p>
1415   * Description: <b>A portion of either family or given name using some kind of phonetic matching algorithm</b><br>
1416   * Type: <b>string</b><br>
1417   * Path: <b>Practitioner.name</b><br>
1418   * </p>
1419   */
1420  @SearchParamDefinition(name="phonetic", path="Practitioner.name", description="A portion of either family or given name using some kind of phonetic matching algorithm", type="string" )
1421  public static final String SP_PHONETIC = "phonetic";
1422 /**
1423   * <b>Fluent Client</b> search parameter constant for <b>phonetic</b>
1424   * <p>
1425   * Description: <b>A portion of either family or given name using some kind of phonetic matching algorithm</b><br>
1426   * Type: <b>string</b><br>
1427   * Path: <b>Practitioner.name</b><br>
1428   * </p>
1429   */
1430  public static final ca.uhn.fhir.rest.gclient.StringClientParam PHONETIC = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PHONETIC);
1431
1432 /**
1433   * Search parameter: <b>phone</b>
1434   * <p>
1435   * Description: <b>A value in a phone contact</b><br>
1436   * Type: <b>token</b><br>
1437   * Path: <b>Practitioner.telecom(system=phone)</b><br>
1438   * </p>
1439   */
1440  @SearchParamDefinition(name="phone", path="Practitioner.telecom.where(system='phone')", description="A value in a phone contact", type="token" )
1441  public static final String SP_PHONE = "phone";
1442 /**
1443   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
1444   * <p>
1445   * Description: <b>A value in a phone contact</b><br>
1446   * Type: <b>token</b><br>
1447   * Path: <b>Practitioner.telecom(system=phone)</b><br>
1448   * </p>
1449   */
1450  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
1451
1452 /**
1453   * Search parameter: <b>name</b>
1454   * <p>
1455   * Description: <b>A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text</b><br>
1456   * Type: <b>string</b><br>
1457   * Path: <b>Practitioner.name</b><br>
1458   * </p>
1459   */
1460  @SearchParamDefinition(name="name", path="Practitioner.name", description="A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text", type="string" )
1461  public static final String SP_NAME = "name";
1462 /**
1463   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1464   * <p>
1465   * Description: <b>A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text</b><br>
1466   * Type: <b>string</b><br>
1467   * Path: <b>Practitioner.name</b><br>
1468   * </p>
1469   */
1470  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1471
1472 /**
1473   * Search parameter: <b>address-use</b>
1474   * <p>
1475   * Description: <b>A use code specified in an address</b><br>
1476   * Type: <b>token</b><br>
1477   * Path: <b>Practitioner.address.use</b><br>
1478   * </p>
1479   */
1480  @SearchParamDefinition(name="address-use", path="Practitioner.address.use", description="A use code specified in an address", type="token" )
1481  public static final String SP_ADDRESS_USE = "address-use";
1482 /**
1483   * <b>Fluent Client</b> search parameter constant for <b>address-use</b>
1484   * <p>
1485   * Description: <b>A use code specified in an address</b><br>
1486   * Type: <b>token</b><br>
1487   * Path: <b>Practitioner.address.use</b><br>
1488   * </p>
1489   */
1490  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDRESS_USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDRESS_USE);
1491
1492 /**
1493   * Search parameter: <b>telecom</b>
1494   * <p>
1495   * Description: <b>The value in any kind of contact</b><br>
1496   * Type: <b>token</b><br>
1497   * Path: <b>Practitioner.telecom</b><br>
1498   * </p>
1499   */
1500  @SearchParamDefinition(name="telecom", path="Practitioner.telecom", description="The value in any kind of contact", type="token" )
1501  public static final String SP_TELECOM = "telecom";
1502 /**
1503   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
1504   * <p>
1505   * Description: <b>The value in any kind of contact</b><br>
1506   * Type: <b>token</b><br>
1507   * Path: <b>Practitioner.telecom</b><br>
1508   * </p>
1509   */
1510  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
1511
1512 /**
1513   * Search parameter: <b>family</b>
1514   * <p>
1515   * Description: <b>A portion of the family name</b><br>
1516   * Type: <b>string</b><br>
1517   * Path: <b>Practitioner.name.family</b><br>
1518   * </p>
1519   */
1520  @SearchParamDefinition(name="family", path="Practitioner.name.family", description="A portion of the family name", type="string" )
1521  public static final String SP_FAMILY = "family";
1522 /**
1523   * <b>Fluent Client</b> search parameter constant for <b>family</b>
1524   * <p>
1525   * Description: <b>A portion of the family name</b><br>
1526   * Type: <b>string</b><br>
1527   * Path: <b>Practitioner.name.family</b><br>
1528   * </p>
1529   */
1530  public static final ca.uhn.fhir.rest.gclient.StringClientParam FAMILY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_FAMILY);
1531
1532 /**
1533   * Search parameter: <b>address-city</b>
1534   * <p>
1535   * Description: <b>A city specified in an address</b><br>
1536   * Type: <b>string</b><br>
1537   * Path: <b>Practitioner.address.city</b><br>
1538   * </p>
1539   */
1540  @SearchParamDefinition(name="address-city", path="Practitioner.address.city", description="A city specified in an address", type="string" )
1541  public static final String SP_ADDRESS_CITY = "address-city";
1542 /**
1543   * <b>Fluent Client</b> search parameter constant for <b>address-city</b>
1544   * <p>
1545   * Description: <b>A city specified in an address</b><br>
1546   * Type: <b>string</b><br>
1547   * Path: <b>Practitioner.address.city</b><br>
1548   * </p>
1549   */
1550  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_CITY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_CITY);
1551
1552 /**
1553   * Search parameter: <b>communication</b>
1554   * <p>
1555   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1556   * Type: <b>token</b><br>
1557   * Path: <b>Practitioner.communication</b><br>
1558   * </p>
1559   */
1560  @SearchParamDefinition(name="communication", path="Practitioner.communication", description="One of the languages that the practitioner can communicate with", type="token" )
1561  public static final String SP_COMMUNICATION = "communication";
1562 /**
1563   * <b>Fluent Client</b> search parameter constant for <b>communication</b>
1564   * <p>
1565   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1566   * Type: <b>token</b><br>
1567   * Path: <b>Practitioner.communication</b><br>
1568   * </p>
1569   */
1570  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMMUNICATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMMUNICATION);
1571
1572 /**
1573   * Search parameter: <b>email</b>
1574   * <p>
1575   * Description: <b>A value in an email contact</b><br>
1576   * Type: <b>token</b><br>
1577   * Path: <b>Practitioner.telecom(system=email)</b><br>
1578   * </p>
1579   */
1580  @SearchParamDefinition(name="email", path="Practitioner.telecom.where(system='email')", description="A value in an email contact", type="token" )
1581  public static final String SP_EMAIL = "email";
1582 /**
1583   * <b>Fluent Client</b> search parameter constant for <b>email</b>
1584   * <p>
1585   * Description: <b>A value in an email contact</b><br>
1586   * Type: <b>token</b><br>
1587   * Path: <b>Practitioner.telecom(system=email)</b><br>
1588   * </p>
1589   */
1590  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
1591
1592
1593}
1594