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