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