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