001package org.hl7.fhir.r4.model;
002
003/*-
004 * #%L
005 * org.hl7.fhir.r4
006 * %%
007 * Copyright (C) 2014 - 2019 Health Level 7
008 * %%
009 * Licensed under the Apache License, Version 2.0 (the "License");
010 * you may not use this file except in compliance with the License.
011 * You may obtain a copy of the License at
012 * 
013 *      http://www.apache.org/licenses/LICENSE-2.0
014 * 
015 * Unless required by applicable law or agreed to in writing, software
016 * distributed under the License is distributed on an "AS IS" BASIS,
017 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018 * See the License for the specific language governing permissions and
019 * limitations under the License.
020 * #L%
021 */
022
023/*
024  Copyright (c) 2011+, HL7, Inc.
025  All rights reserved.
026  
027  Redistribution and use in source and binary forms, with or without modification, 
028  are permitted provided that the following conditions are met:
029  
030   * Redistributions of source code must retain the above copyright notice, this 
031     list of conditions and the following disclaimer.
032   * Redistributions in binary form must reproduce the above copyright notice, 
033     this list of conditions and the following disclaimer in the documentation 
034     and/or other materials provided with the distribution.
035   * Neither the name of HL7 nor the names of its contributors may be used to 
036     endorse or promote products derived from this software without specific 
037     prior written permission.
038  
039  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
040  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
041  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
042  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
043  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
044  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
045  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
046  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
047  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
048  POSSIBILITY OF SUCH DAMAGE.
049  
050*/
051
052// Generated on Thu, Dec 13, 2018 14:07+1100 for FHIR v4.0.0
053import java.util.ArrayList;
054import java.util.List;
055
056import org.hl7.fhir.exceptions.FHIRException;
057import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
058import org.hl7.fhir.utilities.Utilities;
059
060import ca.uhn.fhir.model.api.annotation.Block;
061import ca.uhn.fhir.model.api.annotation.Child;
062import ca.uhn.fhir.model.api.annotation.Description;
063import ca.uhn.fhir.model.api.annotation.ResourceDef;
064import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
065/**
066 * A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.
067 */
068@ResourceDef(name="PractitionerRole", profile="http://hl7.org/fhir/StructureDefinition/PractitionerRole")
069public class PractitionerRole extends DomainResource {
070
071    public enum DaysOfWeek {
072        /**
073         * Monday.
074         */
075        MON, 
076        /**
077         * Tuesday.
078         */
079        TUE, 
080        /**
081         * Wednesday.
082         */
083        WED, 
084        /**
085         * Thursday.
086         */
087        THU, 
088        /**
089         * Friday.
090         */
091        FRI, 
092        /**
093         * Saturday.
094         */
095        SAT, 
096        /**
097         * Sunday.
098         */
099        SUN, 
100        /**
101         * added to help the parsers with the generic types
102         */
103        NULL;
104        public static DaysOfWeek fromCode(String codeString) throws FHIRException {
105            if (codeString == null || "".equals(codeString))
106                return null;
107        if ("mon".equals(codeString))
108          return MON;
109        if ("tue".equals(codeString))
110          return TUE;
111        if ("wed".equals(codeString))
112          return WED;
113        if ("thu".equals(codeString))
114          return THU;
115        if ("fri".equals(codeString))
116          return FRI;
117        if ("sat".equals(codeString))
118          return SAT;
119        if ("sun".equals(codeString))
120          return SUN;
121        if (Configuration.isAcceptInvalidEnums())
122          return null;
123        else
124          throw new FHIRException("Unknown DaysOfWeek code '"+codeString+"'");
125        }
126        public String toCode() {
127          switch (this) {
128            case MON: return "mon";
129            case TUE: return "tue";
130            case WED: return "wed";
131            case THU: return "thu";
132            case FRI: return "fri";
133            case SAT: return "sat";
134            case SUN: return "sun";
135            default: return "?";
136          }
137        }
138        public String getSystem() {
139          switch (this) {
140            case MON: return "http://hl7.org/fhir/days-of-week";
141            case TUE: return "http://hl7.org/fhir/days-of-week";
142            case WED: return "http://hl7.org/fhir/days-of-week";
143            case THU: return "http://hl7.org/fhir/days-of-week";
144            case FRI: return "http://hl7.org/fhir/days-of-week";
145            case SAT: return "http://hl7.org/fhir/days-of-week";
146            case SUN: return "http://hl7.org/fhir/days-of-week";
147            default: return "?";
148          }
149        }
150        public String getDefinition() {
151          switch (this) {
152            case MON: return "Monday.";
153            case TUE: return "Tuesday.";
154            case WED: return "Wednesday.";
155            case THU: return "Thursday.";
156            case FRI: return "Friday.";
157            case SAT: return "Saturday.";
158            case SUN: return "Sunday.";
159            default: return "?";
160          }
161        }
162        public String getDisplay() {
163          switch (this) {
164            case MON: return "Monday";
165            case TUE: return "Tuesday";
166            case WED: return "Wednesday";
167            case THU: return "Thursday";
168            case FRI: return "Friday";
169            case SAT: return "Saturday";
170            case SUN: return "Sunday";
171            default: return "?";
172          }
173        }
174    }
175
176  public static class DaysOfWeekEnumFactory implements EnumFactory<DaysOfWeek> {
177    public DaysOfWeek fromCode(String codeString) throws IllegalArgumentException {
178      if (codeString == null || "".equals(codeString))
179            if (codeString == null || "".equals(codeString))
180                return null;
181        if ("mon".equals(codeString))
182          return DaysOfWeek.MON;
183        if ("tue".equals(codeString))
184          return DaysOfWeek.TUE;
185        if ("wed".equals(codeString))
186          return DaysOfWeek.WED;
187        if ("thu".equals(codeString))
188          return DaysOfWeek.THU;
189        if ("fri".equals(codeString))
190          return DaysOfWeek.FRI;
191        if ("sat".equals(codeString))
192          return DaysOfWeek.SAT;
193        if ("sun".equals(codeString))
194          return DaysOfWeek.SUN;
195        throw new IllegalArgumentException("Unknown DaysOfWeek code '"+codeString+"'");
196        }
197        public Enumeration<DaysOfWeek> fromType(Base code) throws FHIRException {
198          if (code == null)
199            return null;
200          if (code.isEmpty())
201            return new Enumeration<DaysOfWeek>(this);
202          String codeString = ((PrimitiveType) code).asStringValue();
203          if (codeString == null || "".equals(codeString))
204            return null;
205        if ("mon".equals(codeString))
206          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.MON);
207        if ("tue".equals(codeString))
208          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.TUE);
209        if ("wed".equals(codeString))
210          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.WED);
211        if ("thu".equals(codeString))
212          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.THU);
213        if ("fri".equals(codeString))
214          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.FRI);
215        if ("sat".equals(codeString))
216          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.SAT);
217        if ("sun".equals(codeString))
218          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.SUN);
219        throw new FHIRException("Unknown DaysOfWeek code '"+codeString+"'");
220        }
221    public String toCode(DaysOfWeek code) {
222      if (code == DaysOfWeek.MON)
223        return "mon";
224      if (code == DaysOfWeek.TUE)
225        return "tue";
226      if (code == DaysOfWeek.WED)
227        return "wed";
228      if (code == DaysOfWeek.THU)
229        return "thu";
230      if (code == DaysOfWeek.FRI)
231        return "fri";
232      if (code == DaysOfWeek.SAT)
233        return "sat";
234      if (code == DaysOfWeek.SUN)
235        return "sun";
236      return "?";
237      }
238    public String toSystem(DaysOfWeek code) {
239      return code.getSystem();
240      }
241    }
242
243    @Block()
244    public static class PractitionerRoleAvailableTimeComponent extends BackboneElement implements IBaseBackboneElement {
245        /**
246         * Indicates which days of the week are available between the start and end Times.
247         */
248        @Child(name = "daysOfWeek", type = {CodeType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
249        @Description(shortDefinition="mon | tue | wed | thu | fri | sat | sun", formalDefinition="Indicates which days of the week are available between the start and end Times." )
250        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/days-of-week")
251        protected List<Enumeration<DaysOfWeek>> daysOfWeek;
252
253        /**
254         * Is this always available? (hence times are irrelevant) e.g. 24 hour service.
255         */
256        @Child(name = "allDay", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
257        @Description(shortDefinition="Always available? e.g. 24 hour service", formalDefinition="Is this always available? (hence times are irrelevant) e.g. 24 hour service." )
258        protected BooleanType allDay;
259
260        /**
261         * The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
262         */
263        @Child(name = "availableStartTime", type = {TimeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
264        @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." )
265        protected TimeType availableStartTime;
266
267        /**
268         * The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
269         */
270        @Child(name = "availableEndTime", type = {TimeType.class}, order=4, min=0, max=1, modifier=false, summary=false)
271        @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." )
272        protected TimeType availableEndTime;
273
274        private static final long serialVersionUID = -2139510127L;
275
276    /**
277     * Constructor
278     */
279      public PractitionerRoleAvailableTimeComponent() {
280        super();
281      }
282
283        /**
284         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
285         */
286        public List<Enumeration<DaysOfWeek>> getDaysOfWeek() { 
287          if (this.daysOfWeek == null)
288            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
289          return this.daysOfWeek;
290        }
291
292        /**
293         * @return Returns a reference to <code>this</code> for easy method chaining
294         */
295        public PractitionerRoleAvailableTimeComponent setDaysOfWeek(List<Enumeration<DaysOfWeek>> theDaysOfWeek) { 
296          this.daysOfWeek = theDaysOfWeek;
297          return this;
298        }
299
300        public boolean hasDaysOfWeek() { 
301          if (this.daysOfWeek == null)
302            return false;
303          for (Enumeration<DaysOfWeek> item : this.daysOfWeek)
304            if (!item.isEmpty())
305              return true;
306          return false;
307        }
308
309        /**
310         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
311         */
312        public Enumeration<DaysOfWeek> addDaysOfWeekElement() {//2 
313          Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory());
314          if (this.daysOfWeek == null)
315            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
316          this.daysOfWeek.add(t);
317          return t;
318        }
319
320        /**
321         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
322         */
323        public PractitionerRoleAvailableTimeComponent addDaysOfWeek(DaysOfWeek value) { //1
324          Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory());
325          t.setValue(value);
326          if (this.daysOfWeek == null)
327            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
328          this.daysOfWeek.add(t);
329          return this;
330        }
331
332        /**
333         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
334         */
335        public boolean hasDaysOfWeek(DaysOfWeek value) { 
336          if (this.daysOfWeek == null)
337            return false;
338          for (Enumeration<DaysOfWeek> v : this.daysOfWeek)
339            if (v.getValue().equals(value)) // code
340              return true;
341          return false;
342        }
343
344        /**
345         * @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
346         */
347        public BooleanType getAllDayElement() { 
348          if (this.allDay == null)
349            if (Configuration.errorOnAutoCreate())
350              throw new Error("Attempt to auto-create PractitionerRoleAvailableTimeComponent.allDay");
351            else if (Configuration.doAutoCreate())
352              this.allDay = new BooleanType(); // bb
353          return this.allDay;
354        }
355
356        public boolean hasAllDayElement() { 
357          return this.allDay != null && !this.allDay.isEmpty();
358        }
359
360        public boolean hasAllDay() { 
361          return this.allDay != null && !this.allDay.isEmpty();
362        }
363
364        /**
365         * @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
366         */
367        public PractitionerRoleAvailableTimeComponent setAllDayElement(BooleanType value) { 
368          this.allDay = value;
369          return this;
370        }
371
372        /**
373         * @return Is this always available? (hence times are irrelevant) e.g. 24 hour service.
374         */
375        public boolean getAllDay() { 
376          return this.allDay == null || this.allDay.isEmpty() ? false : this.allDay.getValue();
377        }
378
379        /**
380         * @param value Is this always available? (hence times are irrelevant) e.g. 24 hour service.
381         */
382        public PractitionerRoleAvailableTimeComponent setAllDay(boolean value) { 
383            if (this.allDay == null)
384              this.allDay = new BooleanType();
385            this.allDay.setValue(value);
386          return this;
387        }
388
389        /**
390         * @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
391         */
392        public TimeType getAvailableStartTimeElement() { 
393          if (this.availableStartTime == null)
394            if (Configuration.errorOnAutoCreate())
395              throw new Error("Attempt to auto-create PractitionerRoleAvailableTimeComponent.availableStartTime");
396            else if (Configuration.doAutoCreate())
397              this.availableStartTime = new TimeType(); // bb
398          return this.availableStartTime;
399        }
400
401        public boolean hasAvailableStartTimeElement() { 
402          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
403        }
404
405        public boolean hasAvailableStartTime() { 
406          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
407        }
408
409        /**
410         * @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
411         */
412        public PractitionerRoleAvailableTimeComponent setAvailableStartTimeElement(TimeType value) { 
413          this.availableStartTime = value;
414          return this;
415        }
416
417        /**
418         * @return The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
419         */
420        public String getAvailableStartTime() { 
421          return this.availableStartTime == null ? null : this.availableStartTime.getValue();
422        }
423
424        /**
425         * @param value The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
426         */
427        public PractitionerRoleAvailableTimeComponent setAvailableStartTime(String value) { 
428          if (value == null)
429            this.availableStartTime = null;
430          else {
431            if (this.availableStartTime == null)
432              this.availableStartTime = new TimeType();
433            this.availableStartTime.setValue(value);
434          }
435          return this;
436        }
437
438        /**
439         * @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
440         */
441        public TimeType getAvailableEndTimeElement() { 
442          if (this.availableEndTime == null)
443            if (Configuration.errorOnAutoCreate())
444              throw new Error("Attempt to auto-create PractitionerRoleAvailableTimeComponent.availableEndTime");
445            else if (Configuration.doAutoCreate())
446              this.availableEndTime = new TimeType(); // bb
447          return this.availableEndTime;
448        }
449
450        public boolean hasAvailableEndTimeElement() { 
451          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
452        }
453
454        public boolean hasAvailableEndTime() { 
455          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
456        }
457
458        /**
459         * @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
460         */
461        public PractitionerRoleAvailableTimeComponent setAvailableEndTimeElement(TimeType value) { 
462          this.availableEndTime = value;
463          return this;
464        }
465
466        /**
467         * @return The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
468         */
469        public String getAvailableEndTime() { 
470          return this.availableEndTime == null ? null : this.availableEndTime.getValue();
471        }
472
473        /**
474         * @param value The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
475         */
476        public PractitionerRoleAvailableTimeComponent setAvailableEndTime(String value) { 
477          if (value == null)
478            this.availableEndTime = null;
479          else {
480            if (this.availableEndTime == null)
481              this.availableEndTime = new TimeType();
482            this.availableEndTime.setValue(value);
483          }
484          return this;
485        }
486
487        protected void listChildren(List<Property> children) {
488          super.listChildren(children);
489          children.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));
490          children.add(new Property("allDay", "boolean", "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", 0, 1, allDay));
491          children.add(new Property("availableStartTime", "time", "The opening time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, 1, availableStartTime));
492          children.add(new Property("availableEndTime", "time", "The closing time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, 1, availableEndTime));
493        }
494
495        @Override
496        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
497          switch (_hash) {
498          case 68050338: /*daysOfWeek*/  return 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);
499          case -1414913477: /*allDay*/  return new Property("allDay", "boolean", "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", 0, 1, allDay);
500          case -1039453818: /*availableStartTime*/  return new Property("availableStartTime", "time", "The opening time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, 1, availableStartTime);
501          case 101151551: /*availableEndTime*/  return new Property("availableEndTime", "time", "The closing time of day. Note: If the AllDay flag is set, then this time is ignored.", 0, 1, availableEndTime);
502          default: return super.getNamedProperty(_hash, _name, _checkValid);
503          }
504
505        }
506
507      @Override
508      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
509        switch (hash) {
510        case 68050338: /*daysOfWeek*/ return this.daysOfWeek == null ? new Base[0] : this.daysOfWeek.toArray(new Base[this.daysOfWeek.size()]); // Enumeration<DaysOfWeek>
511        case -1414913477: /*allDay*/ return this.allDay == null ? new Base[0] : new Base[] {this.allDay}; // BooleanType
512        case -1039453818: /*availableStartTime*/ return this.availableStartTime == null ? new Base[0] : new Base[] {this.availableStartTime}; // TimeType
513        case 101151551: /*availableEndTime*/ return this.availableEndTime == null ? new Base[0] : new Base[] {this.availableEndTime}; // TimeType
514        default: return super.getProperty(hash, name, checkValid);
515        }
516
517      }
518
519      @Override
520      public Base setProperty(int hash, String name, Base value) throws FHIRException {
521        switch (hash) {
522        case 68050338: // daysOfWeek
523          value = new DaysOfWeekEnumFactory().fromType(castToCode(value));
524          this.getDaysOfWeek().add((Enumeration) value); // Enumeration<DaysOfWeek>
525          return value;
526        case -1414913477: // allDay
527          this.allDay = castToBoolean(value); // BooleanType
528          return value;
529        case -1039453818: // availableStartTime
530          this.availableStartTime = castToTime(value); // TimeType
531          return value;
532        case 101151551: // availableEndTime
533          this.availableEndTime = castToTime(value); // TimeType
534          return value;
535        default: return super.setProperty(hash, name, value);
536        }
537
538      }
539
540      @Override
541      public Base setProperty(String name, Base value) throws FHIRException {
542        if (name.equals("daysOfWeek")) {
543          value = new DaysOfWeekEnumFactory().fromType(castToCode(value));
544          this.getDaysOfWeek().add((Enumeration) value);
545        } else if (name.equals("allDay")) {
546          this.allDay = castToBoolean(value); // BooleanType
547        } else if (name.equals("availableStartTime")) {
548          this.availableStartTime = castToTime(value); // TimeType
549        } else if (name.equals("availableEndTime")) {
550          this.availableEndTime = castToTime(value); // TimeType
551        } else
552          return super.setProperty(name, value);
553        return value;
554      }
555
556      @Override
557      public Base makeProperty(int hash, String name) throws FHIRException {
558        switch (hash) {
559        case 68050338:  return addDaysOfWeekElement();
560        case -1414913477:  return getAllDayElement();
561        case -1039453818:  return getAvailableStartTimeElement();
562        case 101151551:  return getAvailableEndTimeElement();
563        default: return super.makeProperty(hash, name);
564        }
565
566      }
567
568      @Override
569      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
570        switch (hash) {
571        case 68050338: /*daysOfWeek*/ return new String[] {"code"};
572        case -1414913477: /*allDay*/ return new String[] {"boolean"};
573        case -1039453818: /*availableStartTime*/ return new String[] {"time"};
574        case 101151551: /*availableEndTime*/ return new String[] {"time"};
575        default: return super.getTypesForProperty(hash, name);
576        }
577
578      }
579
580      @Override
581      public Base addChild(String name) throws FHIRException {
582        if (name.equals("daysOfWeek")) {
583          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.daysOfWeek");
584        }
585        else if (name.equals("allDay")) {
586          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.allDay");
587        }
588        else if (name.equals("availableStartTime")) {
589          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.availableStartTime");
590        }
591        else if (name.equals("availableEndTime")) {
592          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.availableEndTime");
593        }
594        else
595          return super.addChild(name);
596      }
597
598      public PractitionerRoleAvailableTimeComponent copy() {
599        PractitionerRoleAvailableTimeComponent dst = new PractitionerRoleAvailableTimeComponent();
600        copyValues(dst);
601        if (daysOfWeek != null) {
602          dst.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
603          for (Enumeration<DaysOfWeek> i : daysOfWeek)
604            dst.daysOfWeek.add(i.copy());
605        };
606        dst.allDay = allDay == null ? null : allDay.copy();
607        dst.availableStartTime = availableStartTime == null ? null : availableStartTime.copy();
608        dst.availableEndTime = availableEndTime == null ? null : availableEndTime.copy();
609        return dst;
610      }
611
612      @Override
613      public boolean equalsDeep(Base other_) {
614        if (!super.equalsDeep(other_))
615          return false;
616        if (!(other_ instanceof PractitionerRoleAvailableTimeComponent))
617          return false;
618        PractitionerRoleAvailableTimeComponent o = (PractitionerRoleAvailableTimeComponent) other_;
619        return compareDeep(daysOfWeek, o.daysOfWeek, true) && compareDeep(allDay, o.allDay, true) && compareDeep(availableStartTime, o.availableStartTime, true)
620           && compareDeep(availableEndTime, o.availableEndTime, true);
621      }
622
623      @Override
624      public boolean equalsShallow(Base other_) {
625        if (!super.equalsShallow(other_))
626          return false;
627        if (!(other_ instanceof PractitionerRoleAvailableTimeComponent))
628          return false;
629        PractitionerRoleAvailableTimeComponent o = (PractitionerRoleAvailableTimeComponent) other_;
630        return compareValues(daysOfWeek, o.daysOfWeek, true) && compareValues(allDay, o.allDay, true) && compareValues(availableStartTime, o.availableStartTime, true)
631           && compareValues(availableEndTime, o.availableEndTime, true);
632      }
633
634      public boolean isEmpty() {
635        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(daysOfWeek, allDay, availableStartTime
636          , availableEndTime);
637      }
638
639  public String fhirType() {
640    return "PractitionerRole.availableTime";
641
642  }
643
644  }
645
646    @Block()
647    public static class PractitionerRoleNotAvailableComponent extends BackboneElement implements IBaseBackboneElement {
648        /**
649         * The reason that can be presented to the user as to why this time is not available.
650         */
651        @Child(name = "description", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
652        @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." )
653        protected StringType description;
654
655        /**
656         * Service is not available (seasonally or for a public holiday) from this date.
657         */
658        @Child(name = "during", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
659        @Description(shortDefinition="Service not available from this date", formalDefinition="Service is not available (seasonally or for a public holiday) from this date." )
660        protected Period during;
661
662        private static final long serialVersionUID = 310849929L;
663
664    /**
665     * Constructor
666     */
667      public PractitionerRoleNotAvailableComponent() {
668        super();
669      }
670
671    /**
672     * Constructor
673     */
674      public PractitionerRoleNotAvailableComponent(StringType description) {
675        super();
676        this.description = description;
677      }
678
679        /**
680         * @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
681         */
682        public StringType getDescriptionElement() { 
683          if (this.description == null)
684            if (Configuration.errorOnAutoCreate())
685              throw new Error("Attempt to auto-create PractitionerRoleNotAvailableComponent.description");
686            else if (Configuration.doAutoCreate())
687              this.description = new StringType(); // bb
688          return this.description;
689        }
690
691        public boolean hasDescriptionElement() { 
692          return this.description != null && !this.description.isEmpty();
693        }
694
695        public boolean hasDescription() { 
696          return this.description != null && !this.description.isEmpty();
697        }
698
699        /**
700         * @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
701         */
702        public PractitionerRoleNotAvailableComponent setDescriptionElement(StringType value) { 
703          this.description = value;
704          return this;
705        }
706
707        /**
708         * @return The reason that can be presented to the user as to why this time is not available.
709         */
710        public String getDescription() { 
711          return this.description == null ? null : this.description.getValue();
712        }
713
714        /**
715         * @param value The reason that can be presented to the user as to why this time is not available.
716         */
717        public PractitionerRoleNotAvailableComponent setDescription(String value) { 
718            if (this.description == null)
719              this.description = new StringType();
720            this.description.setValue(value);
721          return this;
722        }
723
724        /**
725         * @return {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
726         */
727        public Period getDuring() { 
728          if (this.during == null)
729            if (Configuration.errorOnAutoCreate())
730              throw new Error("Attempt to auto-create PractitionerRoleNotAvailableComponent.during");
731            else if (Configuration.doAutoCreate())
732              this.during = new Period(); // cc
733          return this.during;
734        }
735
736        public boolean hasDuring() { 
737          return this.during != null && !this.during.isEmpty();
738        }
739
740        /**
741         * @param value {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
742         */
743        public PractitionerRoleNotAvailableComponent setDuring(Period value) { 
744          this.during = value;
745          return this;
746        }
747
748        protected void listChildren(List<Property> children) {
749          super.listChildren(children);
750          children.add(new Property("description", "string", "The reason that can be presented to the user as to why this time is not available.", 0, 1, description));
751          children.add(new Property("during", "Period", "Service is not available (seasonally or for a public holiday) from this date.", 0, 1, during));
752        }
753
754        @Override
755        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
756          switch (_hash) {
757          case -1724546052: /*description*/  return new Property("description", "string", "The reason that can be presented to the user as to why this time is not available.", 0, 1, description);
758          case -1320499647: /*during*/  return new Property("during", "Period", "Service is not available (seasonally or for a public holiday) from this date.", 0, 1, during);
759          default: return super.getNamedProperty(_hash, _name, _checkValid);
760          }
761
762        }
763
764      @Override
765      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
766        switch (hash) {
767        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
768        case -1320499647: /*during*/ return this.during == null ? new Base[0] : new Base[] {this.during}; // Period
769        default: return super.getProperty(hash, name, checkValid);
770        }
771
772      }
773
774      @Override
775      public Base setProperty(int hash, String name, Base value) throws FHIRException {
776        switch (hash) {
777        case -1724546052: // description
778          this.description = castToString(value); // StringType
779          return value;
780        case -1320499647: // during
781          this.during = castToPeriod(value); // Period
782          return value;
783        default: return super.setProperty(hash, name, value);
784        }
785
786      }
787
788      @Override
789      public Base setProperty(String name, Base value) throws FHIRException {
790        if (name.equals("description")) {
791          this.description = castToString(value); // StringType
792        } else if (name.equals("during")) {
793          this.during = castToPeriod(value); // Period
794        } else
795          return super.setProperty(name, value);
796        return value;
797      }
798
799      @Override
800      public Base makeProperty(int hash, String name) throws FHIRException {
801        switch (hash) {
802        case -1724546052:  return getDescriptionElement();
803        case -1320499647:  return getDuring(); 
804        default: return super.makeProperty(hash, name);
805        }
806
807      }
808
809      @Override
810      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
811        switch (hash) {
812        case -1724546052: /*description*/ return new String[] {"string"};
813        case -1320499647: /*during*/ return new String[] {"Period"};
814        default: return super.getTypesForProperty(hash, name);
815        }
816
817      }
818
819      @Override
820      public Base addChild(String name) throws FHIRException {
821        if (name.equals("description")) {
822          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.description");
823        }
824        else if (name.equals("during")) {
825          this.during = new Period();
826          return this.during;
827        }
828        else
829          return super.addChild(name);
830      }
831
832      public PractitionerRoleNotAvailableComponent copy() {
833        PractitionerRoleNotAvailableComponent dst = new PractitionerRoleNotAvailableComponent();
834        copyValues(dst);
835        dst.description = description == null ? null : description.copy();
836        dst.during = during == null ? null : during.copy();
837        return dst;
838      }
839
840      @Override
841      public boolean equalsDeep(Base other_) {
842        if (!super.equalsDeep(other_))
843          return false;
844        if (!(other_ instanceof PractitionerRoleNotAvailableComponent))
845          return false;
846        PractitionerRoleNotAvailableComponent o = (PractitionerRoleNotAvailableComponent) other_;
847        return compareDeep(description, o.description, true) && compareDeep(during, o.during, true);
848      }
849
850      @Override
851      public boolean equalsShallow(Base other_) {
852        if (!super.equalsShallow(other_))
853          return false;
854        if (!(other_ instanceof PractitionerRoleNotAvailableComponent))
855          return false;
856        PractitionerRoleNotAvailableComponent o = (PractitionerRoleNotAvailableComponent) other_;
857        return compareValues(description, o.description, true);
858      }
859
860      public boolean isEmpty() {
861        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, during);
862      }
863
864  public String fhirType() {
865    return "PractitionerRole.notAvailable";
866
867  }
868
869  }
870
871    /**
872     * Business Identifiers that are specific to a role/location.
873     */
874    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
875    @Description(shortDefinition="Business Identifiers that are specific to a role/location", formalDefinition="Business Identifiers that are specific to a role/location." )
876    protected List<Identifier> identifier;
877
878    /**
879     * Whether this practitioner role record is in active use.
880     */
881    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=true)
882    @Description(shortDefinition="Whether this practitioner role record is in active use", formalDefinition="Whether this practitioner role record is in active use." )
883    protected BooleanType active;
884
885    /**
886     * The period during which the person is authorized to act as a practitioner in these role(s) for the organization.
887     */
888    @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
889    @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." )
890    protected Period period;
891
892    /**
893     * Practitioner that is able to provide the defined services for the organization.
894     */
895    @Child(name = "practitioner", type = {Practitioner.class}, order=3, min=0, max=1, modifier=false, summary=true)
896    @Description(shortDefinition="Practitioner that is able to provide the defined services for the organization", formalDefinition="Practitioner that is able to provide the defined services for the organization." )
897    protected Reference practitioner;
898
899    /**
900     * The actual object that is the target of the reference (Practitioner that is able to provide the defined services for the organization.)
901     */
902    protected Practitioner practitionerTarget;
903
904    /**
905     * The organization where the Practitioner performs the roles associated.
906     */
907    @Child(name = "organization", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=true)
908    @Description(shortDefinition="Organization where the roles are available", formalDefinition="The organization where the Practitioner performs the roles associated." )
909    protected Reference organization;
910
911    /**
912     * The actual object that is the target of the reference (The organization where the Practitioner performs the roles associated.)
913     */
914    protected Organization organizationTarget;
915
916    /**
917     * Roles which this practitioner is authorized to perform for the organization.
918     */
919    @Child(name = "code", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
920    @Description(shortDefinition="Roles which this practitioner may perform", formalDefinition="Roles which this practitioner is authorized to perform for the organization." )
921    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/practitioner-role")
922    protected List<CodeableConcept> code;
923
924    /**
925     * Specific specialty of the practitioner.
926     */
927    @Child(name = "specialty", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
928    @Description(shortDefinition="Specific specialty of the practitioner", formalDefinition="Specific specialty of the practitioner." )
929    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/c80-practice-codes")
930    protected List<CodeableConcept> specialty;
931
932    /**
933     * The location(s) at which this practitioner provides care.
934     */
935    @Child(name = "location", type = {Location.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
936    @Description(shortDefinition="The location(s) at which this practitioner provides care", formalDefinition="The location(s) at which this practitioner provides care." )
937    protected List<Reference> location;
938    /**
939     * The actual objects that are the target of the reference (The location(s) at which this practitioner provides care.)
940     */
941    protected List<Location> locationTarget;
942
943
944    /**
945     * The list of healthcare services that this worker provides for this role's Organization/Location(s).
946     */
947    @Child(name = "healthcareService", type = {HealthcareService.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
948    @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)." )
949    protected List<Reference> healthcareService;
950    /**
951     * 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).)
952     */
953    protected List<HealthcareService> healthcareServiceTarget;
954
955
956    /**
957     * Contact details that are specific to the role/location/service.
958     */
959    @Child(name = "telecom", type = {ContactPoint.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
960    @Description(shortDefinition="Contact details that are specific to the role/location/service", formalDefinition="Contact details that are specific to the role/location/service." )
961    protected List<ContactPoint> telecom;
962
963    /**
964     * A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.
965     */
966    @Child(name = "availableTime", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
967    @Description(shortDefinition="Times the Service Site is available", formalDefinition="A collection of times the practitioner is available or performing this role at the location and/or healthcareservice." )
968    protected List<PractitionerRoleAvailableTimeComponent> availableTime;
969
970    /**
971     * The practitioner is not available or performing this role during this period of time due to the provided reason.
972     */
973    @Child(name = "notAvailable", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
974    @Description(shortDefinition="Not available during this time due to provided reason", formalDefinition="The practitioner is not available or performing this role during this period of time due to the provided reason." )
975    protected List<PractitionerRoleNotAvailableComponent> notAvailable;
976
977    /**
978     * 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.
979     */
980    @Child(name = "availabilityExceptions", type = {StringType.class}, order=12, min=0, max=1, modifier=false, summary=false)
981    @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." )
982    protected StringType availabilityExceptions;
983
984    /**
985     * Technical endpoints providing access to services operated for the practitioner with this role.
986     */
987    @Child(name = "endpoint", type = {Endpoint.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
988    @Description(shortDefinition="Technical endpoints providing access to services operated for the practitioner with this role", formalDefinition="Technical endpoints providing access to services operated for the practitioner with this role." )
989    protected List<Reference> endpoint;
990    /**
991     * The actual objects that are the target of the reference (Technical endpoints providing access to services operated for the practitioner with this role.)
992     */
993    protected List<Endpoint> endpointTarget;
994
995
996    private static final long serialVersionUID = 423338051L;
997
998  /**
999   * Constructor
1000   */
1001    public PractitionerRole() {
1002      super();
1003    }
1004
1005    /**
1006     * @return {@link #identifier} (Business Identifiers that are specific to a role/location.)
1007     */
1008    public List<Identifier> getIdentifier() { 
1009      if (this.identifier == null)
1010        this.identifier = new ArrayList<Identifier>();
1011      return this.identifier;
1012    }
1013
1014    /**
1015     * @return Returns a reference to <code>this</code> for easy method chaining
1016     */
1017    public PractitionerRole setIdentifier(List<Identifier> theIdentifier) { 
1018      this.identifier = theIdentifier;
1019      return this;
1020    }
1021
1022    public boolean hasIdentifier() { 
1023      if (this.identifier == null)
1024        return false;
1025      for (Identifier item : this.identifier)
1026        if (!item.isEmpty())
1027          return true;
1028      return false;
1029    }
1030
1031    public Identifier addIdentifier() { //3
1032      Identifier t = new Identifier();
1033      if (this.identifier == null)
1034        this.identifier = new ArrayList<Identifier>();
1035      this.identifier.add(t);
1036      return t;
1037    }
1038
1039    public PractitionerRole addIdentifier(Identifier t) { //3
1040      if (t == null)
1041        return this;
1042      if (this.identifier == null)
1043        this.identifier = new ArrayList<Identifier>();
1044      this.identifier.add(t);
1045      return this;
1046    }
1047
1048    /**
1049     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1050     */
1051    public Identifier getIdentifierFirstRep() { 
1052      if (getIdentifier().isEmpty()) {
1053        addIdentifier();
1054      }
1055      return getIdentifier().get(0);
1056    }
1057
1058    /**
1059     * @return {@link #active} (Whether this practitioner role record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1060     */
1061    public BooleanType getActiveElement() { 
1062      if (this.active == null)
1063        if (Configuration.errorOnAutoCreate())
1064          throw new Error("Attempt to auto-create PractitionerRole.active");
1065        else if (Configuration.doAutoCreate())
1066          this.active = new BooleanType(); // bb
1067      return this.active;
1068    }
1069
1070    public boolean hasActiveElement() { 
1071      return this.active != null && !this.active.isEmpty();
1072    }
1073
1074    public boolean hasActive() { 
1075      return this.active != null && !this.active.isEmpty();
1076    }
1077
1078    /**
1079     * @param value {@link #active} (Whether this practitioner role record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1080     */
1081    public PractitionerRole setActiveElement(BooleanType value) { 
1082      this.active = value;
1083      return this;
1084    }
1085
1086    /**
1087     * @return Whether this practitioner role record is in active use.
1088     */
1089    public boolean getActive() { 
1090      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
1091    }
1092
1093    /**
1094     * @param value Whether this practitioner role record is in active use.
1095     */
1096    public PractitionerRole setActive(boolean value) { 
1097        if (this.active == null)
1098          this.active = new BooleanType();
1099        this.active.setValue(value);
1100      return this;
1101    }
1102
1103    /**
1104     * @return {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
1105     */
1106    public Period getPeriod() { 
1107      if (this.period == null)
1108        if (Configuration.errorOnAutoCreate())
1109          throw new Error("Attempt to auto-create PractitionerRole.period");
1110        else if (Configuration.doAutoCreate())
1111          this.period = new Period(); // cc
1112      return this.period;
1113    }
1114
1115    public boolean hasPeriod() { 
1116      return this.period != null && !this.period.isEmpty();
1117    }
1118
1119    /**
1120     * @param value {@link #period} (The period during which the person is authorized to act as a practitioner in these role(s) for the organization.)
1121     */
1122    public PractitionerRole setPeriod(Period value) { 
1123      this.period = value;
1124      return this;
1125    }
1126
1127    /**
1128     * @return {@link #practitioner} (Practitioner that is able to provide the defined services for the organization.)
1129     */
1130    public Reference getPractitioner() { 
1131      if (this.practitioner == null)
1132        if (Configuration.errorOnAutoCreate())
1133          throw new Error("Attempt to auto-create PractitionerRole.practitioner");
1134        else if (Configuration.doAutoCreate())
1135          this.practitioner = new Reference(); // cc
1136      return this.practitioner;
1137    }
1138
1139    public boolean hasPractitioner() { 
1140      return this.practitioner != null && !this.practitioner.isEmpty();
1141    }
1142
1143    /**
1144     * @param value {@link #practitioner} (Practitioner that is able to provide the defined services for the organization.)
1145     */
1146    public PractitionerRole setPractitioner(Reference value) { 
1147      this.practitioner = value;
1148      return this;
1149    }
1150
1151    /**
1152     * @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 organization.)
1153     */
1154    public Practitioner getPractitionerTarget() { 
1155      if (this.practitionerTarget == null)
1156        if (Configuration.errorOnAutoCreate())
1157          throw new Error("Attempt to auto-create PractitionerRole.practitioner");
1158        else if (Configuration.doAutoCreate())
1159          this.practitionerTarget = new Practitioner(); // aa
1160      return this.practitionerTarget;
1161    }
1162
1163    /**
1164     * @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 organization.)
1165     */
1166    public PractitionerRole setPractitionerTarget(Practitioner value) { 
1167      this.practitionerTarget = value;
1168      return this;
1169    }
1170
1171    /**
1172     * @return {@link #organization} (The organization where the Practitioner performs the roles associated.)
1173     */
1174    public Reference getOrganization() { 
1175      if (this.organization == null)
1176        if (Configuration.errorOnAutoCreate())
1177          throw new Error("Attempt to auto-create PractitionerRole.organization");
1178        else if (Configuration.doAutoCreate())
1179          this.organization = new Reference(); // cc
1180      return this.organization;
1181    }
1182
1183    public boolean hasOrganization() { 
1184      return this.organization != null && !this.organization.isEmpty();
1185    }
1186
1187    /**
1188     * @param value {@link #organization} (The organization where the Practitioner performs the roles associated.)
1189     */
1190    public PractitionerRole setOrganization(Reference value) { 
1191      this.organization = value;
1192      return this;
1193    }
1194
1195    /**
1196     * @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.)
1197     */
1198    public Organization getOrganizationTarget() { 
1199      if (this.organizationTarget == null)
1200        if (Configuration.errorOnAutoCreate())
1201          throw new Error("Attempt to auto-create PractitionerRole.organization");
1202        else if (Configuration.doAutoCreate())
1203          this.organizationTarget = new Organization(); // aa
1204      return this.organizationTarget;
1205    }
1206
1207    /**
1208     * @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.)
1209     */
1210    public PractitionerRole setOrganizationTarget(Organization value) { 
1211      this.organizationTarget = value;
1212      return this;
1213    }
1214
1215    /**
1216     * @return {@link #code} (Roles which this practitioner is authorized to perform for the organization.)
1217     */
1218    public List<CodeableConcept> getCode() { 
1219      if (this.code == null)
1220        this.code = new ArrayList<CodeableConcept>();
1221      return this.code;
1222    }
1223
1224    /**
1225     * @return Returns a reference to <code>this</code> for easy method chaining
1226     */
1227    public PractitionerRole setCode(List<CodeableConcept> theCode) { 
1228      this.code = theCode;
1229      return this;
1230    }
1231
1232    public boolean hasCode() { 
1233      if (this.code == null)
1234        return false;
1235      for (CodeableConcept item : this.code)
1236        if (!item.isEmpty())
1237          return true;
1238      return false;
1239    }
1240
1241    public CodeableConcept addCode() { //3
1242      CodeableConcept t = new CodeableConcept();
1243      if (this.code == null)
1244        this.code = new ArrayList<CodeableConcept>();
1245      this.code.add(t);
1246      return t;
1247    }
1248
1249    public PractitionerRole addCode(CodeableConcept t) { //3
1250      if (t == null)
1251        return this;
1252      if (this.code == null)
1253        this.code = new ArrayList<CodeableConcept>();
1254      this.code.add(t);
1255      return this;
1256    }
1257
1258    /**
1259     * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist
1260     */
1261    public CodeableConcept getCodeFirstRep() { 
1262      if (getCode().isEmpty()) {
1263        addCode();
1264      }
1265      return getCode().get(0);
1266    }
1267
1268    /**
1269     * @return {@link #specialty} (Specific specialty of the practitioner.)
1270     */
1271    public List<CodeableConcept> getSpecialty() { 
1272      if (this.specialty == null)
1273        this.specialty = new ArrayList<CodeableConcept>();
1274      return this.specialty;
1275    }
1276
1277    /**
1278     * @return Returns a reference to <code>this</code> for easy method chaining
1279     */
1280    public PractitionerRole setSpecialty(List<CodeableConcept> theSpecialty) { 
1281      this.specialty = theSpecialty;
1282      return this;
1283    }
1284
1285    public boolean hasSpecialty() { 
1286      if (this.specialty == null)
1287        return false;
1288      for (CodeableConcept item : this.specialty)
1289        if (!item.isEmpty())
1290          return true;
1291      return false;
1292    }
1293
1294    public CodeableConcept addSpecialty() { //3
1295      CodeableConcept t = new CodeableConcept();
1296      if (this.specialty == null)
1297        this.specialty = new ArrayList<CodeableConcept>();
1298      this.specialty.add(t);
1299      return t;
1300    }
1301
1302    public PractitionerRole addSpecialty(CodeableConcept t) { //3
1303      if (t == null)
1304        return this;
1305      if (this.specialty == null)
1306        this.specialty = new ArrayList<CodeableConcept>();
1307      this.specialty.add(t);
1308      return this;
1309    }
1310
1311    /**
1312     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist
1313     */
1314    public CodeableConcept getSpecialtyFirstRep() { 
1315      if (getSpecialty().isEmpty()) {
1316        addSpecialty();
1317      }
1318      return getSpecialty().get(0);
1319    }
1320
1321    /**
1322     * @return {@link #location} (The location(s) at which this practitioner provides care.)
1323     */
1324    public List<Reference> getLocation() { 
1325      if (this.location == null)
1326        this.location = new ArrayList<Reference>();
1327      return this.location;
1328    }
1329
1330    /**
1331     * @return Returns a reference to <code>this</code> for easy method chaining
1332     */
1333    public PractitionerRole setLocation(List<Reference> theLocation) { 
1334      this.location = theLocation;
1335      return this;
1336    }
1337
1338    public boolean hasLocation() { 
1339      if (this.location == null)
1340        return false;
1341      for (Reference item : this.location)
1342        if (!item.isEmpty())
1343          return true;
1344      return false;
1345    }
1346
1347    public Reference addLocation() { //3
1348      Reference t = new Reference();
1349      if (this.location == null)
1350        this.location = new ArrayList<Reference>();
1351      this.location.add(t);
1352      return t;
1353    }
1354
1355    public PractitionerRole addLocation(Reference t) { //3
1356      if (t == null)
1357        return this;
1358      if (this.location == null)
1359        this.location = new ArrayList<Reference>();
1360      this.location.add(t);
1361      return this;
1362    }
1363
1364    /**
1365     * @return The first repetition of repeating field {@link #location}, creating it if it does not already exist
1366     */
1367    public Reference getLocationFirstRep() { 
1368      if (getLocation().isEmpty()) {
1369        addLocation();
1370      }
1371      return getLocation().get(0);
1372    }
1373
1374    /**
1375     * @deprecated Use Reference#setResource(IBaseResource) instead
1376     */
1377    @Deprecated
1378    public List<Location> getLocationTarget() { 
1379      if (this.locationTarget == null)
1380        this.locationTarget = new ArrayList<Location>();
1381      return this.locationTarget;
1382    }
1383
1384    /**
1385     * @deprecated Use Reference#setResource(IBaseResource) instead
1386     */
1387    @Deprecated
1388    public Location addLocationTarget() { 
1389      Location r = new Location();
1390      if (this.locationTarget == null)
1391        this.locationTarget = new ArrayList<Location>();
1392      this.locationTarget.add(r);
1393      return r;
1394    }
1395
1396    /**
1397     * @return {@link #healthcareService} (The list of healthcare services that this worker provides for this role's Organization/Location(s).)
1398     */
1399    public List<Reference> getHealthcareService() { 
1400      if (this.healthcareService == null)
1401        this.healthcareService = new ArrayList<Reference>();
1402      return this.healthcareService;
1403    }
1404
1405    /**
1406     * @return Returns a reference to <code>this</code> for easy method chaining
1407     */
1408    public PractitionerRole setHealthcareService(List<Reference> theHealthcareService) { 
1409      this.healthcareService = theHealthcareService;
1410      return this;
1411    }
1412
1413    public boolean hasHealthcareService() { 
1414      if (this.healthcareService == null)
1415        return false;
1416      for (Reference item : this.healthcareService)
1417        if (!item.isEmpty())
1418          return true;
1419      return false;
1420    }
1421
1422    public Reference addHealthcareService() { //3
1423      Reference t = new Reference();
1424      if (this.healthcareService == null)
1425        this.healthcareService = new ArrayList<Reference>();
1426      this.healthcareService.add(t);
1427      return t;
1428    }
1429
1430    public PractitionerRole addHealthcareService(Reference t) { //3
1431      if (t == null)
1432        return this;
1433      if (this.healthcareService == null)
1434        this.healthcareService = new ArrayList<Reference>();
1435      this.healthcareService.add(t);
1436      return this;
1437    }
1438
1439    /**
1440     * @return The first repetition of repeating field {@link #healthcareService}, creating it if it does not already exist
1441     */
1442    public Reference getHealthcareServiceFirstRep() { 
1443      if (getHealthcareService().isEmpty()) {
1444        addHealthcareService();
1445      }
1446      return getHealthcareService().get(0);
1447    }
1448
1449    /**
1450     * @deprecated Use Reference#setResource(IBaseResource) instead
1451     */
1452    @Deprecated
1453    public List<HealthcareService> getHealthcareServiceTarget() { 
1454      if (this.healthcareServiceTarget == null)
1455        this.healthcareServiceTarget = new ArrayList<HealthcareService>();
1456      return this.healthcareServiceTarget;
1457    }
1458
1459    /**
1460     * @deprecated Use Reference#setResource(IBaseResource) instead
1461     */
1462    @Deprecated
1463    public HealthcareService addHealthcareServiceTarget() { 
1464      HealthcareService r = new HealthcareService();
1465      if (this.healthcareServiceTarget == null)
1466        this.healthcareServiceTarget = new ArrayList<HealthcareService>();
1467      this.healthcareServiceTarget.add(r);
1468      return r;
1469    }
1470
1471    /**
1472     * @return {@link #telecom} (Contact details that are specific to the role/location/service.)
1473     */
1474    public List<ContactPoint> getTelecom() { 
1475      if (this.telecom == null)
1476        this.telecom = new ArrayList<ContactPoint>();
1477      return this.telecom;
1478    }
1479
1480    /**
1481     * @return Returns a reference to <code>this</code> for easy method chaining
1482     */
1483    public PractitionerRole setTelecom(List<ContactPoint> theTelecom) { 
1484      this.telecom = theTelecom;
1485      return this;
1486    }
1487
1488    public boolean hasTelecom() { 
1489      if (this.telecom == null)
1490        return false;
1491      for (ContactPoint item : this.telecom)
1492        if (!item.isEmpty())
1493          return true;
1494      return false;
1495    }
1496
1497    public ContactPoint addTelecom() { //3
1498      ContactPoint t = new ContactPoint();
1499      if (this.telecom == null)
1500        this.telecom = new ArrayList<ContactPoint>();
1501      this.telecom.add(t);
1502      return t;
1503    }
1504
1505    public PractitionerRole addTelecom(ContactPoint t) { //3
1506      if (t == null)
1507        return this;
1508      if (this.telecom == null)
1509        this.telecom = new ArrayList<ContactPoint>();
1510      this.telecom.add(t);
1511      return this;
1512    }
1513
1514    /**
1515     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist
1516     */
1517    public ContactPoint getTelecomFirstRep() { 
1518      if (getTelecom().isEmpty()) {
1519        addTelecom();
1520      }
1521      return getTelecom().get(0);
1522    }
1523
1524    /**
1525     * @return {@link #availableTime} (A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.)
1526     */
1527    public List<PractitionerRoleAvailableTimeComponent> getAvailableTime() { 
1528      if (this.availableTime == null)
1529        this.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
1530      return this.availableTime;
1531    }
1532
1533    /**
1534     * @return Returns a reference to <code>this</code> for easy method chaining
1535     */
1536    public PractitionerRole setAvailableTime(List<PractitionerRoleAvailableTimeComponent> theAvailableTime) { 
1537      this.availableTime = theAvailableTime;
1538      return this;
1539    }
1540
1541    public boolean hasAvailableTime() { 
1542      if (this.availableTime == null)
1543        return false;
1544      for (PractitionerRoleAvailableTimeComponent item : this.availableTime)
1545        if (!item.isEmpty())
1546          return true;
1547      return false;
1548    }
1549
1550    public PractitionerRoleAvailableTimeComponent addAvailableTime() { //3
1551      PractitionerRoleAvailableTimeComponent t = new PractitionerRoleAvailableTimeComponent();
1552      if (this.availableTime == null)
1553        this.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
1554      this.availableTime.add(t);
1555      return t;
1556    }
1557
1558    public PractitionerRole addAvailableTime(PractitionerRoleAvailableTimeComponent t) { //3
1559      if (t == null)
1560        return this;
1561      if (this.availableTime == null)
1562        this.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
1563      this.availableTime.add(t);
1564      return this;
1565    }
1566
1567    /**
1568     * @return The first repetition of repeating field {@link #availableTime}, creating it if it does not already exist
1569     */
1570    public PractitionerRoleAvailableTimeComponent getAvailableTimeFirstRep() { 
1571      if (getAvailableTime().isEmpty()) {
1572        addAvailableTime();
1573      }
1574      return getAvailableTime().get(0);
1575    }
1576
1577    /**
1578     * @return {@link #notAvailable} (The practitioner is not available or performing this role during this period of time due to the provided reason.)
1579     */
1580    public List<PractitionerRoleNotAvailableComponent> getNotAvailable() { 
1581      if (this.notAvailable == null)
1582        this.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
1583      return this.notAvailable;
1584    }
1585
1586    /**
1587     * @return Returns a reference to <code>this</code> for easy method chaining
1588     */
1589    public PractitionerRole setNotAvailable(List<PractitionerRoleNotAvailableComponent> theNotAvailable) { 
1590      this.notAvailable = theNotAvailable;
1591      return this;
1592    }
1593
1594    public boolean hasNotAvailable() { 
1595      if (this.notAvailable == null)
1596        return false;
1597      for (PractitionerRoleNotAvailableComponent item : this.notAvailable)
1598        if (!item.isEmpty())
1599          return true;
1600      return false;
1601    }
1602
1603    public PractitionerRoleNotAvailableComponent addNotAvailable() { //3
1604      PractitionerRoleNotAvailableComponent t = new PractitionerRoleNotAvailableComponent();
1605      if (this.notAvailable == null)
1606        this.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
1607      this.notAvailable.add(t);
1608      return t;
1609    }
1610
1611    public PractitionerRole addNotAvailable(PractitionerRoleNotAvailableComponent t) { //3
1612      if (t == null)
1613        return this;
1614      if (this.notAvailable == null)
1615        this.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
1616      this.notAvailable.add(t);
1617      return this;
1618    }
1619
1620    /**
1621     * @return The first repetition of repeating field {@link #notAvailable}, creating it if it does not already exist
1622     */
1623    public PractitionerRoleNotAvailableComponent getNotAvailableFirstRep() { 
1624      if (getNotAvailable().isEmpty()) {
1625        addNotAvailable();
1626      }
1627      return getNotAvailable().get(0);
1628    }
1629
1630    /**
1631     * @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
1632     */
1633    public StringType getAvailabilityExceptionsElement() { 
1634      if (this.availabilityExceptions == null)
1635        if (Configuration.errorOnAutoCreate())
1636          throw new Error("Attempt to auto-create PractitionerRole.availabilityExceptions");
1637        else if (Configuration.doAutoCreate())
1638          this.availabilityExceptions = new StringType(); // bb
1639      return this.availabilityExceptions;
1640    }
1641
1642    public boolean hasAvailabilityExceptionsElement() { 
1643      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
1644    }
1645
1646    public boolean hasAvailabilityExceptions() { 
1647      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
1648    }
1649
1650    /**
1651     * @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
1652     */
1653    public PractitionerRole setAvailabilityExceptionsElement(StringType value) { 
1654      this.availabilityExceptions = value;
1655      return this;
1656    }
1657
1658    /**
1659     * @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.
1660     */
1661    public String getAvailabilityExceptions() { 
1662      return this.availabilityExceptions == null ? null : this.availabilityExceptions.getValue();
1663    }
1664
1665    /**
1666     * @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.
1667     */
1668    public PractitionerRole setAvailabilityExceptions(String value) { 
1669      if (Utilities.noString(value))
1670        this.availabilityExceptions = null;
1671      else {
1672        if (this.availabilityExceptions == null)
1673          this.availabilityExceptions = new StringType();
1674        this.availabilityExceptions.setValue(value);
1675      }
1676      return this;
1677    }
1678
1679    /**
1680     * @return {@link #endpoint} (Technical endpoints providing access to services operated for the practitioner with this role.)
1681     */
1682    public List<Reference> getEndpoint() { 
1683      if (this.endpoint == null)
1684        this.endpoint = new ArrayList<Reference>();
1685      return this.endpoint;
1686    }
1687
1688    /**
1689     * @return Returns a reference to <code>this</code> for easy method chaining
1690     */
1691    public PractitionerRole setEndpoint(List<Reference> theEndpoint) { 
1692      this.endpoint = theEndpoint;
1693      return this;
1694    }
1695
1696    public boolean hasEndpoint() { 
1697      if (this.endpoint == null)
1698        return false;
1699      for (Reference item : this.endpoint)
1700        if (!item.isEmpty())
1701          return true;
1702      return false;
1703    }
1704
1705    public Reference addEndpoint() { //3
1706      Reference t = new Reference();
1707      if (this.endpoint == null)
1708        this.endpoint = new ArrayList<Reference>();
1709      this.endpoint.add(t);
1710      return t;
1711    }
1712
1713    public PractitionerRole addEndpoint(Reference t) { //3
1714      if (t == null)
1715        return this;
1716      if (this.endpoint == null)
1717        this.endpoint = new ArrayList<Reference>();
1718      this.endpoint.add(t);
1719      return this;
1720    }
1721
1722    /**
1723     * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist
1724     */
1725    public Reference getEndpointFirstRep() { 
1726      if (getEndpoint().isEmpty()) {
1727        addEndpoint();
1728      }
1729      return getEndpoint().get(0);
1730    }
1731
1732    /**
1733     * @deprecated Use Reference#setResource(IBaseResource) instead
1734     */
1735    @Deprecated
1736    public List<Endpoint> getEndpointTarget() { 
1737      if (this.endpointTarget == null)
1738        this.endpointTarget = new ArrayList<Endpoint>();
1739      return this.endpointTarget;
1740    }
1741
1742    /**
1743     * @deprecated Use Reference#setResource(IBaseResource) instead
1744     */
1745    @Deprecated
1746    public Endpoint addEndpointTarget() { 
1747      Endpoint r = new Endpoint();
1748      if (this.endpointTarget == null)
1749        this.endpointTarget = new ArrayList<Endpoint>();
1750      this.endpointTarget.add(r);
1751      return r;
1752    }
1753
1754      protected void listChildren(List<Property> children) {
1755        super.listChildren(children);
1756        children.add(new Property("identifier", "Identifier", "Business Identifiers that are specific to a role/location.", 0, java.lang.Integer.MAX_VALUE, identifier));
1757        children.add(new Property("active", "boolean", "Whether this practitioner role record is in active use.", 0, 1, active));
1758        children.add(new Property("period", "Period", "The period during which the person is authorized to act as a practitioner in these role(s) for the organization.", 0, 1, period));
1759        children.add(new Property("practitioner", "Reference(Practitioner)", "Practitioner that is able to provide the defined services for the organization.", 0, 1, practitioner));
1760        children.add(new Property("organization", "Reference(Organization)", "The organization where the Practitioner performs the roles associated.", 0, 1, organization));
1761        children.add(new Property("code", "CodeableConcept", "Roles which this practitioner is authorized to perform for the organization.", 0, java.lang.Integer.MAX_VALUE, code));
1762        children.add(new Property("specialty", "CodeableConcept", "Specific specialty of the practitioner.", 0, java.lang.Integer.MAX_VALUE, specialty));
1763        children.add(new Property("location", "Reference(Location)", "The location(s) at which this practitioner provides care.", 0, java.lang.Integer.MAX_VALUE, location));
1764        children.add(new Property("healthcareService", "Reference(HealthcareService)", "The list of healthcare services that this worker provides for this role's Organization/Location(s).", 0, java.lang.Integer.MAX_VALUE, healthcareService));
1765        children.add(new Property("telecom", "ContactPoint", "Contact details that are specific to the role/location/service.", 0, java.lang.Integer.MAX_VALUE, telecom));
1766        children.add(new Property("availableTime", "", "A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.", 0, java.lang.Integer.MAX_VALUE, availableTime));
1767        children.add(new Property("notAvailable", "", "The practitioner is not available or performing this role during this period of time due to the provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailable));
1768        children.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, 1, availabilityExceptions));
1769        children.add(new Property("endpoint", "Reference(Endpoint)", "Technical endpoints providing access to services operated for the practitioner with this role.", 0, java.lang.Integer.MAX_VALUE, endpoint));
1770      }
1771
1772      @Override
1773      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1774        switch (_hash) {
1775        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business Identifiers that are specific to a role/location.", 0, java.lang.Integer.MAX_VALUE, identifier);
1776        case -1422950650: /*active*/  return new Property("active", "boolean", "Whether this practitioner role record is in active use.", 0, 1, active);
1777        case -991726143: /*period*/  return new Property("period", "Period", "The period during which the person is authorized to act as a practitioner in these role(s) for the organization.", 0, 1, period);
1778        case 574573338: /*practitioner*/  return new Property("practitioner", "Reference(Practitioner)", "Practitioner that is able to provide the defined services for the organization.", 0, 1, practitioner);
1779        case 1178922291: /*organization*/  return new Property("organization", "Reference(Organization)", "The organization where the Practitioner performs the roles associated.", 0, 1, organization);
1780        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Roles which this practitioner is authorized to perform for the organization.", 0, java.lang.Integer.MAX_VALUE, code);
1781        case -1694759682: /*specialty*/  return new Property("specialty", "CodeableConcept", "Specific specialty of the practitioner.", 0, java.lang.Integer.MAX_VALUE, specialty);
1782        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "The location(s) at which this practitioner provides care.", 0, java.lang.Integer.MAX_VALUE, location);
1783        case 1289661064: /*healthcareService*/  return new Property("healthcareService", "Reference(HealthcareService)", "The list of healthcare services that this worker provides for this role's Organization/Location(s).", 0, java.lang.Integer.MAX_VALUE, healthcareService);
1784        case -1429363305: /*telecom*/  return new Property("telecom", "ContactPoint", "Contact details that are specific to the role/location/service.", 0, java.lang.Integer.MAX_VALUE, telecom);
1785        case 1873069366: /*availableTime*/  return new Property("availableTime", "", "A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.", 0, java.lang.Integer.MAX_VALUE, availableTime);
1786        case -629572298: /*notAvailable*/  return new Property("notAvailable", "", "The practitioner is not available or performing this role during this period of time due to the provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailable);
1787        case -1149143617: /*availabilityExceptions*/  return 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, 1, availabilityExceptions);
1788        case 1741102485: /*endpoint*/  return new Property("endpoint", "Reference(Endpoint)", "Technical endpoints providing access to services operated for the practitioner with this role.", 0, java.lang.Integer.MAX_VALUE, endpoint);
1789        default: return super.getNamedProperty(_hash, _name, _checkValid);
1790        }
1791
1792      }
1793
1794      @Override
1795      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1796        switch (hash) {
1797        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1798        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1799        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1800        case 574573338: /*practitioner*/ return this.practitioner == null ? new Base[0] : new Base[] {this.practitioner}; // Reference
1801        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
1802        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // CodeableConcept
1803        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
1804        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // Reference
1805        case 1289661064: /*healthcareService*/ return this.healthcareService == null ? new Base[0] : this.healthcareService.toArray(new Base[this.healthcareService.size()]); // Reference
1806        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
1807        case 1873069366: /*availableTime*/ return this.availableTime == null ? new Base[0] : this.availableTime.toArray(new Base[this.availableTime.size()]); // PractitionerRoleAvailableTimeComponent
1808        case -629572298: /*notAvailable*/ return this.notAvailable == null ? new Base[0] : this.notAvailable.toArray(new Base[this.notAvailable.size()]); // PractitionerRoleNotAvailableComponent
1809        case -1149143617: /*availabilityExceptions*/ return this.availabilityExceptions == null ? new Base[0] : new Base[] {this.availabilityExceptions}; // StringType
1810        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
1811        default: return super.getProperty(hash, name, checkValid);
1812        }
1813
1814      }
1815
1816      @Override
1817      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1818        switch (hash) {
1819        case -1618432855: // identifier
1820          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1821          return value;
1822        case -1422950650: // active
1823          this.active = castToBoolean(value); // BooleanType
1824          return value;
1825        case -991726143: // period
1826          this.period = castToPeriod(value); // Period
1827          return value;
1828        case 574573338: // practitioner
1829          this.practitioner = castToReference(value); // Reference
1830          return value;
1831        case 1178922291: // organization
1832          this.organization = castToReference(value); // Reference
1833          return value;
1834        case 3059181: // code
1835          this.getCode().add(castToCodeableConcept(value)); // CodeableConcept
1836          return value;
1837        case -1694759682: // specialty
1838          this.getSpecialty().add(castToCodeableConcept(value)); // CodeableConcept
1839          return value;
1840        case 1901043637: // location
1841          this.getLocation().add(castToReference(value)); // Reference
1842          return value;
1843        case 1289661064: // healthcareService
1844          this.getHealthcareService().add(castToReference(value)); // Reference
1845          return value;
1846        case -1429363305: // telecom
1847          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
1848          return value;
1849        case 1873069366: // availableTime
1850          this.getAvailableTime().add((PractitionerRoleAvailableTimeComponent) value); // PractitionerRoleAvailableTimeComponent
1851          return value;
1852        case -629572298: // notAvailable
1853          this.getNotAvailable().add((PractitionerRoleNotAvailableComponent) value); // PractitionerRoleNotAvailableComponent
1854          return value;
1855        case -1149143617: // availabilityExceptions
1856          this.availabilityExceptions = castToString(value); // StringType
1857          return value;
1858        case 1741102485: // endpoint
1859          this.getEndpoint().add(castToReference(value)); // Reference
1860          return value;
1861        default: return super.setProperty(hash, name, value);
1862        }
1863
1864      }
1865
1866      @Override
1867      public Base setProperty(String name, Base value) throws FHIRException {
1868        if (name.equals("identifier")) {
1869          this.getIdentifier().add(castToIdentifier(value));
1870        } else if (name.equals("active")) {
1871          this.active = castToBoolean(value); // BooleanType
1872        } else if (name.equals("period")) {
1873          this.period = castToPeriod(value); // Period
1874        } else if (name.equals("practitioner")) {
1875          this.practitioner = castToReference(value); // Reference
1876        } else if (name.equals("organization")) {
1877          this.organization = castToReference(value); // Reference
1878        } else if (name.equals("code")) {
1879          this.getCode().add(castToCodeableConcept(value));
1880        } else if (name.equals("specialty")) {
1881          this.getSpecialty().add(castToCodeableConcept(value));
1882        } else if (name.equals("location")) {
1883          this.getLocation().add(castToReference(value));
1884        } else if (name.equals("healthcareService")) {
1885          this.getHealthcareService().add(castToReference(value));
1886        } else if (name.equals("telecom")) {
1887          this.getTelecom().add(castToContactPoint(value));
1888        } else if (name.equals("availableTime")) {
1889          this.getAvailableTime().add((PractitionerRoleAvailableTimeComponent) value);
1890        } else if (name.equals("notAvailable")) {
1891          this.getNotAvailable().add((PractitionerRoleNotAvailableComponent) value);
1892        } else if (name.equals("availabilityExceptions")) {
1893          this.availabilityExceptions = castToString(value); // StringType
1894        } else if (name.equals("endpoint")) {
1895          this.getEndpoint().add(castToReference(value));
1896        } else
1897          return super.setProperty(name, value);
1898        return value;
1899      }
1900
1901      @Override
1902      public Base makeProperty(int hash, String name) throws FHIRException {
1903        switch (hash) {
1904        case -1618432855:  return addIdentifier(); 
1905        case -1422950650:  return getActiveElement();
1906        case -991726143:  return getPeriod(); 
1907        case 574573338:  return getPractitioner(); 
1908        case 1178922291:  return getOrganization(); 
1909        case 3059181:  return addCode(); 
1910        case -1694759682:  return addSpecialty(); 
1911        case 1901043637:  return addLocation(); 
1912        case 1289661064:  return addHealthcareService(); 
1913        case -1429363305:  return addTelecom(); 
1914        case 1873069366:  return addAvailableTime(); 
1915        case -629572298:  return addNotAvailable(); 
1916        case -1149143617:  return getAvailabilityExceptionsElement();
1917        case 1741102485:  return addEndpoint(); 
1918        default: return super.makeProperty(hash, name);
1919        }
1920
1921      }
1922
1923      @Override
1924      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1925        switch (hash) {
1926        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1927        case -1422950650: /*active*/ return new String[] {"boolean"};
1928        case -991726143: /*period*/ return new String[] {"Period"};
1929        case 574573338: /*practitioner*/ return new String[] {"Reference"};
1930        case 1178922291: /*organization*/ return new String[] {"Reference"};
1931        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1932        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
1933        case 1901043637: /*location*/ return new String[] {"Reference"};
1934        case 1289661064: /*healthcareService*/ return new String[] {"Reference"};
1935        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
1936        case 1873069366: /*availableTime*/ return new String[] {};
1937        case -629572298: /*notAvailable*/ return new String[] {};
1938        case -1149143617: /*availabilityExceptions*/ return new String[] {"string"};
1939        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
1940        default: return super.getTypesForProperty(hash, name);
1941        }
1942
1943      }
1944
1945      @Override
1946      public Base addChild(String name) throws FHIRException {
1947        if (name.equals("identifier")) {
1948          return addIdentifier();
1949        }
1950        else if (name.equals("active")) {
1951          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.active");
1952        }
1953        else if (name.equals("period")) {
1954          this.period = new Period();
1955          return this.period;
1956        }
1957        else if (name.equals("practitioner")) {
1958          this.practitioner = new Reference();
1959          return this.practitioner;
1960        }
1961        else if (name.equals("organization")) {
1962          this.organization = new Reference();
1963          return this.organization;
1964        }
1965        else if (name.equals("code")) {
1966          return addCode();
1967        }
1968        else if (name.equals("specialty")) {
1969          return addSpecialty();
1970        }
1971        else if (name.equals("location")) {
1972          return addLocation();
1973        }
1974        else if (name.equals("healthcareService")) {
1975          return addHealthcareService();
1976        }
1977        else if (name.equals("telecom")) {
1978          return addTelecom();
1979        }
1980        else if (name.equals("availableTime")) {
1981          return addAvailableTime();
1982        }
1983        else if (name.equals("notAvailable")) {
1984          return addNotAvailable();
1985        }
1986        else if (name.equals("availabilityExceptions")) {
1987          throw new FHIRException("Cannot call addChild on a primitive type PractitionerRole.availabilityExceptions");
1988        }
1989        else if (name.equals("endpoint")) {
1990          return addEndpoint();
1991        }
1992        else
1993          return super.addChild(name);
1994      }
1995
1996  public String fhirType() {
1997    return "PractitionerRole";
1998
1999  }
2000
2001      public PractitionerRole copy() {
2002        PractitionerRole dst = new PractitionerRole();
2003        copyValues(dst);
2004        if (identifier != null) {
2005          dst.identifier = new ArrayList<Identifier>();
2006          for (Identifier i : identifier)
2007            dst.identifier.add(i.copy());
2008        };
2009        dst.active = active == null ? null : active.copy();
2010        dst.period = period == null ? null : period.copy();
2011        dst.practitioner = practitioner == null ? null : practitioner.copy();
2012        dst.organization = organization == null ? null : organization.copy();
2013        if (code != null) {
2014          dst.code = new ArrayList<CodeableConcept>();
2015          for (CodeableConcept i : code)
2016            dst.code.add(i.copy());
2017        };
2018        if (specialty != null) {
2019          dst.specialty = new ArrayList<CodeableConcept>();
2020          for (CodeableConcept i : specialty)
2021            dst.specialty.add(i.copy());
2022        };
2023        if (location != null) {
2024          dst.location = new ArrayList<Reference>();
2025          for (Reference i : location)
2026            dst.location.add(i.copy());
2027        };
2028        if (healthcareService != null) {
2029          dst.healthcareService = new ArrayList<Reference>();
2030          for (Reference i : healthcareService)
2031            dst.healthcareService.add(i.copy());
2032        };
2033        if (telecom != null) {
2034          dst.telecom = new ArrayList<ContactPoint>();
2035          for (ContactPoint i : telecom)
2036            dst.telecom.add(i.copy());
2037        };
2038        if (availableTime != null) {
2039          dst.availableTime = new ArrayList<PractitionerRoleAvailableTimeComponent>();
2040          for (PractitionerRoleAvailableTimeComponent i : availableTime)
2041            dst.availableTime.add(i.copy());
2042        };
2043        if (notAvailable != null) {
2044          dst.notAvailable = new ArrayList<PractitionerRoleNotAvailableComponent>();
2045          for (PractitionerRoleNotAvailableComponent i : notAvailable)
2046            dst.notAvailable.add(i.copy());
2047        };
2048        dst.availabilityExceptions = availabilityExceptions == null ? null : availabilityExceptions.copy();
2049        if (endpoint != null) {
2050          dst.endpoint = new ArrayList<Reference>();
2051          for (Reference i : endpoint)
2052            dst.endpoint.add(i.copy());
2053        };
2054        return dst;
2055      }
2056
2057      protected PractitionerRole typedCopy() {
2058        return copy();
2059      }
2060
2061      @Override
2062      public boolean equalsDeep(Base other_) {
2063        if (!super.equalsDeep(other_))
2064          return false;
2065        if (!(other_ instanceof PractitionerRole))
2066          return false;
2067        PractitionerRole o = (PractitionerRole) other_;
2068        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(period, o.period, true)
2069           && compareDeep(practitioner, o.practitioner, true) && compareDeep(organization, o.organization, true)
2070           && compareDeep(code, o.code, true) && compareDeep(specialty, o.specialty, true) && compareDeep(location, o.location, true)
2071           && compareDeep(healthcareService, o.healthcareService, true) && compareDeep(telecom, o.telecom, true)
2072           && compareDeep(availableTime, o.availableTime, true) && compareDeep(notAvailable, o.notAvailable, true)
2073           && compareDeep(availabilityExceptions, o.availabilityExceptions, true) && compareDeep(endpoint, o.endpoint, true)
2074          ;
2075      }
2076
2077      @Override
2078      public boolean equalsShallow(Base other_) {
2079        if (!super.equalsShallow(other_))
2080          return false;
2081        if (!(other_ instanceof PractitionerRole))
2082          return false;
2083        PractitionerRole o = (PractitionerRole) other_;
2084        return compareValues(active, o.active, true) && compareValues(availabilityExceptions, o.availabilityExceptions, true)
2085          ;
2086      }
2087
2088      public boolean isEmpty() {
2089        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, period
2090          , practitioner, organization, code, specialty, location, healthcareService, telecom
2091          , availableTime, notAvailable, availabilityExceptions, endpoint);
2092      }
2093
2094  @Override
2095  public ResourceType getResourceType() {
2096    return ResourceType.PractitionerRole;
2097   }
2098
2099 /**
2100   * Search parameter: <b>date</b>
2101   * <p>
2102   * Description: <b>The period during which the practitioner is authorized to perform in these role(s)</b><br>
2103   * Type: <b>date</b><br>
2104   * Path: <b>PractitionerRole.period</b><br>
2105   * </p>
2106   */
2107  @SearchParamDefinition(name="date", path="PractitionerRole.period", description="The period during which the practitioner is authorized to perform in these role(s)", type="date" )
2108  public static final String SP_DATE = "date";
2109 /**
2110   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2111   * <p>
2112   * Description: <b>The period during which the practitioner is authorized to perform in these role(s)</b><br>
2113   * Type: <b>date</b><br>
2114   * Path: <b>PractitionerRole.period</b><br>
2115   * </p>
2116   */
2117  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2118
2119 /**
2120   * Search parameter: <b>identifier</b>
2121   * <p>
2122   * Description: <b>A practitioner's Identifier</b><br>
2123   * Type: <b>token</b><br>
2124   * Path: <b>PractitionerRole.identifier</b><br>
2125   * </p>
2126   */
2127  @SearchParamDefinition(name="identifier", path="PractitionerRole.identifier", description="A practitioner's Identifier", type="token" )
2128  public static final String SP_IDENTIFIER = "identifier";
2129 /**
2130   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2131   * <p>
2132   * Description: <b>A practitioner's Identifier</b><br>
2133   * Type: <b>token</b><br>
2134   * Path: <b>PractitionerRole.identifier</b><br>
2135   * </p>
2136   */
2137  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2138
2139 /**
2140   * Search parameter: <b>specialty</b>
2141   * <p>
2142   * Description: <b>The practitioner has this specialty at an organization</b><br>
2143   * Type: <b>token</b><br>
2144   * Path: <b>PractitionerRole.specialty</b><br>
2145   * </p>
2146   */
2147  @SearchParamDefinition(name="specialty", path="PractitionerRole.specialty", description="The practitioner has this specialty at an organization", type="token" )
2148  public static final String SP_SPECIALTY = "specialty";
2149 /**
2150   * <b>Fluent Client</b> search parameter constant for <b>specialty</b>
2151   * <p>
2152   * Description: <b>The practitioner has this specialty at an organization</b><br>
2153   * Type: <b>token</b><br>
2154   * Path: <b>PractitionerRole.specialty</b><br>
2155   * </p>
2156   */
2157  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SPECIALTY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SPECIALTY);
2158
2159 /**
2160   * Search parameter: <b>role</b>
2161   * <p>
2162   * Description: <b>The practitioner can perform this role at for the organization</b><br>
2163   * Type: <b>token</b><br>
2164   * Path: <b>PractitionerRole.code</b><br>
2165   * </p>
2166   */
2167  @SearchParamDefinition(name="role", path="PractitionerRole.code", description="The practitioner can perform this role at for the organization", type="token" )
2168  public static final String SP_ROLE = "role";
2169 /**
2170   * <b>Fluent Client</b> search parameter constant for <b>role</b>
2171   * <p>
2172   * Description: <b>The practitioner can perform this role at for the organization</b><br>
2173   * Type: <b>token</b><br>
2174   * Path: <b>PractitionerRole.code</b><br>
2175   * </p>
2176   */
2177  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ROLE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ROLE);
2178
2179 /**
2180   * Search parameter: <b>practitioner</b>
2181   * <p>
2182   * Description: <b>Practitioner that is able to provide the defined services for the organization</b><br>
2183   * Type: <b>reference</b><br>
2184   * Path: <b>PractitionerRole.practitioner</b><br>
2185   * </p>
2186   */
2187  @SearchParamDefinition(name="practitioner", path="PractitionerRole.practitioner", description="Practitioner that is able to provide the defined services for the organization", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Practitioner.class } )
2188  public static final String SP_PRACTITIONER = "practitioner";
2189 /**
2190   * <b>Fluent Client</b> search parameter constant for <b>practitioner</b>
2191   * <p>
2192   * Description: <b>Practitioner that is able to provide the defined services for the organization</b><br>
2193   * Type: <b>reference</b><br>
2194   * Path: <b>PractitionerRole.practitioner</b><br>
2195   * </p>
2196   */
2197  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRACTITIONER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRACTITIONER);
2198
2199/**
2200   * Constant for fluent queries to be used to add include statements. Specifies
2201   * the path value of "<b>PractitionerRole:practitioner</b>".
2202   */
2203  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRACTITIONER = new ca.uhn.fhir.model.api.Include("PractitionerRole:practitioner").toLocked();
2204
2205 /**
2206   * Search parameter: <b>active</b>
2207   * <p>
2208   * Description: <b>Whether this practitioner role record is in active use</b><br>
2209   * Type: <b>token</b><br>
2210   * Path: <b>PractitionerRole.active</b><br>
2211   * </p>
2212   */
2213  @SearchParamDefinition(name="active", path="PractitionerRole.active", description="Whether this practitioner role record is in active use", type="token" )
2214  public static final String SP_ACTIVE = "active";
2215 /**
2216   * <b>Fluent Client</b> search parameter constant for <b>active</b>
2217   * <p>
2218   * Description: <b>Whether this practitioner role record is in active use</b><br>
2219   * Type: <b>token</b><br>
2220   * Path: <b>PractitionerRole.active</b><br>
2221   * </p>
2222   */
2223  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
2224
2225 /**
2226   * Search parameter: <b>endpoint</b>
2227   * <p>
2228   * Description: <b>Technical endpoints providing access to services operated for the practitioner with this role</b><br>
2229   * Type: <b>reference</b><br>
2230   * Path: <b>PractitionerRole.endpoint</b><br>
2231   * </p>
2232   */
2233  @SearchParamDefinition(name="endpoint", path="PractitionerRole.endpoint", description="Technical endpoints providing access to services operated for the practitioner with this role", type="reference", target={Endpoint.class } )
2234  public static final String SP_ENDPOINT = "endpoint";
2235 /**
2236   * <b>Fluent Client</b> search parameter constant for <b>endpoint</b>
2237   * <p>
2238   * Description: <b>Technical endpoints providing access to services operated for the practitioner with this role</b><br>
2239   * Type: <b>reference</b><br>
2240   * Path: <b>PractitionerRole.endpoint</b><br>
2241   * </p>
2242   */
2243  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENDPOINT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENDPOINT);
2244
2245/**
2246   * Constant for fluent queries to be used to add include statements. Specifies
2247   * the path value of "<b>PractitionerRole:endpoint</b>".
2248   */
2249  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENDPOINT = new ca.uhn.fhir.model.api.Include("PractitionerRole:endpoint").toLocked();
2250
2251 /**
2252   * Search parameter: <b>phone</b>
2253   * <p>
2254   * Description: <b>A value in a phone contact</b><br>
2255   * Type: <b>token</b><br>
2256   * Path: <b>PractitionerRole.telecom(system=phone)</b><br>
2257   * </p>
2258   */
2259  @SearchParamDefinition(name="phone", path="PractitionerRole.telecom.where(system='phone')", description="A value in a phone contact", type="token" )
2260  public static final String SP_PHONE = "phone";
2261 /**
2262   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
2263   * <p>
2264   * Description: <b>A value in a phone contact</b><br>
2265   * Type: <b>token</b><br>
2266   * Path: <b>PractitionerRole.telecom(system=phone)</b><br>
2267   * </p>
2268   */
2269  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
2270
2271 /**
2272   * Search parameter: <b>service</b>
2273   * <p>
2274   * Description: <b>The list of healthcare services that this worker provides for this role's Organization/Location(s)</b><br>
2275   * Type: <b>reference</b><br>
2276   * Path: <b>PractitionerRole.healthcareService</b><br>
2277   * </p>
2278   */
2279  @SearchParamDefinition(name="service", path="PractitionerRole.healthcareService", description="The list of healthcare services that this worker provides for this role's Organization/Location(s)", type="reference", target={HealthcareService.class } )
2280  public static final String SP_SERVICE = "service";
2281 /**
2282   * <b>Fluent Client</b> search parameter constant for <b>service</b>
2283   * <p>
2284   * Description: <b>The list of healthcare services that this worker provides for this role's Organization/Location(s)</b><br>
2285   * Type: <b>reference</b><br>
2286   * Path: <b>PractitionerRole.healthcareService</b><br>
2287   * </p>
2288   */
2289  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SERVICE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SERVICE);
2290
2291/**
2292   * Constant for fluent queries to be used to add include statements. Specifies
2293   * the path value of "<b>PractitionerRole:service</b>".
2294   */
2295  public static final ca.uhn.fhir.model.api.Include INCLUDE_SERVICE = new ca.uhn.fhir.model.api.Include("PractitionerRole:service").toLocked();
2296
2297 /**
2298   * Search parameter: <b>organization</b>
2299   * <p>
2300   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
2301   * Type: <b>reference</b><br>
2302   * Path: <b>PractitionerRole.organization</b><br>
2303   * </p>
2304   */
2305  @SearchParamDefinition(name="organization", path="PractitionerRole.organization", description="The identity of the organization the practitioner represents / acts on behalf of", type="reference", target={Organization.class } )
2306  public static final String SP_ORGANIZATION = "organization";
2307 /**
2308   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
2309   * <p>
2310   * Description: <b>The identity of the organization the practitioner represents / acts on behalf of</b><br>
2311   * Type: <b>reference</b><br>
2312   * Path: <b>PractitionerRole.organization</b><br>
2313   * </p>
2314   */
2315  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
2316
2317/**
2318   * Constant for fluent queries to be used to add include statements. Specifies
2319   * the path value of "<b>PractitionerRole:organization</b>".
2320   */
2321  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("PractitionerRole:organization").toLocked();
2322
2323 /**
2324   * Search parameter: <b>telecom</b>
2325   * <p>
2326   * Description: <b>The value in any kind of contact</b><br>
2327   * Type: <b>token</b><br>
2328   * Path: <b>PractitionerRole.telecom</b><br>
2329   * </p>
2330   */
2331  @SearchParamDefinition(name="telecom", path="PractitionerRole.telecom", description="The value in any kind of contact", type="token" )
2332  public static final String SP_TELECOM = "telecom";
2333 /**
2334   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
2335   * <p>
2336   * Description: <b>The value in any kind of contact</b><br>
2337   * Type: <b>token</b><br>
2338   * Path: <b>PractitionerRole.telecom</b><br>
2339   * </p>
2340   */
2341  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
2342
2343 /**
2344   * Search parameter: <b>location</b>
2345   * <p>
2346   * Description: <b>One of the locations at which this practitioner provides care</b><br>
2347   * Type: <b>reference</b><br>
2348   * Path: <b>PractitionerRole.location</b><br>
2349   * </p>
2350   */
2351  @SearchParamDefinition(name="location", path="PractitionerRole.location", description="One of the locations at which this practitioner provides care", type="reference", target={Location.class } )
2352  public static final String SP_LOCATION = "location";
2353 /**
2354   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2355   * <p>
2356   * Description: <b>One of the locations at which this practitioner provides care</b><br>
2357   * Type: <b>reference</b><br>
2358   * Path: <b>PractitionerRole.location</b><br>
2359   * </p>
2360   */
2361  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
2362
2363/**
2364   * Constant for fluent queries to be used to add include statements. Specifies
2365   * the path value of "<b>PractitionerRole:location</b>".
2366   */
2367  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("PractitionerRole:location").toLocked();
2368
2369 /**
2370   * Search parameter: <b>email</b>
2371   * <p>
2372   * Description: <b>A value in an email contact</b><br>
2373   * Type: <b>token</b><br>
2374   * Path: <b>PractitionerRole.telecom(system=email)</b><br>
2375   * </p>
2376   */
2377  @SearchParamDefinition(name="email", path="PractitionerRole.telecom.where(system='email')", description="A value in an email contact", type="token" )
2378  public static final String SP_EMAIL = "email";
2379 /**
2380   * <b>Fluent Client</b> search parameter constant for <b>email</b>
2381   * <p>
2382   * Description: <b>A value in an email contact</b><br>
2383   * Type: <b>token</b><br>
2384   * Path: <b>PractitionerRole.telecom(system=email)</b><br>
2385   * </p>
2386   */
2387  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
2388
2389
2390}
2391