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.List;
035
036import org.hl7.fhir.exceptions.FHIRException;
037import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
038import org.hl7.fhir.utilities.Utilities;
039
040import ca.uhn.fhir.model.api.annotation.Block;
041import ca.uhn.fhir.model.api.annotation.Child;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.ResourceDef;
044import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
045/**
046 * A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.
047 */
048@ResourceDef(name="PractitionerRole", profile="http://hl7.org/fhir/Profile/PractitionerRole")
049public class PractitionerRole extends DomainResource {
050
051    @Block()
052    public static class PractitionerRoleAvailableTimeComponent extends BackboneElement implements IBaseBackboneElement {
053        /**
054         * Indicates which days of the week are available between the start and end Times.
055         */
056        @Child(name = "daysOfWeek", type = {CodeType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
057        @Description(shortDefinition="mon | tue | wed | thu | fri | sat | sun", formalDefinition="Indicates which days of the week are available between the start and end Times." )
058        protected List<CodeType> daysOfWeek;
059
060        /**
061         * Is this always available? (hence times are irrelevant) e.g. 24 hour service.
062         */
063        @Child(name = "allDay", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
064        @Description(shortDefinition="Always available? e.g. 24 hour service", formalDefinition="Is this always available? (hence times are irrelevant) e.g. 24 hour service." )
065        protected BooleanType allDay;
066
067        /**
068         * The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
069         */
070        @Child(name = "availableStartTime", type = {TimeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
071        @Description(shortDefinition="Opening time of day (ignored if allDay = true)", formalDefinition="The opening time of day. Note: If the AllDay flag is set, then this time is ignored." )
072        protected TimeType availableStartTime;
073
074        /**
075         * The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
076         */
077        @Child(name = "availableEndTime", type = {TimeType.class}, order=4, min=0, max=1, modifier=false, summary=false)
078        @Description(shortDefinition="Closing time of day (ignored if allDay = true)", formalDefinition="The closing time of day. Note: If the AllDay flag is set, then this time is ignored." )
079        protected TimeType availableEndTime;
080
081        private static final long serialVersionUID = 2079379177L;
082
083    /**
084     * Constructor
085     */
086      public PractitionerRoleAvailableTimeComponent() {
087        super();
088      }
089
090        /**
091         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
092         */
093        public List<CodeType> getDaysOfWeek() { 
094          if (this.daysOfWeek == null)
095            this.daysOfWeek = new ArrayList<CodeType>();
096          return this.daysOfWeek;
097        }
098
099        public boolean hasDaysOfWeek() { 
100          if (this.daysOfWeek == null)
101            return false;
102          for (CodeType item : this.daysOfWeek)
103            if (!item.isEmpty())
104              return true;
105          return false;
106        }
107
108        /**
109         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
110         */
111    // syntactic sugar
112        public CodeType addDaysOfWeekElement() {//2 
113          CodeType t = new CodeType();
114          if (this.daysOfWeek == null)
115            this.daysOfWeek = new ArrayList<CodeType>();
116          this.daysOfWeek.add(t);
117          return t;
118        }
119
120        /**
121         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
122         */
123        public PractitionerRoleAvailableTimeComponent addDaysOfWeek(String value) { //1
124          CodeType t = new CodeType();
125          t.setValue(value);
126          if (this.daysOfWeek == null)
127            this.daysOfWeek = new ArrayList<CodeType>();
128          this.daysOfWeek.add(t);
129          return this;
130        }
131
132        /**
133         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
134         */
135        public boolean hasDaysOfWeek(String value) { 
136          if (this.daysOfWeek == null)
137            return false;
138          for (CodeType v : this.daysOfWeek)
139            if (v.equals(value)) // code
140              return true;
141          return false;
142        }
143
144        /**
145         * @return {@link #allDay} (Is this always available? (hence times are irrelevant) e.g. 24 hour service.). This is the underlying object with id, value and extensions. The accessor "getAllDay" gives direct access to the value
146         */
147        public BooleanType getAllDayElement() { 
148          if (this.allDay == null)
149            if (Configuration.errorOnAutoCreate())
150              throw new Error("Attempt to auto-create PractitionerRoleAvailableTimeComponent.allDay");
151            else if (Configuration.doAutoCreate())
152              this.allDay = new BooleanType(); // bb
153          return this.allDay;
154        }
155
156        public boolean hasAllDayElement() { 
157          return this.allDay != null && !this.allDay.isEmpty();
158        }
159
160        public boolean hasAllDay() { 
161          return this.allDay != null && !this.allDay.isEmpty();
162        }
163
164        /**
165         * @param value {@link #allDay} (Is this always available? (hence times are irrelevant) e.g. 24 hour service.). This is the underlying object with id, value and extensions. The accessor "getAllDay" gives direct access to the value
166         */
167        public PractitionerRoleAvailableTimeComponent setAllDayElement(BooleanType value) { 
168          this.allDay = value;
169          return this;
170        }
171
172        /**
173         * @return Is this always available? (hence times are irrelevant) e.g. 24 hour service.
174         */
175        public boolean getAllDay() { 
176          return this.allDay == null || this.allDay.isEmpty() ? false : this.allDay.getValue();
177        }
178
179        /**
180         * @param value Is this always available? (hence times are irrelevant) e.g. 24 hour service.
181         */
182        public PractitionerRoleAvailableTimeComponent setAllDay(boolean value) { 
183            if (this.allDay == null)
184              this.allDay = new BooleanType();
185            this.allDay.setValue(value);
186          return this;
187        }
188
189        /**
190         * @return {@link #availableStartTime} (The opening time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableStartTime" gives direct access to the value
191         */
192        public TimeType getAvailableStartTimeElement() { 
193          if (this.availableStartTime == null)
194            if (Configuration.errorOnAutoCreate())
195              throw new Error("Attempt to auto-create PractitionerRoleAvailableTimeComponent.availableStartTime");
196            else if (Configuration.doAutoCreate())
197              this.availableStartTime = new TimeType(); // bb
198          return this.availableStartTime;
199        }
200
201        public boolean hasAvailableStartTimeElement() { 
202          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
203        }
204
205        public boolean hasAvailableStartTime() { 
206          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
207        }
208
209        /**
210         * @param value {@link #availableStartTime} (The opening time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableStartTime" gives direct access to the value
211         */
212        public PractitionerRoleAvailableTimeComponent setAvailableStartTimeElement(TimeType value) { 
213          this.availableStartTime = value;
214          return this;
215        }
216
217        /**
218         * @return The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
219         */
220        public String getAvailableStartTime() { 
221          return this.availableStartTime == null ? null : this.availableStartTime.getValue();
222        }
223
224        /**
225         * @param value The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
226         */
227        public PractitionerRoleAvailableTimeComponent setAvailableStartTime(String value) { 
228          if (value == null)
229            this.availableStartTime = null;
230          else {
231            if (this.availableStartTime == null)
232              this.availableStartTime = new TimeType();
233            this.availableStartTime.setValue(value);
234          }
235          return this;
236        }
237
238        /**
239         * @return {@link #availableEndTime} (The closing time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableEndTime" gives direct access to the value
240         */
241        public TimeType getAvailableEndTimeElement() { 
242          if (this.availableEndTime == null)
243            if (Configuration.errorOnAutoCreate())
244              throw new Error("Attempt to auto-create PractitionerRoleAvailableTimeComponent.availableEndTime");
245            else if (Configuration.doAutoCreate())
246              this.availableEndTime = new TimeType(); // bb
247          return this.availableEndTime;
248        }
249
250        public boolean hasAvailableEndTimeElement() { 
251          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
252        }
253
254        public boolean hasAvailableEndTime() { 
255          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
256        }
257
258        /**
259         * @param value {@link #availableEndTime} (The closing time of day. Note: If the AllDay flag is set, then this time is ignored.). This is the underlying object with id, value and extensions. The accessor "getAvailableEndTime" gives direct access to the value
260         */
261        public PractitionerRoleAvailableTimeComponent setAvailableEndTimeElement(TimeType value) { 
262          this.availableEndTime = value;
263          return this;
264        }
265
266        /**
267         * @return The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
268         */
269        public String getAvailableEndTime() { 
270          return this.availableEndTime == null ? null : this.availableEndTime.getValue();
271        }
272
273        /**
274         * @param value The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
275         */
276        public PractitionerRoleAvailableTimeComponent setAvailableEndTime(String value) { 
277          if (value == null)
278            this.availableEndTime = null;
279          else {
280            if (this.availableEndTime == null)
281              this.availableEndTime = new TimeType();
282            this.availableEndTime.setValue(value);
283          }
284          return this;
285        }
286
287        protected void listChildren(List<Property> childrenList) {
288          super.listChildren(childrenList);
289          childrenList.add(new Property("daysOfWeek", "code", "Indicates which days of the week are available between the start and end Times.", 0, java.lang.Integer.MAX_VALUE, daysOfWeek));
290          childrenList.add(new Property("allDay", "boolean", "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", 0, java.lang.Integer.MAX_VALUE, allDay));
291          childrenList.add(new Property("availableStartTime", "time", "The opening time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, java.lang.Integer.MAX_VALUE, availableStartTime));
292          childrenList.add(new Property("availableEndTime", "time", "The closing time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, java.lang.Integer.MAX_VALUE, availableEndTime));
293        }
294
295      @Override
296      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
297        switch (hash) {
298        case 68050338: /*daysOfWeek*/ return this.daysOfWeek == null ? new Base[0] : this.daysOfWeek.toArray(new Base[this.daysOfWeek.size()]); // CodeType
299        case -1414913477: /*allDay*/ return this.allDay == null ? new Base[0] : new Base[] {this.allDay}; // BooleanType
300        case -1039453818: /*availableStartTime*/ return this.availableStartTime == null ? new Base[0] : new Base[] {this.availableStartTime}; // TimeType
301        case 101151551: /*availableEndTime*/ return this.availableEndTime == null ? new Base[0] : new Base[] {this.availableEndTime}; // TimeType
302        default: return super.getProperty(hash, name, checkValid);
303        }
304
305      }
306
307      @Override
308      public void setProperty(int hash, String name, Base value) throws FHIRException {
309        switch (hash) {
310        case 68050338: // daysOfWeek
311          this.getDaysOfWeek().add(castToCode(value)); // CodeType
312          break;
313        case -1414913477: // allDay
314          this.allDay = castToBoolean(value); // BooleanType
315          break;
316        case -1039453818: // availableStartTime
317          this.availableStartTime = castToTime(value); // TimeType
318          break;
319        case 101151551: // availableEndTime
320          this.availableEndTime = castToTime(value); // TimeType
321          break;
322        default: super.setProperty(hash, name, value);
323        }
324
325      }
326
327      @Override
328      public void setProperty(String name, Base value) throws FHIRException {
329        if (name.equals("daysOfWeek"))
330          this.getDaysOfWeek().add(castToCode(value));
331        else if (name.equals("allDay"))
332          this.allDay = castToBoolean(value); // BooleanType
333        else if (name.equals("availableStartTime"))
334          this.availableStartTime = castToTime(value); // TimeType
335        else if (name.equals("availableEndTime"))
336          this.availableEndTime = castToTime(value); // TimeType
337        else
338          super.setProperty(name, value);
339      }
340
341      @Override
342      public Base makeProperty(int hash, String name) throws FHIRException {
343        switch (hash) {
344        case 68050338: throw new FHIRException("Cannot make property daysOfWeek as it is not a complex type"); // CodeType
345        case -1414913477: throw new FHIRException("Cannot make property allDay as it is not a complex type"); // BooleanType
346        case -1039453818: throw new FHIRException("Cannot make property availableStartTime as it is not a complex type"); // TimeType
347        case 101151551: throw new FHIRException("Cannot make property availableEndTime as it is not a complex type"); // TimeType
348        default: return super.makeProperty(hash, name);
349        }
350
351      }
352
353      @Override
354      public Base addChild(String name) throws FHIRException {
355        if (name.equals("daysOfWeek")) {
356          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.daysOfWeek");
357        }
358        else if (name.equals("allDay")) {
359          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.allDay");
360        }
361        else if (name.equals("availableStartTime")) {
362          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.availableStartTime");
363        }
364        else if (name.equals("availableEndTime")) {
365          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.availableEndTime");
366        }
367        else
368          return super.addChild(name);
369      }
370
371      public PractitionerRoleAvailableTimeComponent copy() {
372        PractitionerRoleAvailableTimeComponent dst = new PractitionerRoleAvailableTimeComponent();
373        copyValues(dst);
374        if (daysOfWeek != null) {
375          dst.daysOfWeek = new ArrayList<CodeType>();
376          for (CodeType i : daysOfWeek)
377            dst.daysOfWeek.add(i.copy());
378        };
379        dst.allDay = allDay == null ? null : allDay.copy();
380        dst.availableStartTime = availableStartTime == null ? null : availableStartTime.copy();
381        dst.availableEndTime = availableEndTime == null ? null : availableEndTime.copy();
382        return dst;
383      }
384
385      @Override
386      public boolean equalsDeep(Base other) {
387        if (!super.equalsDeep(other))
388          return false;
389        if (!(other instanceof PractitionerRoleAvailableTimeComponent))
390          return false;
391        PractitionerRoleAvailableTimeComponent o = (PractitionerRoleAvailableTimeComponent) other;
392        return compareDeep(daysOfWeek, o.daysOfWeek, true) && compareDeep(allDay, o.allDay, true) && compareDeep(availableStartTime, o.availableStartTime, true)
393           && compareDeep(availableEndTime, o.availableEndTime, true);
394      }
395
396      @Override
397      public boolean equalsShallow(Base other) {
398        if (!super.equalsShallow(other))
399          return false;
400        if (!(other instanceof PractitionerRoleAvailableTimeComponent))
401          return false;
402        PractitionerRoleAvailableTimeComponent o = (PractitionerRoleAvailableTimeComponent) other;
403        return compareValues(daysOfWeek, o.daysOfWeek, true) && compareValues(allDay, o.allDay, true) && compareValues(availableStartTime, o.availableStartTime, true)
404           && compareValues(availableEndTime, o.availableEndTime, true);
405      }
406
407      public boolean isEmpty() {
408        return super.isEmpty() && (daysOfWeek == null || daysOfWeek.isEmpty()) && (allDay == null || allDay.isEmpty())
409           && (availableStartTime == null || availableStartTime.isEmpty()) && (availableEndTime == null || availableEndTime.isEmpty())
410          ;
411      }
412
413  public String fhirType() {
414    return "PractitionerRole.availableTime";
415
416  }
417
418  }
419
420    @Block()
421    public static class PractitionerRoleNotAvailableComponent extends BackboneElement implements IBaseBackboneElement {
422        /**
423         * The reason that can be presented to the user as to why this time is not available.
424         */
425        @Child(name = "description", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
426        @Description(shortDefinition="Reason presented to the user explaining why time not available", formalDefinition="The reason that can be presented to the user as to why this time is not available." )
427        protected StringType description;
428
429        /**
430         * Service is not available (seasonally or for a public holiday) from this date.
431         */
432        @Child(name = "during", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
433        @Description(shortDefinition="Service not availablefrom this date", formalDefinition="Service is not available (seasonally or for a public holiday) from this date." )
434        protected Period during;
435
436        private static final long serialVersionUID = 310849929L;
437
438    /**
439     * Constructor
440     */
441      public PractitionerRoleNotAvailableComponent() {
442        super();
443      }
444
445    /**
446     * Constructor
447     */
448      public PractitionerRoleNotAvailableComponent(StringType description) {
449        super();
450        this.description = description;
451      }
452
453        /**
454         * @return {@link #description} (The reason that can be presented to the user as to why this time is not available.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
455         */
456        public StringType getDescriptionElement() { 
457          if (this.description == null)
458            if (Configuration.errorOnAutoCreate())
459              throw new Error("Attempt to auto-create PractitionerRoleNotAvailableComponent.description");
460            else if (Configuration.doAutoCreate())
461              this.description = new StringType(); // bb
462          return this.description;
463        }
464
465        public boolean hasDescriptionElement() { 
466          return this.description != null && !this.description.isEmpty();
467        }
468
469        public boolean hasDescription() { 
470          return this.description != null && !this.description.isEmpty();
471        }
472
473        /**
474         * @param value {@link #description} (The reason that can be presented to the user as to why this time is not available.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
475         */
476        public PractitionerRoleNotAvailableComponent setDescriptionElement(StringType value) { 
477          this.description = value;
478          return this;
479        }
480
481        /**
482         * @return The reason that can be presented to the user as to why this time is not available.
483         */
484        public String getDescription() { 
485          return this.description == null ? null : this.description.getValue();
486        }
487
488        /**
489         * @param value The reason that can be presented to the user as to why this time is not available.
490         */
491        public PractitionerRoleNotAvailableComponent setDescription(String value) { 
492            if (this.description == null)
493              this.description = new StringType();
494            this.description.setValue(value);
495          return this;
496        }
497
498        /**
499         * @return {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
500         */
501        public Period getDuring() { 
502          if (this.during == null)
503            if (Configuration.errorOnAutoCreate())
504              throw new Error("Attempt to auto-create PractitionerRoleNotAvailableComponent.during");
505            else if (Configuration.doAutoCreate())
506              this.during = new Period(); // cc
507          return this.during;
508        }
509
510        public boolean hasDuring() { 
511          return this.during != null && !this.during.isEmpty();
512        }
513
514        /**
515         * @param value {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
516         */
517        public PractitionerRoleNotAvailableComponent setDuring(Period value) { 
518          this.during = value;
519          return this;
520        }
521
522        protected void listChildren(List<Property> childrenList) {
523          super.listChildren(childrenList);
524          childrenList.add(new Property("description", "string", "The reason that can be presented to the user as to why this time is not available.", 0, java.lang.Integer.MAX_VALUE, description));
525          childrenList.add(new Property("during", "Period", "Service is not available (seasonally or for a public holiday) from this date.", 0, java.lang.Integer.MAX_VALUE, during));
526        }
527
528      @Override
529      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
530        switch (hash) {
531        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
532        case -1320499647: /*during*/ return this.during == null ? new Base[0] : new Base[] {this.during}; // Period
533        default: return super.getProperty(hash, name, checkValid);
534        }
535
536      }
537
538      @Override
539      public void setProperty(int hash, String name, Base value) throws FHIRException {
540        switch (hash) {
541        case -1724546052: // description
542          this.description = castToString(value); // StringType
543          break;
544        case -1320499647: // during
545          this.during = castToPeriod(value); // Period
546          break;
547        default: super.setProperty(hash, name, value);
548        }
549
550      }
551
552      @Override
553      public void setProperty(String name, Base value) throws FHIRException {
554        if (name.equals("description"))
555          this.description = castToString(value); // StringType
556        else if (name.equals("during"))
557          this.during = castToPeriod(value); // Period
558        else
559          super.setProperty(name, value);
560      }
561
562      @Override
563      public Base makeProperty(int hash, String name) throws FHIRException {
564        switch (hash) {
565        case -1724546052: throw new FHIRException("Cannot make property description as it is not a complex type"); // StringType
566        case -1320499647:  return getDuring(); // Period
567        default: return super.makeProperty(hash, name);
568        }
569
570      }
571
572      @Override
573      public Base addChild(String name) throws FHIRException {
574        if (name.equals("description")) {
575          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.description");
576        }
577        else if (name.equals("during")) {
578          this.during = new Period();
579          return this.during;
580        }
581        else
582          return super.addChild(name);
583      }
584
585      public PractitionerRoleNotAvailableComponent copy() {
586        PractitionerRoleNotAvailableComponent dst = new PractitionerRoleNotAvailableComponent();
587        copyValues(dst);
588        dst.description = description == null ? null : description.copy();
589        dst.during = during == null ? null : during.copy();
590        return dst;
591      }
592
593      @Override
594      public boolean equalsDeep(Base other) {
595        if (!super.equalsDeep(other))
596          return false;
597        if (!(other instanceof PractitionerRoleNotAvailableComponent))
598          return false;
599        PractitionerRoleNotAvailableComponent o = (PractitionerRoleNotAvailableComponent) other;
600        return compareDeep(description, o.description, true) && compareDeep(during, o.during, true);
601      }
602
603      @Override
604      public boolean equalsShallow(Base other) {
605        if (!super.equalsShallow(other))
606          return false;
607        if (!(other instanceof PractitionerRoleNotAvailableComponent))
608          return false;
609        PractitionerRoleNotAvailableComponent o = (PractitionerRoleNotAvailableComponent) other;
610        return compareValues(description, o.description, true);
611      }
612
613      public boolean isEmpty() {
614        return super.isEmpty() && (description == null || description.isEmpty()) && (during == null || during.isEmpty())
615          ;
616      }
617
618  public String fhirType() {
619    return "PractitionerRole.notAvailable";
620
621  }
622
623  }
624
625    /**
626     * Business Identifiers that are specific to a role/location.
627     */
628    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
629    @Description(shortDefinition="Business Identifiers that are specific to a role/location", formalDefinition="Business Identifiers that are specific to a role/location." )
630    protected List<Identifier> identifier;
631
632    /**
633     * Whether this practitioner's record is in active use.
634     */
635    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=true)
636    @Description(shortDefinition="Whether this practitioner's record is in active use", formalDefinition="Whether this practitioner's record is in active use." )
637    protected BooleanType active;
638
639    /**
640     * Practitioner that is able to provide the defined services for the organation.
641     */
642    @Child(name = "practitioner", type = {Practitioner.class}, order=2, min=0, max=1, modifier=false, summary=true)
643    @Description(shortDefinition="Practitioner that is able to provide the defined services for the organation", formalDefinition="Practitioner that is able to provide the defined services for the organation." )
644    protected Reference practitioner;
645
646    /**
647     * The actual object that is the target of the reference (Practitioner that is able to provide the defined services for the organation.)
648     */
649    protected Practitioner practitionerTarget;
650
651    /**
652     * The organization where the Practitioner performs the roles associated.
653     */
654    @Child(name = "organization", type = {Organization.class}, order=3, min=0, max=1, modifier=false, summary=true)
655    @Description(shortDefinition="Organization where the roles are available", formalDefinition="The organization where the Practitioner performs the roles associated." )
656    protected Reference organization;
657
658    /**
659     * The actual object that is the target of the reference (The organization where the Practitioner performs the roles associated.)
660     */
661    protected Organization organizationTarget;
662
663    /**
664     * Roles which this practitioner is authorized to perform for the organization.
665     */
666    @Child(name = "role", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
667    @Description(shortDefinition="Roles which this practitioner may perform", formalDefinition="Roles which this practitioner is authorized to perform for the organization." )
668    protected List<CodeableConcept> role;
669
670    /**
671     * Specific specialty of the practitioner.
672     */
673    @Child(name = "specialty", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
674    @Description(shortDefinition="Specific specialty of the practitioner", formalDefinition="Specific specialty of the practitioner." )
675    protected List<CodeableConcept> specialty;
676
677    /**
678     * The location(s) at which this practitioner provides care.
679     */
680    @Child(name = "location", type = {Location.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
681    @Description(shortDefinition="The location(s) at which this practitioner provides care", formalDefinition="The location(s) at which this practitioner provides care." )
682    protected List<Reference> location;
683    /**
684     * The actual objects that are the target of the reference (The location(s) at which this practitioner provides care.)
685     */
686    protected List<Location> locationTarget;
687
688
689    /**
690     * The list of healthcare services that this worker provides for this role's Organization/Location(s).
691     */
692    @Child(name = "healthcareService", type = {HealthcareService.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
693    @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)." )
694    protected List<Reference> healthcareService;
695    /**
696     * 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).)
697     */
698    protected List<HealthcareService> healthcareServiceTarget;
699
700
701    /**
702     * Contact details that are specific to the role/location/service.
703     */
704    @Child(name = "telecom", type = {ContactPoint.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
705    @Description(shortDefinition="Contact details that are specific to the role/location/service", formalDefinition="Contact details that are specific to the role/location/service." )
706    protected List<ContactPoint> telecom;
707
708    /**
709     * The period during which the person is authorized to act as a practitioner in these role(s) for the organization.
710     */
711    @Child(name = "period", type = {Period.class}, order=9, min=0, max=1, modifier=false, summary=true)
712    @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." )
713    protected Period period;
714
715    /**
716     * A collection of times that the Service Site is available.
717     */
718    @Child(name = "availableTime", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
719    @Description(shortDefinition="Times the Service Site is available", formalDefinition="A collection of times that the Service Site is available." )
720    protected List<PractitionerRoleAvailableTimeComponent> availableTime;
721
722    /**
723     * The HealthcareService is not available during this period of time due to the provided reason.
724     */
725    @Child(name = "notAvailable", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
726    @Description(shortDefinition="Not available during this time due to provided reason", formalDefinition="The HealthcareService is not available during this period of time due to the provided reason." )
727    protected List<PractitionerRoleNotAvailableComponent> notAvailable;
728
729    /**
730     * A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
731     */
732    @Child(name = "availabilityExceptions", type = {StringType.class}, order=12, min=0, max=1, modifier=false, summary=false)
733    @Description(shortDefinition="Description of availability exceptions", formalDefinition="A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times." )
734    protected StringType availabilityExceptions;
735
736    private static final long serialVersionUID = -408504135L;
737
738  /**
739   * Constructor
740   */
741    public PractitionerRole() {
742      super();
743    }
744
745    /**
746     * @return {@link #identifier} (Business Identifiers that are specific to a role/location.)
747     */
748    public List<Identifier> getIdentifier() { 
749      if (this.identifier == null)
750        this.identifier = new ArrayList<Identifier>();
751      return this.identifier;
752    }
753
754    public boolean hasIdentifier() { 
755      if (this.identifier == null)
756        return false;
757      for (Identifier item : this.identifier)
758        if (!item.isEmpty())
759          return true;
760      return false;
761    }
762
763    /**
764     * @return {@link #identifier} (Business Identifiers that are specific to a role/location.)
765     */
766    // syntactic sugar
767    public Identifier addIdentifier() { //3
768      Identifier t = new Identifier();
769      if (this.identifier == null)
770        this.identifier = new ArrayList<Identifier>();
771      this.identifier.add(t);
772      return t;
773    }
774
775    // syntactic sugar
776    public PractitionerRole addIdentifier(Identifier t) { //3
777      if (t == null)
778        return this;
779      if (this.identifier == null)
780        this.identifier = new ArrayList<Identifier>();
781      this.identifier.add(t);
782      return this;
783    }
784
785    /**
786     * @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
787     */
788    public BooleanType getActiveElement() { 
789      if (this.active == null)
790        if (Configuration.errorOnAutoCreate())
791          throw new Error("Attempt to auto-create PractitionerRole.active");
792        else if (Configuration.doAutoCreate())
793          this.active = new BooleanType(); // bb
794      return this.active;
795    }
796
797    public boolean hasActiveElement() { 
798      return this.active != null && !this.active.isEmpty();
799    }
800
801    public boolean hasActive() { 
802      return this.active != null && !this.active.isEmpty();
803    }
804
805    /**
806     * @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
807     */
808    public PractitionerRole setActiveElement(BooleanType value) { 
809      this.active = value;
810      return this;
811    }
812
813    /**
814     * @return Whether this practitioner's record is in active use.
815     */
816    public boolean getActive() { 
817      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
818    }
819
820    /**
821     * @param value Whether this practitioner's record is in active use.
822     */
823    public PractitionerRole setActive(boolean value) { 
824        if (this.active == null)
825          this.active = new BooleanType();
826        this.active.setValue(value);
827      return this;
828    }
829
830    /**
831     * @return {@link #practitioner} (Practitioner that is able to provide the defined services for the organation.)
832     */
833    public Reference getPractitioner() { 
834      if (this.practitioner == null)
835        if (Configuration.errorOnAutoCreate())
836          throw new Error("Attempt to auto-create PractitionerRole.practitioner");
837        else if (Configuration.doAutoCreate())
838          this.practitioner = new Reference(); // cc
839      return this.practitioner;
840    }
841
842    public boolean hasPractitioner() { 
843      return this.practitioner != null && !this.practitioner.isEmpty();
844    }
845
846    /**
847     * @param value {@link #practitioner} (Practitioner that is able to provide the defined services for the organation.)
848     */
849    public PractitionerRole setPractitioner(Reference value) { 
850      this.practitioner = value;
851      return this;
852    }
853
854    /**
855     * @return {@link #practitioner} 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. (Practitioner that is able to provide the defined services for the organation.)
856     */
857    public Practitioner getPractitionerTarget() { 
858      if (this.practitionerTarget == null)
859        if (Configuration.errorOnAutoCreate())
860          throw new Error("Attempt to auto-create PractitionerRole.practitioner");
861        else if (Configuration.doAutoCreate())
862          this.practitionerTarget = new Practitioner(); // aa
863      return this.practitionerTarget;
864    }
865
866    /**
867     * @param value {@link #practitioner} 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. (Practitioner that is able to provide the defined services for the organation.)
868     */
869    public PractitionerRole setPractitionerTarget(Practitioner value) { 
870      this.practitionerTarget = value;
871      return this;
872    }
873
874    /**
875     * @return {@link #organization} (The organization where the Practitioner performs the roles associated.)
876     */
877    public Reference getOrganization() { 
878      if (this.organization == null)
879        if (Configuration.errorOnAutoCreate())
880          throw new Error("Attempt to auto-create PractitionerRole.organization");
881        else if (Configuration.doAutoCreate())
882          this.organization = new Reference(); // cc
883      return this.organization;
884    }
885
886    public boolean hasOrganization() { 
887      return this.organization != null && !this.organization.isEmpty();
888    }
889
890    /**
891     * @param value {@link #organization} (The organization where the Practitioner performs the roles associated.)
892     */
893    public PractitionerRole setOrganization(Reference value) { 
894      this.organization = value;
895      return this;
896    }
897
898    /**
899     * @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.)
900     */
901    public Organization getOrganizationTarget() { 
902      if (this.organizationTarget == null)
903        if (Configuration.errorOnAutoCreate())
904          throw new Error("Attempt to auto-create PractitionerRole.organization");
905        else if (Configuration.doAutoCreate())
906          this.organizationTarget = new Organization(); // aa
907      return this.organizationTarget;
908    }
909
910    /**
911     * @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.)
912     */
913    public PractitionerRole setOrganizationTarget(Organization value) { 
914      this.organizationTarget = value;
915      return this;
916    }
917
918    /**
919     * @return {@link #role} (Roles which this practitioner is authorized to perform for the organization.)
920     */
921    public List<CodeableConcept> getRole() { 
922      if (this.role == null)
923        this.role = new ArrayList<CodeableConcept>();
924      return this.role;
925    }
926
927    public boolean hasRole() { 
928      if (this.role == null)
929        return false;
930      for (CodeableConcept item : this.role)
931        if (!item.isEmpty())
932          return true;
933      return false;
934    }
935
936    /**
937     * @return {@link #role} (Roles which this practitioner is authorized to perform for the organization.)
938     */
939    // syntactic sugar
940    public CodeableConcept addRole() { //3
941      CodeableConcept t = new CodeableConcept();
942      if (this.role == null)
943        this.role = new ArrayList<CodeableConcept>();
944      this.role.add(t);
945      return t;
946    }
947
948    // syntactic sugar
949    public PractitionerRole addRole(CodeableConcept t) { //3
950      if (t == null)
951        return this;
952      if (this.role == null)
953        this.role = new ArrayList<CodeableConcept>();
954      this.role.add(t);
955      return this;
956    }
957
958    /**
959     * @return {@link #specialty} (Specific specialty of the practitioner.)
960     */
961    public List<CodeableConcept> getSpecialty() { 
962      if (this.specialty == null)
963        this.specialty = new ArrayList<CodeableConcept>();
964      return this.specialty;
965    }
966
967    public boolean hasSpecialty() { 
968      if (this.specialty == null)
969        return false;
970      for (CodeableConcept item : this.specialty)
971        if (!item.isEmpty())
972          return true;
973      return false;
974    }
975
976    /**
977     * @return {@link #specialty} (Specific specialty of the practitioner.)
978     */
979    // syntactic sugar
980    public CodeableConcept addSpecialty() { //3
981      CodeableConcept t = new CodeableConcept();
982      if (this.specialty == null)
983        this.specialty = new ArrayList<CodeableConcept>();
984      this.specialty.add(t);
985      return t;
986    }
987
988    // syntactic sugar
989    public PractitionerRole addSpecialty(CodeableConcept t) { //3
990      if (t == null)
991        return this;
992      if (this.specialty == null)
993        this.specialty = new ArrayList<CodeableConcept>();
994      this.specialty.add(t);
995      return this;
996    }
997
998    /**
999     * @return {@link #location} (The location(s) at which this practitioner provides care.)
1000     */
1001    public List<Reference> getLocation() { 
1002      if (this.location == null)
1003        this.location = new ArrayList<Reference>();
1004      return this.location;
1005    }
1006
1007    public boolean hasLocation() { 
1008      if (this.location == null)
1009        return false;
1010      for (Reference item : this.location)
1011        if (!item.isEmpty())
1012          return true;
1013      return false;
1014    }
1015
1016    /**
1017     * @return {@link #location} (The location(s) at which this practitioner provides care.)
1018     */
1019    // syntactic sugar
1020    public Reference addLocation() { //3
1021      Reference t = new Reference();
1022      if (this.location == null)
1023        this.location = new ArrayList<Reference>();
1024      this.location.add(t);
1025      return t;
1026    }
1027
1028    // syntactic sugar
1029    public PractitionerRole addLocation(Reference t) { //3
1030      if (t == null)
1031        return this;
1032      if (this.location == null)
1033        this.location = new ArrayList<Reference>();
1034      this.location.add(t);
1035      return this;
1036    }
1037
1038    /**
1039     * @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.)
1040     */
1041    public List<Location> getLocationTarget() { 
1042      if (this.locationTarget == null)
1043        this.locationTarget = new ArrayList<Location>();
1044      return this.locationTarget;
1045    }
1046
1047    // syntactic sugar
1048    /**
1049     * @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.)
1050     */
1051    public Location addLocationTarget() { 
1052      Location r = new Location();
1053      if (this.locationTarget == null)
1054        this.locationTarget = new ArrayList<Location>();
1055      this.locationTarget.add(r);
1056      return r;
1057    }
1058
1059    /**
1060     * @return {@link #healthcareService} (The list of healthcare services that this worker provides for this role's Organization/Location(s).)
1061     */
1062    public List<Reference> getHealthcareService() { 
1063      if (this.healthcareService == null)
1064        this.healthcareService = new ArrayList<Reference>();
1065      return this.healthcareService;
1066    }
1067
1068    public boolean hasHealthcareService() { 
1069      if (this.healthcareService == null)
1070        return false;
1071      for (Reference item : this.healthcareService)
1072        if (!item.isEmpty())
1073          return true;
1074      return false;
1075    }
1076
1077    /**
1078     * @return {@link #healthcareService} (The list of healthcare services that this worker provides for this role's Organization/Location(s).)
1079     */
1080    // syntactic sugar
1081    public Reference addHealthcareService() { //3
1082      Reference t = new Reference();
1083      if (this.healthcareService == null)
1084        this.healthcareService = new ArrayList<Reference>();
1085      this.healthcareService.add(t);
1086      return t;
1087    }
1088
1089    // syntactic sugar
1090    public PractitionerRole addHealthcareService(Reference t) { //3
1091      if (t == null)
1092        return this;
1093      if (this.healthcareService == null)
1094        this.healthcareService = new ArrayList<Reference>();
1095      this.healthcareService.add(t);
1096      return this;
1097    }
1098
1099    /**
1100     * @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).)
1101     */
1102    public List<HealthcareService> getHealthcareServiceTarget() { 
1103      if (this.healthcareServiceTarget == null)
1104        this.healthcareServiceTarget = new ArrayList<HealthcareService>();
1105      return this.healthcareServiceTarget;
1106    }
1107
1108    // syntactic sugar
1109    /**
1110     * @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).)
1111     */
1112    public HealthcareService addHealthcareServiceTarget() { 
1113      HealthcareService r = new HealthcareService();
1114      if (this.healthcareServiceTarget == null)
1115        this.healthcareServiceTarget = new ArrayList<HealthcareService>();
1116      this.healthcareServiceTarget.add(r);
1117      return r;
1118    }
1119
1120    /**
1121     * @return {@link #telecom} (Contact details that are specific to the role/location/service.)
1122     */
1123    public List<ContactPoint> getTelecom() { 
1124      if (this.telecom == null)
1125        this.telecom = new ArrayList<ContactPoint>();
1126      return this.telecom;
1127    }
1128
1129    public boolean hasTelecom() { 
1130      if (this.telecom == null)
1131        return false;
1132      for (ContactPoint item : this.telecom)
1133        if (!item.isEmpty())
1134          return true;
1135      return false;
1136    }
1137
1138    /**
1139     * @return {@link #telecom} (Contact details that are specific to the role/location/service.)
1140     */
1141    // syntactic sugar
1142    public ContactPoint addTelecom() { //3
1143      ContactPoint t = new ContactPoint();
1144      if (this.telecom == null)
1145        this.telecom = new ArrayList<ContactPoint>();
1146      this.telecom.add(t);
1147      return t;
1148    }
1149
1150    // syntactic sugar
1151    public PractitionerRole addTelecom(ContactPoint t) { //3
1152      if (t == null)
1153        return this;
1154      if (this.telecom == null)
1155        this.telecom = new ArrayList<ContactPoint>();
1156      this.telecom.add(t);
1157      return this;
1158    }
1159
1160    /**
1161     * @return {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
1162     */
1163    public Period getPeriod() { 
1164      if (this.period == null)
1165        if (Configuration.errorOnAutoCreate())
1166          throw new Error("Attempt to auto-create PractitionerRole.period");
1167        else if (Configuration.doAutoCreate())
1168          this.period = new Period(); // cc
1169      return this.period;
1170    }
1171
1172    public boolean hasPeriod() { 
1173      return this.period != null && !this.period.isEmpty();
1174    }
1175
1176    /**
1177     * @param value {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
1178     */
1179    public PractitionerRole setPeriod(Period value) { 
1180      this.period = value;
1181      return this;
1182    }
1183
1184    /**
1185     * @return {@link #availableTime} (A collection of times that the Service Site is available.)
1186     */
1187    public List<PractitionerRoleAvailableTimeComponent> getAvailableTime() { 
1188      if (this.availableTime == null)
1189        this.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
1190      return this.availableTime;
1191    }
1192
1193    public boolean hasAvailableTime() { 
1194      if (this.availableTime == null)
1195        return false;
1196      for (PractitionerRoleAvailableTimeComponent item : this.availableTime)
1197        if (!item.isEmpty())
1198          return true;
1199      return false;
1200    }
1201
1202    /**
1203     * @return {@link #availableTime} (A collection of times that the Service Site is available.)
1204     */
1205    // syntactic sugar
1206    public PractitionerRoleAvailableTimeComponent addAvailableTime() { //3
1207      PractitionerRoleAvailableTimeComponent t = new PractitionerRoleAvailableTimeComponent();
1208      if (this.availableTime == null)
1209        this.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
1210      this.availableTime.add(t);
1211      return t;
1212    }
1213
1214    // syntactic sugar
1215    public PractitionerRole addAvailableTime(PractitionerRoleAvailableTimeComponent t) { //3
1216      if (t == null)
1217        return this;
1218      if (this.availableTime == null)
1219        this.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
1220      this.availableTime.add(t);
1221      return this;
1222    }
1223
1224    /**
1225     * @return {@link #notAvailable} (The HealthcareService is not available during this period of time due to the provided reason.)
1226     */
1227    public List<PractitionerRoleNotAvailableComponent> getNotAvailable() { 
1228      if (this.notAvailable == null)
1229        this.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
1230      return this.notAvailable;
1231    }
1232
1233    public boolean hasNotAvailable() { 
1234      if (this.notAvailable == null)
1235        return false;
1236      for (PractitionerRoleNotAvailableComponent item : this.notAvailable)
1237        if (!item.isEmpty())
1238          return true;
1239      return false;
1240    }
1241
1242    /**
1243     * @return {@link #notAvailable} (The HealthcareService is not available during this period of time due to the provided reason.)
1244     */
1245    // syntactic sugar
1246    public PractitionerRoleNotAvailableComponent addNotAvailable() { //3
1247      PractitionerRoleNotAvailableComponent t = new PractitionerRoleNotAvailableComponent();
1248      if (this.notAvailable == null)
1249        this.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
1250      this.notAvailable.add(t);
1251      return t;
1252    }
1253
1254    // syntactic sugar
1255    public PractitionerRole addNotAvailable(PractitionerRoleNotAvailableComponent t) { //3
1256      if (t == null)
1257        return this;
1258      if (this.notAvailable == null)
1259        this.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
1260      this.notAvailable.add(t);
1261      return this;
1262    }
1263
1264    /**
1265     * @return {@link #availabilityExceptions} (A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.). This is the underlying object with id, value and extensions. The accessor "getAvailabilityExceptions" gives direct access to the value
1266     */
1267    public StringType getAvailabilityExceptionsElement() { 
1268      if (this.availabilityExceptions == null)
1269        if (Configuration.errorOnAutoCreate())
1270          throw new Error("Attempt to auto-create PractitionerRole.availabilityExceptions");
1271        else if (Configuration.doAutoCreate())
1272          this.availabilityExceptions = new StringType(); // bb
1273      return this.availabilityExceptions;
1274    }
1275
1276    public boolean hasAvailabilityExceptionsElement() { 
1277      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
1278    }
1279
1280    public boolean hasAvailabilityExceptions() { 
1281      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
1282    }
1283
1284    /**
1285     * @param value {@link #availabilityExceptions} (A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.). This is the underlying object with id, value and extensions. The accessor "getAvailabilityExceptions" gives direct access to the value
1286     */
1287    public PractitionerRole setAvailabilityExceptionsElement(StringType value) { 
1288      this.availabilityExceptions = value;
1289      return this;
1290    }
1291
1292    /**
1293     * @return A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
1294     */
1295    public String getAvailabilityExceptions() { 
1296      return this.availabilityExceptions == null ? null : this.availabilityExceptions.getValue();
1297    }
1298
1299    /**
1300     * @param value A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.
1301     */
1302    public PractitionerRole setAvailabilityExceptions(String value) { 
1303      if (Utilities.noString(value))
1304        this.availabilityExceptions = null;
1305      else {
1306        if (this.availabilityExceptions == null)
1307          this.availabilityExceptions = new StringType();
1308        this.availabilityExceptions.setValue(value);
1309      }
1310      return this;
1311    }
1312
1313      protected void listChildren(List<Property> childrenList) {
1314        super.listChildren(childrenList);
1315        childrenList.add(new Property("identifier", "Identifier", "Business Identifiers that are specific to a role/location.", 0, java.lang.Integer.MAX_VALUE, identifier));
1316        childrenList.add(new Property("active", "boolean", "Whether this practitioner's record is in active use.", 0, java.lang.Integer.MAX_VALUE, active));
1317        childrenList.add(new Property("practitioner", "Reference(Practitioner)", "Practitioner that is able to provide the defined services for the organation.", 0, java.lang.Integer.MAX_VALUE, practitioner));
1318        childrenList.add(new Property("organization", "Reference(Organization)", "The organization where the Practitioner performs the roles associated.", 0, java.lang.Integer.MAX_VALUE, organization));
1319        childrenList.add(new Property("role", "CodeableConcept", "Roles which this practitioner is authorized to perform for the organization.", 0, java.lang.Integer.MAX_VALUE, role));
1320        childrenList.add(new Property("specialty", "CodeableConcept", "Specific specialty of the practitioner.", 0, java.lang.Integer.MAX_VALUE, specialty));
1321        childrenList.add(new Property("location", "Reference(Location)", "The location(s) at which this practitioner provides care.", 0, java.lang.Integer.MAX_VALUE, location));
1322        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));
1323        childrenList.add(new Property("telecom", "ContactPoint", "Contact details that are specific to the role/location/service.", 0, java.lang.Integer.MAX_VALUE, telecom));
1324        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));
1325        childrenList.add(new Property("availableTime", "", "A collection of times that the Service Site is available.", 0, java.lang.Integer.MAX_VALUE, availableTime));
1326        childrenList.add(new Property("notAvailable", "", "The HealthcareService is not available during this period of time due to the provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailable));
1327        childrenList.add(new Property("availabilityExceptions", "string", "A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.", 0, java.lang.Integer.MAX_VALUE, availabilityExceptions));
1328      }
1329
1330      @Override
1331      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1332        switch (hash) {
1333        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1334        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1335        case 574573338: /*practitioner*/ return this.practitioner == null ? new Base[0] : new Base[] {this.practitioner}; // Reference
1336        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
1337        case 3506294: /*role*/ return this.role == null ? new Base[0] : this.role.toArray(new Base[this.role.size()]); // CodeableConcept
1338        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
1339        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // Reference
1340        case 1289661064: /*healthcareService*/ return this.healthcareService == null ? new Base[0] : this.healthcareService.toArray(new Base[this.healthcareService.size()]); // Reference
1341        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
1342        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1343        case 1873069366: /*availableTime*/ return this.availableTime == null ? new Base[0] : this.availableTime.toArray(new Base[this.availableTime.size()]); // PractitionerRoleAvailableTimeComponent
1344        case -629572298: /*notAvailable*/ return this.notAvailable == null ? new Base[0] : this.notAvailable.toArray(new Base[this.notAvailable.size()]); // PractitionerRoleNotAvailableComponent
1345        case -1149143617: /*availabilityExceptions*/ return this.availabilityExceptions == null ? new Base[0] : new Base[] {this.availabilityExceptions}; // StringType
1346        default: return super.getProperty(hash, name, checkValid);
1347        }
1348
1349      }
1350
1351      @Override
1352      public void setProperty(int hash, String name, Base value) throws FHIRException {
1353        switch (hash) {
1354        case -1618432855: // identifier
1355          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1356          break;
1357        case -1422950650: // active
1358          this.active = castToBoolean(value); // BooleanType
1359          break;
1360        case 574573338: // practitioner
1361          this.practitioner = castToReference(value); // Reference
1362          break;
1363        case 1178922291: // organization
1364          this.organization = castToReference(value); // Reference
1365          break;
1366        case 3506294: // role
1367          this.getRole().add(castToCodeableConcept(value)); // CodeableConcept
1368          break;
1369        case -1694759682: // specialty
1370          this.getSpecialty().add(castToCodeableConcept(value)); // CodeableConcept
1371          break;
1372        case 1901043637: // location
1373          this.getLocation().add(castToReference(value)); // Reference
1374          break;
1375        case 1289661064: // healthcareService
1376          this.getHealthcareService().add(castToReference(value)); // Reference
1377          break;
1378        case -1429363305: // telecom
1379          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
1380          break;
1381        case -991726143: // period
1382          this.period = castToPeriod(value); // Period
1383          break;
1384        case 1873069366: // availableTime
1385          this.getAvailableTime().add((PractitionerRoleAvailableTimeComponent) value); // PractitionerRoleAvailableTimeComponent
1386          break;
1387        case -629572298: // notAvailable
1388          this.getNotAvailable().add((PractitionerRoleNotAvailableComponent) value); // PractitionerRoleNotAvailableComponent
1389          break;
1390        case -1149143617: // availabilityExceptions
1391          this.availabilityExceptions = castToString(value); // StringType
1392          break;
1393        default: super.setProperty(hash, name, value);
1394        }
1395
1396      }
1397
1398      @Override
1399      public void setProperty(String name, Base value) throws FHIRException {
1400        if (name.equals("identifier"))
1401          this.getIdentifier().add(castToIdentifier(value));
1402        else if (name.equals("active"))
1403          this.active = castToBoolean(value); // BooleanType
1404        else if (name.equals("practitioner"))
1405          this.practitioner = castToReference(value); // Reference
1406        else if (name.equals("organization"))
1407          this.organization = castToReference(value); // Reference
1408        else if (name.equals("role"))
1409          this.getRole().add(castToCodeableConcept(value));
1410        else if (name.equals("specialty"))
1411          this.getSpecialty().add(castToCodeableConcept(value));
1412        else if (name.equals("location"))
1413          this.getLocation().add(castToReference(value));
1414        else if (name.equals("healthcareService"))
1415          this.getHealthcareService().add(castToReference(value));
1416        else if (name.equals("telecom"))
1417          this.getTelecom().add(castToContactPoint(value));
1418        else if (name.equals("period"))
1419          this.period = castToPeriod(value); // Period
1420        else if (name.equals("availableTime"))
1421          this.getAvailableTime().add((PractitionerRoleAvailableTimeComponent) value);
1422        else if (name.equals("notAvailable"))
1423          this.getNotAvailable().add((PractitionerRoleNotAvailableComponent) value);
1424        else if (name.equals("availabilityExceptions"))
1425          this.availabilityExceptions = castToString(value); // StringType
1426        else
1427          super.setProperty(name, value);
1428      }
1429
1430      @Override
1431      public Base makeProperty(int hash, String name) throws FHIRException {
1432        switch (hash) {
1433        case -1618432855:  return addIdentifier(); // Identifier
1434        case -1422950650: throw new FHIRException("Cannot make property active as it is not a complex type"); // BooleanType
1435        case 574573338:  return getPractitioner(); // Reference
1436        case 1178922291:  return getOrganization(); // Reference
1437        case 3506294:  return addRole(); // CodeableConcept
1438        case -1694759682:  return addSpecialty(); // CodeableConcept
1439        case 1901043637:  return addLocation(); // Reference
1440        case 1289661064:  return addHealthcareService(); // Reference
1441        case -1429363305:  return addTelecom(); // ContactPoint
1442        case -991726143:  return getPeriod(); // Period
1443        case 1873069366:  return addAvailableTime(); // PractitionerRoleAvailableTimeComponent
1444        case -629572298:  return addNotAvailable(); // PractitionerRoleNotAvailableComponent
1445        case -1149143617: throw new FHIRException("Cannot make property availabilityExceptions as it is not a complex type"); // StringType
1446        default: return super.makeProperty(hash, name);
1447        }
1448
1449      }
1450
1451      @Override
1452      public Base addChild(String name) throws FHIRException {
1453        if (name.equals("identifier")) {
1454          return addIdentifier();
1455        }
1456        else if (name.equals("active")) {
1457          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.active");
1458        }
1459        else if (name.equals("practitioner")) {
1460          this.practitioner = new Reference();
1461          return this.practitioner;
1462        }
1463        else if (name.equals("organization")) {
1464          this.organization = new Reference();
1465          return this.organization;
1466        }
1467        else if (name.equals("role")) {
1468          return addRole();
1469        }
1470        else if (name.equals("specialty")) {
1471          return addSpecialty();
1472        }
1473        else if (name.equals("location")) {
1474          return addLocation();
1475        }
1476        else if (name.equals("healthcareService")) {
1477          return addHealthcareService();
1478        }
1479        else if (name.equals("telecom")) {
1480          return addTelecom();
1481        }
1482        else if (name.equals("period")) {
1483          this.period = new Period();
1484          return this.period;
1485        }
1486        else if (name.equals("availableTime")) {
1487          return addAvailableTime();
1488        }
1489        else if (name.equals("notAvailable")) {
1490          return addNotAvailable();
1491        }
1492        else if (name.equals("availabilityExceptions")) {
1493          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.availabilityExceptions");
1494        }
1495        else
1496          return super.addChild(name);
1497      }
1498
1499  public String fhirType() {
1500    return "PractitionerRole";
1501
1502  }
1503
1504      public PractitionerRole copy() {
1505        PractitionerRole dst = new PractitionerRole();
1506        copyValues(dst);
1507        if (identifier != null) {
1508          dst.identifier = new ArrayList<Identifier>();
1509          for (Identifier i : identifier)
1510            dst.identifier.add(i.copy());
1511        };
1512        dst.active = active == null ? null : active.copy();
1513        dst.practitioner = practitioner == null ? null : practitioner.copy();
1514        dst.organization = organization == null ? null : organization.copy();
1515        if (role != null) {
1516          dst.role = new ArrayList<CodeableConcept>();
1517          for (CodeableConcept i : role)
1518            dst.role.add(i.copy());
1519        };
1520        if (specialty != null) {
1521          dst.specialty = new ArrayList<CodeableConcept>();
1522          for (CodeableConcept i : specialty)
1523            dst.specialty.add(i.copy());
1524        };
1525        if (location != null) {
1526          dst.location = new ArrayList<Reference>();
1527          for (Reference i : location)
1528            dst.location.add(i.copy());
1529        };
1530        if (healthcareService != null) {
1531          dst.healthcareService = new ArrayList<Reference>();
1532          for (Reference i : healthcareService)
1533            dst.healthcareService.add(i.copy());
1534        };
1535        if (telecom != null) {
1536          dst.telecom = new ArrayList<ContactPoint>();
1537          for (ContactPoint i : telecom)
1538            dst.telecom.add(i.copy());
1539        };
1540        dst.period = period == null ? null : period.copy();
1541        if (availableTime != null) {
1542          dst.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
1543          for (PractitionerRoleAvailableTimeComponent i : availableTime)
1544            dst.availableTime.add(i.copy());
1545        };
1546        if (notAvailable != null) {
1547          dst.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
1548          for (PractitionerRoleNotAvailableComponent i : notAvailable)
1549            dst.notAvailable.add(i.copy());
1550        };
1551        dst.availabilityExceptions = availabilityExceptions == null ? null : availabilityExceptions.copy();
1552        return dst;
1553      }
1554
1555      protected PractitionerRole typedCopy() {
1556        return copy();
1557      }
1558
1559      @Override
1560      public boolean equalsDeep(Base other) {
1561        if (!super.equalsDeep(other))
1562          return false;
1563        if (!(other instanceof PractitionerRole))
1564          return false;
1565        PractitionerRole o = (PractitionerRole) other;
1566        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(practitioner, o.practitioner, true)
1567           && compareDeep(organization, o.organization, true) && compareDeep(role, o.role, true) && compareDeep(specialty, o.specialty, true)
1568           && compareDeep(location, o.location, true) && compareDeep(healthcareService, o.healthcareService, true)
1569           && compareDeep(telecom, o.telecom, true) && compareDeep(period, o.period, true) && compareDeep(availableTime, o.availableTime, true)
1570           && compareDeep(notAvailable, o.notAvailable, true) && compareDeep(availabilityExceptions, o.availabilityExceptions, true)
1571          ;
1572      }
1573
1574      @Override
1575      public boolean equalsShallow(Base other) {
1576        if (!super.equalsShallow(other))
1577          return false;
1578        if (!(other instanceof PractitionerRole))
1579          return false;
1580        PractitionerRole o = (PractitionerRole) other;
1581        return compareValues(active, o.active, true) && compareValues(availabilityExceptions, o.availabilityExceptions, true)
1582          ;
1583      }
1584
1585      public boolean isEmpty() {
1586        return super.isEmpty() && (identifier == null || identifier.isEmpty()) && (active == null || active.isEmpty())
1587           && (practitioner == null || practitioner.isEmpty()) && (organization == null || organization.isEmpty())
1588           && (role == null || role.isEmpty()) && (specialty == null || specialty.isEmpty()) && (location == null || location.isEmpty())
1589           && (healthcareService == null || healthcareService.isEmpty()) && (telecom == null || telecom.isEmpty())
1590           && (period == null || period.isEmpty()) && (availableTime == null || availableTime.isEmpty())
1591           && (notAvailable == null || notAvailable.isEmpty()) && (availabilityExceptions == null || availabilityExceptions.isEmpty())
1592          ;
1593      }
1594
1595  @Override
1596  public ResourceType getResourceType() {
1597    return ResourceType.PractitionerRole;
1598   }
1599
1600 /**
1601   * Search parameter: <b>organization</b>
1602   * <p>
1603   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
1604   * Type: <b>reference</b><br>
1605   * Path: <b>PractitionerRole.organization</b><br>
1606   * </p>
1607   */
1608  @SearchParamDefinition(name="organization", path="PractitionerRole.organization", description="The identity of the organization the practitioner represents / acts on behalf of", type="reference" )
1609  public static final String SP_ORGANIZATION = "organization";
1610 /**
1611   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
1612   * <p>
1613   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
1614   * Type: <b>reference</b><br>
1615   * Path: <b>PractitionerRole.organization</b><br>
1616   * </p>
1617   */
1618  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
1619
1620/**
1621   * Constant for fluent queries to be used to add include statements. Specifies
1622   * the path value of "<b>PractitionerRole:organization</b>".
1623   */
1624  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("PractitionerRole:organization").toLocked();
1625
1626 /**
1627   * Search parameter: <b>phone</b>
1628   * <p>
1629   * Description: <b>A value in a phone contact</b><br>
1630   * Type: <b>token</b><br>
1631   * Path: <b>PractitionerRole.telecom(system=phone)</b><br>
1632   * </p>
1633   */
1634  @SearchParamDefinition(name="phone", path="PractitionerRole.telecom.where(system='phone')", description="A value in a phone contact", type="token" )
1635  public static final String SP_PHONE = "phone";
1636 /**
1637   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
1638   * <p>
1639   * Description: <b>A value in a phone contact</b><br>
1640   * Type: <b>token</b><br>
1641   * Path: <b>PractitionerRole.telecom(system=phone)</b><br>
1642   * </p>
1643   */
1644  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
1645
1646 /**
1647   * Search parameter: <b>practitioner</b>
1648   * <p>
1649   * Description: <b>Practitioner that is able to provide the defined services for the organation</b><br>
1650   * Type: <b>reference</b><br>
1651   * Path: <b>PractitionerRole.practitioner</b><br>
1652   * </p>
1653   */
1654  @SearchParamDefinition(name="practitioner", path="PractitionerRole.practitioner", description="Practitioner that is able to provide the defined services for the organation", type="reference" )
1655  public static final String SP_PRACTITIONER = "practitioner";
1656 /**
1657   * <b>Fluent Client</b> search parameter constant for <b>practitioner</b>
1658   * <p>
1659   * Description: <b>Practitioner that is able to provide the defined services for the organation</b><br>
1660   * Type: <b>reference</b><br>
1661   * Path: <b>PractitionerRole.practitioner</b><br>
1662   * </p>
1663   */
1664  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRACTITIONER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRACTITIONER);
1665
1666/**
1667   * Constant for fluent queries to be used to add include statements. Specifies
1668   * the path value of "<b>PractitionerRole:practitioner</b>".
1669   */
1670  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRACTITIONER = new ca.uhn.fhir.model.api.Include("PractitionerRole:practitioner").toLocked();
1671
1672 /**
1673   * Search parameter: <b>location</b>
1674   * <p>
1675   * Description: <b>One of the locations at which this practitioner provides care</b><br>
1676   * Type: <b>reference</b><br>
1677   * Path: <b>PractitionerRole.location</b><br>
1678   * </p>
1679   */
1680  @SearchParamDefinition(name="location", path="PractitionerRole.location", description="One of the locations at which this practitioner provides care", type="reference" )
1681  public static final String SP_LOCATION = "location";
1682 /**
1683   * <b>Fluent Client</b> search parameter constant for <b>location</b>
1684   * <p>
1685   * Description: <b>One of the locations at which this practitioner provides care</b><br>
1686   * Type: <b>reference</b><br>
1687   * Path: <b>PractitionerRole.location</b><br>
1688   * </p>
1689   */
1690  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
1691
1692/**
1693   * Constant for fluent queries to be used to add include statements. Specifies
1694   * the path value of "<b>PractitionerRole:location</b>".
1695   */
1696  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("PractitionerRole:location").toLocked();
1697
1698 /**
1699   * Search parameter: <b>email</b>
1700   * <p>
1701   * Description: <b>A value in an email contact</b><br>
1702   * Type: <b>token</b><br>
1703   * Path: <b>PractitionerRole.telecom(system=email)</b><br>
1704   * </p>
1705   */
1706  @SearchParamDefinition(name="email", path="PractitionerRole.telecom.where(system='email')", description="A value in an email contact", type="token" )
1707  public static final String SP_EMAIL = "email";
1708 /**
1709   * <b>Fluent Client</b> search parameter constant for <b>email</b>
1710   * <p>
1711   * Description: <b>A value in an email contact</b><br>
1712   * Type: <b>token</b><br>
1713   * Path: <b>PractitionerRole.telecom(system=email)</b><br>
1714   * </p>
1715   */
1716  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
1717
1718 /**
1719   * Search parameter: <b>telecom</b>
1720   * <p>
1721   * Description: <b>The value in any kind of contact</b><br>
1722   * Type: <b>token</b><br>
1723   * Path: <b>PractitionerRole.telecom</b><br>
1724   * </p>
1725   */
1726  @SearchParamDefinition(name="telecom", path="PractitionerRole.telecom", description="The value in any kind of contact", type="token" )
1727  public static final String SP_TELECOM = "telecom";
1728 /**
1729   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
1730   * <p>
1731   * Description: <b>The value in any kind of contact</b><br>
1732   * Type: <b>token</b><br>
1733   * Path: <b>PractitionerRole.telecom</b><br>
1734   * </p>
1735   */
1736  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
1737
1738 /**
1739   * Search parameter: <b>role</b>
1740   * <p>
1741   * Description: <b>The practitioner can perform this role at for the organization</b><br>
1742   * Type: <b>token</b><br>
1743   * Path: <b>PractitionerRole.role</b><br>
1744   * </p>
1745   */
1746  @SearchParamDefinition(name="role", path="PractitionerRole.role", description="The practitioner can perform this role at for the organization", type="token" )
1747  public static final String SP_ROLE = "role";
1748 /**
1749   * <b>Fluent Client</b> search parameter constant for <b>role</b>
1750   * <p>
1751   * Description: <b>The practitioner can perform this role at for the organization</b><br>
1752   * Type: <b>token</b><br>
1753   * Path: <b>PractitionerRole.role</b><br>
1754   * </p>
1755   */
1756  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ROLE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ROLE);
1757
1758 /**
1759   * Search parameter: <b>specialty</b>
1760   * <p>
1761   * Description: <b>The practitioner has this specialty at an organization</b><br>
1762   * Type: <b>token</b><br>
1763   * Path: <b>PractitionerRole.specialty</b><br>
1764   * </p>
1765   */
1766  @SearchParamDefinition(name="specialty", path="PractitionerRole.specialty", description="The practitioner has this specialty at an organization", type="token" )
1767  public static final String SP_SPECIALTY = "specialty";
1768 /**
1769   * <b>Fluent Client</b> search parameter constant for <b>specialty</b>
1770   * <p>
1771   * Description: <b>The practitioner has this specialty at an organization</b><br>
1772   * Type: <b>token</b><br>
1773   * Path: <b>PractitionerRole.specialty</b><br>
1774   * </p>
1775   */
1776  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SPECIALTY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SPECIALTY);
1777
1778 /**
1779   * Search parameter: <b>identifier</b>
1780   * <p>
1781   * Description: <b>A practitioner's Identifier</b><br>
1782   * Type: <b>token</b><br>
1783   * Path: <b>PractitionerRole.identifier</b><br>
1784   * </p>
1785   */
1786  @SearchParamDefinition(name="identifier", path="PractitionerRole.identifier", description="A practitioner's Identifier", type="token" )
1787  public static final String SP_IDENTIFIER = "identifier";
1788 /**
1789   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1790   * <p>
1791   * Description: <b>A practitioner's Identifier</b><br>
1792   * Type: <b>token</b><br>
1793   * Path: <b>PractitionerRole.identifier</b><br>
1794   * </p>
1795   */
1796  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1797
1798
1799}
1800