001package org.hl7.fhir.dstu2016may.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Sun, May 8, 2016 03:05+1000 for FHIR v1.4.0
033import java.util.ArrayList;
034import java.util.Date;
035import java.util.List;
036
037import org.hl7.fhir.dstu2016may.model.Enumerations.AdministrativeGender;
038import org.hl7.fhir.dstu2016may.model.Enumerations.AdministrativeGenderEnumFactory;
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
041
042import ca.uhn.fhir.model.api.annotation.Block;
043import ca.uhn.fhir.model.api.annotation.Child;
044import ca.uhn.fhir.model.api.annotation.Description;
045import ca.uhn.fhir.model.api.annotation.ResourceDef;
046import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
047/**
048 * A person who is directly or indirectly involved in the provisioning of healthcare.
049 */
050@ResourceDef(name="Practitioner", profile="http://hl7.org/fhir/Profile/Practitioner")
051public class Practitioner extends DomainResource {
052
053    @Block()
054    public static class PractitionerPractitionerRoleComponent extends BackboneElement implements IBaseBackboneElement {
055        /**
056         * The organization where the Practitioner performs the roles associated.
057         */
058        @Child(name = "organization", type = {Organization.class}, order=1, min=0, max=1, modifier=false, summary=false)
059        @Description(shortDefinition="Organization where the roles are performed", formalDefinition="The organization where the Practitioner performs the roles associated." )
060        protected Reference organization;
061
062        /**
063         * The actual object that is the target of the reference (The organization where the Practitioner performs the roles associated.)
064         */
065        protected Organization organizationTarget;
066
067        /**
068         * Roles which this practitioner is authorized to perform for the organization.
069         */
070        @Child(name = "role", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
071        @Description(shortDefinition="Roles which this practitioner may perform", formalDefinition="Roles which this practitioner is authorized to perform for the organization." )
072        protected CodeableConcept role;
073
074        /**
075         * Specific specialty of the practitioner.
076         */
077        @Child(name = "specialty", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
078        @Description(shortDefinition="Specific specialty of the practitioner", formalDefinition="Specific specialty of the practitioner." )
079        protected List<CodeableConcept> specialty;
080
081        /**
082         * Business Identifiers that are specific to a role/location.
083         */
084        @Child(name = "identifier", type = {Identifier.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
085        @Description(shortDefinition="Business Identifiers that are specific to a role/location", formalDefinition="Business Identifiers that are specific to a role/location." )
086        protected List<Identifier> identifier;
087
088        /**
089         * Contact details that are specific to the role/location/service.
090         */
091        @Child(name = "telecom", type = {ContactPoint.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
092        @Description(shortDefinition="Contact details that are specific to the role/location/service", formalDefinition="Contact details that are specific to the role/location/service." )
093        protected List<ContactPoint> telecom;
094
095        /**
096         * The period during which the person is authorized to act as a practitioner in these role(s) for the organization.
097         */
098        @Child(name = "period", type = {Period.class}, order=6, min=0, max=1, modifier=false, summary=true)
099        @Description(shortDefinition="The period during which the practitioner is authorized to perform in these role(s)", formalDefinition="The period during which the person is authorized to act as a practitioner in these role(s) for the organization." )
100        protected Period period;
101
102        /**
103         * The location(s) at which this practitioner provides care.
104         */
105        @Child(name = "location", type = {Location.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
106        @Description(shortDefinition="The location(s) at which this practitioner provides care", formalDefinition="The location(s) at which this practitioner provides care." )
107        protected List<Reference> location;
108        /**
109         * The actual objects that are the target of the reference (The location(s) at which this practitioner provides care.)
110         */
111        protected List<Location> locationTarget;
112
113
114        /**
115         * The list of healthcare services that this worker provides for this role's Organization/Location(s).
116         */
117        @Child(name = "healthcareService", type = {HealthcareService.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
118        @Description(shortDefinition="The list of healthcare services that this worker provides for this role's Organization/Location(s)", formalDefinition="The list of healthcare services that this worker provides for this role's Organization/Location(s)." )
119        protected List<Reference> healthcareService;
120        /**
121         * The actual objects that are the target of the reference (The list of healthcare services that this worker provides for this role's Organization/Location(s).)
122         */
123        protected List<HealthcareService> healthcareServiceTarget;
124
125
126        private static final long serialVersionUID = -2082448551L;
127
128    /**
129     * Constructor
130     */
131      public PractitionerPractitionerRoleComponent() {
132        super();
133      }
134
135        /**
136         * @return {@link #organization} (The organization where the Practitioner performs the roles associated.)
137         */
138        public Reference getOrganization() { 
139          if (this.organization == null)
140            if (Configuration.errorOnAutoCreate())
141              throw new Error("Attempt to auto-create PractitionerPractitionerRoleComponent.organization");
142            else if (Configuration.doAutoCreate())
143              this.organization = new Reference(); // cc
144          return this.organization;
145        }
146
147        public boolean hasOrganization() { 
148          return this.organization != null && !this.organization.isEmpty();
149        }
150
151        /**
152         * @param value {@link #organization} (The organization where the Practitioner performs the roles associated.)
153         */
154        public PractitionerPractitionerRoleComponent setOrganization(Reference value) { 
155          this.organization = value;
156          return this;
157        }
158
159        /**
160         * @return {@link #organization} 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. (The organization where the Practitioner performs the roles associated.)
161         */
162        public Organization getOrganizationTarget() { 
163          if (this.organizationTarget == null)
164            if (Configuration.errorOnAutoCreate())
165              throw new Error("Attempt to auto-create PractitionerPractitionerRoleComponent.organization");
166            else if (Configuration.doAutoCreate())
167              this.organizationTarget = new Organization(); // aa
168          return this.organizationTarget;
169        }
170
171        /**
172         * @param value {@link #organization} 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. (The organization where the Practitioner performs the roles associated.)
173         */
174        public PractitionerPractitionerRoleComponent setOrganizationTarget(Organization value) { 
175          this.organizationTarget = value;
176          return this;
177        }
178
179        /**
180         * @return {@link #role} (Roles which this practitioner is authorized to perform for the organization.)
181         */
182        public CodeableConcept getRole() { 
183          if (this.role == null)
184            if (Configuration.errorOnAutoCreate())
185              throw new Error("Attempt to auto-create PractitionerPractitionerRoleComponent.role");
186            else if (Configuration.doAutoCreate())
187              this.role = new CodeableConcept(); // cc
188          return this.role;
189        }
190
191        public boolean hasRole() { 
192          return this.role != null && !this.role.isEmpty();
193        }
194
195        /**
196         * @param value {@link #role} (Roles which this practitioner is authorized to perform for the organization.)
197         */
198        public PractitionerPractitionerRoleComponent setRole(CodeableConcept value) { 
199          this.role = value;
200          return this;
201        }
202
203        /**
204         * @return {@link #specialty} (Specific specialty of the practitioner.)
205         */
206        public List<CodeableConcept> getSpecialty() { 
207          if (this.specialty == null)
208            this.specialty = new ArrayList<CodeableConcept>();
209          return this.specialty;
210        }
211
212        public boolean hasSpecialty() { 
213          if (this.specialty == null)
214            return false;
215          for (CodeableConcept item : this.specialty)
216            if (!item.isEmpty())
217              return true;
218          return false;
219        }
220
221        /**
222         * @return {@link #specialty} (Specific specialty of the practitioner.)
223         */
224    // syntactic sugar
225        public CodeableConcept addSpecialty() { //3
226          CodeableConcept t = new CodeableConcept();
227          if (this.specialty == null)
228            this.specialty = new ArrayList<CodeableConcept>();
229          this.specialty.add(t);
230          return t;
231        }
232
233    // syntactic sugar
234        public PractitionerPractitionerRoleComponent addSpecialty(CodeableConcept t) { //3
235          if (t == null)
236            return this;
237          if (this.specialty == null)
238            this.specialty = new ArrayList<CodeableConcept>();
239          this.specialty.add(t);
240          return this;
241        }
242
243        /**
244         * @return {@link #identifier} (Business Identifiers that are specific to a role/location.)
245         */
246        public List<Identifier> getIdentifier() { 
247          if (this.identifier == null)
248            this.identifier = new ArrayList<Identifier>();
249          return this.identifier;
250        }
251
252        public boolean hasIdentifier() { 
253          if (this.identifier == null)
254            return false;
255          for (Identifier item : this.identifier)
256            if (!item.isEmpty())
257              return true;
258          return false;
259        }
260
261        /**
262         * @return {@link #identifier} (Business Identifiers that are specific to a role/location.)
263         */
264    // syntactic sugar
265        public Identifier addIdentifier() { //3
266          Identifier t = new Identifier();
267          if (this.identifier == null)
268            this.identifier = new ArrayList<Identifier>();
269          this.identifier.add(t);
270          return t;
271        }
272
273    // syntactic sugar
274        public PractitionerPractitionerRoleComponent addIdentifier(Identifier t) { //3
275          if (t == null)
276            return this;
277          if (this.identifier == null)
278            this.identifier = new ArrayList<Identifier>();
279          this.identifier.add(t);
280          return this;
281        }
282
283        /**
284         * @return {@link #telecom} (Contact details that are specific to the role/location/service.)
285         */
286        public List<ContactPoint> getTelecom() { 
287          if (this.telecom == null)
288            this.telecom = new ArrayList<ContactPoint>();
289          return this.telecom;
290        }
291
292        public boolean hasTelecom() { 
293          if (this.telecom == null)
294            return false;
295          for (ContactPoint item : this.telecom)
296            if (!item.isEmpty())
297              return true;
298          return false;
299        }
300
301        /**
302         * @return {@link #telecom} (Contact details that are specific to the role/location/service.)
303         */
304    // syntactic sugar
305        public ContactPoint addTelecom() { //3
306          ContactPoint t = new ContactPoint();
307          if (this.telecom == null)
308            this.telecom = new ArrayList<ContactPoint>();
309          this.telecom.add(t);
310          return t;
311        }
312
313    // syntactic sugar
314        public PractitionerPractitionerRoleComponent addTelecom(ContactPoint t) { //3
315          if (t == null)
316            return this;
317          if (this.telecom == null)
318            this.telecom = new ArrayList<ContactPoint>();
319          this.telecom.add(t);
320          return this;
321        }
322
323        /**
324         * @return {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
325         */
326        public Period getPeriod() { 
327          if (this.period == null)
328            if (Configuration.errorOnAutoCreate())
329              throw new Error("Attempt to auto-create PractitionerPractitionerRoleComponent.period");
330            else if (Configuration.doAutoCreate())
331              this.period = new Period(); // cc
332          return this.period;
333        }
334
335        public boolean hasPeriod() { 
336          return this.period != null && !this.period.isEmpty();
337        }
338
339        /**
340         * @param value {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
341         */
342        public PractitionerPractitionerRoleComponent setPeriod(Period value) { 
343          this.period = value;
344          return this;
345        }
346
347        /**
348         * @return {@link #location} (The location(s) at which this practitioner provides care.)
349         */
350        public List<Reference> getLocation() { 
351          if (this.location == null)
352            this.location = new ArrayList<Reference>();
353          return this.location;
354        }
355
356        public boolean hasLocation() { 
357          if (this.location == null)
358            return false;
359          for (Reference item : this.location)
360            if (!item.isEmpty())
361              return true;
362          return false;
363        }
364
365        /**
366         * @return {@link #location} (The location(s) at which this practitioner provides care.)
367         */
368    // syntactic sugar
369        public Reference addLocation() { //3
370          Reference t = new Reference();
371          if (this.location == null)
372            this.location = new ArrayList<Reference>();
373          this.location.add(t);
374          return t;
375        }
376
377    // syntactic sugar
378        public PractitionerPractitionerRoleComponent addLocation(Reference t) { //3
379          if (t == null)
380            return this;
381          if (this.location == null)
382            this.location = new ArrayList<Reference>();
383          this.location.add(t);
384          return this;
385        }
386
387        /**
388         * @return {@link #location} (The actual objects that are the target of the reference. The reference library doesn't populate this, but you can use this to hold the resources if you resolvethemt. The location(s) at which this practitioner provides care.)
389         */
390        public List<Location> getLocationTarget() { 
391          if (this.locationTarget == null)
392            this.locationTarget = new ArrayList<Location>();
393          return this.locationTarget;
394        }
395
396    // syntactic sugar
397        /**
398         * @return {@link #location} (Add an actual object that is the target of the reference. The reference library doesn't use these, but you can use this to hold the resources if you resolvethemt. The location(s) at which this practitioner provides care.)
399         */
400        public Location addLocationTarget() { 
401          Location r = new Location();
402          if (this.locationTarget == null)
403            this.locationTarget = new ArrayList<Location>();
404          this.locationTarget.add(r);
405          return r;
406        }
407
408        /**
409         * @return {@link #healthcareService} (The list of healthcare services that this worker provides for this role's Organization/Location(s).)
410         */
411        public List<Reference> getHealthcareService() { 
412          if (this.healthcareService == null)
413            this.healthcareService = new ArrayList<Reference>();
414          return this.healthcareService;
415        }
416
417        public boolean hasHealthcareService() { 
418          if (this.healthcareService == null)
419            return false;
420          for (Reference item : this.healthcareService)
421            if (!item.isEmpty())
422              return true;
423          return false;
424        }
425
426        /**
427         * @return {@link #healthcareService} (The list of healthcare services that this worker provides for this role's Organization/Location(s).)
428         */
429    // syntactic sugar
430        public Reference addHealthcareService() { //3
431          Reference t = new Reference();
432          if (this.healthcareService == null)
433            this.healthcareService = new ArrayList<Reference>();
434          this.healthcareService.add(t);
435          return t;
436        }
437
438    // syntactic sugar
439        public PractitionerPractitionerRoleComponent addHealthcareService(Reference t) { //3
440          if (t == null)
441            return this;
442          if (this.healthcareService == null)
443            this.healthcareService = new ArrayList<Reference>();
444          this.healthcareService.add(t);
445          return this;
446        }
447
448        /**
449         * @return {@link #healthcareService} (The actual objects that are the target of the reference. The reference library doesn't populate this, but you can use this to hold the resources if you resolvethemt. The list of healthcare services that this worker provides for this role's Organization/Location(s).)
450         */
451        public List<HealthcareService> getHealthcareServiceTarget() { 
452          if (this.healthcareServiceTarget == null)
453            this.healthcareServiceTarget = new ArrayList<HealthcareService>();
454          return this.healthcareServiceTarget;
455        }
456
457    // syntactic sugar
458        /**
459         * @return {@link #healthcareService} (Add an actual object that is the target of the reference. The reference library doesn't use these, but you can use this to hold the resources if you resolvethemt. The list of healthcare services that this worker provides for this role's Organization/Location(s).)
460         */
461        public HealthcareService addHealthcareServiceTarget() { 
462          HealthcareService r = new HealthcareService();
463          if (this.healthcareServiceTarget == null)
464            this.healthcareServiceTarget = new ArrayList<HealthcareService>();
465          this.healthcareServiceTarget.add(r);
466          return r;
467        }
468
469        protected void listChildren(List<Property> childrenList) {
470          super.listChildren(childrenList);
471          childrenList.add(new Property("organization", "Reference(Organization)", "The organization where the Practitioner performs the roles associated.", 0, java.lang.Integer.MAX_VALUE, organization));
472          childrenList.add(new Property("role", "CodeableConcept", "Roles which this practitioner is authorized to perform for the organization.", 0, java.lang.Integer.MAX_VALUE, role));
473          childrenList.add(new Property("specialty", "CodeableConcept", "Specific specialty of the practitioner.", 0, java.lang.Integer.MAX_VALUE, specialty));
474          childrenList.add(new Property("identifier", "Identifier", "Business Identifiers that are specific to a role/location.", 0, java.lang.Integer.MAX_VALUE, identifier));
475          childrenList.add(new Property("telecom", "ContactPoint", "Contact details that are specific to the role/location/service.", 0, java.lang.Integer.MAX_VALUE, telecom));
476          childrenList.add(new Property("period", "Period", "The period during which the person is authorized to act as a practitioner in these role(s) for the organization.", 0, java.lang.Integer.MAX_VALUE, period));
477          childrenList.add(new Property("location", "Reference(Location)", "The location(s) at which this practitioner provides care.", 0, java.lang.Integer.MAX_VALUE, location));
478          childrenList.add(new Property("healthcareService", "Reference(HealthcareService)", "The list of healthcare services that this worker provides for this role's Organization/Location(s).", 0, java.lang.Integer.MAX_VALUE, healthcareService));
479        }
480
481      @Override
482      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
483        switch (hash) {
484        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
485        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
486        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
487        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
488        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
489        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
490        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // Reference
491        case 1289661064: /*healthcareService*/ return this.healthcareService == null ? new Base[0] : this.healthcareService.toArray(new Base[this.healthcareService.size()]); // Reference
492        default: return super.getProperty(hash, name, checkValid);
493        }
494
495      }
496
497      @Override
498      public void setProperty(int hash, String name, Base value) throws FHIRException {
499        switch (hash) {
500        case 1178922291: // organization
501          this.organization = castToReference(value); // Reference
502          break;
503        case 3506294: // role
504          this.role = castToCodeableConcept(value); // CodeableConcept
505          break;
506        case -1694759682: // specialty
507          this.getSpecialty().add(castToCodeableConcept(value)); // CodeableConcept
508          break;
509        case -1618432855: // identifier
510          this.getIdentifier().add(castToIdentifier(value)); // Identifier
511          break;
512        case -1429363305: // telecom
513          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
514          break;
515        case -991726143: // period
516          this.period = castToPeriod(value); // Period
517          break;
518        case 1901043637: // location
519          this.getLocation().add(castToReference(value)); // Reference
520          break;
521        case 1289661064: // healthcareService
522          this.getHealthcareService().add(castToReference(value)); // Reference
523          break;
524        default: super.setProperty(hash, name, value);
525        }
526
527      }
528
529      @Override
530      public void setProperty(String name, Base value) throws FHIRException {
531        if (name.equals("organization"))
532          this.organization = castToReference(value); // Reference
533        else if (name.equals("role"))
534          this.role = castToCodeableConcept(value); // CodeableConcept
535        else if (name.equals("specialty"))
536          this.getSpecialty().add(castToCodeableConcept(value));
537        else if (name.equals("identifier"))
538          this.getIdentifier().add(castToIdentifier(value));
539        else if (name.equals("telecom"))
540          this.getTelecom().add(castToContactPoint(value));
541        else if (name.equals("period"))
542          this.period = castToPeriod(value); // Period
543        else if (name.equals("location"))
544          this.getLocation().add(castToReference(value));
545        else if (name.equals("healthcareService"))
546          this.getHealthcareService().add(castToReference(value));
547        else
548          super.setProperty(name, value);
549      }
550
551      @Override
552      public Base makeProperty(int hash, String name) throws FHIRException {
553        switch (hash) {
554        case 1178922291:  return getOrganization(); // Reference
555        case 3506294:  return getRole(); // CodeableConcept
556        case -1694759682:  return addSpecialty(); // CodeableConcept
557        case -1618432855:  return addIdentifier(); // Identifier
558        case -1429363305:  return addTelecom(); // ContactPoint
559        case -991726143:  return getPeriod(); // Period
560        case 1901043637:  return addLocation(); // Reference
561        case 1289661064:  return addHealthcareService(); // Reference
562        default: return super.makeProperty(hash, name);
563        }
564
565      }
566
567      @Override
568      public Base addChild(String name) throws FHIRException {
569        if (name.equals("organization")) {
570          this.organization = new Reference();
571          return this.organization;
572        }
573        else if (name.equals("role")) {
574          this.role = new CodeableConcept();
575          return this.role;
576        }
577        else if (name.equals("specialty")) {
578          return addSpecialty();
579        }
580        else if (name.equals("identifier")) {
581          return addIdentifier();
582        }
583        else if (name.equals("telecom")) {
584          return addTelecom();
585        }
586        else if (name.equals("period")) {
587          this.period = new Period();
588          return this.period;
589        }
590        else if (name.equals("location")) {
591          return addLocation();
592        }
593        else if (name.equals("healthcareService")) {
594          return addHealthcareService();
595        }
596        else
597          return super.addChild(name);
598      }
599
600      public PractitionerPractitionerRoleComponent copy() {
601        PractitionerPractitionerRoleComponent dst = new PractitionerPractitionerRoleComponent();
602        copyValues(dst);
603        dst.organization = organization == null ? null : organization.copy();
604        dst.role = role == null ? null : role.copy();
605        if (specialty != null) {
606          dst.specialty = new ArrayList<CodeableConcept>();
607          for (CodeableConcept i : specialty)
608            dst.specialty.add(i.copy());
609        };
610        if (identifier != null) {
611          dst.identifier = new ArrayList<Identifier>();
612          for (Identifier i : identifier)
613            dst.identifier.add(i.copy());
614        };
615        if (telecom != null) {
616          dst.telecom = new ArrayList<ContactPoint>();
617          for (ContactPoint i : telecom)
618            dst.telecom.add(i.copy());
619        };
620        dst.period = period == null ? null : period.copy();
621        if (location != null) {
622          dst.location = new ArrayList<Reference>();
623          for (Reference i : location)
624            dst.location.add(i.copy());
625        };
626        if (healthcareService != null) {
627          dst.healthcareService = new ArrayList<Reference>();
628          for (Reference i : healthcareService)
629            dst.healthcareService.add(i.copy());
630        };
631        return dst;
632      }
633
634      @Override
635      public boolean equalsDeep(Base other) {
636        if (!super.equalsDeep(other))
637          return false;
638        if (!(other instanceof PractitionerPractitionerRoleComponent))
639          return false;
640        PractitionerPractitionerRoleComponent o = (PractitionerPractitionerRoleComponent) other;
641        return compareDeep(organization, o.organization, true) && compareDeep(role, o.role, true) && compareDeep(specialty, o.specialty, true)
642           && compareDeep(identifier, o.identifier, true) && compareDeep(telecom, o.telecom, true) && compareDeep(period, o.period, true)
643           && compareDeep(location, o.location, true) && compareDeep(healthcareService, o.healthcareService, true)
644          ;
645      }
646
647      @Override
648      public boolean equalsShallow(Base other) {
649        if (!super.equalsShallow(other))
650          return false;
651        if (!(other instanceof PractitionerPractitionerRoleComponent))
652          return false;
653        PractitionerPractitionerRoleComponent o = (PractitionerPractitionerRoleComponent) other;
654        return true;
655      }
656
657      public boolean isEmpty() {
658        return super.isEmpty() && (organization == null || organization.isEmpty()) && (role == null || role.isEmpty())
659           && (specialty == null || specialty.isEmpty()) && (identifier == null || identifier.isEmpty())
660           && (telecom == null || telecom.isEmpty()) && (period == null || period.isEmpty()) && (location == null || location.isEmpty())
661           && (healthcareService == null || healthcareService.isEmpty());
662      }
663
664  public String fhirType() {
665    return "Practitioner.practitionerRole";
666
667  }
668
669  }
670
671    @Block()
672    public static class PractitionerQualificationComponent extends BackboneElement implements IBaseBackboneElement {
673        /**
674         * An identifier that applies to this person's qualification in this role.
675         */
676        @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
677        @Description(shortDefinition="An identifier for this qualification for the practitioner", formalDefinition="An identifier that applies to this person's qualification in this role." )
678        protected List<Identifier> identifier;
679
680        /**
681         * Coded representation of the qualification.
682         */
683        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=false)
684        @Description(shortDefinition="Coded representation of the qualification", formalDefinition="Coded representation of the qualification." )
685        protected CodeableConcept code;
686
687        /**
688         * Period during which the qualification is valid.
689         */
690        @Child(name = "period", type = {Period.class}, order=3, min=0, max=1, modifier=false, summary=false)
691        @Description(shortDefinition="Period during which the qualification is valid", formalDefinition="Period during which the qualification is valid." )
692        protected Period period;
693
694        /**
695         * Organization that regulates and issues the qualification.
696         */
697        @Child(name = "issuer", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=false)
698        @Description(shortDefinition="Organization that regulates and issues the qualification", formalDefinition="Organization that regulates and issues the qualification." )
699        protected Reference issuer;
700
701        /**
702         * The actual object that is the target of the reference (Organization that regulates and issues the qualification.)
703         */
704        protected Organization issuerTarget;
705
706        private static final long serialVersionUID = 1095219071L;
707
708    /**
709     * Constructor
710     */
711      public PractitionerQualificationComponent() {
712        super();
713      }
714
715    /**
716     * Constructor
717     */
718      public PractitionerQualificationComponent(CodeableConcept code) {
719        super();
720        this.code = code;
721      }
722
723        /**
724         * @return {@link #identifier} (An identifier that applies to this person's qualification in this role.)
725         */
726        public List<Identifier> getIdentifier() { 
727          if (this.identifier == null)
728            this.identifier = new ArrayList<Identifier>();
729          return this.identifier;
730        }
731
732        public boolean hasIdentifier() { 
733          if (this.identifier == null)
734            return false;
735          for (Identifier item : this.identifier)
736            if (!item.isEmpty())
737              return true;
738          return false;
739        }
740
741        /**
742         * @return {@link #identifier} (An identifier that applies to this person's qualification in this role.)
743         */
744    // syntactic sugar
745        public Identifier addIdentifier() { //3
746          Identifier t = new Identifier();
747          if (this.identifier == null)
748            this.identifier = new ArrayList<Identifier>();
749          this.identifier.add(t);
750          return t;
751        }
752
753    // syntactic sugar
754        public PractitionerQualificationComponent addIdentifier(Identifier t) { //3
755          if (t == null)
756            return this;
757          if (this.identifier == null)
758            this.identifier = new ArrayList<Identifier>();
759          this.identifier.add(t);
760          return this;
761        }
762
763        /**
764         * @return {@link #code} (Coded representation of the qualification.)
765         */
766        public CodeableConcept getCode() { 
767          if (this.code == null)
768            if (Configuration.errorOnAutoCreate())
769              throw new Error("Attempt to auto-create PractitionerQualificationComponent.code");
770            else if (Configuration.doAutoCreate())
771              this.code = new CodeableConcept(); // cc
772          return this.code;
773        }
774
775        public boolean hasCode() { 
776          return this.code != null && !this.code.isEmpty();
777        }
778
779        /**
780         * @param value {@link #code} (Coded representation of the qualification.)
781         */
782        public PractitionerQualificationComponent setCode(CodeableConcept value) { 
783          this.code = value;
784          return this;
785        }
786
787        /**
788         * @return {@link #period} (Period during which the qualification is valid.)
789         */
790        public Period getPeriod() { 
791          if (this.period == null)
792            if (Configuration.errorOnAutoCreate())
793              throw new Error("Attempt to auto-create PractitionerQualificationComponent.period");
794            else if (Configuration.doAutoCreate())
795              this.period = new Period(); // cc
796          return this.period;
797        }
798
799        public boolean hasPeriod() { 
800          return this.period != null && !this.period.isEmpty();
801        }
802
803        /**
804         * @param value {@link #period} (Period during which the qualification is valid.)
805         */
806        public PractitionerQualificationComponent setPeriod(Period value) { 
807          this.period = value;
808          return this;
809        }
810
811        /**
812         * @return {@link #issuer} (Organization that regulates and issues the qualification.)
813         */
814        public Reference getIssuer() { 
815          if (this.issuer == null)
816            if (Configuration.errorOnAutoCreate())
817              throw new Error("Attempt to auto-create PractitionerQualificationComponent.issuer");
818            else if (Configuration.doAutoCreate())
819              this.issuer = new Reference(); // cc
820          return this.issuer;
821        }
822
823        public boolean hasIssuer() { 
824          return this.issuer != null && !this.issuer.isEmpty();
825        }
826
827        /**
828         * @param value {@link #issuer} (Organization that regulates and issues the qualification.)
829         */
830        public PractitionerQualificationComponent setIssuer(Reference value) { 
831          this.issuer = value;
832          return this;
833        }
834
835        /**
836         * @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.)
837         */
838        public Organization getIssuerTarget() { 
839          if (this.issuerTarget == null)
840            if (Configuration.errorOnAutoCreate())
841              throw new Error("Attempt to auto-create PractitionerQualificationComponent.issuer");
842            else if (Configuration.doAutoCreate())
843              this.issuerTarget = new Organization(); // aa
844          return this.issuerTarget;
845        }
846
847        /**
848         * @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.)
849         */
850        public PractitionerQualificationComponent setIssuerTarget(Organization value) { 
851          this.issuerTarget = value;
852          return this;
853        }
854
855        protected void listChildren(List<Property> childrenList) {
856          super.listChildren(childrenList);
857          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));
858          childrenList.add(new Property("code", "CodeableConcept", "Coded representation of the qualification.", 0, java.lang.Integer.MAX_VALUE, code));
859          childrenList.add(new Property("period", "Period", "Period during which the qualification is valid.", 0, java.lang.Integer.MAX_VALUE, period));
860          childrenList.add(new Property("issuer", "Reference(Organization)", "Organization that regulates and issues the qualification.", 0, java.lang.Integer.MAX_VALUE, issuer));
861        }
862
863      @Override
864      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
865        switch (hash) {
866        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
867        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
868        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
869        case -1179159879: /*issuer*/ return this.issuer == null ? new Base[0] : new Base[] {this.issuer}; // Reference
870        default: return super.getProperty(hash, name, checkValid);
871        }
872
873      }
874
875      @Override
876      public void setProperty(int hash, String name, Base value) throws FHIRException {
877        switch (hash) {
878        case -1618432855: // identifier
879          this.getIdentifier().add(castToIdentifier(value)); // Identifier
880          break;
881        case 3059181: // code
882          this.code = castToCodeableConcept(value); // CodeableConcept
883          break;
884        case -991726143: // period
885          this.period = castToPeriod(value); // Period
886          break;
887        case -1179159879: // issuer
888          this.issuer = castToReference(value); // Reference
889          break;
890        default: super.setProperty(hash, name, value);
891        }
892
893      }
894
895      @Override
896      public void setProperty(String name, Base value) throws FHIRException {
897        if (name.equals("identifier"))
898          this.getIdentifier().add(castToIdentifier(value));
899        else if (name.equals("code"))
900          this.code = castToCodeableConcept(value); // CodeableConcept
901        else if (name.equals("period"))
902          this.period = castToPeriod(value); // Period
903        else if (name.equals("issuer"))
904          this.issuer = castToReference(value); // Reference
905        else
906          super.setProperty(name, value);
907      }
908
909      @Override
910      public Base makeProperty(int hash, String name) throws FHIRException {
911        switch (hash) {
912        case -1618432855:  return addIdentifier(); // Identifier
913        case 3059181:  return getCode(); // CodeableConcept
914        case -991726143:  return getPeriod(); // Period
915        case -1179159879:  return getIssuer(); // Reference
916        default: return super.makeProperty(hash, name);
917        }
918
919      }
920
921      @Override
922      public Base addChild(String name) throws FHIRException {
923        if (name.equals("identifier")) {
924          return addIdentifier();
925        }
926        else if (name.equals("code")) {
927          this.code = new CodeableConcept();
928          return this.code;
929        }
930        else if (name.equals("period")) {
931          this.period = new Period();
932          return this.period;
933        }
934        else if (name.equals("issuer")) {
935          this.issuer = new Reference();
936          return this.issuer;
937        }
938        else
939          return super.addChild(name);
940      }
941
942      public PractitionerQualificationComponent copy() {
943        PractitionerQualificationComponent dst = new PractitionerQualificationComponent();
944        copyValues(dst);
945        if (identifier != null) {
946          dst.identifier = new ArrayList<Identifier>();
947          for (Identifier i : identifier)
948            dst.identifier.add(i.copy());
949        };
950        dst.code = code == null ? null : code.copy();
951        dst.period = period == null ? null : period.copy();
952        dst.issuer = issuer == null ? null : issuer.copy();
953        return dst;
954      }
955
956      @Override
957      public boolean equalsDeep(Base other) {
958        if (!super.equalsDeep(other))
959          return false;
960        if (!(other instanceof PractitionerQualificationComponent))
961          return false;
962        PractitionerQualificationComponent o = (PractitionerQualificationComponent) other;
963        return compareDeep(identifier, o.identifier, true) && compareDeep(code, o.code, true) && compareDeep(period, o.period, true)
964           && compareDeep(issuer, o.issuer, true);
965      }
966
967      @Override
968      public boolean equalsShallow(Base other) {
969        if (!super.equalsShallow(other))
970          return false;
971        if (!(other instanceof PractitionerQualificationComponent))
972          return false;
973        PractitionerQualificationComponent o = (PractitionerQualificationComponent) other;
974        return true;
975      }
976
977      public boolean isEmpty() {
978        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (code == null || code.isEmpty())
979           && (period == null || period.isEmpty()) && (issuer == null || issuer.isEmpty());
980      }
981
982  public String fhirType() {
983    return "Practitioner.qualification";
984
985  }
986
987  }
988
989    /**
990     * An identifier that applies to this person in this role.
991     */
992    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
993    @Description(shortDefinition="A identifier for the person as this agent", formalDefinition="An identifier that applies to this person in this role." )
994    protected List<Identifier> identifier;
995
996    /**
997     * Whether this practitioner's record is in active use.
998     */
999    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=true)
1000    @Description(shortDefinition="Whether this practitioner's record is in active use", formalDefinition="Whether this practitioner's record is in active use." )
1001    protected BooleanType active;
1002
1003    /**
1004     * The name(s) associated with the practitioner.
1005     */
1006    @Child(name = "name", type = {HumanName.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1007    @Description(shortDefinition="The name(s) associated with the practitioner", formalDefinition="The name(s) associated with the practitioner." )
1008    protected List<HumanName> name;
1009
1010    /**
1011     * A contact detail for the practitioner, e.g. a telephone number or an email address.
1012     */
1013    @Child(name = "telecom", type = {ContactPoint.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1014    @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." )
1015    protected List<ContactPoint> telecom;
1016
1017    /**
1018     * Address(es) of the practitioner that are not role specific (typically home address). 
1019Work addresses are not typically entered in this property as they are usually role dependent.
1020     */
1021    @Child(name = "address", type = {Address.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1022    @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). \nWork addresses are not typically entered in this property as they are usually role dependent." )
1023    protected List<Address> address;
1024
1025    /**
1026     * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
1027     */
1028    @Child(name = "gender", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1029    @Description(shortDefinition="male | female | other | unknown", formalDefinition="Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes." )
1030    protected Enumeration<AdministrativeGender> gender;
1031
1032    /**
1033     * The date of birth for the practitioner.
1034     */
1035    @Child(name = "birthDate", type = {DateType.class}, order=6, min=0, max=1, modifier=false, summary=true)
1036    @Description(shortDefinition="The date  on which the practitioner was born", formalDefinition="The date of birth for the practitioner." )
1037    protected DateType birthDate;
1038
1039    /**
1040     * Image of the person.
1041     */
1042    @Child(name = "photo", type = {Attachment.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1043    @Description(shortDefinition="Image of the person", formalDefinition="Image of the person." )
1044    protected List<Attachment> photo;
1045
1046    /**
1047     * The list of roles/organizations that the practitioner is associated with.
1048     */
1049    @Child(name = "practitionerRole", type = {}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1050    @Description(shortDefinition="Roles/organizations the practitioner is associated with", formalDefinition="The list of roles/organizations that the practitioner is associated with." )
1051    protected List<PractitionerPractitionerRoleComponent> practitionerRole;
1052
1053    /**
1054     * Qualifications obtained by training and certification.
1055     */
1056    @Child(name = "qualification", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1057    @Description(shortDefinition="Qualifications obtained by training and certification", formalDefinition="Qualifications obtained by training and certification." )
1058    protected List<PractitionerQualificationComponent> qualification;
1059
1060    /**
1061     * A language the practitioner is able to use in patient communication.
1062     */
1063    @Child(name = "communication", type = {CodeableConcept.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1064    @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." )
1065    protected List<CodeableConcept> communication;
1066
1067    private static final long serialVersionUID = 2137859974L;
1068
1069  /**
1070   * Constructor
1071   */
1072    public Practitioner() {
1073      super();
1074    }
1075
1076    /**
1077     * @return {@link #identifier} (An identifier that applies to this person in this role.)
1078     */
1079    public List<Identifier> getIdentifier() { 
1080      if (this.identifier == null)
1081        this.identifier = new ArrayList<Identifier>();
1082      return this.identifier;
1083    }
1084
1085    public boolean hasIdentifier() { 
1086      if (this.identifier == null)
1087        return false;
1088      for (Identifier item : this.identifier)
1089        if (!item.isEmpty())
1090          return true;
1091      return false;
1092    }
1093
1094    /**
1095     * @return {@link #identifier} (An identifier that applies to this person in this role.)
1096     */
1097    // syntactic sugar
1098    public Identifier addIdentifier() { //3
1099      Identifier t = new Identifier();
1100      if (this.identifier == null)
1101        this.identifier = new ArrayList<Identifier>();
1102      this.identifier.add(t);
1103      return t;
1104    }
1105
1106    // syntactic sugar
1107    public Practitioner addIdentifier(Identifier t) { //3
1108      if (t == null)
1109        return this;
1110      if (this.identifier == null)
1111        this.identifier = new ArrayList<Identifier>();
1112      this.identifier.add(t);
1113      return this;
1114    }
1115
1116    /**
1117     * @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
1118     */
1119    public BooleanType getActiveElement() { 
1120      if (this.active == null)
1121        if (Configuration.errorOnAutoCreate())
1122          throw new Error("Attempt to auto-create Practitioner.active");
1123        else if (Configuration.doAutoCreate())
1124          this.active = new BooleanType(); // bb
1125      return this.active;
1126    }
1127
1128    public boolean hasActiveElement() { 
1129      return this.active != null && !this.active.isEmpty();
1130    }
1131
1132    public boolean hasActive() { 
1133      return this.active != null && !this.active.isEmpty();
1134    }
1135
1136    /**
1137     * @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
1138     */
1139    public Practitioner setActiveElement(BooleanType value) { 
1140      this.active = value;
1141      return this;
1142    }
1143
1144    /**
1145     * @return Whether this practitioner's record is in active use.
1146     */
1147    public boolean getActive() { 
1148      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
1149    }
1150
1151    /**
1152     * @param value Whether this practitioner's record is in active use.
1153     */
1154    public Practitioner setActive(boolean value) { 
1155        if (this.active == null)
1156          this.active = new BooleanType();
1157        this.active.setValue(value);
1158      return this;
1159    }
1160
1161    /**
1162     * @return {@link #name} (The name(s) associated with the practitioner.)
1163     */
1164    public List<HumanName> getName() { 
1165      if (this.name == null)
1166        this.name = new ArrayList<HumanName>();
1167      return this.name;
1168    }
1169
1170    public boolean hasName() { 
1171      if (this.name == null)
1172        return false;
1173      for (HumanName item : this.name)
1174        if (!item.isEmpty())
1175          return true;
1176      return false;
1177    }
1178
1179    /**
1180     * @return {@link #name} (The name(s) associated with the practitioner.)
1181     */
1182    // syntactic sugar
1183    public HumanName addName() { //3
1184      HumanName t = new HumanName();
1185      if (this.name == null)
1186        this.name = new ArrayList<HumanName>();
1187      this.name.add(t);
1188      return t;
1189    }
1190
1191    // syntactic sugar
1192    public Practitioner addName(HumanName t) { //3
1193      if (t == null)
1194        return this;
1195      if (this.name == null)
1196        this.name = new ArrayList<HumanName>();
1197      this.name.add(t);
1198      return this;
1199    }
1200
1201    /**
1202     * @return {@link #telecom} (A contact detail for the practitioner, e.g. a telephone number or an email address.)
1203     */
1204    public List<ContactPoint> getTelecom() { 
1205      if (this.telecom == null)
1206        this.telecom = new ArrayList<ContactPoint>();
1207      return this.telecom;
1208    }
1209
1210    public boolean hasTelecom() { 
1211      if (this.telecom == null)
1212        return false;
1213      for (ContactPoint item : this.telecom)
1214        if (!item.isEmpty())
1215          return true;
1216      return false;
1217    }
1218
1219    /**
1220     * @return {@link #telecom} (A contact detail for the practitioner, e.g. a telephone number or an email address.)
1221     */
1222    // syntactic sugar
1223    public ContactPoint addTelecom() { //3
1224      ContactPoint t = new ContactPoint();
1225      if (this.telecom == null)
1226        this.telecom = new ArrayList<ContactPoint>();
1227      this.telecom.add(t);
1228      return t;
1229    }
1230
1231    // syntactic sugar
1232    public Practitioner addTelecom(ContactPoint t) { //3
1233      if (t == null)
1234        return this;
1235      if (this.telecom == null)
1236        this.telecom = new ArrayList<ContactPoint>();
1237      this.telecom.add(t);
1238      return this;
1239    }
1240
1241    /**
1242     * @return {@link #address} (Address(es) of the practitioner that are not role specific (typically home address). 
1243Work addresses are not typically entered in this property as they are usually role dependent.)
1244     */
1245    public List<Address> getAddress() { 
1246      if (this.address == null)
1247        this.address = new ArrayList<Address>();
1248      return this.address;
1249    }
1250
1251    public boolean hasAddress() { 
1252      if (this.address == null)
1253        return false;
1254      for (Address item : this.address)
1255        if (!item.isEmpty())
1256          return true;
1257      return false;
1258    }
1259
1260    /**
1261     * @return {@link #address} (Address(es) of the practitioner that are not role specific (typically home address). 
1262Work addresses are not typically entered in this property as they are usually role dependent.)
1263     */
1264    // syntactic sugar
1265    public Address addAddress() { //3
1266      Address t = new Address();
1267      if (this.address == null)
1268        this.address = new ArrayList<Address>();
1269      this.address.add(t);
1270      return t;
1271    }
1272
1273    // syntactic sugar
1274    public Practitioner addAddress(Address t) { //3
1275      if (t == null)
1276        return this;
1277      if (this.address == null)
1278        this.address = new ArrayList<Address>();
1279      this.address.add(t);
1280      return this;
1281    }
1282
1283    /**
1284     * @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
1285     */
1286    public Enumeration<AdministrativeGender> getGenderElement() { 
1287      if (this.gender == null)
1288        if (Configuration.errorOnAutoCreate())
1289          throw new Error("Attempt to auto-create Practitioner.gender");
1290        else if (Configuration.doAutoCreate())
1291          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory()); // bb
1292      return this.gender;
1293    }
1294
1295    public boolean hasGenderElement() { 
1296      return this.gender != null && !this.gender.isEmpty();
1297    }
1298
1299    public boolean hasGender() { 
1300      return this.gender != null && !this.gender.isEmpty();
1301    }
1302
1303    /**
1304     * @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
1305     */
1306    public Practitioner setGenderElement(Enumeration<AdministrativeGender> value) { 
1307      this.gender = value;
1308      return this;
1309    }
1310
1311    /**
1312     * @return Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
1313     */
1314    public AdministrativeGender getGender() { 
1315      return this.gender == null ? null : this.gender.getValue();
1316    }
1317
1318    /**
1319     * @param value Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
1320     */
1321    public Practitioner setGender(AdministrativeGender value) { 
1322      if (value == null)
1323        this.gender = null;
1324      else {
1325        if (this.gender == null)
1326          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory());
1327        this.gender.setValue(value);
1328      }
1329      return this;
1330    }
1331
1332    /**
1333     * @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
1334     */
1335    public DateType getBirthDateElement() { 
1336      if (this.birthDate == null)
1337        if (Configuration.errorOnAutoCreate())
1338          throw new Error("Attempt to auto-create Practitioner.birthDate");
1339        else if (Configuration.doAutoCreate())
1340          this.birthDate = new DateType(); // bb
1341      return this.birthDate;
1342    }
1343
1344    public boolean hasBirthDateElement() { 
1345      return this.birthDate != null && !this.birthDate.isEmpty();
1346    }
1347
1348    public boolean hasBirthDate() { 
1349      return this.birthDate != null && !this.birthDate.isEmpty();
1350    }
1351
1352    /**
1353     * @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
1354     */
1355    public Practitioner setBirthDateElement(DateType value) { 
1356      this.birthDate = value;
1357      return this;
1358    }
1359
1360    /**
1361     * @return The date of birth for the practitioner.
1362     */
1363    public Date getBirthDate() { 
1364      return this.birthDate == null ? null : this.birthDate.getValue();
1365    }
1366
1367    /**
1368     * @param value The date of birth for the practitioner.
1369     */
1370    public Practitioner setBirthDate(Date value) { 
1371      if (value == null)
1372        this.birthDate = null;
1373      else {
1374        if (this.birthDate == null)
1375          this.birthDate = new DateType();
1376        this.birthDate.setValue(value);
1377      }
1378      return this;
1379    }
1380
1381    /**
1382     * @return {@link #photo} (Image of the person.)
1383     */
1384    public List<Attachment> getPhoto() { 
1385      if (this.photo == null)
1386        this.photo = new ArrayList<Attachment>();
1387      return this.photo;
1388    }
1389
1390    public boolean hasPhoto() { 
1391      if (this.photo == null)
1392        return false;
1393      for (Attachment item : this.photo)
1394        if (!item.isEmpty())
1395          return true;
1396      return false;
1397    }
1398
1399    /**
1400     * @return {@link #photo} (Image of the person.)
1401     */
1402    // syntactic sugar
1403    public Attachment addPhoto() { //3
1404      Attachment t = new Attachment();
1405      if (this.photo == null)
1406        this.photo = new ArrayList<Attachment>();
1407      this.photo.add(t);
1408      return t;
1409    }
1410
1411    // syntactic sugar
1412    public Practitioner addPhoto(Attachment t) { //3
1413      if (t == null)
1414        return this;
1415      if (this.photo == null)
1416        this.photo = new ArrayList<Attachment>();
1417      this.photo.add(t);
1418      return this;
1419    }
1420
1421    /**
1422     * @return {@link #practitionerRole} (The list of roles/organizations that the practitioner is associated with.)
1423     */
1424    public List<PractitionerPractitionerRoleComponent> getPractitionerRole() { 
1425      if (this.practitionerRole == null)
1426        this.practitionerRole = new ArrayList<PractitionerPractitionerRoleComponent>();
1427      return this.practitionerRole;
1428    }
1429
1430    public boolean hasPractitionerRole() { 
1431      if (this.practitionerRole == null)
1432        return false;
1433      for (PractitionerPractitionerRoleComponent item : this.practitionerRole)
1434        if (!item.isEmpty())
1435          return true;
1436      return false;
1437    }
1438
1439    /**
1440     * @return {@link #practitionerRole} (The list of roles/organizations that the practitioner is associated with.)
1441     */
1442    // syntactic sugar
1443    public PractitionerPractitionerRoleComponent addPractitionerRole() { //3
1444      PractitionerPractitionerRoleComponent t = new PractitionerPractitionerRoleComponent();
1445      if (this.practitionerRole == null)
1446        this.practitionerRole = new ArrayList<PractitionerPractitionerRoleComponent>();
1447      this.practitionerRole.add(t);
1448      return t;
1449    }
1450
1451    // syntactic sugar
1452    public Practitioner addPractitionerRole(PractitionerPractitionerRoleComponent t) { //3
1453      if (t == null)
1454        return this;
1455      if (this.practitionerRole == null)
1456        this.practitionerRole = new ArrayList<PractitionerPractitionerRoleComponent>();
1457      this.practitionerRole.add(t);
1458      return this;
1459    }
1460
1461    /**
1462     * @return {@link #qualification} (Qualifications obtained by training and certification.)
1463     */
1464    public List<PractitionerQualificationComponent> getQualification() { 
1465      if (this.qualification == null)
1466        this.qualification = new ArrayList<PractitionerQualificationComponent>();
1467      return this.qualification;
1468    }
1469
1470    public boolean hasQualification() { 
1471      if (this.qualification == null)
1472        return false;
1473      for (PractitionerQualificationComponent item : this.qualification)
1474        if (!item.isEmpty())
1475          return true;
1476      return false;
1477    }
1478
1479    /**
1480     * @return {@link #qualification} (Qualifications obtained by training and certification.)
1481     */
1482    // syntactic sugar
1483    public PractitionerQualificationComponent addQualification() { //3
1484      PractitionerQualificationComponent t = new PractitionerQualificationComponent();
1485      if (this.qualification == null)
1486        this.qualification = new ArrayList<PractitionerQualificationComponent>();
1487      this.qualification.add(t);
1488      return t;
1489    }
1490
1491    // syntactic sugar
1492    public Practitioner addQualification(PractitionerQualificationComponent t) { //3
1493      if (t == null)
1494        return this;
1495      if (this.qualification == null)
1496        this.qualification = new ArrayList<PractitionerQualificationComponent>();
1497      this.qualification.add(t);
1498      return this;
1499    }
1500
1501    /**
1502     * @return {@link #communication} (A language the practitioner is able to use in patient communication.)
1503     */
1504    public List<CodeableConcept> getCommunication() { 
1505      if (this.communication == null)
1506        this.communication = new ArrayList<CodeableConcept>();
1507      return this.communication;
1508    }
1509
1510    public boolean hasCommunication() { 
1511      if (this.communication == null)
1512        return false;
1513      for (CodeableConcept item : this.communication)
1514        if (!item.isEmpty())
1515          return true;
1516      return false;
1517    }
1518
1519    /**
1520     * @return {@link #communication} (A language the practitioner is able to use in patient communication.)
1521     */
1522    // syntactic sugar
1523    public CodeableConcept addCommunication() { //3
1524      CodeableConcept t = new CodeableConcept();
1525      if (this.communication == null)
1526        this.communication = new ArrayList<CodeableConcept>();
1527      this.communication.add(t);
1528      return t;
1529    }
1530
1531    // syntactic sugar
1532    public Practitioner addCommunication(CodeableConcept t) { //3
1533      if (t == null)
1534        return this;
1535      if (this.communication == null)
1536        this.communication = new ArrayList<CodeableConcept>();
1537      this.communication.add(t);
1538      return this;
1539    }
1540
1541      protected void listChildren(List<Property> childrenList) {
1542        super.listChildren(childrenList);
1543        childrenList.add(new Property("identifier", "Identifier", "An identifier that applies to this person in this role.", 0, java.lang.Integer.MAX_VALUE, identifier));
1544        childrenList.add(new Property("active", "boolean", "Whether this practitioner's record is in active use.", 0, java.lang.Integer.MAX_VALUE, active));
1545        childrenList.add(new Property("name", "HumanName", "The name(s) associated with the practitioner.", 0, java.lang.Integer.MAX_VALUE, name));
1546        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));
1547        childrenList.add(new Property("address", "Address", "Address(es) of the practitioner that are not role specific (typically home address). \nWork addresses are not typically entered in this property as they are usually role dependent.", 0, java.lang.Integer.MAX_VALUE, address));
1548        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));
1549        childrenList.add(new Property("birthDate", "date", "The date of birth for the practitioner.", 0, java.lang.Integer.MAX_VALUE, birthDate));
1550        childrenList.add(new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo));
1551        childrenList.add(new Property("practitionerRole", "", "The list of roles/organizations that the practitioner is associated with.", 0, java.lang.Integer.MAX_VALUE, practitionerRole));
1552        childrenList.add(new Property("qualification", "", "Qualifications obtained by training and certification.", 0, java.lang.Integer.MAX_VALUE, qualification));
1553        childrenList.add(new Property("communication", "CodeableConcept", "A language the practitioner is able to use in patient communication.", 0, java.lang.Integer.MAX_VALUE, communication));
1554      }
1555
1556      @Override
1557      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1558        switch (hash) {
1559        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1560        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1561        case 3373707: /*name*/ return this.name == null ? new Base[0] : this.name.toArray(new Base[this.name.size()]); // HumanName
1562        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
1563        case -1147692044: /*address*/ return this.address == null ? new Base[0] : this.address.toArray(new Base[this.address.size()]); // Address
1564        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // Enumeration<AdministrativeGender>
1565        case -1210031859: /*birthDate*/ return this.birthDate == null ? new Base[0] : new Base[] {this.birthDate}; // DateType
1566        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : this.photo.toArray(new Base[this.photo.size()]); // Attachment
1567        case 221717168: /*practitionerRole*/ return this.practitionerRole == null ? new Base[0] : this.practitionerRole.toArray(new Base[this.practitionerRole.size()]); // PractitionerPractitionerRoleComponent
1568        case -631333393: /*qualification*/ return this.qualification == null ? new Base[0] : this.qualification.toArray(new Base[this.qualification.size()]); // PractitionerQualificationComponent
1569        case -1035284522: /*communication*/ return this.communication == null ? new Base[0] : this.communication.toArray(new Base[this.communication.size()]); // CodeableConcept
1570        default: return super.getProperty(hash, name, checkValid);
1571        }
1572
1573      }
1574
1575      @Override
1576      public void setProperty(int hash, String name, Base value) throws FHIRException {
1577        switch (hash) {
1578        case -1618432855: // identifier
1579          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1580          break;
1581        case -1422950650: // active
1582          this.active = castToBoolean(value); // BooleanType
1583          break;
1584        case 3373707: // name
1585          this.getName().add(castToHumanName(value)); // HumanName
1586          break;
1587        case -1429363305: // telecom
1588          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
1589          break;
1590        case -1147692044: // address
1591          this.getAddress().add(castToAddress(value)); // Address
1592          break;
1593        case -1249512767: // gender
1594          this.gender = new AdministrativeGenderEnumFactory().fromType(value); // Enumeration<AdministrativeGender>
1595          break;
1596        case -1210031859: // birthDate
1597          this.birthDate = castToDate(value); // DateType
1598          break;
1599        case 106642994: // photo
1600          this.getPhoto().add(castToAttachment(value)); // Attachment
1601          break;
1602        case 221717168: // practitionerRole
1603          this.getPractitionerRole().add((PractitionerPractitionerRoleComponent) value); // PractitionerPractitionerRoleComponent
1604          break;
1605        case -631333393: // qualification
1606          this.getQualification().add((PractitionerQualificationComponent) value); // PractitionerQualificationComponent
1607          break;
1608        case -1035284522: // communication
1609          this.getCommunication().add(castToCodeableConcept(value)); // CodeableConcept
1610          break;
1611        default: super.setProperty(hash, name, value);
1612        }
1613
1614      }
1615
1616      @Override
1617      public void setProperty(String name, Base value) throws FHIRException {
1618        if (name.equals("identifier"))
1619          this.getIdentifier().add(castToIdentifier(value));
1620        else if (name.equals("active"))
1621          this.active = castToBoolean(value); // BooleanType
1622        else if (name.equals("name"))
1623          this.getName().add(castToHumanName(value));
1624        else if (name.equals("telecom"))
1625          this.getTelecom().add(castToContactPoint(value));
1626        else if (name.equals("address"))
1627          this.getAddress().add(castToAddress(value));
1628        else if (name.equals("gender"))
1629          this.gender = new AdministrativeGenderEnumFactory().fromType(value); // Enumeration<AdministrativeGender>
1630        else if (name.equals("birthDate"))
1631          this.birthDate = castToDate(value); // DateType
1632        else if (name.equals("photo"))
1633          this.getPhoto().add(castToAttachment(value));
1634        else if (name.equals("practitionerRole"))
1635          this.getPractitionerRole().add((PractitionerPractitionerRoleComponent) value);
1636        else if (name.equals("qualification"))
1637          this.getQualification().add((PractitionerQualificationComponent) value);
1638        else if (name.equals("communication"))
1639          this.getCommunication().add(castToCodeableConcept(value));
1640        else
1641          super.setProperty(name, value);
1642      }
1643
1644      @Override
1645      public Base makeProperty(int hash, String name) throws FHIRException {
1646        switch (hash) {
1647        case -1618432855:  return addIdentifier(); // Identifier
1648        case -1422950650: throw new FHIRException("Cannot make property active as it is not a complex type"); // BooleanType
1649        case 3373707:  return addName(); // HumanName
1650        case -1429363305:  return addTelecom(); // ContactPoint
1651        case -1147692044:  return addAddress(); // Address
1652        case -1249512767: throw new FHIRException("Cannot make property gender as it is not a complex type"); // Enumeration<AdministrativeGender>
1653        case -1210031859: throw new FHIRException("Cannot make property birthDate as it is not a complex type"); // DateType
1654        case 106642994:  return addPhoto(); // Attachment
1655        case 221717168:  return addPractitionerRole(); // PractitionerPractitionerRoleComponent
1656        case -631333393:  return addQualification(); // PractitionerQualificationComponent
1657        case -1035284522:  return addCommunication(); // CodeableConcept
1658        default: return super.makeProperty(hash, name);
1659        }
1660
1661      }
1662
1663      @Override
1664      public Base addChild(String name) throws FHIRException {
1665        if (name.equals("identifier")) {
1666          return addIdentifier();
1667        }
1668        else if (name.equals("active")) {
1669          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.active");
1670        }
1671        else if (name.equals("name")) {
1672          return addName();
1673        }
1674        else if (name.equals("telecom")) {
1675          return addTelecom();
1676        }
1677        else if (name.equals("address")) {
1678          return addAddress();
1679        }
1680        else if (name.equals("gender")) {
1681          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.gender");
1682        }
1683        else if (name.equals("birthDate")) {
1684          throw new FHIRException("Cannot call addChild on a primitive type Practitioner.birthDate");
1685        }
1686        else if (name.equals("photo")) {
1687          return addPhoto();
1688        }
1689        else if (name.equals("practitionerRole")) {
1690          return addPractitionerRole();
1691        }
1692        else if (name.equals("qualification")) {
1693          return addQualification();
1694        }
1695        else if (name.equals("communication")) {
1696          return addCommunication();
1697        }
1698        else
1699          return super.addChild(name);
1700      }
1701
1702  public String fhirType() {
1703    return "Practitioner";
1704
1705  }
1706
1707      public Practitioner copy() {
1708        Practitioner dst = new Practitioner();
1709        copyValues(dst);
1710        if (identifier != null) {
1711          dst.identifier = new ArrayList<Identifier>();
1712          for (Identifier i : identifier)
1713            dst.identifier.add(i.copy());
1714        };
1715        dst.active = active == null ? null : active.copy();
1716        if (name != null) {
1717          dst.name = new ArrayList<HumanName>();
1718          for (HumanName i : name)
1719            dst.name.add(i.copy());
1720        };
1721        if (telecom != null) {
1722          dst.telecom = new ArrayList<ContactPoint>();
1723          for (ContactPoint i : telecom)
1724            dst.telecom.add(i.copy());
1725        };
1726        if (address != null) {
1727          dst.address = new ArrayList<Address>();
1728          for (Address i : address)
1729            dst.address.add(i.copy());
1730        };
1731        dst.gender = gender == null ? null : gender.copy();
1732        dst.birthDate = birthDate == null ? null : birthDate.copy();
1733        if (photo != null) {
1734          dst.photo = new ArrayList<Attachment>();
1735          for (Attachment i : photo)
1736            dst.photo.add(i.copy());
1737        };
1738        if (practitionerRole != null) {
1739          dst.practitionerRole = new ArrayList<PractitionerPractitionerRoleComponent>();
1740          for (PractitionerPractitionerRoleComponent i : practitionerRole)
1741            dst.practitionerRole.add(i.copy());
1742        };
1743        if (qualification != null) {
1744          dst.qualification = new ArrayList<PractitionerQualificationComponent>();
1745          for (PractitionerQualificationComponent i : qualification)
1746            dst.qualification.add(i.copy());
1747        };
1748        if (communication != null) {
1749          dst.communication = new ArrayList<CodeableConcept>();
1750          for (CodeableConcept i : communication)
1751            dst.communication.add(i.copy());
1752        };
1753        return dst;
1754      }
1755
1756      protected Practitioner typedCopy() {
1757        return copy();
1758      }
1759
1760      @Override
1761      public boolean equalsDeep(Base other) {
1762        if (!super.equalsDeep(other))
1763          return false;
1764        if (!(other instanceof Practitioner))
1765          return false;
1766        Practitioner o = (Practitioner) other;
1767        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(name, o.name, true)
1768           && compareDeep(telecom, o.telecom, true) && compareDeep(address, o.address, true) && compareDeep(gender, o.gender, true)
1769           && compareDeep(birthDate, o.birthDate, true) && compareDeep(photo, o.photo, true) && compareDeep(practitionerRole, o.practitionerRole, true)
1770           && compareDeep(qualification, o.qualification, true) && compareDeep(communication, o.communication, true)
1771          ;
1772      }
1773
1774      @Override
1775      public boolean equalsShallow(Base other) {
1776        if (!super.equalsShallow(other))
1777          return false;
1778        if (!(other instanceof Practitioner))
1779          return false;
1780        Practitioner o = (Practitioner) other;
1781        return compareValues(active, o.active, true) && compareValues(gender, o.gender, true) && compareValues(birthDate, o.birthDate, true)
1782          ;
1783      }
1784
1785      public boolean isEmpty() {
1786        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (active == null || active.isEmpty())
1787           && (name == null || name.isEmpty()) && (telecom == null || telecom.isEmpty()) && (address == null || address.isEmpty())
1788           && (gender == null || gender.isEmpty()) && (birthDate == null || birthDate.isEmpty()) && (photo == null || photo.isEmpty())
1789           && (practitionerRole == null || practitionerRole.isEmpty()) && (qualification == null || qualification.isEmpty())
1790           && (communication == null || communication.isEmpty());
1791      }
1792
1793  @Override
1794  public ResourceType getResourceType() {
1795    return ResourceType.Practitioner;
1796   }
1797
1798 /**
1799   * Search parameter: <b>phone</b>
1800   * <p>
1801   * Description: <b>A value in a phone contact</b><br>
1802   * Type: <b>token</b><br>
1803   * Path: <b>Practitioner.telecom(system=phone), Practitioner.practitionerRole.telecom(system=phone)</b><br>
1804   * </p>
1805   */
1806  @SearchParamDefinition(name="phone", path="Practitioner.telecom.where(system='phone') or Practitioner.practitionerRole.telecom.where(system='phone')", description="A value in a phone contact", type="token" )
1807  public static final String SP_PHONE = "phone";
1808 /**
1809   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
1810   * <p>
1811   * Description: <b>A value in a phone contact</b><br>
1812   * Type: <b>token</b><br>
1813   * Path: <b>Practitioner.telecom(system=phone), Practitioner.practitionerRole.telecom(system=phone)</b><br>
1814   * </p>
1815   */
1816  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
1817
1818 /**
1819   * Search parameter: <b>phonetic</b>
1820   * <p>
1821   * Description: <b>A portion of either family or given name using some kind of phonetic matching algorithm</b><br>
1822   * Type: <b>string</b><br>
1823   * Path: <b>Practitioner.name</b><br>
1824   * </p>
1825   */
1826  @SearchParamDefinition(name="phonetic", path="Practitioner.name", description="A portion of either family or given name using some kind of phonetic matching algorithm", type="string" )
1827  public static final String SP_PHONETIC = "phonetic";
1828 /**
1829   * <b>Fluent Client</b> search parameter constant for <b>phonetic</b>
1830   * <p>
1831   * Description: <b>A portion of either family or given name using some kind of phonetic matching algorithm</b><br>
1832   * Type: <b>string</b><br>
1833   * Path: <b>Practitioner.name</b><br>
1834   * </p>
1835   */
1836  public static final ca.uhn.fhir.rest.gclient.StringClientParam PHONETIC = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PHONETIC);
1837
1838 /**
1839   * Search parameter: <b>location</b>
1840   * <p>
1841   * Description: <b>One of the locations at which this practitioner provides care</b><br>
1842   * Type: <b>reference</b><br>
1843   * Path: <b>Practitioner.practitionerRole.location</b><br>
1844   * </p>
1845   */
1846  @SearchParamDefinition(name="location", path="Practitioner.practitionerRole.location", description="One of the locations at which this practitioner provides care", type="reference" )
1847  public static final String SP_LOCATION = "location";
1848 /**
1849   * <b>Fluent Client</b> search parameter constant for <b>location</b>
1850   * <p>
1851   * Description: <b>One of the locations at which this practitioner provides care</b><br>
1852   * Type: <b>reference</b><br>
1853   * Path: <b>Practitioner.practitionerRole.location</b><br>
1854   * </p>
1855   */
1856  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
1857
1858/**
1859   * Constant for fluent queries to be used to add include statements. Specifies
1860   * the path value of "<b>Practitioner:location</b>".
1861   */
1862  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("Practitioner:location").toLocked();
1863
1864 /**
1865   * Search parameter: <b>communication</b>
1866   * <p>
1867   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1868   * Type: <b>token</b><br>
1869   * Path: <b>Practitioner.communication</b><br>
1870   * </p>
1871   */
1872  @SearchParamDefinition(name="communication", path="Practitioner.communication", description="One of the languages that the practitioner can communicate with", type="token" )
1873  public static final String SP_COMMUNICATION = "communication";
1874 /**
1875   * <b>Fluent Client</b> search parameter constant for <b>communication</b>
1876   * <p>
1877   * Description: <b>One of the languages that the practitioner can communicate with</b><br>
1878   * Type: <b>token</b><br>
1879   * Path: <b>Practitioner.communication</b><br>
1880   * </p>
1881   */
1882  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMMUNICATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMMUNICATION);
1883
1884 /**
1885   * Search parameter: <b>address-country</b>
1886   * <p>
1887   * Description: <b>A country specified in an address</b><br>
1888   * Type: <b>string</b><br>
1889   * Path: <b>Practitioner.address.country</b><br>
1890   * </p>
1891   */
1892  @SearchParamDefinition(name="address-country", path="Practitioner.address.country", description="A country specified in an address", type="string" )
1893  public static final String SP_ADDRESS_COUNTRY = "address-country";
1894 /**
1895   * <b>Fluent Client</b> search parameter constant for <b>address-country</b>
1896   * <p>
1897   * Description: <b>A country specified in an address</b><br>
1898   * Type: <b>string</b><br>
1899   * Path: <b>Practitioner.address.country</b><br>
1900   * </p>
1901   */
1902  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_COUNTRY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_COUNTRY);
1903
1904 /**
1905   * Search parameter: <b>organization</b>
1906   * <p>
1907   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
1908   * Type: <b>reference</b><br>
1909   * Path: <b>Practitioner.practitionerRole.organization</b><br>
1910   * </p>
1911   */
1912  @SearchParamDefinition(name="organization", path="Practitioner.practitionerRole.organization", description="The identity of the organization the practitioner represents / acts on behalf of", type="reference" )
1913  public static final String SP_ORGANIZATION = "organization";
1914 /**
1915   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
1916   * <p>
1917   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
1918   * Type: <b>reference</b><br>
1919   * Path: <b>Practitioner.practitionerRole.organization</b><br>
1920   * </p>
1921   */
1922  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
1923
1924/**
1925   * Constant for fluent queries to be used to add include statements. Specifies
1926   * the path value of "<b>Practitioner:organization</b>".
1927   */
1928  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("Practitioner:organization").toLocked();
1929
1930 /**
1931   * Search parameter: <b>address-city</b>
1932   * <p>
1933   * Description: <b>A city specified in an address</b><br>
1934   * Type: <b>string</b><br>
1935   * Path: <b>Practitioner.address.city</b><br>
1936   * </p>
1937   */
1938  @SearchParamDefinition(name="address-city", path="Practitioner.address.city", description="A city specified in an address", type="string" )
1939  public static final String SP_ADDRESS_CITY = "address-city";
1940 /**
1941   * <b>Fluent Client</b> search parameter constant for <b>address-city</b>
1942   * <p>
1943   * Description: <b>A city specified in an address</b><br>
1944   * Type: <b>string</b><br>
1945   * Path: <b>Practitioner.address.city</b><br>
1946   * </p>
1947   */
1948  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_CITY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_CITY);
1949
1950 /**
1951   * Search parameter: <b>address-state</b>
1952   * <p>
1953   * Description: <b>A state specified in an address</b><br>
1954   * Type: <b>string</b><br>
1955   * Path: <b>Practitioner.address.state</b><br>
1956   * </p>
1957   */
1958  @SearchParamDefinition(name="address-state", path="Practitioner.address.state", description="A state specified in an address", type="string" )
1959  public static final String SP_ADDRESS_STATE = "address-state";
1960 /**
1961   * <b>Fluent Client</b> search parameter constant for <b>address-state</b>
1962   * <p>
1963   * Description: <b>A state specified in an address</b><br>
1964   * Type: <b>string</b><br>
1965   * Path: <b>Practitioner.address.state</b><br>
1966   * </p>
1967   */
1968  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_STATE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_STATE);
1969
1970 /**
1971   * Search parameter: <b>given</b>
1972   * <p>
1973   * Description: <b>A portion of the given name</b><br>
1974   * Type: <b>string</b><br>
1975   * Path: <b>Practitioner.name.given</b><br>
1976   * </p>
1977   */
1978  @SearchParamDefinition(name="given", path="Practitioner.name.given", description="A portion of the given name", type="string" )
1979  public static final String SP_GIVEN = "given";
1980 /**
1981   * <b>Fluent Client</b> search parameter constant for <b>given</b>
1982   * <p>
1983   * Description: <b>A portion of the given name</b><br>
1984   * Type: <b>string</b><br>
1985   * Path: <b>Practitioner.name.given</b><br>
1986   * </p>
1987   */
1988  public static final ca.uhn.fhir.rest.gclient.StringClientParam GIVEN = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_GIVEN);
1989
1990 /**
1991   * Search parameter: <b>email</b>
1992   * <p>
1993   * Description: <b>A value in an email contact</b><br>
1994   * Type: <b>token</b><br>
1995   * Path: <b>Practitioner.telecom(system=email), Practitioner.practitionerRole.telecom(system=email)</b><br>
1996   * </p>
1997   */
1998  @SearchParamDefinition(name="email", path="Practitioner.telecom.where(system='email') or Practitioner.practitionerRole.telecom.where(system='email')", description="A value in an email contact", type="token" )
1999  public static final String SP_EMAIL = "email";
2000 /**
2001   * <b>Fluent Client</b> search parameter constant for <b>email</b>
2002   * <p>
2003   * Description: <b>A value in an email contact</b><br>
2004   * Type: <b>token</b><br>
2005   * Path: <b>Practitioner.telecom(system=email), Practitioner.practitionerRole.telecom(system=email)</b><br>
2006   * </p>
2007   */
2008  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
2009
2010 /**
2011   * Search parameter: <b>address</b>
2012   * <p>
2013   * Description: <b>An address in any kind of address/part</b><br>
2014   * Type: <b>string</b><br>
2015   * Path: <b>Practitioner.address</b><br>
2016   * </p>
2017   */
2018  @SearchParamDefinition(name="address", path="Practitioner.address", description="An address in any kind of address/part", type="string" )
2019  public static final String SP_ADDRESS = "address";
2020 /**
2021   * <b>Fluent Client</b> search parameter constant for <b>address</b>
2022   * <p>
2023   * Description: <b>An address in any kind of address/part</b><br>
2024   * Type: <b>string</b><br>
2025   * Path: <b>Practitioner.address</b><br>
2026   * </p>
2027   */
2028  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS);
2029
2030 /**
2031   * Search parameter: <b>address-use</b>
2032   * <p>
2033   * Description: <b>A use code specified in an address</b><br>
2034   * Type: <b>token</b><br>
2035   * Path: <b>Practitioner.address.use</b><br>
2036   * </p>
2037   */
2038  @SearchParamDefinition(name="address-use", path="Practitioner.address.use", description="A use code specified in an address", type="token" )
2039  public static final String SP_ADDRESS_USE = "address-use";
2040 /**
2041   * <b>Fluent Client</b> search parameter constant for <b>address-use</b>
2042   * <p>
2043   * Description: <b>A use code specified in an address</b><br>
2044   * Type: <b>token</b><br>
2045   * Path: <b>Practitioner.address.use</b><br>
2046   * </p>
2047   */
2048  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDRESS_USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDRESS_USE);
2049
2050 /**
2051   * Search parameter: <b>family</b>
2052   * <p>
2053   * Description: <b>A portion of the family name</b><br>
2054   * Type: <b>string</b><br>
2055   * Path: <b>Practitioner.name.family</b><br>
2056   * </p>
2057   */
2058  @SearchParamDefinition(name="family", path="Practitioner.name.family", description="A portion of the family name", type="string" )
2059  public static final String SP_FAMILY = "family";
2060 /**
2061   * <b>Fluent Client</b> search parameter constant for <b>family</b>
2062   * <p>
2063   * Description: <b>A portion of the family name</b><br>
2064   * Type: <b>string</b><br>
2065   * Path: <b>Practitioner.name.family</b><br>
2066   * </p>
2067   */
2068  public static final ca.uhn.fhir.rest.gclient.StringClientParam FAMILY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_FAMILY);
2069
2070 /**
2071   * Search parameter: <b>name</b>
2072   * <p>
2073   * Description: <b>A portion of either family or given name</b><br>
2074   * Type: <b>string</b><br>
2075   * Path: <b>Practitioner.name</b><br>
2076   * </p>
2077   */
2078  @SearchParamDefinition(name="name", path="Practitioner.name", description="A portion of either family or given name", type="string" )
2079  public static final String SP_NAME = "name";
2080 /**
2081   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2082   * <p>
2083   * Description: <b>A portion of either family or given name</b><br>
2084   * Type: <b>string</b><br>
2085   * Path: <b>Practitioner.name</b><br>
2086   * </p>
2087   */
2088  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2089
2090 /**
2091   * Search parameter: <b>telecom</b>
2092   * <p>
2093   * Description: <b>The value in any kind of contact</b><br>
2094   * Type: <b>token</b><br>
2095   * Path: <b>Practitioner.telecom, Practitioner.practitionerRole.telecom</b><br>
2096   * </p>
2097   */
2098  @SearchParamDefinition(name="telecom", path="Practitioner.telecom | Practitioner.practitionerRole.telecom", description="The value in any kind of contact", type="token" )
2099  public static final String SP_TELECOM = "telecom";
2100 /**
2101   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
2102   * <p>
2103   * Description: <b>The value in any kind of contact</b><br>
2104   * Type: <b>token</b><br>
2105   * Path: <b>Practitioner.telecom, Practitioner.practitionerRole.telecom</b><br>
2106   * </p>
2107   */
2108  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
2109
2110 /**
2111   * Search parameter: <b>role</b>
2112   * <p>
2113   * Description: <b>The practitioner can perform this role at for the organization</b><br>
2114   * Type: <b>token</b><br>
2115   * Path: <b>Practitioner.practitionerRole.role</b><br>
2116   * </p>
2117   */
2118  @SearchParamDefinition(name="role", path="Practitioner.practitionerRole.role", description="The practitioner can perform this role at for the organization", type="token" )
2119  public static final String SP_ROLE = "role";
2120 /**
2121   * <b>Fluent Client</b> search parameter constant for <b>role</b>
2122   * <p>
2123   * Description: <b>The practitioner can perform this role at for the organization</b><br>
2124   * Type: <b>token</b><br>
2125   * Path: <b>Practitioner.practitionerRole.role</b><br>
2126   * </p>
2127   */
2128  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ROLE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ROLE);
2129
2130 /**
2131   * Search parameter: <b>gender</b>
2132   * <p>
2133   * Description: <b>Gender of the practitioner</b><br>
2134   * Type: <b>token</b><br>
2135   * Path: <b>Practitioner.gender</b><br>
2136   * </p>
2137   */
2138  @SearchParamDefinition(name="gender", path="Practitioner.gender", description="Gender of the practitioner", type="token" )
2139  public static final String SP_GENDER = "gender";
2140 /**
2141   * <b>Fluent Client</b> search parameter constant for <b>gender</b>
2142   * <p>
2143   * Description: <b>Gender of the practitioner</b><br>
2144   * Type: <b>token</b><br>
2145   * Path: <b>Practitioner.gender</b><br>
2146   * </p>
2147   */
2148  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GENDER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GENDER);
2149
2150 /**
2151   * Search parameter: <b>specialty</b>
2152   * <p>
2153   * Description: <b>The practitioner has this specialty at an organization</b><br>
2154   * Type: <b>token</b><br>
2155   * Path: <b>Practitioner.practitionerRole.specialty</b><br>
2156   * </p>
2157   */
2158  @SearchParamDefinition(name="specialty", path="Practitioner.practitionerRole.specialty", description="The practitioner has this specialty at an organization", type="token" )
2159  public static final String SP_SPECIALTY = "specialty";
2160 /**
2161   * <b>Fluent Client</b> search parameter constant for <b>specialty</b>
2162   * <p>
2163   * Description: <b>The practitioner has this specialty at an organization</b><br>
2164   * Type: <b>token</b><br>
2165   * Path: <b>Practitioner.practitionerRole.specialty</b><br>
2166   * </p>
2167   */
2168  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SPECIALTY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SPECIALTY);
2169
2170 /**
2171   * Search parameter: <b>identifier</b>
2172   * <p>
2173   * Description: <b>A practitioner's Identifier</b><br>
2174   * Type: <b>token</b><br>
2175   * Path: <b>Practitioner.identifier, Practitioner.practitionerRole.identifier</b><br>
2176   * </p>
2177   */
2178  @SearchParamDefinition(name="identifier", path="Practitioner.identifier | Practitioner.practitionerRole.identifier", description="A practitioner's Identifier", type="token" )
2179  public static final String SP_IDENTIFIER = "identifier";
2180 /**
2181   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2182   * <p>
2183   * Description: <b>A practitioner's Identifier</b><br>
2184   * Type: <b>token</b><br>
2185   * Path: <b>Practitioner.identifier, Practitioner.practitionerRole.identifier</b><br>
2186   * </p>
2187   */
2188  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2189
2190 /**
2191   * Search parameter: <b>address-postalcode</b>
2192   * <p>
2193   * Description: <b>A postalCode specified in an address</b><br>
2194   * Type: <b>string</b><br>
2195   * Path: <b>Practitioner.address.postalCode</b><br>
2196   * </p>
2197   */
2198  @SearchParamDefinition(name="address-postalcode", path="Practitioner.address.postalCode", description="A postalCode specified in an address", type="string" )
2199  public static final String SP_ADDRESS_POSTALCODE = "address-postalcode";
2200 /**
2201   * <b>Fluent Client</b> search parameter constant for <b>address-postalcode</b>
2202   * <p>
2203   * Description: <b>A postalCode specified in an address</b><br>
2204   * Type: <b>string</b><br>
2205   * Path: <b>Practitioner.address.postalCode</b><br>
2206   * </p>
2207   */
2208  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_POSTALCODE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_POSTALCODE);
2209
2210
2211}
2212