001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Tue, Dec 13, 2022 17:53+1100 for FHIR vcurrent
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.r5.model.Enumerations.*;
038import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.instance.model.api.ICompositeType;
041import ca.uhn.fhir.model.api.annotation.ResourceDef;
042import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
043import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.ChildOrder;
046import ca.uhn.fhir.model.api.annotation.Description;
047import ca.uhn.fhir.model.api.annotation.Block;
048
049/**
050 * A specific set of Roles/Locations/specialties/services that a practitioner may perform, or has performed at an organization during a period of time.
051 */
052@ResourceDef(name="PractitionerRole", profile="http://hl7.org/fhir/StructureDefinition/PractitionerRole")
053public class PractitionerRole extends DomainResource {
054
055    /**
056     * Business Identifiers that are specific to a role/location.
057     */
058    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
059    @Description(shortDefinition="Business Identifiers that are specific to a role/location", formalDefinition="Business Identifiers that are specific to a role/location." )
060    protected List<Identifier> identifier;
061
062    /**
063     * Whether this practitioner role record is in active use.
064     */
065    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=true)
066    @Description(shortDefinition="Whether this practitioner role record is in active use", formalDefinition="Whether this practitioner role record is in active use." )
067    protected BooleanType active;
068
069    /**
070     * The period during which the person is authorized to act as a practitioner in these role(s) for the organization.
071     */
072    @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
073    @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." )
074    protected Period period;
075
076    /**
077     * Practitioner that is able to provide the defined services for the organization.
078     */
079    @Child(name = "practitioner", type = {Practitioner.class}, order=3, min=0, max=1, modifier=false, summary=true)
080    @Description(shortDefinition="Practitioner that is able to provide the defined services for the organization", formalDefinition="Practitioner that is able to provide the defined services for the organization." )
081    protected Reference practitioner;
082
083    /**
084     * The organization where the Practitioner performs the roles associated.
085     */
086    @Child(name = "organization", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=true)
087    @Description(shortDefinition="Organization where the roles are available", formalDefinition="The organization where the Practitioner performs the roles associated." )
088    protected Reference organization;
089
090    /**
091     * Roles which this practitioner is authorized to perform for the organization.
092     */
093    @Child(name = "code", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
094    @Description(shortDefinition="Roles which this practitioner may perform", formalDefinition="Roles which this practitioner is authorized to perform for the organization." )
095    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/practitioner-role")
096    protected List<CodeableConcept> code;
097
098    /**
099     * The specialty of a practitioner that describes the functional role they are practicing at a given organization or location.
100     */
101    @Child(name = "specialty", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
102    @Description(shortDefinition="Specific specialty of the practitioner", formalDefinition="The specialty of a practitioner that describes the functional role they are practicing at a given organization or location." )
103    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/c80-practice-codes")
104    protected List<CodeableConcept> specialty;
105
106    /**
107     * The location(s) at which this practitioner provides care.
108     */
109    @Child(name = "location", type = {Location.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
110    @Description(shortDefinition="The location(s) at which this practitioner provides care", formalDefinition="The location(s) at which this practitioner provides care." )
111    protected List<Reference> location;
112
113    /**
114     * The list of healthcare services that this worker provides for this role's Organization/Location(s).
115     */
116    @Child(name = "healthcareService", type = {HealthcareService.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
117    @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)." )
118    protected List<Reference> healthcareService;
119
120    /**
121     * The contact details of communication devices available relevant to the specific PractitionerRole. This can include addresses, phone numbers, fax numbers, mobile numbers, email addresses and web sites.
122     */
123    @Child(name = "contact", type = {ExtendedContactDetail.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
124    @Description(shortDefinition="Official contact details relating to this PractitionerRole", formalDefinition="The contact details of communication devices available relevant to the specific PractitionerRole. This can include addresses, phone numbers, fax numbers, mobile numbers, email addresses and web sites." )
125    protected List<ExtendedContactDetail> contact;
126
127    /**
128     * A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.
129     */
130    @Child(name = "availability", type = {Availability.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
131    @Description(shortDefinition="Times the Practitioner is available at this location and/or healthcare service (including exceptions)", formalDefinition="A collection of times the practitioner is available or performing this role at the location and/or healthcareservice." )
132    protected List<Availability> availability;
133
134    /**
135     * Technical endpoints providing access to services operated for the practitioner with this role.
136     */
137    @Child(name = "endpoint", type = {Endpoint.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
138    @Description(shortDefinition="Technical endpoints providing access to services operated for the practitioner with this role", formalDefinition="Technical endpoints providing access to services operated for the practitioner with this role." )
139    protected List<Reference> endpoint;
140
141    private static final long serialVersionUID = -309346881L;
142
143  /**
144   * Constructor
145   */
146    public PractitionerRole() {
147      super();
148    }
149
150    /**
151     * @return {@link #identifier} (Business Identifiers that are specific to a role/location.)
152     */
153    public List<Identifier> getIdentifier() { 
154      if (this.identifier == null)
155        this.identifier = new ArrayList<Identifier>();
156      return this.identifier;
157    }
158
159    /**
160     * @return Returns a reference to <code>this</code> for easy method chaining
161     */
162    public PractitionerRole setIdentifier(List<Identifier> theIdentifier) { 
163      this.identifier = theIdentifier;
164      return this;
165    }
166
167    public boolean hasIdentifier() { 
168      if (this.identifier == null)
169        return false;
170      for (Identifier item : this.identifier)
171        if (!item.isEmpty())
172          return true;
173      return false;
174    }
175
176    public Identifier addIdentifier() { //3
177      Identifier t = new Identifier();
178      if (this.identifier == null)
179        this.identifier = new ArrayList<Identifier>();
180      this.identifier.add(t);
181      return t;
182    }
183
184    public PractitionerRole addIdentifier(Identifier t) { //3
185      if (t == null)
186        return this;
187      if (this.identifier == null)
188        this.identifier = new ArrayList<Identifier>();
189      this.identifier.add(t);
190      return this;
191    }
192
193    /**
194     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
195     */
196    public Identifier getIdentifierFirstRep() { 
197      if (getIdentifier().isEmpty()) {
198        addIdentifier();
199      }
200      return getIdentifier().get(0);
201    }
202
203    /**
204     * @return {@link #active} (Whether this practitioner role record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
205     */
206    public BooleanType getActiveElement() { 
207      if (this.active == null)
208        if (Configuration.errorOnAutoCreate())
209          throw new Error("Attempt to auto-create PractitionerRole.active");
210        else if (Configuration.doAutoCreate())
211          this.active = new BooleanType(); // bb
212      return this.active;
213    }
214
215    public boolean hasActiveElement() { 
216      return this.active != null && !this.active.isEmpty();
217    }
218
219    public boolean hasActive() { 
220      return this.active != null && !this.active.isEmpty();
221    }
222
223    /**
224     * @param value {@link #active} (Whether this practitioner role record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
225     */
226    public PractitionerRole setActiveElement(BooleanType value) { 
227      this.active = value;
228      return this;
229    }
230
231    /**
232     * @return Whether this practitioner role record is in active use.
233     */
234    public boolean getActive() { 
235      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
236    }
237
238    /**
239     * @param value Whether this practitioner role record is in active use.
240     */
241    public PractitionerRole setActive(boolean value) { 
242        if (this.active == null)
243          this.active = new BooleanType();
244        this.active.setValue(value);
245      return this;
246    }
247
248    /**
249     * @return {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
250     */
251    public Period getPeriod() { 
252      if (this.period == null)
253        if (Configuration.errorOnAutoCreate())
254          throw new Error("Attempt to auto-create PractitionerRole.period");
255        else if (Configuration.doAutoCreate())
256          this.period = new Period(); // cc
257      return this.period;
258    }
259
260    public boolean hasPeriod() { 
261      return this.period != null && !this.period.isEmpty();
262    }
263
264    /**
265     * @param value {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
266     */
267    public PractitionerRole setPeriod(Period value) { 
268      this.period = value;
269      return this;
270    }
271
272    /**
273     * @return {@link #practitioner} (Practitioner that is able to provide the defined services for the organization.)
274     */
275    public Reference getPractitioner() { 
276      if (this.practitioner == null)
277        if (Configuration.errorOnAutoCreate())
278          throw new Error("Attempt to auto-create PractitionerRole.practitioner");
279        else if (Configuration.doAutoCreate())
280          this.practitioner = new Reference(); // cc
281      return this.practitioner;
282    }
283
284    public boolean hasPractitioner() { 
285      return this.practitioner != null && !this.practitioner.isEmpty();
286    }
287
288    /**
289     * @param value {@link #practitioner} (Practitioner that is able to provide the defined services for the organization.)
290     */
291    public PractitionerRole setPractitioner(Reference value) { 
292      this.practitioner = value;
293      return this;
294    }
295
296    /**
297     * @return {@link #organization} (The organization where the Practitioner performs the roles associated.)
298     */
299    public Reference getOrganization() { 
300      if (this.organization == null)
301        if (Configuration.errorOnAutoCreate())
302          throw new Error("Attempt to auto-create PractitionerRole.organization");
303        else if (Configuration.doAutoCreate())
304          this.organization = new Reference(); // cc
305      return this.organization;
306    }
307
308    public boolean hasOrganization() { 
309      return this.organization != null && !this.organization.isEmpty();
310    }
311
312    /**
313     * @param value {@link #organization} (The organization where the Practitioner performs the roles associated.)
314     */
315    public PractitionerRole setOrganization(Reference value) { 
316      this.organization = value;
317      return this;
318    }
319
320    /**
321     * @return {@link #code} (Roles which this practitioner is authorized to perform for the organization.)
322     */
323    public List<CodeableConcept> getCode() { 
324      if (this.code == null)
325        this.code = new ArrayList<CodeableConcept>();
326      return this.code;
327    }
328
329    /**
330     * @return Returns a reference to <code>this</code> for easy method chaining
331     */
332    public PractitionerRole setCode(List<CodeableConcept> theCode) { 
333      this.code = theCode;
334      return this;
335    }
336
337    public boolean hasCode() { 
338      if (this.code == null)
339        return false;
340      for (CodeableConcept item : this.code)
341        if (!item.isEmpty())
342          return true;
343      return false;
344    }
345
346    public CodeableConcept addCode() { //3
347      CodeableConcept t = new CodeableConcept();
348      if (this.code == null)
349        this.code = new ArrayList<CodeableConcept>();
350      this.code.add(t);
351      return t;
352    }
353
354    public PractitionerRole addCode(CodeableConcept t) { //3
355      if (t == null)
356        return this;
357      if (this.code == null)
358        this.code = new ArrayList<CodeableConcept>();
359      this.code.add(t);
360      return this;
361    }
362
363    /**
364     * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist {3}
365     */
366    public CodeableConcept getCodeFirstRep() { 
367      if (getCode().isEmpty()) {
368        addCode();
369      }
370      return getCode().get(0);
371    }
372
373    /**
374     * @return {@link #specialty} (The specialty of a practitioner that describes the functional role they are practicing at a given organization or location.)
375     */
376    public List<CodeableConcept> getSpecialty() { 
377      if (this.specialty == null)
378        this.specialty = new ArrayList<CodeableConcept>();
379      return this.specialty;
380    }
381
382    /**
383     * @return Returns a reference to <code>this</code> for easy method chaining
384     */
385    public PractitionerRole setSpecialty(List<CodeableConcept> theSpecialty) { 
386      this.specialty = theSpecialty;
387      return this;
388    }
389
390    public boolean hasSpecialty() { 
391      if (this.specialty == null)
392        return false;
393      for (CodeableConcept item : this.specialty)
394        if (!item.isEmpty())
395          return true;
396      return false;
397    }
398
399    public CodeableConcept addSpecialty() { //3
400      CodeableConcept t = new CodeableConcept();
401      if (this.specialty == null)
402        this.specialty = new ArrayList<CodeableConcept>();
403      this.specialty.add(t);
404      return t;
405    }
406
407    public PractitionerRole addSpecialty(CodeableConcept t) { //3
408      if (t == null)
409        return this;
410      if (this.specialty == null)
411        this.specialty = new ArrayList<CodeableConcept>();
412      this.specialty.add(t);
413      return this;
414    }
415
416    /**
417     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist {3}
418     */
419    public CodeableConcept getSpecialtyFirstRep() { 
420      if (getSpecialty().isEmpty()) {
421        addSpecialty();
422      }
423      return getSpecialty().get(0);
424    }
425
426    /**
427     * @return {@link #location} (The location(s) at which this practitioner provides care.)
428     */
429    public List<Reference> getLocation() { 
430      if (this.location == null)
431        this.location = new ArrayList<Reference>();
432      return this.location;
433    }
434
435    /**
436     * @return Returns a reference to <code>this</code> for easy method chaining
437     */
438    public PractitionerRole setLocation(List<Reference> theLocation) { 
439      this.location = theLocation;
440      return this;
441    }
442
443    public boolean hasLocation() { 
444      if (this.location == null)
445        return false;
446      for (Reference item : this.location)
447        if (!item.isEmpty())
448          return true;
449      return false;
450    }
451
452    public Reference addLocation() { //3
453      Reference t = new Reference();
454      if (this.location == null)
455        this.location = new ArrayList<Reference>();
456      this.location.add(t);
457      return t;
458    }
459
460    public PractitionerRole addLocation(Reference t) { //3
461      if (t == null)
462        return this;
463      if (this.location == null)
464        this.location = new ArrayList<Reference>();
465      this.location.add(t);
466      return this;
467    }
468
469    /**
470     * @return The first repetition of repeating field {@link #location}, creating it if it does not already exist {3}
471     */
472    public Reference getLocationFirstRep() { 
473      if (getLocation().isEmpty()) {
474        addLocation();
475      }
476      return getLocation().get(0);
477    }
478
479    /**
480     * @return {@link #healthcareService} (The list of healthcare services that this worker provides for this role's Organization/Location(s).)
481     */
482    public List<Reference> getHealthcareService() { 
483      if (this.healthcareService == null)
484        this.healthcareService = new ArrayList<Reference>();
485      return this.healthcareService;
486    }
487
488    /**
489     * @return Returns a reference to <code>this</code> for easy method chaining
490     */
491    public PractitionerRole setHealthcareService(List<Reference> theHealthcareService) { 
492      this.healthcareService = theHealthcareService;
493      return this;
494    }
495
496    public boolean hasHealthcareService() { 
497      if (this.healthcareService == null)
498        return false;
499      for (Reference item : this.healthcareService)
500        if (!item.isEmpty())
501          return true;
502      return false;
503    }
504
505    public Reference addHealthcareService() { //3
506      Reference t = new Reference();
507      if (this.healthcareService == null)
508        this.healthcareService = new ArrayList<Reference>();
509      this.healthcareService.add(t);
510      return t;
511    }
512
513    public PractitionerRole addHealthcareService(Reference t) { //3
514      if (t == null)
515        return this;
516      if (this.healthcareService == null)
517        this.healthcareService = new ArrayList<Reference>();
518      this.healthcareService.add(t);
519      return this;
520    }
521
522    /**
523     * @return The first repetition of repeating field {@link #healthcareService}, creating it if it does not already exist {3}
524     */
525    public Reference getHealthcareServiceFirstRep() { 
526      if (getHealthcareService().isEmpty()) {
527        addHealthcareService();
528      }
529      return getHealthcareService().get(0);
530    }
531
532    /**
533     * @return {@link #contact} (The contact details of communication devices available relevant to the specific PractitionerRole. This can include addresses, phone numbers, fax numbers, mobile numbers, email addresses and web sites.)
534     */
535    public List<ExtendedContactDetail> getContact() { 
536      if (this.contact == null)
537        this.contact = new ArrayList<ExtendedContactDetail>();
538      return this.contact;
539    }
540
541    /**
542     * @return Returns a reference to <code>this</code> for easy method chaining
543     */
544    public PractitionerRole setContact(List<ExtendedContactDetail> theContact) { 
545      this.contact = theContact;
546      return this;
547    }
548
549    public boolean hasContact() { 
550      if (this.contact == null)
551        return false;
552      for (ExtendedContactDetail item : this.contact)
553        if (!item.isEmpty())
554          return true;
555      return false;
556    }
557
558    public ExtendedContactDetail addContact() { //3
559      ExtendedContactDetail t = new ExtendedContactDetail();
560      if (this.contact == null)
561        this.contact = new ArrayList<ExtendedContactDetail>();
562      this.contact.add(t);
563      return t;
564    }
565
566    public PractitionerRole addContact(ExtendedContactDetail t) { //3
567      if (t == null)
568        return this;
569      if (this.contact == null)
570        this.contact = new ArrayList<ExtendedContactDetail>();
571      this.contact.add(t);
572      return this;
573    }
574
575    /**
576     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
577     */
578    public ExtendedContactDetail getContactFirstRep() { 
579      if (getContact().isEmpty()) {
580        addContact();
581      }
582      return getContact().get(0);
583    }
584
585    /**
586     * @return {@link #availability} (A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.)
587     */
588    public List<Availability> getAvailability() { 
589      if (this.availability == null)
590        this.availability = new ArrayList<Availability>();
591      return this.availability;
592    }
593
594    /**
595     * @return Returns a reference to <code>this</code> for easy method chaining
596     */
597    public PractitionerRole setAvailability(List<Availability> theAvailability) { 
598      this.availability = theAvailability;
599      return this;
600    }
601
602    public boolean hasAvailability() { 
603      if (this.availability == null)
604        return false;
605      for (Availability item : this.availability)
606        if (!item.isEmpty())
607          return true;
608      return false;
609    }
610
611    public Availability addAvailability() { //3
612      Availability t = new Availability();
613      if (this.availability == null)
614        this.availability = new ArrayList<Availability>();
615      this.availability.add(t);
616      return t;
617    }
618
619    public PractitionerRole addAvailability(Availability t) { //3
620      if (t == null)
621        return this;
622      if (this.availability == null)
623        this.availability = new ArrayList<Availability>();
624      this.availability.add(t);
625      return this;
626    }
627
628    /**
629     * @return The first repetition of repeating field {@link #availability}, creating it if it does not already exist {3}
630     */
631    public Availability getAvailabilityFirstRep() { 
632      if (getAvailability().isEmpty()) {
633        addAvailability();
634      }
635      return getAvailability().get(0);
636    }
637
638    /**
639     * @return {@link #endpoint} (Technical endpoints providing access to services operated for the practitioner with this role.)
640     */
641    public List<Reference> getEndpoint() { 
642      if (this.endpoint == null)
643        this.endpoint = new ArrayList<Reference>();
644      return this.endpoint;
645    }
646
647    /**
648     * @return Returns a reference to <code>this</code> for easy method chaining
649     */
650    public PractitionerRole setEndpoint(List<Reference> theEndpoint) { 
651      this.endpoint = theEndpoint;
652      return this;
653    }
654
655    public boolean hasEndpoint() { 
656      if (this.endpoint == null)
657        return false;
658      for (Reference item : this.endpoint)
659        if (!item.isEmpty())
660          return true;
661      return false;
662    }
663
664    public Reference addEndpoint() { //3
665      Reference t = new Reference();
666      if (this.endpoint == null)
667        this.endpoint = new ArrayList<Reference>();
668      this.endpoint.add(t);
669      return t;
670    }
671
672    public PractitionerRole addEndpoint(Reference t) { //3
673      if (t == null)
674        return this;
675      if (this.endpoint == null)
676        this.endpoint = new ArrayList<Reference>();
677      this.endpoint.add(t);
678      return this;
679    }
680
681    /**
682     * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist {3}
683     */
684    public Reference getEndpointFirstRep() { 
685      if (getEndpoint().isEmpty()) {
686        addEndpoint();
687      }
688      return getEndpoint().get(0);
689    }
690
691      protected void listChildren(List<Property> children) {
692        super.listChildren(children);
693        children.add(new Property("identifier", "Identifier", "Business Identifiers that are specific to a role/location.", 0, java.lang.Integer.MAX_VALUE, identifier));
694        children.add(new Property("active", "boolean", "Whether this practitioner role record is in active use.", 0, 1, active));
695        children.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, 1, period));
696        children.add(new Property("practitioner", "Reference(Practitioner)", "Practitioner that is able to provide the defined services for the organization.", 0, 1, practitioner));
697        children.add(new Property("organization", "Reference(Organization)", "The organization where the Practitioner performs the roles associated.", 0, 1, organization));
698        children.add(new Property("code", "CodeableConcept", "Roles which this practitioner is authorized to perform for the organization.", 0, java.lang.Integer.MAX_VALUE, code));
699        children.add(new Property("specialty", "CodeableConcept", "The specialty of a practitioner that describes the functional role they are practicing at a given organization or location.", 0, java.lang.Integer.MAX_VALUE, specialty));
700        children.add(new Property("location", "Reference(Location)", "The location(s) at which this practitioner provides care.", 0, java.lang.Integer.MAX_VALUE, location));
701        children.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));
702        children.add(new Property("contact", "ExtendedContactDetail", "The contact details of communication devices available relevant to the specific PractitionerRole. This can include addresses, phone numbers, fax numbers, mobile numbers, email addresses and web sites.", 0, java.lang.Integer.MAX_VALUE, contact));
703        children.add(new Property("availability", "Availability", "A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.", 0, java.lang.Integer.MAX_VALUE, availability));
704        children.add(new Property("endpoint", "Reference(Endpoint)", "Technical endpoints providing access to services operated for the practitioner with this role.", 0, java.lang.Integer.MAX_VALUE, endpoint));
705      }
706
707      @Override
708      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
709        switch (_hash) {
710        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business Identifiers that are specific to a role/location.", 0, java.lang.Integer.MAX_VALUE, identifier);
711        case -1422950650: /*active*/  return new Property("active", "boolean", "Whether this practitioner role record is in active use.", 0, 1, active);
712        case -991726143: /*period*/  return 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, 1, period);
713        case 574573338: /*practitioner*/  return new Property("practitioner", "Reference(Practitioner)", "Practitioner that is able to provide the defined services for the organization.", 0, 1, practitioner);
714        case 1178922291: /*organization*/  return new Property("organization", "Reference(Organization)", "The organization where the Practitioner performs the roles associated.", 0, 1, organization);
715        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Roles which this practitioner is authorized to perform for the organization.", 0, java.lang.Integer.MAX_VALUE, code);
716        case -1694759682: /*specialty*/  return new Property("specialty", "CodeableConcept", "The specialty of a practitioner that describes the functional role they are practicing at a given organization or location.", 0, java.lang.Integer.MAX_VALUE, specialty);
717        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "The location(s) at which this practitioner provides care.", 0, java.lang.Integer.MAX_VALUE, location);
718        case 1289661064: /*healthcareService*/  return 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);
719        case 951526432: /*contact*/  return new Property("contact", "ExtendedContactDetail", "The contact details of communication devices available relevant to the specific PractitionerRole. This can include addresses, phone numbers, fax numbers, mobile numbers, email addresses and web sites.", 0, java.lang.Integer.MAX_VALUE, contact);
720        case 1997542747: /*availability*/  return new Property("availability", "Availability", "A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.", 0, java.lang.Integer.MAX_VALUE, availability);
721        case 1741102485: /*endpoint*/  return new Property("endpoint", "Reference(Endpoint)", "Technical endpoints providing access to services operated for the practitioner with this role.", 0, java.lang.Integer.MAX_VALUE, endpoint);
722        default: return super.getNamedProperty(_hash, _name, _checkValid);
723        }
724
725      }
726
727      @Override
728      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
729        switch (hash) {
730        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
731        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
732        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
733        case 574573338: /*practitioner*/ return this.practitioner == null ? new Base[0] : new Base[] {this.practitioner}; // Reference
734        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
735        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // CodeableConcept
736        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
737        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // Reference
738        case 1289661064: /*healthcareService*/ return this.healthcareService == null ? new Base[0] : this.healthcareService.toArray(new Base[this.healthcareService.size()]); // Reference
739        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ExtendedContactDetail
740        case 1997542747: /*availability*/ return this.availability == null ? new Base[0] : this.availability.toArray(new Base[this.availability.size()]); // Availability
741        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
742        default: return super.getProperty(hash, name, checkValid);
743        }
744
745      }
746
747      @Override
748      public Base setProperty(int hash, String name, Base value) throws FHIRException {
749        switch (hash) {
750        case -1618432855: // identifier
751          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
752          return value;
753        case -1422950650: // active
754          this.active = TypeConvertor.castToBoolean(value); // BooleanType
755          return value;
756        case -991726143: // period
757          this.period = TypeConvertor.castToPeriod(value); // Period
758          return value;
759        case 574573338: // practitioner
760          this.practitioner = TypeConvertor.castToReference(value); // Reference
761          return value;
762        case 1178922291: // organization
763          this.organization = TypeConvertor.castToReference(value); // Reference
764          return value;
765        case 3059181: // code
766          this.getCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
767          return value;
768        case -1694759682: // specialty
769          this.getSpecialty().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
770          return value;
771        case 1901043637: // location
772          this.getLocation().add(TypeConvertor.castToReference(value)); // Reference
773          return value;
774        case 1289661064: // healthcareService
775          this.getHealthcareService().add(TypeConvertor.castToReference(value)); // Reference
776          return value;
777        case 951526432: // contact
778          this.getContact().add(TypeConvertor.castToExtendedContactDetail(value)); // ExtendedContactDetail
779          return value;
780        case 1997542747: // availability
781          this.getAvailability().add(TypeConvertor.castToAvailability(value)); // Availability
782          return value;
783        case 1741102485: // endpoint
784          this.getEndpoint().add(TypeConvertor.castToReference(value)); // Reference
785          return value;
786        default: return super.setProperty(hash, name, value);
787        }
788
789      }
790
791      @Override
792      public Base setProperty(String name, Base value) throws FHIRException {
793        if (name.equals("identifier")) {
794          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
795        } else if (name.equals("active")) {
796          this.active = TypeConvertor.castToBoolean(value); // BooleanType
797        } else if (name.equals("period")) {
798          this.period = TypeConvertor.castToPeriod(value); // Period
799        } else if (name.equals("practitioner")) {
800          this.practitioner = TypeConvertor.castToReference(value); // Reference
801        } else if (name.equals("organization")) {
802          this.organization = TypeConvertor.castToReference(value); // Reference
803        } else if (name.equals("code")) {
804          this.getCode().add(TypeConvertor.castToCodeableConcept(value));
805        } else if (name.equals("specialty")) {
806          this.getSpecialty().add(TypeConvertor.castToCodeableConcept(value));
807        } else if (name.equals("location")) {
808          this.getLocation().add(TypeConvertor.castToReference(value));
809        } else if (name.equals("healthcareService")) {
810          this.getHealthcareService().add(TypeConvertor.castToReference(value));
811        } else if (name.equals("contact")) {
812          this.getContact().add(TypeConvertor.castToExtendedContactDetail(value));
813        } else if (name.equals("availability")) {
814          this.getAvailability().add(TypeConvertor.castToAvailability(value));
815        } else if (name.equals("endpoint")) {
816          this.getEndpoint().add(TypeConvertor.castToReference(value));
817        } else
818          return super.setProperty(name, value);
819        return value;
820      }
821
822      @Override
823      public Base makeProperty(int hash, String name) throws FHIRException {
824        switch (hash) {
825        case -1618432855:  return addIdentifier(); 
826        case -1422950650:  return getActiveElement();
827        case -991726143:  return getPeriod();
828        case 574573338:  return getPractitioner();
829        case 1178922291:  return getOrganization();
830        case 3059181:  return addCode(); 
831        case -1694759682:  return addSpecialty(); 
832        case 1901043637:  return addLocation(); 
833        case 1289661064:  return addHealthcareService(); 
834        case 951526432:  return addContact(); 
835        case 1997542747:  return addAvailability(); 
836        case 1741102485:  return addEndpoint(); 
837        default: return super.makeProperty(hash, name);
838        }
839
840      }
841
842      @Override
843      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
844        switch (hash) {
845        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
846        case -1422950650: /*active*/ return new String[] {"boolean"};
847        case -991726143: /*period*/ return new String[] {"Period"};
848        case 574573338: /*practitioner*/ return new String[] {"Reference"};
849        case 1178922291: /*organization*/ return new String[] {"Reference"};
850        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
851        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
852        case 1901043637: /*location*/ return new String[] {"Reference"};
853        case 1289661064: /*healthcareService*/ return new String[] {"Reference"};
854        case 951526432: /*contact*/ return new String[] {"ExtendedContactDetail"};
855        case 1997542747: /*availability*/ return new String[] {"Availability"};
856        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
857        default: return super.getTypesForProperty(hash, name);
858        }
859
860      }
861
862      @Override
863      public Base addChild(String name) throws FHIRException {
864        if (name.equals("identifier")) {
865          return addIdentifier();
866        }
867        else if (name.equals("active")) {
868          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.active");
869        }
870        else if (name.equals("period")) {
871          this.period = new Period();
872          return this.period;
873        }
874        else if (name.equals("practitioner")) {
875          this.practitioner = new Reference();
876          return this.practitioner;
877        }
878        else if (name.equals("organization")) {
879          this.organization = new Reference();
880          return this.organization;
881        }
882        else if (name.equals("code")) {
883          return addCode();
884        }
885        else if (name.equals("specialty")) {
886          return addSpecialty();
887        }
888        else if (name.equals("location")) {
889          return addLocation();
890        }
891        else if (name.equals("healthcareService")) {
892          return addHealthcareService();
893        }
894        else if (name.equals("contact")) {
895          return addContact();
896        }
897        else if (name.equals("availability")) {
898          return addAvailability();
899        }
900        else if (name.equals("endpoint")) {
901          return addEndpoint();
902        }
903        else
904          return super.addChild(name);
905      }
906
907  public String fhirType() {
908    return "PractitionerRole";
909
910  }
911
912      public PractitionerRole copy() {
913        PractitionerRole dst = new PractitionerRole();
914        copyValues(dst);
915        return dst;
916      }
917
918      public void copyValues(PractitionerRole dst) {
919        super.copyValues(dst);
920        if (identifier != null) {
921          dst.identifier = new ArrayList<Identifier>();
922          for (Identifier i : identifier)
923            dst.identifier.add(i.copy());
924        };
925        dst.active = active == null ? null : active.copy();
926        dst.period = period == null ? null : period.copy();
927        dst.practitioner = practitioner == null ? null : practitioner.copy();
928        dst.organization = organization == null ? null : organization.copy();
929        if (code != null) {
930          dst.code = new ArrayList<CodeableConcept>();
931          for (CodeableConcept i : code)
932            dst.code.add(i.copy());
933        };
934        if (specialty != null) {
935          dst.specialty = new ArrayList<CodeableConcept>();
936          for (CodeableConcept i : specialty)
937            dst.specialty.add(i.copy());
938        };
939        if (location != null) {
940          dst.location = new ArrayList<Reference>();
941          for (Reference i : location)
942            dst.location.add(i.copy());
943        };
944        if (healthcareService != null) {
945          dst.healthcareService = new ArrayList<Reference>();
946          for (Reference i : healthcareService)
947            dst.healthcareService.add(i.copy());
948        };
949        if (contact != null) {
950          dst.contact = new ArrayList<ExtendedContactDetail>();
951          for (ExtendedContactDetail i : contact)
952            dst.contact.add(i.copy());
953        };
954        if (availability != null) {
955          dst.availability = new ArrayList<Availability>();
956          for (Availability i : availability)
957            dst.availability.add(i.copy());
958        };
959        if (endpoint != null) {
960          dst.endpoint = new ArrayList<Reference>();
961          for (Reference i : endpoint)
962            dst.endpoint.add(i.copy());
963        };
964      }
965
966      protected PractitionerRole typedCopy() {
967        return copy();
968      }
969
970      @Override
971      public boolean equalsDeep(Base other_) {
972        if (!super.equalsDeep(other_))
973          return false;
974        if (!(other_ instanceof PractitionerRole))
975          return false;
976        PractitionerRole o = (PractitionerRole) other_;
977        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(period, o.period, true)
978           && compareDeep(practitioner, o.practitioner, true) && compareDeep(organization, o.organization, true)
979           && compareDeep(code, o.code, true) && compareDeep(specialty, o.specialty, true) && compareDeep(location, o.location, true)
980           && compareDeep(healthcareService, o.healthcareService, true) && compareDeep(contact, o.contact, true)
981           && compareDeep(availability, o.availability, true) && compareDeep(endpoint, o.endpoint, true);
982      }
983
984      @Override
985      public boolean equalsShallow(Base other_) {
986        if (!super.equalsShallow(other_))
987          return false;
988        if (!(other_ instanceof PractitionerRole))
989          return false;
990        PractitionerRole o = (PractitionerRole) other_;
991        return compareValues(active, o.active, true);
992      }
993
994      public boolean isEmpty() {
995        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, period
996          , practitioner, organization, code, specialty, location, healthcareService, contact
997          , availability, endpoint);
998      }
999
1000  @Override
1001  public ResourceType getResourceType() {
1002    return ResourceType.PractitionerRole;
1003   }
1004
1005 /**
1006   * Search parameter: <b>active</b>
1007   * <p>
1008   * Description: <b>Whether this practitioner role record is in active use</b><br>
1009   * Type: <b>token</b><br>
1010   * Path: <b>PractitionerRole.active</b><br>
1011   * </p>
1012   */
1013  @SearchParamDefinition(name="active", path="PractitionerRole.active", description="Whether this practitioner role record is in active use", type="token" )
1014  public static final String SP_ACTIVE = "active";
1015 /**
1016   * <b>Fluent Client</b> search parameter constant for <b>active</b>
1017   * <p>
1018   * Description: <b>Whether this practitioner role record is in active use</b><br>
1019   * Type: <b>token</b><br>
1020   * Path: <b>PractitionerRole.active</b><br>
1021   * </p>
1022   */
1023  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
1024
1025 /**
1026   * Search parameter: <b>date</b>
1027   * <p>
1028   * Description: <b>The period during which the practitioner is authorized to perform in these role(s)</b><br>
1029   * Type: <b>date</b><br>
1030   * Path: <b>PractitionerRole.period</b><br>
1031   * </p>
1032   */
1033  @SearchParamDefinition(name="date", path="PractitionerRole.period", description="The period during which the practitioner is authorized to perform in these role(s)", type="date" )
1034  public static final String SP_DATE = "date";
1035 /**
1036   * <b>Fluent Client</b> search parameter constant for <b>date</b>
1037   * <p>
1038   * Description: <b>The period during which the practitioner is authorized to perform in these role(s)</b><br>
1039   * Type: <b>date</b><br>
1040   * Path: <b>PractitionerRole.period</b><br>
1041   * </p>
1042   */
1043  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
1044
1045 /**
1046   * Search parameter: <b>endpoint</b>
1047   * <p>
1048   * Description: <b>Technical endpoints providing access to services operated for the practitioner with this role</b><br>
1049   * Type: <b>reference</b><br>
1050   * Path: <b>PractitionerRole.endpoint</b><br>
1051   * </p>
1052   */
1053  @SearchParamDefinition(name="endpoint", path="PractitionerRole.endpoint", description="Technical endpoints providing access to services operated for the practitioner with this role", type="reference", target={Endpoint.class } )
1054  public static final String SP_ENDPOINT = "endpoint";
1055 /**
1056   * <b>Fluent Client</b> search parameter constant for <b>endpoint</b>
1057   * <p>
1058   * Description: <b>Technical endpoints providing access to services operated for the practitioner with this role</b><br>
1059   * Type: <b>reference</b><br>
1060   * Path: <b>PractitionerRole.endpoint</b><br>
1061   * </p>
1062   */
1063  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENDPOINT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENDPOINT);
1064
1065/**
1066   * Constant for fluent queries to be used to add include statements. Specifies
1067   * the path value of "<b>PractitionerRole:endpoint</b>".
1068   */
1069  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENDPOINT = new ca.uhn.fhir.model.api.Include("PractitionerRole:endpoint").toLocked();
1070
1071 /**
1072   * Search parameter: <b>identifier</b>
1073   * <p>
1074   * Description: <b>A practitioner's Identifier</b><br>
1075   * Type: <b>token</b><br>
1076   * Path: <b>PractitionerRole.identifier</b><br>
1077   * </p>
1078   */
1079  @SearchParamDefinition(name="identifier", path="PractitionerRole.identifier", description="A practitioner's Identifier", type="token" )
1080  public static final String SP_IDENTIFIER = "identifier";
1081 /**
1082   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1083   * <p>
1084   * Description: <b>A practitioner's Identifier</b><br>
1085   * Type: <b>token</b><br>
1086   * Path: <b>PractitionerRole.identifier</b><br>
1087   * </p>
1088   */
1089  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1090
1091 /**
1092   * Search parameter: <b>location</b>
1093   * <p>
1094   * Description: <b>One of the locations at which this practitioner provides care</b><br>
1095   * Type: <b>reference</b><br>
1096   * Path: <b>PractitionerRole.location</b><br>
1097   * </p>
1098   */
1099  @SearchParamDefinition(name="location", path="PractitionerRole.location", description="One of the locations at which this practitioner provides care", type="reference", target={Location.class } )
1100  public static final String SP_LOCATION = "location";
1101 /**
1102   * <b>Fluent Client</b> search parameter constant for <b>location</b>
1103   * <p>
1104   * Description: <b>One of the locations at which this practitioner provides care</b><br>
1105   * Type: <b>reference</b><br>
1106   * Path: <b>PractitionerRole.location</b><br>
1107   * </p>
1108   */
1109  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
1110
1111/**
1112   * Constant for fluent queries to be used to add include statements. Specifies
1113   * the path value of "<b>PractitionerRole:location</b>".
1114   */
1115  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("PractitionerRole:location").toLocked();
1116
1117 /**
1118   * Search parameter: <b>organization</b>
1119   * <p>
1120   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
1121   * Type: <b>reference</b><br>
1122   * Path: <b>PractitionerRole.organization</b><br>
1123   * </p>
1124   */
1125  @SearchParamDefinition(name="organization", path="PractitionerRole.organization", description="The identity of the organization the practitioner represents / acts on behalf of", type="reference", target={Organization.class } )
1126  public static final String SP_ORGANIZATION = "organization";
1127 /**
1128   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
1129   * <p>
1130   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
1131   * Type: <b>reference</b><br>
1132   * Path: <b>PractitionerRole.organization</b><br>
1133   * </p>
1134   */
1135  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
1136
1137/**
1138   * Constant for fluent queries to be used to add include statements. Specifies
1139   * the path value of "<b>PractitionerRole:organization</b>".
1140   */
1141  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("PractitionerRole:organization").toLocked();
1142
1143 /**
1144   * Search parameter: <b>practitioner</b>
1145   * <p>
1146   * Description: <b>Practitioner that is able to provide the defined services for the organization</b><br>
1147   * Type: <b>reference</b><br>
1148   * Path: <b>PractitionerRole.practitioner</b><br>
1149   * </p>
1150   */
1151  @SearchParamDefinition(name="practitioner", path="PractitionerRole.practitioner", description="Practitioner that is able to provide the defined services for the organization", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Practitioner.class } )
1152  public static final String SP_PRACTITIONER = "practitioner";
1153 /**
1154   * <b>Fluent Client</b> search parameter constant for <b>practitioner</b>
1155   * <p>
1156   * Description: <b>Practitioner that is able to provide the defined services for the organization</b><br>
1157   * Type: <b>reference</b><br>
1158   * Path: <b>PractitionerRole.practitioner</b><br>
1159   * </p>
1160   */
1161  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRACTITIONER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRACTITIONER);
1162
1163/**
1164   * Constant for fluent queries to be used to add include statements. Specifies
1165   * the path value of "<b>PractitionerRole:practitioner</b>".
1166   */
1167  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRACTITIONER = new ca.uhn.fhir.model.api.Include("PractitionerRole:practitioner").toLocked();
1168
1169 /**
1170   * Search parameter: <b>role</b>
1171   * <p>
1172   * Description: <b>The practitioner can perform this role at for the organization</b><br>
1173   * Type: <b>token</b><br>
1174   * Path: <b>PractitionerRole.code</b><br>
1175   * </p>
1176   */
1177  @SearchParamDefinition(name="role", path="PractitionerRole.code", description="The practitioner can perform this role at for the organization", type="token" )
1178  public static final String SP_ROLE = "role";
1179 /**
1180   * <b>Fluent Client</b> search parameter constant for <b>role</b>
1181   * <p>
1182   * Description: <b>The practitioner can perform this role at for the organization</b><br>
1183   * Type: <b>token</b><br>
1184   * Path: <b>PractitionerRole.code</b><br>
1185   * </p>
1186   */
1187  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ROLE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ROLE);
1188
1189 /**
1190   * Search parameter: <b>service</b>
1191   * <p>
1192   * Description: <b>The list of healthcare services that this worker provides for this role's Organization/Location(s)</b><br>
1193   * Type: <b>reference</b><br>
1194   * Path: <b>PractitionerRole.healthcareService</b><br>
1195   * </p>
1196   */
1197  @SearchParamDefinition(name="service", path="PractitionerRole.healthcareService", description="The list of healthcare services that this worker provides for this role's Organization/Location(s)", type="reference", target={HealthcareService.class } )
1198  public static final String SP_SERVICE = "service";
1199 /**
1200   * <b>Fluent Client</b> search parameter constant for <b>service</b>
1201   * <p>
1202   * Description: <b>The list of healthcare services that this worker provides for this role's Organization/Location(s)</b><br>
1203   * Type: <b>reference</b><br>
1204   * Path: <b>PractitionerRole.healthcareService</b><br>
1205   * </p>
1206   */
1207  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SERVICE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SERVICE);
1208
1209/**
1210   * Constant for fluent queries to be used to add include statements. Specifies
1211   * the path value of "<b>PractitionerRole:service</b>".
1212   */
1213  public static final ca.uhn.fhir.model.api.Include INCLUDE_SERVICE = new ca.uhn.fhir.model.api.Include("PractitionerRole:service").toLocked();
1214
1215 /**
1216   * Search parameter: <b>specialty</b>
1217   * <p>
1218   * Description: <b>The practitioner has this specialty at an organization</b><br>
1219   * Type: <b>token</b><br>
1220   * Path: <b>PractitionerRole.specialty</b><br>
1221   * </p>
1222   */
1223  @SearchParamDefinition(name="specialty", path="PractitionerRole.specialty", description="The practitioner has this specialty at an organization", type="token" )
1224  public static final String SP_SPECIALTY = "specialty";
1225 /**
1226   * <b>Fluent Client</b> search parameter constant for <b>specialty</b>
1227   * <p>
1228   * Description: <b>The practitioner has this specialty at an organization</b><br>
1229   * Type: <b>token</b><br>
1230   * Path: <b>PractitionerRole.specialty</b><br>
1231   * </p>
1232   */
1233  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SPECIALTY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SPECIALTY);
1234
1235 /**
1236   * Search parameter: <b>email</b>
1237   * <p>
1238   * Description: <b>Multiple Resources: 
1239
1240* [Patient](patient.html): A value in an email contact
1241* [Person](person.html): A value in an email contact
1242* [Practitioner](practitioner.html): A value in an email contact
1243* [PractitionerRole](practitionerrole.html): A value in an email contact
1244* [RelatedPerson](relatedperson.html): A value in an email contact
1245</b><br>
1246   * Type: <b>token</b><br>
1247   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.contact.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1248   * </p>
1249   */
1250  @SearchParamDefinition(name="email", path="Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.contact.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A value in an email contact\r\n* [Person](person.html): A value in an email contact\r\n* [Practitioner](practitioner.html): A value in an email contact\r\n* [PractitionerRole](practitionerrole.html): A value in an email contact\r\n* [RelatedPerson](relatedperson.html): A value in an email contact\r\n", type="token" )
1251  public static final String SP_EMAIL = "email";
1252 /**
1253   * <b>Fluent Client</b> search parameter constant for <b>email</b>
1254   * <p>
1255   * Description: <b>Multiple Resources: 
1256
1257* [Patient](patient.html): A value in an email contact
1258* [Person](person.html): A value in an email contact
1259* [Practitioner](practitioner.html): A value in an email contact
1260* [PractitionerRole](practitionerrole.html): A value in an email contact
1261* [RelatedPerson](relatedperson.html): A value in an email contact
1262</b><br>
1263   * Type: <b>token</b><br>
1264   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.contact.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1265   * </p>
1266   */
1267  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
1268
1269 /**
1270   * Search parameter: <b>phone</b>
1271   * <p>
1272   * Description: <b>Multiple Resources: 
1273
1274* [Patient](patient.html): A value in a phone contact
1275* [Person](person.html): A value in a phone contact
1276* [Practitioner](practitioner.html): A value in a phone contact
1277* [PractitionerRole](practitionerrole.html): A value in a phone contact
1278* [RelatedPerson](relatedperson.html): A value in a phone contact
1279</b><br>
1280   * Type: <b>token</b><br>
1281   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.contact.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1282   * </p>
1283   */
1284  @SearchParamDefinition(name="phone", path="Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.contact.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A value in a phone contact\r\n* [Person](person.html): A value in a phone contact\r\n* [Practitioner](practitioner.html): A value in a phone contact\r\n* [PractitionerRole](practitionerrole.html): A value in a phone contact\r\n* [RelatedPerson](relatedperson.html): A value in a phone contact\r\n", type="token" )
1285  public static final String SP_PHONE = "phone";
1286 /**
1287   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
1288   * <p>
1289   * Description: <b>Multiple Resources: 
1290
1291* [Patient](patient.html): A value in a phone contact
1292* [Person](person.html): A value in a phone contact
1293* [Practitioner](practitioner.html): A value in a phone contact
1294* [PractitionerRole](practitionerrole.html): A value in a phone contact
1295* [RelatedPerson](relatedperson.html): A value in a phone contact
1296</b><br>
1297   * Type: <b>token</b><br>
1298   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.contact.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1299   * </p>
1300   */
1301  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
1302
1303 /**
1304   * Search parameter: <b>telecom</b>
1305   * <p>
1306   * Description: <b>Multiple Resources: 
1307
1308* [Patient](patient.html): The value in any kind of telecom details of the patient
1309* [Person](person.html): The value in any kind of contact
1310* [Practitioner](practitioner.html): The value in any kind of contact
1311* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1312* [RelatedPerson](relatedperson.html): The value in any kind of contact
1313</b><br>
1314   * Type: <b>token</b><br>
1315   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.contact.telecom | RelatedPerson.telecom</b><br>
1316   * </p>
1317   */
1318  @SearchParamDefinition(name="telecom", path="Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.contact.telecom | RelatedPerson.telecom", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): The value in any kind of telecom details of the patient\r\n* [Person](person.html): The value in any kind of contact\r\n* [Practitioner](practitioner.html): The value in any kind of contact\r\n* [PractitionerRole](practitionerrole.html): The value in any kind of contact\r\n* [RelatedPerson](relatedperson.html): The value in any kind of contact\r\n", type="token" )
1319  public static final String SP_TELECOM = "telecom";
1320 /**
1321   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
1322   * <p>
1323   * Description: <b>Multiple Resources: 
1324
1325* [Patient](patient.html): The value in any kind of telecom details of the patient
1326* [Person](person.html): The value in any kind of contact
1327* [Practitioner](practitioner.html): The value in any kind of contact
1328* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1329* [RelatedPerson](relatedperson.html): The value in any kind of contact
1330</b><br>
1331   * Type: <b>token</b><br>
1332   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.contact.telecom | RelatedPerson.telecom</b><br>
1333   * </p>
1334   */
1335  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
1336
1337
1338}
1339