001package org.hl7.fhir.dstu3.model;
002
003/*-
004 * #%L
005 * org.hl7.fhir.dstu3
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/*
025  Copyright (c) 2011+, HL7, Inc.
026  All rights reserved.
027  
028  Redistribution and use in source and binary forms, with or without modification, 
029  are permitted provided that the following conditions are met:
030  
031   * Redistributions of source code must retain the above copyright notice, this 
032     list of conditions and the following disclaimer.
033   * Redistributions in binary form must reproduce the above copyright notice, 
034     this list of conditions and the following disclaimer in the documentation 
035     and/or other materials provided with the distribution.
036   * Neither the name of HL7 nor the names of its contributors may be used to 
037     endorse or promote products derived from this software without specific 
038     prior written permission.
039  
040  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
041  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
042  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
043  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
044  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
045  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
046  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
047  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
048  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
049  POSSIBILITY OF SUCH DAMAGE.
050  
051*/
052
053// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
054import java.util.ArrayList;
055import java.util.List;
056
057import org.hl7.fhir.exceptions.FHIRException;
058import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
059import org.hl7.fhir.utilities.Utilities;
060
061import ca.uhn.fhir.model.api.annotation.Block;
062import ca.uhn.fhir.model.api.annotation.Child;
063import ca.uhn.fhir.model.api.annotation.Description;
064import ca.uhn.fhir.model.api.annotation.ResourceDef;
065import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
066/**
067 * The details of a healthcare service available at a location.
068 */
069@ResourceDef(name="HealthcareService", profile="http://hl7.org/fhir/Profile/HealthcareService")
070public class HealthcareService extends DomainResource {
071
072    public enum DaysOfWeek {
073        /**
074         * Monday
075         */
076        MON, 
077        /**
078         * Tuesday
079         */
080        TUE, 
081        /**
082         * Wednesday
083         */
084        WED, 
085        /**
086         * Thursday
087         */
088        THU, 
089        /**
090         * Friday
091         */
092        FRI, 
093        /**
094         * Saturday
095         */
096        SAT, 
097        /**
098         * Sunday
099         */
100        SUN, 
101        /**
102         * added to help the parsers with the generic types
103         */
104        NULL;
105        public static DaysOfWeek fromCode(String codeString) throws FHIRException {
106            if (codeString == null || "".equals(codeString))
107                return null;
108        if ("mon".equals(codeString))
109          return MON;
110        if ("tue".equals(codeString))
111          return TUE;
112        if ("wed".equals(codeString))
113          return WED;
114        if ("thu".equals(codeString))
115          return THU;
116        if ("fri".equals(codeString))
117          return FRI;
118        if ("sat".equals(codeString))
119          return SAT;
120        if ("sun".equals(codeString))
121          return SUN;
122        if (Configuration.isAcceptInvalidEnums())
123          return null;
124        else
125          throw new FHIRException("Unknown DaysOfWeek code '"+codeString+"'");
126        }
127        public String toCode() {
128          switch (this) {
129            case MON: return "mon";
130            case TUE: return "tue";
131            case WED: return "wed";
132            case THU: return "thu";
133            case FRI: return "fri";
134            case SAT: return "sat";
135            case SUN: return "sun";
136            default: return "?";
137          }
138        }
139        public String getSystem() {
140          switch (this) {
141            case MON: return "http://hl7.org/fhir/days-of-week";
142            case TUE: return "http://hl7.org/fhir/days-of-week";
143            case WED: return "http://hl7.org/fhir/days-of-week";
144            case THU: return "http://hl7.org/fhir/days-of-week";
145            case FRI: return "http://hl7.org/fhir/days-of-week";
146            case SAT: return "http://hl7.org/fhir/days-of-week";
147            case SUN: return "http://hl7.org/fhir/days-of-week";
148            default: return "?";
149          }
150        }
151        public String getDefinition() {
152          switch (this) {
153            case MON: return "Monday";
154            case TUE: return "Tuesday";
155            case WED: return "Wednesday";
156            case THU: return "Thursday";
157            case FRI: return "Friday";
158            case SAT: return "Saturday";
159            case SUN: return "Sunday";
160            default: return "?";
161          }
162        }
163        public String getDisplay() {
164          switch (this) {
165            case MON: return "Monday";
166            case TUE: return "Tuesday";
167            case WED: return "Wednesday";
168            case THU: return "Thursday";
169            case FRI: return "Friday";
170            case SAT: return "Saturday";
171            case SUN: return "Sunday";
172            default: return "?";
173          }
174        }
175    }
176
177  public static class DaysOfWeekEnumFactory implements EnumFactory<DaysOfWeek> {
178    public DaysOfWeek fromCode(String codeString) throws IllegalArgumentException {
179      if (codeString == null || "".equals(codeString))
180            if (codeString == null || "".equals(codeString))
181                return null;
182        if ("mon".equals(codeString))
183          return DaysOfWeek.MON;
184        if ("tue".equals(codeString))
185          return DaysOfWeek.TUE;
186        if ("wed".equals(codeString))
187          return DaysOfWeek.WED;
188        if ("thu".equals(codeString))
189          return DaysOfWeek.THU;
190        if ("fri".equals(codeString))
191          return DaysOfWeek.FRI;
192        if ("sat".equals(codeString))
193          return DaysOfWeek.SAT;
194        if ("sun".equals(codeString))
195          return DaysOfWeek.SUN;
196        throw new IllegalArgumentException("Unknown DaysOfWeek code '"+codeString+"'");
197        }
198        public Enumeration<DaysOfWeek> fromType(Base code) throws FHIRException {
199          if (code == null)
200            return null;
201          if (code.isEmpty())
202            return new Enumeration<DaysOfWeek>(this);
203          String codeString = ((PrimitiveType) code).asStringValue();
204          if (codeString == null || "".equals(codeString))
205            return null;
206        if ("mon".equals(codeString))
207          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.MON);
208        if ("tue".equals(codeString))
209          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.TUE);
210        if ("wed".equals(codeString))
211          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.WED);
212        if ("thu".equals(codeString))
213          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.THU);
214        if ("fri".equals(codeString))
215          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.FRI);
216        if ("sat".equals(codeString))
217          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.SAT);
218        if ("sun".equals(codeString))
219          return new Enumeration<DaysOfWeek>(this, DaysOfWeek.SUN);
220        throw new FHIRException("Unknown DaysOfWeek code '"+codeString+"'");
221        }
222    public String toCode(DaysOfWeek code) {
223      if (code == DaysOfWeek.MON)
224        return "mon";
225      if (code == DaysOfWeek.TUE)
226        return "tue";
227      if (code == DaysOfWeek.WED)
228        return "wed";
229      if (code == DaysOfWeek.THU)
230        return "thu";
231      if (code == DaysOfWeek.FRI)
232        return "fri";
233      if (code == DaysOfWeek.SAT)
234        return "sat";
235      if (code == DaysOfWeek.SUN)
236        return "sun";
237      return "?";
238      }
239    public String toSystem(DaysOfWeek code) {
240      return code.getSystem();
241      }
242    }
243
244    @Block()
245    public static class HealthcareServiceAvailableTimeComponent extends BackboneElement implements IBaseBackboneElement {
246        /**
247         * Indicates which days of the week are available between the start and end Times.
248         */
249        @Child(name = "daysOfWeek", type = {CodeType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
250        @Description(shortDefinition="mon | tue | wed | thu | fri | sat | sun", formalDefinition="Indicates which days of the week are available between the start and end Times." )
251        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/days-of-week")
252        protected List<Enumeration<DaysOfWeek>> daysOfWeek;
253
254        /**
255         * Is this always available? (hence times are irrelevant) e.g. 24 hour service.
256         */
257        @Child(name = "allDay", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
258        @Description(shortDefinition="Always available? e.g. 24 hour service", formalDefinition="Is this always available? (hence times are irrelevant) e.g. 24 hour service." )
259        protected BooleanType allDay;
260
261        /**
262         * The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
263         */
264        @Child(name = "availableStartTime", type = {TimeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
265        @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." )
266        protected TimeType availableStartTime;
267
268        /**
269         * The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
270         */
271        @Child(name = "availableEndTime", type = {TimeType.class}, order=4, min=0, max=1, modifier=false, summary=false)
272        @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." )
273        protected TimeType availableEndTime;
274
275        private static final long serialVersionUID = -2139510127L;
276
277    /**
278     * Constructor
279     */
280      public HealthcareServiceAvailableTimeComponent() {
281        super();
282      }
283
284        /**
285         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
286         */
287        public List<Enumeration<DaysOfWeek>> getDaysOfWeek() { 
288          if (this.daysOfWeek == null)
289            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
290          return this.daysOfWeek;
291        }
292
293        /**
294         * @return Returns a reference to <code>this</code> for easy method chaining
295         */
296        public HealthcareServiceAvailableTimeComponent setDaysOfWeek(List<Enumeration<DaysOfWeek>> theDaysOfWeek) { 
297          this.daysOfWeek = theDaysOfWeek;
298          return this;
299        }
300
301        public boolean hasDaysOfWeek() { 
302          if (this.daysOfWeek == null)
303            return false;
304          for (Enumeration<DaysOfWeek> item : this.daysOfWeek)
305            if (!item.isEmpty())
306              return true;
307          return false;
308        }
309
310        /**
311         * @return {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
312         */
313        public Enumeration<DaysOfWeek> addDaysOfWeekElement() {//2 
314          Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory());
315          if (this.daysOfWeek == null)
316            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
317          this.daysOfWeek.add(t);
318          return t;
319        }
320
321        /**
322         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
323         */
324        public HealthcareServiceAvailableTimeComponent addDaysOfWeek(DaysOfWeek value) { //1
325          Enumeration<DaysOfWeek> t = new Enumeration<DaysOfWeek>(new DaysOfWeekEnumFactory());
326          t.setValue(value);
327          if (this.daysOfWeek == null)
328            this.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
329          this.daysOfWeek.add(t);
330          return this;
331        }
332
333        /**
334         * @param value {@link #daysOfWeek} (Indicates which days of the week are available between the start and end Times.)
335         */
336        public boolean hasDaysOfWeek(DaysOfWeek value) { 
337          if (this.daysOfWeek == null)
338            return false;
339          for (Enumeration<DaysOfWeek> v : this.daysOfWeek)
340            if (v.getValue().equals(value)) // code
341              return true;
342          return false;
343        }
344
345        /**
346         * @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
347         */
348        public BooleanType getAllDayElement() { 
349          if (this.allDay == null)
350            if (Configuration.errorOnAutoCreate())
351              throw new Error("Attempt to auto-create HealthcareServiceAvailableTimeComponent.allDay");
352            else if (Configuration.doAutoCreate())
353              this.allDay = new BooleanType(); // bb
354          return this.allDay;
355        }
356
357        public boolean hasAllDayElement() { 
358          return this.allDay != null && !this.allDay.isEmpty();
359        }
360
361        public boolean hasAllDay() { 
362          return this.allDay != null && !this.allDay.isEmpty();
363        }
364
365        /**
366         * @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
367         */
368        public HealthcareServiceAvailableTimeComponent setAllDayElement(BooleanType value) { 
369          this.allDay = value;
370          return this;
371        }
372
373        /**
374         * @return Is this always available? (hence times are irrelevant) e.g. 24 hour service.
375         */
376        public boolean getAllDay() { 
377          return this.allDay == null || this.allDay.isEmpty() ? false : this.allDay.getValue();
378        }
379
380        /**
381         * @param value Is this always available? (hence times are irrelevant) e.g. 24 hour service.
382         */
383        public HealthcareServiceAvailableTimeComponent setAllDay(boolean value) { 
384            if (this.allDay == null)
385              this.allDay = new BooleanType();
386            this.allDay.setValue(value);
387          return this;
388        }
389
390        /**
391         * @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
392         */
393        public TimeType getAvailableStartTimeElement() { 
394          if (this.availableStartTime == null)
395            if (Configuration.errorOnAutoCreate())
396              throw new Error("Attempt to auto-create HealthcareServiceAvailableTimeComponent.availableStartTime");
397            else if (Configuration.doAutoCreate())
398              this.availableStartTime = new TimeType(); // bb
399          return this.availableStartTime;
400        }
401
402        public boolean hasAvailableStartTimeElement() { 
403          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
404        }
405
406        public boolean hasAvailableStartTime() { 
407          return this.availableStartTime != null && !this.availableStartTime.isEmpty();
408        }
409
410        /**
411         * @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
412         */
413        public HealthcareServiceAvailableTimeComponent setAvailableStartTimeElement(TimeType value) { 
414          this.availableStartTime = value;
415          return this;
416        }
417
418        /**
419         * @return The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
420         */
421        public String getAvailableStartTime() { 
422          return this.availableStartTime == null ? null : this.availableStartTime.getValue();
423        }
424
425        /**
426         * @param value The opening time of day. Note: If the AllDay flag is set, then this time is ignored.
427         */
428        public HealthcareServiceAvailableTimeComponent setAvailableStartTime(String value) { 
429          if (value == null)
430            this.availableStartTime = null;
431          else {
432            if (this.availableStartTime == null)
433              this.availableStartTime = new TimeType();
434            this.availableStartTime.setValue(value);
435          }
436          return this;
437        }
438
439        /**
440         * @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
441         */
442        public TimeType getAvailableEndTimeElement() { 
443          if (this.availableEndTime == null)
444            if (Configuration.errorOnAutoCreate())
445              throw new Error("Attempt to auto-create HealthcareServiceAvailableTimeComponent.availableEndTime");
446            else if (Configuration.doAutoCreate())
447              this.availableEndTime = new TimeType(); // bb
448          return this.availableEndTime;
449        }
450
451        public boolean hasAvailableEndTimeElement() { 
452          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
453        }
454
455        public boolean hasAvailableEndTime() { 
456          return this.availableEndTime != null && !this.availableEndTime.isEmpty();
457        }
458
459        /**
460         * @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
461         */
462        public HealthcareServiceAvailableTimeComponent setAvailableEndTimeElement(TimeType value) { 
463          this.availableEndTime = value;
464          return this;
465        }
466
467        /**
468         * @return The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
469         */
470        public String getAvailableEndTime() { 
471          return this.availableEndTime == null ? null : this.availableEndTime.getValue();
472        }
473
474        /**
475         * @param value The closing time of day. Note: If the AllDay flag is set, then this time is ignored.
476         */
477        public HealthcareServiceAvailableTimeComponent setAvailableEndTime(String value) { 
478          if (value == null)
479            this.availableEndTime = null;
480          else {
481            if (this.availableEndTime == null)
482              this.availableEndTime = new TimeType();
483            this.availableEndTime.setValue(value);
484          }
485          return this;
486        }
487
488        protected void listChildren(List<Property> children) {
489          super.listChildren(children);
490          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));
491          children.add(new Property("allDay", "boolean", "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", 0, 1, allDay));
492          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));
493          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));
494        }
495
496        @Override
497        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
498          switch (_hash) {
499          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);
500          case -1414913477: /*allDay*/  return new Property("allDay", "boolean", "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", 0, 1, allDay);
501          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);
502          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);
503          default: return super.getNamedProperty(_hash, _name, _checkValid);
504          }
505
506        }
507
508      @Override
509      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
510        switch (hash) {
511        case 68050338: /*daysOfWeek*/ return this.daysOfWeek == null ? new Base[0] : this.daysOfWeek.toArray(new Base[this.daysOfWeek.size()]); // Enumeration<DaysOfWeek>
512        case -1414913477: /*allDay*/ return this.allDay == null ? new Base[0] : new Base[] {this.allDay}; // BooleanType
513        case -1039453818: /*availableStartTime*/ return this.availableStartTime == null ? new Base[0] : new Base[] {this.availableStartTime}; // TimeType
514        case 101151551: /*availableEndTime*/ return this.availableEndTime == null ? new Base[0] : new Base[] {this.availableEndTime}; // TimeType
515        default: return super.getProperty(hash, name, checkValid);
516        }
517
518      }
519
520      @Override
521      public Base setProperty(int hash, String name, Base value) throws FHIRException {
522        switch (hash) {
523        case 68050338: // daysOfWeek
524          value = new DaysOfWeekEnumFactory().fromType(castToCode(value));
525          this.getDaysOfWeek().add((Enumeration) value); // Enumeration<DaysOfWeek>
526          return value;
527        case -1414913477: // allDay
528          this.allDay = castToBoolean(value); // BooleanType
529          return value;
530        case -1039453818: // availableStartTime
531          this.availableStartTime = castToTime(value); // TimeType
532          return value;
533        case 101151551: // availableEndTime
534          this.availableEndTime = castToTime(value); // TimeType
535          return value;
536        default: return super.setProperty(hash, name, value);
537        }
538
539      }
540
541      @Override
542      public Base setProperty(String name, Base value) throws FHIRException {
543        if (name.equals("daysOfWeek")) {
544          value = new DaysOfWeekEnumFactory().fromType(castToCode(value));
545          this.getDaysOfWeek().add((Enumeration) value);
546        } else if (name.equals("allDay")) {
547          this.allDay = castToBoolean(value); // BooleanType
548        } else if (name.equals("availableStartTime")) {
549          this.availableStartTime = castToTime(value); // TimeType
550        } else if (name.equals("availableEndTime")) {
551          this.availableEndTime = castToTime(value); // TimeType
552        } else
553          return super.setProperty(name, value);
554        return value;
555      }
556
557      @Override
558      public Base makeProperty(int hash, String name) throws FHIRException {
559        switch (hash) {
560        case 68050338:  return addDaysOfWeekElement();
561        case -1414913477:  return getAllDayElement();
562        case -1039453818:  return getAvailableStartTimeElement();
563        case 101151551:  return getAvailableEndTimeElement();
564        default: return super.makeProperty(hash, name);
565        }
566
567      }
568
569      @Override
570      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
571        switch (hash) {
572        case 68050338: /*daysOfWeek*/ return new String[] {"code"};
573        case -1414913477: /*allDay*/ return new String[] {"boolean"};
574        case -1039453818: /*availableStartTime*/ return new String[] {"time"};
575        case 101151551: /*availableEndTime*/ return new String[] {"time"};
576        default: return super.getTypesForProperty(hash, name);
577        }
578
579      }
580
581      @Override
582      public Base addChild(String name) throws FHIRException {
583        if (name.equals("daysOfWeek")) {
584          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.daysOfWeek");
585        }
586        else if (name.equals("allDay")) {
587          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.allDay");
588        }
589        else if (name.equals("availableStartTime")) {
590          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.availableStartTime");
591        }
592        else if (name.equals("availableEndTime")) {
593          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.availableEndTime");
594        }
595        else
596          return super.addChild(name);
597      }
598
599      public HealthcareServiceAvailableTimeComponent copy() {
600        HealthcareServiceAvailableTimeComponent dst = new HealthcareServiceAvailableTimeComponent();
601        copyValues(dst);
602        if (daysOfWeek != null) {
603          dst.daysOfWeek = new ArrayList<Enumeration<DaysOfWeek>>();
604          for (Enumeration<DaysOfWeek> i : daysOfWeek)
605            dst.daysOfWeek.add(i.copy());
606        };
607        dst.allDay = allDay == null ? null : allDay.copy();
608        dst.availableStartTime = availableStartTime == null ? null : availableStartTime.copy();
609        dst.availableEndTime = availableEndTime == null ? null : availableEndTime.copy();
610        return dst;
611      }
612
613      @Override
614      public boolean equalsDeep(Base other_) {
615        if (!super.equalsDeep(other_))
616          return false;
617        if (!(other_ instanceof HealthcareServiceAvailableTimeComponent))
618          return false;
619        HealthcareServiceAvailableTimeComponent o = (HealthcareServiceAvailableTimeComponent) other_;
620        return compareDeep(daysOfWeek, o.daysOfWeek, true) && compareDeep(allDay, o.allDay, true) && compareDeep(availableStartTime, o.availableStartTime, true)
621           && compareDeep(availableEndTime, o.availableEndTime, true);
622      }
623
624      @Override
625      public boolean equalsShallow(Base other_) {
626        if (!super.equalsShallow(other_))
627          return false;
628        if (!(other_ instanceof HealthcareServiceAvailableTimeComponent))
629          return false;
630        HealthcareServiceAvailableTimeComponent o = (HealthcareServiceAvailableTimeComponent) other_;
631        return compareValues(daysOfWeek, o.daysOfWeek, true) && compareValues(allDay, o.allDay, true) && compareValues(availableStartTime, o.availableStartTime, true)
632           && compareValues(availableEndTime, o.availableEndTime, true);
633      }
634
635      public boolean isEmpty() {
636        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(daysOfWeek, allDay, availableStartTime
637          , availableEndTime);
638      }
639
640  public String fhirType() {
641    return "HealthcareService.availableTime";
642
643  }
644
645  }
646
647    @Block()
648    public static class HealthcareServiceNotAvailableComponent extends BackboneElement implements IBaseBackboneElement {
649        /**
650         * The reason that can be presented to the user as to why this time is not available.
651         */
652        @Child(name = "description", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
653        @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." )
654        protected StringType description;
655
656        /**
657         * Service is not available (seasonally or for a public holiday) from this date.
658         */
659        @Child(name = "during", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
660        @Description(shortDefinition="Service not availablefrom this date", formalDefinition="Service is not available (seasonally or for a public holiday) from this date." )
661        protected Period during;
662
663        private static final long serialVersionUID = 310849929L;
664
665    /**
666     * Constructor
667     */
668      public HealthcareServiceNotAvailableComponent() {
669        super();
670      }
671
672    /**
673     * Constructor
674     */
675      public HealthcareServiceNotAvailableComponent(StringType description) {
676        super();
677        this.description = description;
678      }
679
680        /**
681         * @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
682         */
683        public StringType getDescriptionElement() { 
684          if (this.description == null)
685            if (Configuration.errorOnAutoCreate())
686              throw new Error("Attempt to auto-create HealthcareServiceNotAvailableComponent.description");
687            else if (Configuration.doAutoCreate())
688              this.description = new StringType(); // bb
689          return this.description;
690        }
691
692        public boolean hasDescriptionElement() { 
693          return this.description != null && !this.description.isEmpty();
694        }
695
696        public boolean hasDescription() { 
697          return this.description != null && !this.description.isEmpty();
698        }
699
700        /**
701         * @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
702         */
703        public HealthcareServiceNotAvailableComponent setDescriptionElement(StringType value) { 
704          this.description = value;
705          return this;
706        }
707
708        /**
709         * @return The reason that can be presented to the user as to why this time is not available.
710         */
711        public String getDescription() { 
712          return this.description == null ? null : this.description.getValue();
713        }
714
715        /**
716         * @param value The reason that can be presented to the user as to why this time is not available.
717         */
718        public HealthcareServiceNotAvailableComponent setDescription(String value) { 
719            if (this.description == null)
720              this.description = new StringType();
721            this.description.setValue(value);
722          return this;
723        }
724
725        /**
726         * @return {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
727         */
728        public Period getDuring() { 
729          if (this.during == null)
730            if (Configuration.errorOnAutoCreate())
731              throw new Error("Attempt to auto-create HealthcareServiceNotAvailableComponent.during");
732            else if (Configuration.doAutoCreate())
733              this.during = new Period(); // cc
734          return this.during;
735        }
736
737        public boolean hasDuring() { 
738          return this.during != null && !this.during.isEmpty();
739        }
740
741        /**
742         * @param value {@link #during} (Service is not available (seasonally or for a public holiday) from this date.)
743         */
744        public HealthcareServiceNotAvailableComponent setDuring(Period value)  { 
745          this.during = value;
746          return this;
747        }
748
749        protected void listChildren(List<Property> children) {
750          super.listChildren(children);
751          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));
752          children.add(new Property("during", "Period", "Service is not available (seasonally or for a public holiday) from this date.", 0, 1, during));
753        }
754
755        @Override
756        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
757          switch (_hash) {
758          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);
759          case -1320499647: /*during*/  return new Property("during", "Period", "Service is not available (seasonally or for a public holiday) from this date.", 0, 1, during);
760          default: return super.getNamedProperty(_hash, _name, _checkValid);
761          }
762
763        }
764
765      @Override
766      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
767        switch (hash) {
768        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
769        case -1320499647: /*during*/ return this.during == null ? new Base[0] : new Base[] {this.during}; // Period
770        default: return super.getProperty(hash, name, checkValid);
771        }
772
773      }
774
775      @Override
776      public Base setProperty(int hash, String name, Base value) throws FHIRException {
777        switch (hash) {
778        case -1724546052: // description
779          this.description = castToString(value); // StringType
780          return value;
781        case -1320499647: // during
782          this.during = castToPeriod(value); // Period
783          return value;
784        default: return super.setProperty(hash, name, value);
785        }
786
787      }
788
789      @Override
790      public Base setProperty(String name, Base value) throws FHIRException {
791        if (name.equals("description")) {
792          this.description = castToString(value); // StringType
793        } else if (name.equals("during")) {
794          this.during = castToPeriod(value); // Period
795        } else
796          return super.setProperty(name, value);
797        return value;
798      }
799
800      @Override
801      public Base makeProperty(int hash, String name) throws FHIRException {
802        switch (hash) {
803        case -1724546052:  return getDescriptionElement();
804        case -1320499647:  return getDuring(); 
805        default: return super.makeProperty(hash, name);
806        }
807
808      }
809
810      @Override
811      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
812        switch (hash) {
813        case -1724546052: /*description*/ return new String[] {"string"};
814        case -1320499647: /*during*/ return new String[] {"Period"};
815        default: return super.getTypesForProperty(hash, name);
816        }
817
818      }
819
820      @Override
821      public Base addChild(String name) throws FHIRException {
822        if (name.equals("description")) {
823          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.description");
824        }
825        else if (name.equals("during")) {
826          this.during = new Period();
827          return this.during;
828        }
829        else
830          return super.addChild(name);
831      }
832
833      public HealthcareServiceNotAvailableComponent copy() {
834        HealthcareServiceNotAvailableComponent dst = new HealthcareServiceNotAvailableComponent();
835        copyValues(dst);
836        dst.description = description == null ? null : description.copy();
837        dst.during = during == null ? null : during.copy();
838        return dst;
839      }
840
841      @Override
842      public boolean equalsDeep(Base other_) {
843        if (!super.equalsDeep(other_))
844          return false;
845        if (!(other_ instanceof HealthcareServiceNotAvailableComponent))
846          return false;
847        HealthcareServiceNotAvailableComponent o = (HealthcareServiceNotAvailableComponent) other_;
848        return compareDeep(description, o.description, true) && compareDeep(during, o.during, true);
849      }
850
851      @Override
852      public boolean equalsShallow(Base other_) {
853        if (!super.equalsShallow(other_))
854          return false;
855        if (!(other_ instanceof HealthcareServiceNotAvailableComponent))
856          return false;
857        HealthcareServiceNotAvailableComponent o = (HealthcareServiceNotAvailableComponent) other_;
858        return compareValues(description, o.description, true);
859      }
860
861      public boolean isEmpty() {
862        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(description, during);
863      }
864
865  public String fhirType() {
866    return "HealthcareService.notAvailable";
867
868  }
869
870  }
871
872    /**
873     * External identifiers for this item.
874     */
875    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
876    @Description(shortDefinition="External identifiers for this item", formalDefinition="External identifiers for this item." )
877    protected List<Identifier> identifier;
878
879    /**
880     * Whether this healthcareservice record is in active use.
881     */
882    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=true, summary=true)
883    @Description(shortDefinition="Whether this healthcareservice is in active use", formalDefinition="Whether this healthcareservice record is in active use." )
884    protected BooleanType active;
885
886    /**
887     * The organization that provides this healthcare service.
888     */
889    @Child(name = "providedBy", type = {Organization.class}, order=2, min=0, max=1, modifier=false, summary=true)
890    @Description(shortDefinition="Organization that provides this service", formalDefinition="The organization that provides this healthcare service." )
891    protected Reference providedBy;
892
893    /**
894     * The actual object that is the target of the reference (The organization that provides this healthcare service.)
895     */
896    protected Organization providedByTarget;
897
898    /**
899     * Identifies the broad category of service being performed or delivered.
900     */
901    @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=true)
902    @Description(shortDefinition="Broad category of service being performed or delivered", formalDefinition="Identifies the broad category of service being performed or delivered." )
903    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-category")
904    protected CodeableConcept category;
905
906    /**
907     * The specific type of service that may be delivered or performed.
908     */
909    @Child(name = "type", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
910    @Description(shortDefinition="Type of service that may be delivered or performed", formalDefinition="The specific type of service that may be delivered or performed." )
911    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-type")
912    protected List<CodeableConcept> type;
913
914    /**
915     * Collection of specialties handled by the service site. This is more of a medical term.
916     */
917    @Child(name = "specialty", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
918    @Description(shortDefinition="Specialties handled by the HealthcareService", formalDefinition="Collection of specialties handled by the service site. This is more of a medical term." )
919    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/c80-practice-codes")
920    protected List<CodeableConcept> specialty;
921
922    /**
923     * The location(s) where this healthcare service may be provided.
924     */
925    @Child(name = "location", type = {Location.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
926    @Description(shortDefinition="Location(s) where service may be provided", formalDefinition="The location(s) where this healthcare service may be provided." )
927    protected List<Reference> location;
928    /**
929     * The actual objects that are the target of the reference (The location(s) where this healthcare service may be provided.)
930     */
931    protected List<Location> locationTarget;
932
933
934    /**
935     * Further description of the service as it would be presented to a consumer while searching.
936     */
937    @Child(name = "name", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=true)
938    @Description(shortDefinition="Description of service as presented to a consumer while searching", formalDefinition="Further description of the service as it would be presented to a consumer while searching." )
939    protected StringType name;
940
941    /**
942     * Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.
943     */
944    @Child(name = "comment", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=true)
945    @Description(shortDefinition="Additional description and/or any specific issues not covered elsewhere", formalDefinition="Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName." )
946    protected StringType comment;
947
948    /**
949     * Extra details about the service that can't be placed in the other fields.
950     */
951    @Child(name = "extraDetails", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=false)
952    @Description(shortDefinition="Extra details about the service that can't be placed in the other fields", formalDefinition="Extra details about the service that can't be placed in the other fields." )
953    protected StringType extraDetails;
954
955    /**
956     * If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.
957     */
958    @Child(name = "photo", type = {Attachment.class}, order=10, min=0, max=1, modifier=false, summary=true)
959    @Description(shortDefinition="Facilitates quick identification of the service", formalDefinition="If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list." )
960    protected Attachment photo;
961
962    /**
963     * List of contacts related to this specific healthcare service.
964     */
965    @Child(name = "telecom", type = {ContactPoint.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
966    @Description(shortDefinition="Contacts related to the healthcare service", formalDefinition="List of contacts related to this specific healthcare service." )
967    protected List<ContactPoint> telecom;
968
969    /**
970     * The location(s) that this service is available to (not where the service is provided).
971     */
972    @Child(name = "coverageArea", type = {Location.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
973    @Description(shortDefinition="Location(s) service is inteded for/available to", formalDefinition="The location(s) that this service is available to (not where the service is provided)." )
974    protected List<Reference> coverageArea;
975    /**
976     * The actual objects that are the target of the reference (The location(s) that this service is available to (not where the service is provided).)
977     */
978    protected List<Location> coverageAreaTarget;
979
980
981    /**
982     * The code(s) that detail the conditions under which the healthcare service is available/offered.
983     */
984    @Child(name = "serviceProvisionCode", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
985    @Description(shortDefinition="Conditions under which service is available/offered", formalDefinition="The code(s) that detail the conditions under which the healthcare service is available/offered." )
986    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-provision-conditions")
987    protected List<CodeableConcept> serviceProvisionCode;
988
989    /**
990     * Does this service have specific eligibility requirements that need to be met in order to use the service?
991     */
992    @Child(name = "eligibility", type = {CodeableConcept.class}, order=14, min=0, max=1, modifier=false, summary=false)
993    @Description(shortDefinition="Specific eligibility requirements required to use the service", formalDefinition="Does this service have specific eligibility requirements that need to be met in order to use the service?" )
994    protected CodeableConcept eligibility;
995
996    /**
997     * Describes the eligibility conditions for the service.
998     */
999    @Child(name = "eligibilityNote", type = {StringType.class}, order=15, min=0, max=1, modifier=false, summary=false)
1000    @Description(shortDefinition="Describes the eligibility conditions for the service", formalDefinition="Describes the eligibility conditions for the service." )
1001    protected StringType eligibilityNote;
1002
1003    /**
1004     * Program Names that can be used to categorize the service.
1005     */
1006    @Child(name = "programName", type = {StringType.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1007    @Description(shortDefinition="Program Names that categorize the service", formalDefinition="Program Names that can be used to categorize the service." )
1008    protected List<StringType> programName;
1009
1010    /**
1011     * Collection of characteristics (attributes).
1012     */
1013    @Child(name = "characteristic", type = {CodeableConcept.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1014    @Description(shortDefinition="Collection of characteristics (attributes)", formalDefinition="Collection of characteristics (attributes)." )
1015    protected List<CodeableConcept> characteristic;
1016
1017    /**
1018     * Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.
1019     */
1020    @Child(name = "referralMethod", type = {CodeableConcept.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1021    @Description(shortDefinition="Ways that the service accepts referrals", formalDefinition="Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required." )
1022    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-referral-method")
1023    protected List<CodeableConcept> referralMethod;
1024
1025    /**
1026     * Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.
1027     */
1028    @Child(name = "appointmentRequired", type = {BooleanType.class}, order=19, min=0, max=1, modifier=false, summary=false)
1029    @Description(shortDefinition="If an appointment is required for access to this service", formalDefinition="Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service." )
1030    protected BooleanType appointmentRequired;
1031
1032    /**
1033     * A collection of times that the Service Site is available.
1034     */
1035    @Child(name = "availableTime", type = {}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1036    @Description(shortDefinition="Times the Service Site is available", formalDefinition="A collection of times that the Service Site is available." )
1037    protected List<HealthcareServiceAvailableTimeComponent> availableTime;
1038
1039    /**
1040     * The HealthcareService is not available during this period of time due to the provided reason.
1041     */
1042    @Child(name = "notAvailable", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1043    @Description(shortDefinition="Not available during this time due to provided reason", formalDefinition="The HealthcareService is not available during this period of time due to the provided reason." )
1044    protected List<HealthcareServiceNotAvailableComponent> notAvailable;
1045
1046    /**
1047     * 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.
1048     */
1049    @Child(name = "availabilityExceptions", type = {StringType.class}, order=22, min=0, max=1, modifier=false, summary=false)
1050    @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." )
1051    protected StringType availabilityExceptions;
1052
1053    /**
1054     * Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.
1055     */
1056    @Child(name = "endpoint", type = {Endpoint.class}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1057    @Description(shortDefinition="Technical endpoints providing access to services operated for the location", formalDefinition="Technical endpoints providing access to services operated for the specific healthcare services defined at this resource." )
1058    protected List<Reference> endpoint;
1059    /**
1060     * The actual objects that are the target of the reference (Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.)
1061     */
1062    protected List<Endpoint> endpointTarget;
1063
1064
1065    private static final long serialVersionUID = -202805485L;
1066
1067  /**
1068   * Constructor
1069   */
1070    public HealthcareService() {
1071      super();
1072    }
1073
1074    /**
1075     * @return {@link #identifier} (External identifiers for this item.)
1076     */
1077    public List<Identifier> getIdentifier() { 
1078      if (this.identifier == null)
1079        this.identifier = new ArrayList<Identifier>();
1080      return this.identifier;
1081    }
1082
1083    /**
1084     * @return Returns a reference to <code>this</code> for easy method chaining
1085     */
1086    public HealthcareService setIdentifier(List<Identifier> theIdentifier) { 
1087      this.identifier = theIdentifier;
1088      return this;
1089    }
1090
1091    public boolean hasIdentifier() { 
1092      if (this.identifier == null)
1093        return false;
1094      for (Identifier item : this.identifier)
1095        if (!item.isEmpty())
1096          return true;
1097      return false;
1098    }
1099
1100    public Identifier addIdentifier() { //3
1101      Identifier t = new Identifier();
1102      if (this.identifier == null)
1103        this.identifier = new ArrayList<Identifier>();
1104      this.identifier.add(t);
1105      return t;
1106    }
1107
1108    public HealthcareService addIdentifier(Identifier t) { //3
1109      if (t == null)
1110        return this;
1111      if (this.identifier == null)
1112        this.identifier = new ArrayList<Identifier>();
1113      this.identifier.add(t);
1114      return this;
1115    }
1116
1117    /**
1118     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1119     */
1120    public Identifier getIdentifierFirstRep() { 
1121      if (getIdentifier().isEmpty()) {
1122        addIdentifier();
1123      }
1124      return getIdentifier().get(0);
1125    }
1126
1127    /**
1128     * @return {@link #active} (Whether this healthcareservice record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1129     */
1130    public BooleanType getActiveElement() { 
1131      if (this.active == null)
1132        if (Configuration.errorOnAutoCreate())
1133          throw new Error("Attempt to auto-create HealthcareService.active");
1134        else if (Configuration.doAutoCreate())
1135          this.active = new BooleanType(); // bb
1136      return this.active;
1137    }
1138
1139    public boolean hasActiveElement() { 
1140      return this.active != null && !this.active.isEmpty();
1141    }
1142
1143    public boolean hasActive() { 
1144      return this.active != null && !this.active.isEmpty();
1145    }
1146
1147    /**
1148     * @param value {@link #active} (Whether this healthcareservice record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
1149     */
1150    public HealthcareService setActiveElement(BooleanType value) { 
1151      this.active = value;
1152      return this;
1153    }
1154
1155    /**
1156     * @return Whether this healthcareservice record is in active use.
1157     */
1158    public boolean getActive() { 
1159      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
1160    }
1161
1162    /**
1163     * @param value Whether this healthcareservice record is in active use.
1164     */
1165    public HealthcareService setActive(boolean value) { 
1166        if (this.active == null)
1167          this.active = new BooleanType();
1168        this.active.setValue(value);
1169      return this;
1170    }
1171
1172    /**
1173     * @return {@link #providedBy} (The organization that provides this healthcare service.)
1174     */
1175    public Reference getProvidedBy() { 
1176      if (this.providedBy == null)
1177        if (Configuration.errorOnAutoCreate())
1178          throw new Error("Attempt to auto-create HealthcareService.providedBy");
1179        else if (Configuration.doAutoCreate())
1180          this.providedBy = new Reference(); // cc
1181      return this.providedBy;
1182    }
1183
1184    public boolean hasProvidedBy() { 
1185      return this.providedBy != null && !this.providedBy.isEmpty();
1186    }
1187
1188    /**
1189     * @param value {@link #providedBy} (The organization that provides this healthcare service.)
1190     */
1191    public HealthcareService setProvidedBy(Reference value)  { 
1192      this.providedBy = value;
1193      return this;
1194    }
1195
1196    /**
1197     * @return {@link #providedBy} 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 that provides this healthcare service.)
1198     */
1199    public Organization getProvidedByTarget() { 
1200      if (this.providedByTarget == null)
1201        if (Configuration.errorOnAutoCreate())
1202          throw new Error("Attempt to auto-create HealthcareService.providedBy");
1203        else if (Configuration.doAutoCreate())
1204          this.providedByTarget = new Organization(); // aa
1205      return this.providedByTarget;
1206    }
1207
1208    /**
1209     * @param value {@link #providedBy} 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 that provides this healthcare service.)
1210     */
1211    public HealthcareService setProvidedByTarget(Organization value) { 
1212      this.providedByTarget = value;
1213      return this;
1214    }
1215
1216    /**
1217     * @return {@link #category} (Identifies the broad category of service being performed or delivered.)
1218     */
1219    public CodeableConcept getCategory() { 
1220      if (this.category == null)
1221        if (Configuration.errorOnAutoCreate())
1222          throw new Error("Attempt to auto-create HealthcareService.category");
1223        else if (Configuration.doAutoCreate())
1224          this.category = new CodeableConcept(); // cc
1225      return this.category;
1226    }
1227
1228    public boolean hasCategory() { 
1229      return this.category != null && !this.category.isEmpty();
1230    }
1231
1232    /**
1233     * @param value {@link #category} (Identifies the broad category of service being performed or delivered.)
1234     */
1235    public HealthcareService setCategory(CodeableConcept value)  { 
1236      this.category = value;
1237      return this;
1238    }
1239
1240    /**
1241     * @return {@link #type} (The specific type of service that may be delivered or performed.)
1242     */
1243    public List<CodeableConcept> getType() { 
1244      if (this.type == null)
1245        this.type = new ArrayList<CodeableConcept>();
1246      return this.type;
1247    }
1248
1249    /**
1250     * @return Returns a reference to <code>this</code> for easy method chaining
1251     */
1252    public HealthcareService setType(List<CodeableConcept> theType) { 
1253      this.type = theType;
1254      return this;
1255    }
1256
1257    public boolean hasType() { 
1258      if (this.type == null)
1259        return false;
1260      for (CodeableConcept item : this.type)
1261        if (!item.isEmpty())
1262          return true;
1263      return false;
1264    }
1265
1266    public CodeableConcept addType() { //3
1267      CodeableConcept t = new CodeableConcept();
1268      if (this.type == null)
1269        this.type = new ArrayList<CodeableConcept>();
1270      this.type.add(t);
1271      return t;
1272    }
1273
1274    public HealthcareService addType(CodeableConcept t) { //3
1275      if (t == null)
1276        return this;
1277      if (this.type == null)
1278        this.type = new ArrayList<CodeableConcept>();
1279      this.type.add(t);
1280      return this;
1281    }
1282
1283    /**
1284     * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist
1285     */
1286    public CodeableConcept getTypeFirstRep() { 
1287      if (getType().isEmpty()) {
1288        addType();
1289      }
1290      return getType().get(0);
1291    }
1292
1293    /**
1294     * @return {@link #specialty} (Collection of specialties handled by the service site. This is more of a medical term.)
1295     */
1296    public List<CodeableConcept> getSpecialty() { 
1297      if (this.specialty == null)
1298        this.specialty = new ArrayList<CodeableConcept>();
1299      return this.specialty;
1300    }
1301
1302    /**
1303     * @return Returns a reference to <code>this</code> for easy method chaining
1304     */
1305    public HealthcareService setSpecialty(List<CodeableConcept> theSpecialty) { 
1306      this.specialty = theSpecialty;
1307      return this;
1308    }
1309
1310    public boolean hasSpecialty() { 
1311      if (this.specialty == null)
1312        return false;
1313      for (CodeableConcept item : this.specialty)
1314        if (!item.isEmpty())
1315          return true;
1316      return false;
1317    }
1318
1319    public CodeableConcept addSpecialty() { //3
1320      CodeableConcept t = new CodeableConcept();
1321      if (this.specialty == null)
1322        this.specialty = new ArrayList<CodeableConcept>();
1323      this.specialty.add(t);
1324      return t;
1325    }
1326
1327    public HealthcareService addSpecialty(CodeableConcept t) { //3
1328      if (t == null)
1329        return this;
1330      if (this.specialty == null)
1331        this.specialty = new ArrayList<CodeableConcept>();
1332      this.specialty.add(t);
1333      return this;
1334    }
1335
1336    /**
1337     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist
1338     */
1339    public CodeableConcept getSpecialtyFirstRep() { 
1340      if (getSpecialty().isEmpty()) {
1341        addSpecialty();
1342      }
1343      return getSpecialty().get(0);
1344    }
1345
1346    /**
1347     * @return {@link #location} (The location(s) where this healthcare service may be provided.)
1348     */
1349    public List<Reference> getLocation() { 
1350      if (this.location == null)
1351        this.location = new ArrayList<Reference>();
1352      return this.location;
1353    }
1354
1355    /**
1356     * @return Returns a reference to <code>this</code> for easy method chaining
1357     */
1358    public HealthcareService setLocation(List<Reference> theLocation) { 
1359      this.location = theLocation;
1360      return this;
1361    }
1362
1363    public boolean hasLocation() { 
1364      if (this.location == null)
1365        return false;
1366      for (Reference item : this.location)
1367        if (!item.isEmpty())
1368          return true;
1369      return false;
1370    }
1371
1372    public Reference addLocation() { //3
1373      Reference t = new Reference();
1374      if (this.location == null)
1375        this.location = new ArrayList<Reference>();
1376      this.location.add(t);
1377      return t;
1378    }
1379
1380    public HealthcareService addLocation(Reference t) { //3
1381      if (t == null)
1382        return this;
1383      if (this.location == null)
1384        this.location = new ArrayList<Reference>();
1385      this.location.add(t);
1386      return this;
1387    }
1388
1389    /**
1390     * @return The first repetition of repeating field {@link #location}, creating it if it does not already exist
1391     */
1392    public Reference getLocationFirstRep() { 
1393      if (getLocation().isEmpty()) {
1394        addLocation();
1395      }
1396      return getLocation().get(0);
1397    }
1398
1399    /**
1400     * @deprecated Use Reference#setResource(IBaseResource) instead
1401     */
1402    @Deprecated
1403    public List<Location> getLocationTarget() { 
1404      if (this.locationTarget == null)
1405        this.locationTarget = new ArrayList<Location>();
1406      return this.locationTarget;
1407    }
1408
1409    /**
1410     * @deprecated Use Reference#setResource(IBaseResource) instead
1411     */
1412    @Deprecated
1413    public Location addLocationTarget() { 
1414      Location r = new Location();
1415      if (this.locationTarget == null)
1416        this.locationTarget = new ArrayList<Location>();
1417      this.locationTarget.add(r);
1418      return r;
1419    }
1420
1421    /**
1422     * @return {@link #name} (Further description of the service as it would be presented to a consumer while searching.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1423     */
1424    public StringType getNameElement() { 
1425      if (this.name == null)
1426        if (Configuration.errorOnAutoCreate())
1427          throw new Error("Attempt to auto-create HealthcareService.name");
1428        else if (Configuration.doAutoCreate())
1429          this.name = new StringType(); // bb
1430      return this.name;
1431    }
1432
1433    public boolean hasNameElement() { 
1434      return this.name != null && !this.name.isEmpty();
1435    }
1436
1437    public boolean hasName() { 
1438      return this.name != null && !this.name.isEmpty();
1439    }
1440
1441    /**
1442     * @param value {@link #name} (Further description of the service as it would be presented to a consumer while searching.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1443     */
1444    public HealthcareService setNameElement(StringType value) { 
1445      this.name = value;
1446      return this;
1447    }
1448
1449    /**
1450     * @return Further description of the service as it would be presented to a consumer while searching.
1451     */
1452    public String getName() { 
1453      return this.name == null ? null : this.name.getValue();
1454    }
1455
1456    /**
1457     * @param value Further description of the service as it would be presented to a consumer while searching.
1458     */
1459    public HealthcareService setName(String value) { 
1460      if (Utilities.noString(value))
1461        this.name = null;
1462      else {
1463        if (this.name == null)
1464          this.name = new StringType();
1465        this.name.setValue(value);
1466      }
1467      return this;
1468    }
1469
1470    /**
1471     * @return {@link #comment} (Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1472     */
1473    public StringType getCommentElement() { 
1474      if (this.comment == null)
1475        if (Configuration.errorOnAutoCreate())
1476          throw new Error("Attempt to auto-create HealthcareService.comment");
1477        else if (Configuration.doAutoCreate())
1478          this.comment = new StringType(); // bb
1479      return this.comment;
1480    }
1481
1482    public boolean hasCommentElement() { 
1483      return this.comment != null && !this.comment.isEmpty();
1484    }
1485
1486    public boolean hasComment() { 
1487      return this.comment != null && !this.comment.isEmpty();
1488    }
1489
1490    /**
1491     * @param value {@link #comment} (Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1492     */
1493    public HealthcareService setCommentElement(StringType value) { 
1494      this.comment = value;
1495      return this;
1496    }
1497
1498    /**
1499     * @return Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.
1500     */
1501    public String getComment() { 
1502      return this.comment == null ? null : this.comment.getValue();
1503    }
1504
1505    /**
1506     * @param value Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.
1507     */
1508    public HealthcareService setComment(String value) { 
1509      if (Utilities.noString(value))
1510        this.comment = null;
1511      else {
1512        if (this.comment == null)
1513          this.comment = new StringType();
1514        this.comment.setValue(value);
1515      }
1516      return this;
1517    }
1518
1519    /**
1520     * @return {@link #extraDetails} (Extra details about the service that can't be placed in the other fields.). This is the underlying object with id, value and extensions. The accessor "getExtraDetails" gives direct access to the value
1521     */
1522    public StringType getExtraDetailsElement() { 
1523      if (this.extraDetails == null)
1524        if (Configuration.errorOnAutoCreate())
1525          throw new Error("Attempt to auto-create HealthcareService.extraDetails");
1526        else if (Configuration.doAutoCreate())
1527          this.extraDetails = new StringType(); // bb
1528      return this.extraDetails;
1529    }
1530
1531    public boolean hasExtraDetailsElement() { 
1532      return this.extraDetails != null && !this.extraDetails.isEmpty();
1533    }
1534
1535    public boolean hasExtraDetails() { 
1536      return this.extraDetails != null && !this.extraDetails.isEmpty();
1537    }
1538
1539    /**
1540     * @param value {@link #extraDetails} (Extra details about the service that can't be placed in the other fields.). This is the underlying object with id, value and extensions. The accessor "getExtraDetails" gives direct access to the value
1541     */
1542    public HealthcareService setExtraDetailsElement(StringType value) { 
1543      this.extraDetails = value;
1544      return this;
1545    }
1546
1547    /**
1548     * @return Extra details about the service that can't be placed in the other fields.
1549     */
1550    public String getExtraDetails() { 
1551      return this.extraDetails == null ? null : this.extraDetails.getValue();
1552    }
1553
1554    /**
1555     * @param value Extra details about the service that can't be placed in the other fields.
1556     */
1557    public HealthcareService setExtraDetails(String value) { 
1558      if (Utilities.noString(value))
1559        this.extraDetails = null;
1560      else {
1561        if (this.extraDetails == null)
1562          this.extraDetails = new StringType();
1563        this.extraDetails.setValue(value);
1564      }
1565      return this;
1566    }
1567
1568    /**
1569     * @return {@link #photo} (If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.)
1570     */
1571    public Attachment getPhoto() { 
1572      if (this.photo == null)
1573        if (Configuration.errorOnAutoCreate())
1574          throw new Error("Attempt to auto-create HealthcareService.photo");
1575        else if (Configuration.doAutoCreate())
1576          this.photo = new Attachment(); // cc
1577      return this.photo;
1578    }
1579
1580    public boolean hasPhoto() { 
1581      return this.photo != null && !this.photo.isEmpty();
1582    }
1583
1584    /**
1585     * @param value {@link #photo} (If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.)
1586     */
1587    public HealthcareService setPhoto(Attachment value)  { 
1588      this.photo = value;
1589      return this;
1590    }
1591
1592    /**
1593     * @return {@link #telecom} (List of contacts related to this specific healthcare service.)
1594     */
1595    public List<ContactPoint> getTelecom() { 
1596      if (this.telecom == null)
1597        this.telecom = new ArrayList<ContactPoint>();
1598      return this.telecom;
1599    }
1600
1601    /**
1602     * @return Returns a reference to <code>this</code> for easy method chaining
1603     */
1604    public HealthcareService setTelecom(List<ContactPoint> theTelecom) { 
1605      this.telecom = theTelecom;
1606      return this;
1607    }
1608
1609    public boolean hasTelecom() { 
1610      if (this.telecom == null)
1611        return false;
1612      for (ContactPoint item : this.telecom)
1613        if (!item.isEmpty())
1614          return true;
1615      return false;
1616    }
1617
1618    public ContactPoint addTelecom() { //3
1619      ContactPoint t = new ContactPoint();
1620      if (this.telecom == null)
1621        this.telecom = new ArrayList<ContactPoint>();
1622      this.telecom.add(t);
1623      return t;
1624    }
1625
1626    public HealthcareService addTelecom(ContactPoint t) { //3
1627      if (t == null)
1628        return this;
1629      if (this.telecom == null)
1630        this.telecom = new ArrayList<ContactPoint>();
1631      this.telecom.add(t);
1632      return this;
1633    }
1634
1635    /**
1636     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist
1637     */
1638    public ContactPoint getTelecomFirstRep() { 
1639      if (getTelecom().isEmpty()) {
1640        addTelecom();
1641      }
1642      return getTelecom().get(0);
1643    }
1644
1645    /**
1646     * @return {@link #coverageArea} (The location(s) that this service is available to (not where the service is provided).)
1647     */
1648    public List<Reference> getCoverageArea() { 
1649      if (this.coverageArea == null)
1650        this.coverageArea = new ArrayList<Reference>();
1651      return this.coverageArea;
1652    }
1653
1654    /**
1655     * @return Returns a reference to <code>this</code> for easy method chaining
1656     */
1657    public HealthcareService setCoverageArea(List<Reference> theCoverageArea) { 
1658      this.coverageArea = theCoverageArea;
1659      return this;
1660    }
1661
1662    public boolean hasCoverageArea() { 
1663      if (this.coverageArea == null)
1664        return false;
1665      for (Reference item : this.coverageArea)
1666        if (!item.isEmpty())
1667          return true;
1668      return false;
1669    }
1670
1671    public Reference addCoverageArea() { //3
1672      Reference t = new Reference();
1673      if (this.coverageArea == null)
1674        this.coverageArea = new ArrayList<Reference>();
1675      this.coverageArea.add(t);
1676      return t;
1677    }
1678
1679    public HealthcareService addCoverageArea(Reference t) { //3
1680      if (t == null)
1681        return this;
1682      if (this.coverageArea == null)
1683        this.coverageArea = new ArrayList<Reference>();
1684      this.coverageArea.add(t);
1685      return this;
1686    }
1687
1688    /**
1689     * @return The first repetition of repeating field {@link #coverageArea}, creating it if it does not already exist
1690     */
1691    public Reference getCoverageAreaFirstRep() { 
1692      if (getCoverageArea().isEmpty()) {
1693        addCoverageArea();
1694      }
1695      return getCoverageArea().get(0);
1696    }
1697
1698    /**
1699     * @deprecated Use Reference#setResource(IBaseResource) instead
1700     */
1701    @Deprecated
1702    public List<Location> getCoverageAreaTarget() { 
1703      if (this.coverageAreaTarget == null)
1704        this.coverageAreaTarget = new ArrayList<Location>();
1705      return this.coverageAreaTarget;
1706    }
1707
1708    /**
1709     * @deprecated Use Reference#setResource(IBaseResource) instead
1710     */
1711    @Deprecated
1712    public Location addCoverageAreaTarget() { 
1713      Location r = new Location();
1714      if (this.coverageAreaTarget == null)
1715        this.coverageAreaTarget = new ArrayList<Location>();
1716      this.coverageAreaTarget.add(r);
1717      return r;
1718    }
1719
1720    /**
1721     * @return {@link #serviceProvisionCode} (The code(s) that detail the conditions under which the healthcare service is available/offered.)
1722     */
1723    public List<CodeableConcept> getServiceProvisionCode() { 
1724      if (this.serviceProvisionCode == null)
1725        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1726      return this.serviceProvisionCode;
1727    }
1728
1729    /**
1730     * @return Returns a reference to <code>this</code> for easy method chaining
1731     */
1732    public HealthcareService setServiceProvisionCode(List<CodeableConcept> theServiceProvisionCode) { 
1733      this.serviceProvisionCode = theServiceProvisionCode;
1734      return this;
1735    }
1736
1737    public boolean hasServiceProvisionCode() { 
1738      if (this.serviceProvisionCode == null)
1739        return false;
1740      for (CodeableConcept item : this.serviceProvisionCode)
1741        if (!item.isEmpty())
1742          return true;
1743      return false;
1744    }
1745
1746    public CodeableConcept addServiceProvisionCode() { //3
1747      CodeableConcept t = new CodeableConcept();
1748      if (this.serviceProvisionCode == null)
1749        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1750      this.serviceProvisionCode.add(t);
1751      return t;
1752    }
1753
1754    public HealthcareService addServiceProvisionCode(CodeableConcept t) { //3
1755      if (t == null)
1756        return this;
1757      if (this.serviceProvisionCode == null)
1758        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1759      this.serviceProvisionCode.add(t);
1760      return this;
1761    }
1762
1763    /**
1764     * @return The first repetition of repeating field {@link #serviceProvisionCode}, creating it if it does not already exist
1765     */
1766    public CodeableConcept getServiceProvisionCodeFirstRep() { 
1767      if (getServiceProvisionCode().isEmpty()) {
1768        addServiceProvisionCode();
1769      }
1770      return getServiceProvisionCode().get(0);
1771    }
1772
1773    /**
1774     * @return {@link #eligibility} (Does this service have specific eligibility requirements that need to be met in order to use the service?)
1775     */
1776    public CodeableConcept getEligibility() { 
1777      if (this.eligibility == null)
1778        if (Configuration.errorOnAutoCreate())
1779          throw new Error("Attempt to auto-create HealthcareService.eligibility");
1780        else if (Configuration.doAutoCreate())
1781          this.eligibility = new CodeableConcept(); // cc
1782      return this.eligibility;
1783    }
1784
1785    public boolean hasEligibility() { 
1786      return this.eligibility != null && !this.eligibility.isEmpty();
1787    }
1788
1789    /**
1790     * @param value {@link #eligibility} (Does this service have specific eligibility requirements that need to be met in order to use the service?)
1791     */
1792    public HealthcareService setEligibility(CodeableConcept value)  { 
1793      this.eligibility = value;
1794      return this;
1795    }
1796
1797    /**
1798     * @return {@link #eligibilityNote} (Describes the eligibility conditions for the service.). This is the underlying object with id, value and extensions. The accessor "getEligibilityNote" gives direct access to the value
1799     */
1800    public StringType getEligibilityNoteElement() { 
1801      if (this.eligibilityNote == null)
1802        if (Configuration.errorOnAutoCreate())
1803          throw new Error("Attempt to auto-create HealthcareService.eligibilityNote");
1804        else if (Configuration.doAutoCreate())
1805          this.eligibilityNote = new StringType(); // bb
1806      return this.eligibilityNote;
1807    }
1808
1809    public boolean hasEligibilityNoteElement() { 
1810      return this.eligibilityNote != null && !this.eligibilityNote.isEmpty();
1811    }
1812
1813    public boolean hasEligibilityNote() { 
1814      return this.eligibilityNote != null && !this.eligibilityNote.isEmpty();
1815    }
1816
1817    /**
1818     * @param value {@link #eligibilityNote} (Describes the eligibility conditions for the service.). This is the underlying object with id, value and extensions. The accessor "getEligibilityNote" gives direct access to the value
1819     */
1820    public HealthcareService setEligibilityNoteElement(StringType value) { 
1821      this.eligibilityNote = value;
1822      return this;
1823    }
1824
1825    /**
1826     * @return Describes the eligibility conditions for the service.
1827     */
1828    public String getEligibilityNote() { 
1829      return this.eligibilityNote == null ? null : this.eligibilityNote.getValue();
1830    }
1831
1832    /**
1833     * @param value Describes the eligibility conditions for the service.
1834     */
1835    public HealthcareService setEligibilityNote(String value) { 
1836      if (Utilities.noString(value))
1837        this.eligibilityNote = null;
1838      else {
1839        if (this.eligibilityNote == null)
1840          this.eligibilityNote = new StringType();
1841        this.eligibilityNote.setValue(value);
1842      }
1843      return this;
1844    }
1845
1846    /**
1847     * @return {@link #programName} (Program Names that can be used to categorize the service.)
1848     */
1849    public List<StringType> getProgramName() { 
1850      if (this.programName == null)
1851        this.programName = new ArrayList<StringType>();
1852      return this.programName;
1853    }
1854
1855    /**
1856     * @return Returns a reference to <code>this</code> for easy method chaining
1857     */
1858    public HealthcareService setProgramName(List<StringType> theProgramName) { 
1859      this.programName = theProgramName;
1860      return this;
1861    }
1862
1863    public boolean hasProgramName() { 
1864      if (this.programName == null)
1865        return false;
1866      for (StringType item : this.programName)
1867        if (!item.isEmpty())
1868          return true;
1869      return false;
1870    }
1871
1872    /**
1873     * @return {@link #programName} (Program Names that can be used to categorize the service.)
1874     */
1875    public StringType addProgramNameElement() {//2 
1876      StringType t = new StringType();
1877      if (this.programName == null)
1878        this.programName = new ArrayList<StringType>();
1879      this.programName.add(t);
1880      return t;
1881    }
1882
1883    /**
1884     * @param value {@link #programName} (Program Names that can be used to categorize the service.)
1885     */
1886    public HealthcareService addProgramName(String value) { //1
1887      StringType t = new StringType();
1888      t.setValue(value);
1889      if (this.programName == null)
1890        this.programName = new ArrayList<StringType>();
1891      this.programName.add(t);
1892      return this;
1893    }
1894
1895    /**
1896     * @param value {@link #programName} (Program Names that can be used to categorize the service.)
1897     */
1898    public boolean hasProgramName(String value) { 
1899      if (this.programName == null)
1900        return false;
1901      for (StringType v : this.programName)
1902        if (v.getValue().equals(value)) // string
1903          return true;
1904      return false;
1905    }
1906
1907    /**
1908     * @return {@link #characteristic} (Collection of characteristics (attributes).)
1909     */
1910    public List<CodeableConcept> getCharacteristic() { 
1911      if (this.characteristic == null)
1912        this.characteristic = new ArrayList<CodeableConcept>();
1913      return this.characteristic;
1914    }
1915
1916    /**
1917     * @return Returns a reference to <code>this</code> for easy method chaining
1918     */
1919    public HealthcareService setCharacteristic(List<CodeableConcept> theCharacteristic) { 
1920      this.characteristic = theCharacteristic;
1921      return this;
1922    }
1923
1924    public boolean hasCharacteristic() { 
1925      if (this.characteristic == null)
1926        return false;
1927      for (CodeableConcept item : this.characteristic)
1928        if (!item.isEmpty())
1929          return true;
1930      return false;
1931    }
1932
1933    public CodeableConcept addCharacteristic() { //3
1934      CodeableConcept t = new CodeableConcept();
1935      if (this.characteristic == null)
1936        this.characteristic = new ArrayList<CodeableConcept>();
1937      this.characteristic.add(t);
1938      return t;
1939    }
1940
1941    public HealthcareService addCharacteristic(CodeableConcept t) { //3
1942      if (t == null)
1943        return this;
1944      if (this.characteristic == null)
1945        this.characteristic = new ArrayList<CodeableConcept>();
1946      this.characteristic.add(t);
1947      return this;
1948    }
1949
1950    /**
1951     * @return The first repetition of repeating field {@link #characteristic}, creating it if it does not already exist
1952     */
1953    public CodeableConcept getCharacteristicFirstRep() { 
1954      if (getCharacteristic().isEmpty()) {
1955        addCharacteristic();
1956      }
1957      return getCharacteristic().get(0);
1958    }
1959
1960    /**
1961     * @return {@link #referralMethod} (Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.)
1962     */
1963    public List<CodeableConcept> getReferralMethod() { 
1964      if (this.referralMethod == null)
1965        this.referralMethod = new ArrayList<CodeableConcept>();
1966      return this.referralMethod;
1967    }
1968
1969    /**
1970     * @return Returns a reference to <code>this</code> for easy method chaining
1971     */
1972    public HealthcareService setReferralMethod(List<CodeableConcept> theReferralMethod) { 
1973      this.referralMethod = theReferralMethod;
1974      return this;
1975    }
1976
1977    public boolean hasReferralMethod() { 
1978      if (this.referralMethod == null)
1979        return false;
1980      for (CodeableConcept item : this.referralMethod)
1981        if (!item.isEmpty())
1982          return true;
1983      return false;
1984    }
1985
1986    public CodeableConcept addReferralMethod() { //3
1987      CodeableConcept t = new CodeableConcept();
1988      if (this.referralMethod == null)
1989        this.referralMethod = new ArrayList<CodeableConcept>();
1990      this.referralMethod.add(t);
1991      return t;
1992    }
1993
1994    public HealthcareService addReferralMethod(CodeableConcept t) { //3
1995      if (t == null)
1996        return this;
1997      if (this.referralMethod == null)
1998        this.referralMethod = new ArrayList<CodeableConcept>();
1999      this.referralMethod.add(t);
2000      return this;
2001    }
2002
2003    /**
2004     * @return The first repetition of repeating field {@link #referralMethod}, creating it if it does not already exist
2005     */
2006    public CodeableConcept getReferralMethodFirstRep() { 
2007      if (getReferralMethod().isEmpty()) {
2008        addReferralMethod();
2009      }
2010      return getReferralMethod().get(0);
2011    }
2012
2013    /**
2014     * @return {@link #appointmentRequired} (Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.). This is the underlying object with id, value and extensions. The accessor "getAppointmentRequired" gives direct access to the value
2015     */
2016    public BooleanType getAppointmentRequiredElement() { 
2017      if (this.appointmentRequired == null)
2018        if (Configuration.errorOnAutoCreate())
2019          throw new Error("Attempt to auto-create HealthcareService.appointmentRequired");
2020        else if (Configuration.doAutoCreate())
2021          this.appointmentRequired = new BooleanType(); // bb
2022      return this.appointmentRequired;
2023    }
2024
2025    public boolean hasAppointmentRequiredElement() { 
2026      return this.appointmentRequired != null && !this.appointmentRequired.isEmpty();
2027    }
2028
2029    public boolean hasAppointmentRequired() { 
2030      return this.appointmentRequired != null && !this.appointmentRequired.isEmpty();
2031    }
2032
2033    /**
2034     * @param value {@link #appointmentRequired} (Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.). This is the underlying object with id, value and extensions. The accessor "getAppointmentRequired" gives direct access to the value
2035     */
2036    public HealthcareService setAppointmentRequiredElement(BooleanType value) { 
2037      this.appointmentRequired = value;
2038      return this;
2039    }
2040
2041    /**
2042     * @return Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.
2043     */
2044    public boolean getAppointmentRequired() { 
2045      return this.appointmentRequired == null || this.appointmentRequired.isEmpty() ? false : this.appointmentRequired.getValue();
2046    }
2047
2048    /**
2049     * @param value Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.
2050     */
2051    public HealthcareService setAppointmentRequired(boolean value) { 
2052        if (this.appointmentRequired == null)
2053          this.appointmentRequired = new BooleanType();
2054        this.appointmentRequired.setValue(value);
2055      return this;
2056    }
2057
2058    /**
2059     * @return {@link #availableTime} (A collection of times that the Service Site is available.)
2060     */
2061    public List<HealthcareServiceAvailableTimeComponent> getAvailableTime() { 
2062      if (this.availableTime == null)
2063        this.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2064      return this.availableTime;
2065    }
2066
2067    /**
2068     * @return Returns a reference to <code>this</code> for easy method chaining
2069     */
2070    public HealthcareService setAvailableTime(List<HealthcareServiceAvailableTimeComponent> theAvailableTime) { 
2071      this.availableTime = theAvailableTime;
2072      return this;
2073    }
2074
2075    public boolean hasAvailableTime() { 
2076      if (this.availableTime == null)
2077        return false;
2078      for (HealthcareServiceAvailableTimeComponent item : this.availableTime)
2079        if (!item.isEmpty())
2080          return true;
2081      return false;
2082    }
2083
2084    public HealthcareServiceAvailableTimeComponent addAvailableTime() { //3
2085      HealthcareServiceAvailableTimeComponent t = new HealthcareServiceAvailableTimeComponent();
2086      if (this.availableTime == null)
2087        this.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2088      this.availableTime.add(t);
2089      return t;
2090    }
2091
2092    public HealthcareService addAvailableTime(HealthcareServiceAvailableTimeComponent t) { //3
2093      if (t == null)
2094        return this;
2095      if (this.availableTime == null)
2096        this.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2097      this.availableTime.add(t);
2098      return this;
2099    }
2100
2101    /**
2102     * @return The first repetition of repeating field {@link #availableTime}, creating it if it does not already exist
2103     */
2104    public HealthcareServiceAvailableTimeComponent getAvailableTimeFirstRep() { 
2105      if (getAvailableTime().isEmpty()) {
2106        addAvailableTime();
2107      }
2108      return getAvailableTime().get(0);
2109    }
2110
2111    /**
2112     * @return {@link #notAvailable} (The HealthcareService is not available during this period of time due to the provided reason.)
2113     */
2114    public List<HealthcareServiceNotAvailableComponent> getNotAvailable() { 
2115      if (this.notAvailable == null)
2116        this.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2117      return this.notAvailable;
2118    }
2119
2120    /**
2121     * @return Returns a reference to <code>this</code> for easy method chaining
2122     */
2123    public HealthcareService setNotAvailable(List<HealthcareServiceNotAvailableComponent> theNotAvailable) { 
2124      this.notAvailable = theNotAvailable;
2125      return this;
2126    }
2127
2128    public boolean hasNotAvailable() { 
2129      if (this.notAvailable == null)
2130        return false;
2131      for (HealthcareServiceNotAvailableComponent item : this.notAvailable)
2132        if (!item.isEmpty())
2133          return true;
2134      return false;
2135    }
2136
2137    public HealthcareServiceNotAvailableComponent addNotAvailable() { //3
2138      HealthcareServiceNotAvailableComponent t = new HealthcareServiceNotAvailableComponent();
2139      if (this.notAvailable == null)
2140        this.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2141      this.notAvailable.add(t);
2142      return t;
2143    }
2144
2145    public HealthcareService addNotAvailable(HealthcareServiceNotAvailableComponent t) { //3
2146      if (t == null)
2147        return this;
2148      if (this.notAvailable == null)
2149        this.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2150      this.notAvailable.add(t);
2151      return this;
2152    }
2153
2154    /**
2155     * @return The first repetition of repeating field {@link #notAvailable}, creating it if it does not already exist
2156     */
2157    public HealthcareServiceNotAvailableComponent getNotAvailableFirstRep() { 
2158      if (getNotAvailable().isEmpty()) {
2159        addNotAvailable();
2160      }
2161      return getNotAvailable().get(0);
2162    }
2163
2164    /**
2165     * @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
2166     */
2167    public StringType getAvailabilityExceptionsElement() { 
2168      if (this.availabilityExceptions == null)
2169        if (Configuration.errorOnAutoCreate())
2170          throw new Error("Attempt to auto-create HealthcareService.availabilityExceptions");
2171        else if (Configuration.doAutoCreate())
2172          this.availabilityExceptions = new StringType(); // bb
2173      return this.availabilityExceptions;
2174    }
2175
2176    public boolean hasAvailabilityExceptionsElement() { 
2177      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
2178    }
2179
2180    public boolean hasAvailabilityExceptions() { 
2181      return this.availabilityExceptions != null && !this.availabilityExceptions.isEmpty();
2182    }
2183
2184    /**
2185     * @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
2186     */
2187    public HealthcareService setAvailabilityExceptionsElement(StringType value) { 
2188      this.availabilityExceptions = value;
2189      return this;
2190    }
2191
2192    /**
2193     * @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.
2194     */
2195    public String getAvailabilityExceptions() { 
2196      return this.availabilityExceptions == null ? null : this.availabilityExceptions.getValue();
2197    }
2198
2199    /**
2200     * @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.
2201     */
2202    public HealthcareService setAvailabilityExceptions(String value) { 
2203      if (Utilities.noString(value))
2204        this.availabilityExceptions = null;
2205      else {
2206        if (this.availabilityExceptions == null)
2207          this.availabilityExceptions = new StringType();
2208        this.availabilityExceptions.setValue(value);
2209      }
2210      return this;
2211    }
2212
2213    /**
2214     * @return {@link #endpoint} (Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.)
2215     */
2216    public List<Reference> getEndpoint() { 
2217      if (this.endpoint == null)
2218        this.endpoint = new ArrayList<Reference>();
2219      return this.endpoint;
2220    }
2221
2222    /**
2223     * @return Returns a reference to <code>this</code> for easy method chaining
2224     */
2225    public HealthcareService setEndpoint(List<Reference> theEndpoint) { 
2226      this.endpoint = theEndpoint;
2227      return this;
2228    }
2229
2230    public boolean hasEndpoint() { 
2231      if (this.endpoint == null)
2232        return false;
2233      for (Reference item : this.endpoint)
2234        if (!item.isEmpty())
2235          return true;
2236      return false;
2237    }
2238
2239    public Reference addEndpoint() { //3
2240      Reference t = new Reference();
2241      if (this.endpoint == null)
2242        this.endpoint = new ArrayList<Reference>();
2243      this.endpoint.add(t);
2244      return t;
2245    }
2246
2247    public HealthcareService addEndpoint(Reference t) { //3
2248      if (t == null)
2249        return this;
2250      if (this.endpoint == null)
2251        this.endpoint = new ArrayList<Reference>();
2252      this.endpoint.add(t);
2253      return this;
2254    }
2255
2256    /**
2257     * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist
2258     */
2259    public Reference getEndpointFirstRep() { 
2260      if (getEndpoint().isEmpty()) {
2261        addEndpoint();
2262      }
2263      return getEndpoint().get(0);
2264    }
2265
2266    /**
2267     * @deprecated Use Reference#setResource(IBaseResource) instead
2268     */
2269    @Deprecated
2270    public List<Endpoint> getEndpointTarget() { 
2271      if (this.endpointTarget == null)
2272        this.endpointTarget = new ArrayList<Endpoint>();
2273      return this.endpointTarget;
2274    }
2275
2276    /**
2277     * @deprecated Use Reference#setResource(IBaseResource) instead
2278     */
2279    @Deprecated
2280    public Endpoint addEndpointTarget() { 
2281      Endpoint r = new Endpoint();
2282      if (this.endpointTarget == null)
2283        this.endpointTarget = new ArrayList<Endpoint>();
2284      this.endpointTarget.add(r);
2285      return r;
2286    }
2287
2288      protected void listChildren(List<Property> children) {
2289        super.listChildren(children);
2290        children.add(new Property("identifier", "Identifier", "External identifiers for this item.", 0, java.lang.Integer.MAX_VALUE, identifier));
2291        children.add(new Property("active", "boolean", "Whether this healthcareservice record is in active use.", 0, 1, active));
2292        children.add(new Property("providedBy", "Reference(Organization)", "The organization that provides this healthcare service.", 0, 1, providedBy));
2293        children.add(new Property("category", "CodeableConcept", "Identifies the broad category of service being performed or delivered.", 0, 1, category));
2294        children.add(new Property("type", "CodeableConcept", "The specific type of service that may be delivered or performed.", 0, java.lang.Integer.MAX_VALUE, type));
2295        children.add(new Property("specialty", "CodeableConcept", "Collection of specialties handled by the service site. This is more of a medical term.", 0, java.lang.Integer.MAX_VALUE, specialty));
2296        children.add(new Property("location", "Reference(Location)", "The location(s) where this healthcare service may be provided.", 0, java.lang.Integer.MAX_VALUE, location));
2297        children.add(new Property("name", "string", "Further description of the service as it would be presented to a consumer while searching.", 0, 1, name));
2298        children.add(new Property("comment", "string", "Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.", 0, 1, comment));
2299        children.add(new Property("extraDetails", "string", "Extra details about the service that can't be placed in the other fields.", 0, 1, extraDetails));
2300        children.add(new Property("photo", "Attachment", "If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.", 0, 1, photo));
2301        children.add(new Property("telecom", "ContactPoint", "List of contacts related to this specific healthcare service.", 0, java.lang.Integer.MAX_VALUE, telecom));
2302        children.add(new Property("coverageArea", "Reference(Location)", "The location(s) that this service is available to (not where the service is provided).", 0, java.lang.Integer.MAX_VALUE, coverageArea));
2303        children.add(new Property("serviceProvisionCode", "CodeableConcept", "The code(s) that detail the conditions under which the healthcare service is available/offered.", 0, java.lang.Integer.MAX_VALUE, serviceProvisionCode));
2304        children.add(new Property("eligibility", "CodeableConcept", "Does this service have specific eligibility requirements that need to be met in order to use the service?", 0, 1, eligibility));
2305        children.add(new Property("eligibilityNote", "string", "Describes the eligibility conditions for the service.", 0, 1, eligibilityNote));
2306        children.add(new Property("programName", "string", "Program Names that can be used to categorize the service.", 0, java.lang.Integer.MAX_VALUE, programName));
2307        children.add(new Property("characteristic", "CodeableConcept", "Collection of characteristics (attributes).", 0, java.lang.Integer.MAX_VALUE, characteristic));
2308        children.add(new Property("referralMethod", "CodeableConcept", "Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.", 0, java.lang.Integer.MAX_VALUE, referralMethod));
2309        children.add(new Property("appointmentRequired", "boolean", "Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.", 0, 1, appointmentRequired));
2310        children.add(new Property("availableTime", "", "A collection of times that the Service Site is available.", 0, java.lang.Integer.MAX_VALUE, availableTime));
2311        children.add(new Property("notAvailable", "", "The HealthcareService is not available during this period of time due to the provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailable));
2312        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));
2313        children.add(new Property("endpoint", "Reference(Endpoint)", "Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.", 0, java.lang.Integer.MAX_VALUE, endpoint));
2314      }
2315
2316      @Override
2317      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2318        switch (_hash) {
2319        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "External identifiers for this item.", 0, java.lang.Integer.MAX_VALUE, identifier);
2320        case -1422950650: /*active*/  return new Property("active", "boolean", "Whether this healthcareservice record is in active use.", 0, 1, active);
2321        case 205136282: /*providedBy*/  return new Property("providedBy", "Reference(Organization)", "The organization that provides this healthcare service.", 0, 1, providedBy);
2322        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Identifies the broad category of service being performed or delivered.", 0, 1, category);
2323        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The specific type of service that may be delivered or performed.", 0, java.lang.Integer.MAX_VALUE, type);
2324        case -1694759682: /*specialty*/  return new Property("specialty", "CodeableConcept", "Collection of specialties handled by the service site. This is more of a medical term.", 0, java.lang.Integer.MAX_VALUE, specialty);
2325        case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "The location(s) where this healthcare service may be provided.", 0, java.lang.Integer.MAX_VALUE, location);
2326        case 3373707: /*name*/  return new Property("name", "string", "Further description of the service as it would be presented to a consumer while searching.", 0, 1, name);
2327        case 950398559: /*comment*/  return new Property("comment", "string", "Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.", 0, 1, comment);
2328        case -1469168622: /*extraDetails*/  return new Property("extraDetails", "string", "Extra details about the service that can't be placed in the other fields.", 0, 1, extraDetails);
2329        case 106642994: /*photo*/  return new Property("photo", "Attachment", "If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.", 0, 1, photo);
2330        case -1429363305: /*telecom*/  return new Property("telecom", "ContactPoint", "List of contacts related to this specific healthcare service.", 0, java.lang.Integer.MAX_VALUE, telecom);
2331        case -1532328299: /*coverageArea*/  return new Property("coverageArea", "Reference(Location)", "The location(s) that this service is available to (not where the service is provided).", 0, java.lang.Integer.MAX_VALUE, coverageArea);
2332        case 1504575405: /*serviceProvisionCode*/  return new Property("serviceProvisionCode", "CodeableConcept", "The code(s) that detail the conditions under which the healthcare service is available/offered.", 0, java.lang.Integer.MAX_VALUE, serviceProvisionCode);
2333        case -930847859: /*eligibility*/  return new Property("eligibility", "CodeableConcept", "Does this service have specific eligibility requirements that need to be met in order to use the service?", 0, 1, eligibility);
2334        case 1635973407: /*eligibilityNote*/  return new Property("eligibilityNote", "string", "Describes the eligibility conditions for the service.", 0, 1, eligibilityNote);
2335        case 1010379567: /*programName*/  return new Property("programName", "string", "Program Names that can be used to categorize the service.", 0, java.lang.Integer.MAX_VALUE, programName);
2336        case 366313883: /*characteristic*/  return new Property("characteristic", "CodeableConcept", "Collection of characteristics (attributes).", 0, java.lang.Integer.MAX_VALUE, characteristic);
2337        case -2092740898: /*referralMethod*/  return new Property("referralMethod", "CodeableConcept", "Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.", 0, java.lang.Integer.MAX_VALUE, referralMethod);
2338        case 427220062: /*appointmentRequired*/  return new Property("appointmentRequired", "boolean", "Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.", 0, 1, appointmentRequired);
2339        case 1873069366: /*availableTime*/  return new Property("availableTime", "", "A collection of times that the Service Site is available.", 0, java.lang.Integer.MAX_VALUE, availableTime);
2340        case -629572298: /*notAvailable*/  return new Property("notAvailable", "", "The HealthcareService is not available during this period of time due to the provided reason.", 0, java.lang.Integer.MAX_VALUE, notAvailable);
2341        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);
2342        case 1741102485: /*endpoint*/  return new Property("endpoint", "Reference(Endpoint)", "Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.", 0, java.lang.Integer.MAX_VALUE, endpoint);
2343        default: return super.getNamedProperty(_hash, _name, _checkValid);
2344        }
2345
2346      }
2347
2348      @Override
2349      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2350        switch (hash) {
2351        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2352        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
2353        case 205136282: /*providedBy*/ return this.providedBy == null ? new Base[0] : new Base[] {this.providedBy}; // Reference
2354        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
2355        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
2356        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
2357        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // Reference
2358        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2359        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
2360        case -1469168622: /*extraDetails*/ return this.extraDetails == null ? new Base[0] : new Base[] {this.extraDetails}; // StringType
2361        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : new Base[] {this.photo}; // Attachment
2362        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
2363        case -1532328299: /*coverageArea*/ return this.coverageArea == null ? new Base[0] : this.coverageArea.toArray(new Base[this.coverageArea.size()]); // Reference
2364        case 1504575405: /*serviceProvisionCode*/ return this.serviceProvisionCode == null ? new Base[0] : this.serviceProvisionCode.toArray(new Base[this.serviceProvisionCode.size()]); // CodeableConcept
2365        case -930847859: /*eligibility*/ return this.eligibility == null ? new Base[0] : new Base[] {this.eligibility}; // CodeableConcept
2366        case 1635973407: /*eligibilityNote*/ return this.eligibilityNote == null ? new Base[0] : new Base[] {this.eligibilityNote}; // StringType
2367        case 1010379567: /*programName*/ return this.programName == null ? new Base[0] : this.programName.toArray(new Base[this.programName.size()]); // StringType
2368        case 366313883: /*characteristic*/ return this.characteristic == null ? new Base[0] : this.characteristic.toArray(new Base[this.characteristic.size()]); // CodeableConcept
2369        case -2092740898: /*referralMethod*/ return this.referralMethod == null ? new Base[0] : this.referralMethod.toArray(new Base[this.referralMethod.size()]); // CodeableConcept
2370        case 427220062: /*appointmentRequired*/ return this.appointmentRequired == null ? new Base[0] : new Base[] {this.appointmentRequired}; // BooleanType
2371        case 1873069366: /*availableTime*/ return this.availableTime == null ? new Base[0] : this.availableTime.toArray(new Base[this.availableTime.size()]); // HealthcareServiceAvailableTimeComponent
2372        case -629572298: /*notAvailable*/ return this.notAvailable == null ? new Base[0] : this.notAvailable.toArray(new Base[this.notAvailable.size()]); // HealthcareServiceNotAvailableComponent
2373        case -1149143617: /*availabilityExceptions*/ return this.availabilityExceptions == null ? new Base[0] : new Base[] {this.availabilityExceptions}; // StringType
2374        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
2375        default: return super.getProperty(hash, name, checkValid);
2376        }
2377
2378      }
2379
2380      @Override
2381      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2382        switch (hash) {
2383        case -1618432855: // identifier
2384          this.getIdentifier().add(castToIdentifier(value)); // Identifier
2385          return value;
2386        case -1422950650: // active
2387          this.active = castToBoolean(value); // BooleanType
2388          return value;
2389        case 205136282: // providedBy
2390          this.providedBy = castToReference(value); // Reference
2391          return value;
2392        case 50511102: // category
2393          this.category = castToCodeableConcept(value); // CodeableConcept
2394          return value;
2395        case 3575610: // type
2396          this.getType().add(castToCodeableConcept(value)); // CodeableConcept
2397          return value;
2398        case -1694759682: // specialty
2399          this.getSpecialty().add(castToCodeableConcept(value)); // CodeableConcept
2400          return value;
2401        case 1901043637: // location
2402          this.getLocation().add(castToReference(value)); // Reference
2403          return value;
2404        case 3373707: // name
2405          this.name = castToString(value); // StringType
2406          return value;
2407        case 950398559: // comment
2408          this.comment = castToString(value); // StringType
2409          return value;
2410        case -1469168622: // extraDetails
2411          this.extraDetails = castToString(value); // StringType
2412          return value;
2413        case 106642994: // photo
2414          this.photo = castToAttachment(value); // Attachment
2415          return value;
2416        case -1429363305: // telecom
2417          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
2418          return value;
2419        case -1532328299: // coverageArea
2420          this.getCoverageArea().add(castToReference(value)); // Reference
2421          return value;
2422        case 1504575405: // serviceProvisionCode
2423          this.getServiceProvisionCode().add(castToCodeableConcept(value)); // CodeableConcept
2424          return value;
2425        case -930847859: // eligibility
2426          this.eligibility = castToCodeableConcept(value); // CodeableConcept
2427          return value;
2428        case 1635973407: // eligibilityNote
2429          this.eligibilityNote = castToString(value); // StringType
2430          return value;
2431        case 1010379567: // programName
2432          this.getProgramName().add(castToString(value)); // StringType
2433          return value;
2434        case 366313883: // characteristic
2435          this.getCharacteristic().add(castToCodeableConcept(value)); // CodeableConcept
2436          return value;
2437        case -2092740898: // referralMethod
2438          this.getReferralMethod().add(castToCodeableConcept(value)); // CodeableConcept
2439          return value;
2440        case 427220062: // appointmentRequired
2441          this.appointmentRequired = castToBoolean(value); // BooleanType
2442          return value;
2443        case 1873069366: // availableTime
2444          this.getAvailableTime().add((HealthcareServiceAvailableTimeComponent) value); // HealthcareServiceAvailableTimeComponent
2445          return value;
2446        case -629572298: // notAvailable
2447          this.getNotAvailable().add((HealthcareServiceNotAvailableComponent) value); // HealthcareServiceNotAvailableComponent
2448          return value;
2449        case -1149143617: // availabilityExceptions
2450          this.availabilityExceptions = castToString(value); // StringType
2451          return value;
2452        case 1741102485: // endpoint
2453          this.getEndpoint().add(castToReference(value)); // Reference
2454          return value;
2455        default: return super.setProperty(hash, name, value);
2456        }
2457
2458      }
2459
2460      @Override
2461      public Base setProperty(String name, Base value) throws FHIRException {
2462        if (name.equals("identifier")) {
2463          this.getIdentifier().add(castToIdentifier(value));
2464        } else if (name.equals("active")) {
2465          this.active = castToBoolean(value); // BooleanType
2466        } else if (name.equals("providedBy")) {
2467          this.providedBy = castToReference(value); // Reference
2468        } else if (name.equals("category")) {
2469          this.category = castToCodeableConcept(value); // CodeableConcept
2470        } else if (name.equals("type")) {
2471          this.getType().add(castToCodeableConcept(value));
2472        } else if (name.equals("specialty")) {
2473          this.getSpecialty().add(castToCodeableConcept(value));
2474        } else if (name.equals("location")) {
2475          this.getLocation().add(castToReference(value));
2476        } else if (name.equals("name")) {
2477          this.name = castToString(value); // StringType
2478        } else if (name.equals("comment")) {
2479          this.comment = castToString(value); // StringType
2480        } else if (name.equals("extraDetails")) {
2481          this.extraDetails = castToString(value); // StringType
2482        } else if (name.equals("photo")) {
2483          this.photo = castToAttachment(value); // Attachment
2484        } else if (name.equals("telecom")) {
2485          this.getTelecom().add(castToContactPoint(value));
2486        } else if (name.equals("coverageArea")) {
2487          this.getCoverageArea().add(castToReference(value));
2488        } else if (name.equals("serviceProvisionCode")) {
2489          this.getServiceProvisionCode().add(castToCodeableConcept(value));
2490        } else if (name.equals("eligibility")) {
2491          this.eligibility = castToCodeableConcept(value); // CodeableConcept
2492        } else if (name.equals("eligibilityNote")) {
2493          this.eligibilityNote = castToString(value); // StringType
2494        } else if (name.equals("programName")) {
2495          this.getProgramName().add(castToString(value));
2496        } else if (name.equals("characteristic")) {
2497          this.getCharacteristic().add(castToCodeableConcept(value));
2498        } else if (name.equals("referralMethod")) {
2499          this.getReferralMethod().add(castToCodeableConcept(value));
2500        } else if (name.equals("appointmentRequired")) {
2501          this.appointmentRequired = castToBoolean(value); // BooleanType
2502        } else if (name.equals("availableTime")) {
2503          this.getAvailableTime().add((HealthcareServiceAvailableTimeComponent) value);
2504        } else if (name.equals("notAvailable")) {
2505          this.getNotAvailable().add((HealthcareServiceNotAvailableComponent) value);
2506        } else if (name.equals("availabilityExceptions")) {
2507          this.availabilityExceptions = castToString(value); // StringType
2508        } else if (name.equals("endpoint")) {
2509          this.getEndpoint().add(castToReference(value));
2510        } else
2511          return super.setProperty(name, value);
2512        return value;
2513      }
2514
2515      @Override
2516      public Base makeProperty(int hash, String name) throws FHIRException {
2517        switch (hash) {
2518        case -1618432855:  return addIdentifier(); 
2519        case -1422950650:  return getActiveElement();
2520        case 205136282:  return getProvidedBy(); 
2521        case 50511102:  return getCategory(); 
2522        case 3575610:  return addType(); 
2523        case -1694759682:  return addSpecialty(); 
2524        case 1901043637:  return addLocation(); 
2525        case 3373707:  return getNameElement();
2526        case 950398559:  return getCommentElement();
2527        case -1469168622:  return getExtraDetailsElement();
2528        case 106642994:  return getPhoto(); 
2529        case -1429363305:  return addTelecom(); 
2530        case -1532328299:  return addCoverageArea(); 
2531        case 1504575405:  return addServiceProvisionCode(); 
2532        case -930847859:  return getEligibility(); 
2533        case 1635973407:  return getEligibilityNoteElement();
2534        case 1010379567:  return addProgramNameElement();
2535        case 366313883:  return addCharacteristic(); 
2536        case -2092740898:  return addReferralMethod(); 
2537        case 427220062:  return getAppointmentRequiredElement();
2538        case 1873069366:  return addAvailableTime(); 
2539        case -629572298:  return addNotAvailable(); 
2540        case -1149143617:  return getAvailabilityExceptionsElement();
2541        case 1741102485:  return addEndpoint(); 
2542        default: return super.makeProperty(hash, name);
2543        }
2544
2545      }
2546
2547      @Override
2548      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2549        switch (hash) {
2550        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2551        case -1422950650: /*active*/ return new String[] {"boolean"};
2552        case 205136282: /*providedBy*/ return new String[] {"Reference"};
2553        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2554        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2555        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
2556        case 1901043637: /*location*/ return new String[] {"Reference"};
2557        case 3373707: /*name*/ return new String[] {"string"};
2558        case 950398559: /*comment*/ return new String[] {"string"};
2559        case -1469168622: /*extraDetails*/ return new String[] {"string"};
2560        case 106642994: /*photo*/ return new String[] {"Attachment"};
2561        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
2562        case -1532328299: /*coverageArea*/ return new String[] {"Reference"};
2563        case 1504575405: /*serviceProvisionCode*/ return new String[] {"CodeableConcept"};
2564        case -930847859: /*eligibility*/ return new String[] {"CodeableConcept"};
2565        case 1635973407: /*eligibilityNote*/ return new String[] {"string"};
2566        case 1010379567: /*programName*/ return new String[] {"string"};
2567        case 366313883: /*characteristic*/ return new String[] {"CodeableConcept"};
2568        case -2092740898: /*referralMethod*/ return new String[] {"CodeableConcept"};
2569        case 427220062: /*appointmentRequired*/ return new String[] {"boolean"};
2570        case 1873069366: /*availableTime*/ return new String[] {};
2571        case -629572298: /*notAvailable*/ return new String[] {};
2572        case -1149143617: /*availabilityExceptions*/ return new String[] {"string"};
2573        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
2574        default: return super.getTypesForProperty(hash, name);
2575        }
2576
2577      }
2578
2579      @Override
2580      public Base addChild(String name) throws FHIRException {
2581        if (name.equals("identifier")) {
2582          return addIdentifier();
2583        }
2584        else if (name.equals("active")) {
2585          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.active");
2586        }
2587        else if (name.equals("providedBy")) {
2588          this.providedBy = new Reference();
2589          return this.providedBy;
2590        }
2591        else if (name.equals("category")) {
2592          this.category = new CodeableConcept();
2593          return this.category;
2594        }
2595        else if (name.equals("type")) {
2596          return addType();
2597        }
2598        else if (name.equals("specialty")) {
2599          return addSpecialty();
2600        }
2601        else if (name.equals("location")) {
2602          return addLocation();
2603        }
2604        else if (name.equals("name")) {
2605          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.name");
2606        }
2607        else if (name.equals("comment")) {
2608          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.comment");
2609        }
2610        else if (name.equals("extraDetails")) {
2611          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.extraDetails");
2612        }
2613        else if (name.equals("photo")) {
2614          this.photo = new Attachment();
2615          return this.photo;
2616        }
2617        else if (name.equals("telecom")) {
2618          return addTelecom();
2619        }
2620        else if (name.equals("coverageArea")) {
2621          return addCoverageArea();
2622        }
2623        else if (name.equals("serviceProvisionCode")) {
2624          return addServiceProvisionCode();
2625        }
2626        else if (name.equals("eligibility")) {
2627          this.eligibility = new CodeableConcept();
2628          return this.eligibility;
2629        }
2630        else if (name.equals("eligibilityNote")) {
2631          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.eligibilityNote");
2632        }
2633        else if (name.equals("programName")) {
2634          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.programName");
2635        }
2636        else if (name.equals("characteristic")) {
2637          return addCharacteristic();
2638        }
2639        else if (name.equals("referralMethod")) {
2640          return addReferralMethod();
2641        }
2642        else if (name.equals("appointmentRequired")) {
2643          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.appointmentRequired");
2644        }
2645        else if (name.equals("availableTime")) {
2646          return addAvailableTime();
2647        }
2648        else if (name.equals("notAvailable")) {
2649          return addNotAvailable();
2650        }
2651        else if (name.equals("availabilityExceptions")) {
2652          throw new FHIRException("Cannot call addChild on a primitive type HealthcareService.availabilityExceptions");
2653        }
2654        else if (name.equals("endpoint")) {
2655          return addEndpoint();
2656        }
2657        else
2658          return super.addChild(name);
2659      }
2660
2661  public String fhirType() {
2662    return "HealthcareService";
2663
2664  }
2665
2666      public HealthcareService copy() {
2667        HealthcareService dst = new HealthcareService();
2668        copyValues(dst);
2669        if (identifier != null) {
2670          dst.identifier = new ArrayList<Identifier>();
2671          for (Identifier i : identifier)
2672            dst.identifier.add(i.copy());
2673        };
2674        dst.active = active == null ? null : active.copy();
2675        dst.providedBy = providedBy == null ? null : providedBy.copy();
2676        dst.category = category == null ? null : category.copy();
2677        if (type != null) {
2678          dst.type = new ArrayList<CodeableConcept>();
2679          for (CodeableConcept i : type)
2680            dst.type.add(i.copy());
2681        };
2682        if (specialty != null) {
2683          dst.specialty = new ArrayList<CodeableConcept>();
2684          for (CodeableConcept i : specialty)
2685            dst.specialty.add(i.copy());
2686        };
2687        if (location != null) {
2688          dst.location = new ArrayList<Reference>();
2689          for (Reference i : location)
2690            dst.location.add(i.copy());
2691        };
2692        dst.name = name == null ? null : name.copy();
2693        dst.comment = comment == null ? null : comment.copy();
2694        dst.extraDetails = extraDetails == null ? null : extraDetails.copy();
2695        dst.photo = photo == null ? null : photo.copy();
2696        if (telecom != null) {
2697          dst.telecom = new ArrayList<ContactPoint>();
2698          for (ContactPoint i : telecom)
2699            dst.telecom.add(i.copy());
2700        };
2701        if (coverageArea != null) {
2702          dst.coverageArea = new ArrayList<Reference>();
2703          for (Reference i : coverageArea)
2704            dst.coverageArea.add(i.copy());
2705        };
2706        if (serviceProvisionCode != null) {
2707          dst.serviceProvisionCode = new ArrayList<CodeableConcept>();
2708          for (CodeableConcept i : serviceProvisionCode)
2709            dst.serviceProvisionCode.add(i.copy());
2710        };
2711        dst.eligibility = eligibility == null ? null : eligibility.copy();
2712        dst.eligibilityNote = eligibilityNote == null ? null : eligibilityNote.copy();
2713        if (programName != null) {
2714          dst.programName = new ArrayList<StringType>();
2715          for (StringType i : programName)
2716            dst.programName.add(i.copy());
2717        };
2718        if (characteristic != null) {
2719          dst.characteristic = new ArrayList<CodeableConcept>();
2720          for (CodeableConcept i : characteristic)
2721            dst.characteristic.add(i.copy());
2722        };
2723        if (referralMethod != null) {
2724          dst.referralMethod = new ArrayList<CodeableConcept>();
2725          for (CodeableConcept i : referralMethod)
2726            dst.referralMethod.add(i.copy());
2727        };
2728        dst.appointmentRequired = appointmentRequired == null ? null : appointmentRequired.copy();
2729        if (availableTime != null) {
2730          dst.availableTime = new ArrayList<HealthcareServiceAvailableTimeComponent>();
2731          for (HealthcareServiceAvailableTimeComponent i : availableTime)
2732            dst.availableTime.add(i.copy());
2733        };
2734        if (notAvailable != null) {
2735          dst.notAvailable = new ArrayList<HealthcareServiceNotAvailableComponent>();
2736          for (HealthcareServiceNotAvailableComponent i : notAvailable)
2737            dst.notAvailable.add(i.copy());
2738        };
2739        dst.availabilityExceptions = availabilityExceptions == null ? null : availabilityExceptions.copy();
2740        if (endpoint != null) {
2741          dst.endpoint = new ArrayList<Reference>();
2742          for (Reference i : endpoint)
2743            dst.endpoint.add(i.copy());
2744        };
2745        return dst;
2746      }
2747
2748      protected HealthcareService typedCopy() {
2749        return copy();
2750      }
2751
2752      @Override
2753      public boolean equalsDeep(Base other_) {
2754        if (!super.equalsDeep(other_))
2755          return false;
2756        if (!(other_ instanceof HealthcareService))
2757          return false;
2758        HealthcareService o = (HealthcareService) other_;
2759        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(providedBy, o.providedBy, true)
2760           && compareDeep(category, o.category, true) && compareDeep(type, o.type, true) && compareDeep(specialty, o.specialty, true)
2761           && compareDeep(location, o.location, true) && compareDeep(name, o.name, true) && compareDeep(comment, o.comment, true)
2762           && compareDeep(extraDetails, o.extraDetails, true) && compareDeep(photo, o.photo, true) && compareDeep(telecom, o.telecom, true)
2763           && compareDeep(coverageArea, o.coverageArea, true) && compareDeep(serviceProvisionCode, o.serviceProvisionCode, true)
2764           && compareDeep(eligibility, o.eligibility, true) && compareDeep(eligibilityNote, o.eligibilityNote, true)
2765           && compareDeep(programName, o.programName, true) && compareDeep(characteristic, o.characteristic, true)
2766           && compareDeep(referralMethod, o.referralMethod, true) && compareDeep(appointmentRequired, o.appointmentRequired, true)
2767           && compareDeep(availableTime, o.availableTime, true) && compareDeep(notAvailable, o.notAvailable, true)
2768           && compareDeep(availabilityExceptions, o.availabilityExceptions, true) && compareDeep(endpoint, o.endpoint, true)
2769          ;
2770      }
2771
2772      @Override
2773      public boolean equalsShallow(Base other_) {
2774        if (!super.equalsShallow(other_))
2775          return false;
2776        if (!(other_ instanceof HealthcareService))
2777          return false;
2778        HealthcareService o = (HealthcareService) other_;
2779        return compareValues(active, o.active, true) && compareValues(name, o.name, true) && compareValues(comment, o.comment, true)
2780           && compareValues(extraDetails, o.extraDetails, true) && compareValues(eligibilityNote, o.eligibilityNote, true)
2781           && compareValues(programName, o.programName, true) && compareValues(appointmentRequired, o.appointmentRequired, true)
2782           && compareValues(availabilityExceptions, o.availabilityExceptions, true);
2783      }
2784
2785      public boolean isEmpty() {
2786        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, providedBy
2787          , category, type, specialty, location, name, comment, extraDetails, photo, telecom
2788          , coverageArea, serviceProvisionCode, eligibility, eligibilityNote, programName, characteristic
2789          , referralMethod, appointmentRequired, availableTime, notAvailable, availabilityExceptions
2790          , endpoint);
2791      }
2792
2793  @Override
2794  public ResourceType getResourceType() {
2795    return ResourceType.HealthcareService;
2796   }
2797
2798 /**
2799   * Search parameter: <b>identifier</b>
2800   * <p>
2801   * Description: <b>External identifiers for this item</b><br>
2802   * Type: <b>token</b><br>
2803   * Path: <b>HealthcareService.identifier</b><br>
2804   * </p>
2805   */
2806  @SearchParamDefinition(name="identifier", path="HealthcareService.identifier", description="External identifiers for this item", type="token" )
2807  public static final String SP_IDENTIFIER = "identifier";
2808 /**
2809   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2810   * <p>
2811   * Description: <b>External identifiers for this item</b><br>
2812   * Type: <b>token</b><br>
2813   * Path: <b>HealthcareService.identifier</b><br>
2814   * </p>
2815   */
2816  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2817
2818 /**
2819   * Search parameter: <b>endpoint</b>
2820   * <p>
2821   * Description: <b>Technical endpoints providing access to services operated for the location</b><br>
2822   * Type: <b>reference</b><br>
2823   * Path: <b>HealthcareService.endpoint</b><br>
2824   * </p>
2825   */
2826  @SearchParamDefinition(name="endpoint", path="HealthcareService.endpoint", description="Technical endpoints providing access to services operated for the location", type="reference", target={Endpoint.class } )
2827  public static final String SP_ENDPOINT = "endpoint";
2828 /**
2829   * <b>Fluent Client</b> search parameter constant for <b>endpoint</b>
2830   * <p>
2831   * Description: <b>Technical endpoints providing access to services operated for the location</b><br>
2832   * Type: <b>reference</b><br>
2833   * Path: <b>HealthcareService.endpoint</b><br>
2834   * </p>
2835   */
2836  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENDPOINT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENDPOINT);
2837
2838/**
2839   * Constant for fluent queries to be used to add include statements. Specifies
2840   * the path value of "<b>HealthcareService:endpoint</b>".
2841   */
2842  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENDPOINT = new ca.uhn.fhir.model.api.Include("HealthcareService:endpoint").toLocked();
2843
2844 /**
2845   * Search parameter: <b>organization</b>
2846   * <p>
2847   * Description: <b>The organization that provides this Healthcare Service</b><br>
2848   * Type: <b>reference</b><br>
2849   * Path: <b>HealthcareService.providedBy</b><br>
2850   * </p>
2851   */
2852  @SearchParamDefinition(name="organization", path="HealthcareService.providedBy", description="The organization that provides this Healthcare Service", type="reference", target={Organization.class } )
2853  public static final String SP_ORGANIZATION = "organization";
2854 /**
2855   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
2856   * <p>
2857   * Description: <b>The organization that provides this Healthcare Service</b><br>
2858   * Type: <b>reference</b><br>
2859   * Path: <b>HealthcareService.providedBy</b><br>
2860   * </p>
2861   */
2862  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
2863
2864/**
2865   * Constant for fluent queries to be used to add include statements. Specifies
2866   * the path value of "<b>HealthcareService:organization</b>".
2867   */
2868  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("HealthcareService:organization").toLocked();
2869
2870 /**
2871   * Search parameter: <b>name</b>
2872   * <p>
2873   * Description: <b>A portion of the Healthcare service name</b><br>
2874   * Type: <b>string</b><br>
2875   * Path: <b>HealthcareService.name</b><br>
2876   * </p>
2877   */
2878  @SearchParamDefinition(name="name", path="HealthcareService.name", description="A portion of the Healthcare service name", type="string" )
2879  public static final String SP_NAME = "name";
2880 /**
2881   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2882   * <p>
2883   * Description: <b>A portion of the Healthcare service name</b><br>
2884   * Type: <b>string</b><br>
2885   * Path: <b>HealthcareService.name</b><br>
2886   * </p>
2887   */
2888  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2889
2890 /**
2891   * Search parameter: <b>programname</b>
2892   * <p>
2893   * Description: <b>One of the Program Names serviced by this HealthcareService</b><br>
2894   * Type: <b>string</b><br>
2895   * Path: <b>HealthcareService.programName</b><br>
2896   * </p>
2897   */
2898  @SearchParamDefinition(name="programname", path="HealthcareService.programName", description="One of the Program Names serviced by this HealthcareService", type="string" )
2899  public static final String SP_PROGRAMNAME = "programname";
2900 /**
2901   * <b>Fluent Client</b> search parameter constant for <b>programname</b>
2902   * <p>
2903   * Description: <b>One of the Program Names serviced by this HealthcareService</b><br>
2904   * Type: <b>string</b><br>
2905   * Path: <b>HealthcareService.programName</b><br>
2906   * </p>
2907   */
2908  public static final ca.uhn.fhir.rest.gclient.StringClientParam PROGRAMNAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PROGRAMNAME);
2909
2910 /**
2911   * Search parameter: <b>active</b>
2912   * <p>
2913   * Description: <b>The Healthcare Service is currently marked as active</b><br>
2914   * Type: <b>token</b><br>
2915   * Path: <b>HealthcareService.active</b><br>
2916   * </p>
2917   */
2918  @SearchParamDefinition(name="active", path="HealthcareService.active", description="The Healthcare Service is currently marked as active", type="token" )
2919  public static final String SP_ACTIVE = "active";
2920 /**
2921   * <b>Fluent Client</b> search parameter constant for <b>active</b>
2922   * <p>
2923   * Description: <b>The Healthcare Service is currently marked as active</b><br>
2924   * Type: <b>token</b><br>
2925   * Path: <b>HealthcareService.active</b><br>
2926   * </p>
2927   */
2928  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
2929
2930 /**
2931   * Search parameter: <b>location</b>
2932   * <p>
2933   * Description: <b>The location of the Healthcare Service</b><br>
2934   * Type: <b>reference</b><br>
2935   * Path: <b>HealthcareService.location</b><br>
2936   * </p>
2937   */
2938  @SearchParamDefinition(name="location", path="HealthcareService.location", description="The location of the Healthcare Service", type="reference", target={Location.class } )
2939  public static final String SP_LOCATION = "location";
2940 /**
2941   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2942   * <p>
2943   * Description: <b>The location of the Healthcare Service</b><br>
2944   * Type: <b>reference</b><br>
2945   * Path: <b>HealthcareService.location</b><br>
2946   * </p>
2947   */
2948  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
2949
2950/**
2951   * Constant for fluent queries to be used to add include statements. Specifies
2952   * the path value of "<b>HealthcareService:location</b>".
2953   */
2954  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("HealthcareService:location").toLocked();
2955
2956 /**
2957   * Search parameter: <b>category</b>
2958   * <p>
2959   * Description: <b>Service Category of the Healthcare Service</b><br>
2960   * Type: <b>token</b><br>
2961   * Path: <b>HealthcareService.category</b><br>
2962   * </p>
2963   */
2964  @SearchParamDefinition(name="category", path="HealthcareService.category", description="Service Category of the Healthcare Service", type="token" )
2965  public static final String SP_CATEGORY = "category";
2966 /**
2967   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2968   * <p>
2969   * Description: <b>Service Category of the Healthcare Service</b><br>
2970   * Type: <b>token</b><br>
2971   * Path: <b>HealthcareService.category</b><br>
2972   * </p>
2973   */
2974  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2975
2976 /**
2977   * Search parameter: <b>type</b>
2978   * <p>
2979   * Description: <b>The type of service provided by this healthcare service</b><br>
2980   * Type: <b>token</b><br>
2981   * Path: <b>HealthcareService.type</b><br>
2982   * </p>
2983   */
2984  @SearchParamDefinition(name="type", path="HealthcareService.type", description="The type of service provided by this healthcare service", type="token" )
2985  public static final String SP_TYPE = "type";
2986 /**
2987   * <b>Fluent Client</b> search parameter constant for <b>type</b>
2988   * <p>
2989   * Description: <b>The type of service provided by this healthcare service</b><br>
2990   * Type: <b>token</b><br>
2991   * Path: <b>HealthcareService.type</b><br>
2992   * </p>
2993   */
2994  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
2995
2996 /**
2997   * Search parameter: <b>characteristic</b>
2998   * <p>
2999   * Description: <b>One of the HealthcareService's characteristics</b><br>
3000   * Type: <b>token</b><br>
3001   * Path: <b>HealthcareService.characteristic</b><br>
3002   * </p>
3003   */
3004  @SearchParamDefinition(name="characteristic", path="HealthcareService.characteristic", description="One of the HealthcareService's characteristics", type="token" )
3005  public static final String SP_CHARACTERISTIC = "characteristic";
3006 /**
3007   * <b>Fluent Client</b> search parameter constant for <b>characteristic</b>
3008   * <p>
3009   * Description: <b>One of the HealthcareService's characteristics</b><br>
3010   * Type: <b>token</b><br>
3011   * Path: <b>HealthcareService.characteristic</b><br>
3012   * </p>
3013   */
3014  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHARACTERISTIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CHARACTERISTIC);
3015
3016
3017}
3018