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