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 Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
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 (Utilities.noString(value))
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 singleton property 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 = {MarkdownType.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 MarkdownType 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    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-mode")
411    protected List<CodeableConcept> characteristic;
412
413    /**
414     * 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.
415     */
416    @Child(name = "communication", type = {CodeableConcept.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
417    @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." )
418    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/all-languages")
419    protected List<CodeableConcept> communication;
420
421    /**
422     * Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.
423     */
424    @Child(name = "referralMethod", type = {CodeableConcept.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
425    @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." )
426    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-referral-method")
427    protected List<CodeableConcept> referralMethod;
428
429    /**
430     * 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.
431     */
432    @Child(name = "appointmentRequired", type = {BooleanType.class}, order=20, min=0, max=1, modifier=false, summary=false)
433    @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." )
434    protected BooleanType appointmentRequired;
435
436    /**
437     * A collection of times that the healthcare service is available.
438     */
439    @Child(name = "availability", type = {Availability.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
440    @Description(shortDefinition="Times the healthcare service is available (including exceptions)", formalDefinition="A collection of times that the healthcare service is available." )
441    protected List<Availability> availability;
442
443    /**
444     * Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.
445     */
446    @Child(name = "endpoint", type = {Endpoint.class}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
447    @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." )
448    protected List<Reference> endpoint;
449
450    private static final long serialVersionUID = -438716159L;
451
452  /**
453   * Constructor
454   */
455    public HealthcareService() {
456      super();
457    }
458
459    /**
460     * @return {@link #identifier} (External identifiers for this item.)
461     */
462    public List<Identifier> getIdentifier() { 
463      if (this.identifier == null)
464        this.identifier = new ArrayList<Identifier>();
465      return this.identifier;
466    }
467
468    /**
469     * @return Returns a reference to <code>this</code> for easy method chaining
470     */
471    public HealthcareService setIdentifier(List<Identifier> theIdentifier) { 
472      this.identifier = theIdentifier;
473      return this;
474    }
475
476    public boolean hasIdentifier() { 
477      if (this.identifier == null)
478        return false;
479      for (Identifier item : this.identifier)
480        if (!item.isEmpty())
481          return true;
482      return false;
483    }
484
485    public Identifier addIdentifier() { //3
486      Identifier t = new Identifier();
487      if (this.identifier == null)
488        this.identifier = new ArrayList<Identifier>();
489      this.identifier.add(t);
490      return t;
491    }
492
493    public HealthcareService addIdentifier(Identifier t) { //3
494      if (t == null)
495        return this;
496      if (this.identifier == null)
497        this.identifier = new ArrayList<Identifier>();
498      this.identifier.add(t);
499      return this;
500    }
501
502    /**
503     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
504     */
505    public Identifier getIdentifierFirstRep() { 
506      if (getIdentifier().isEmpty()) {
507        addIdentifier();
508      }
509      return getIdentifier().get(0);
510    }
511
512    /**
513     * @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
514     */
515    public BooleanType getActiveElement() { 
516      if (this.active == null)
517        if (Configuration.errorOnAutoCreate())
518          throw new Error("Attempt to auto-create HealthcareService.active");
519        else if (Configuration.doAutoCreate())
520          this.active = new BooleanType(); // bb
521      return this.active;
522    }
523
524    public boolean hasActiveElement() { 
525      return this.active != null && !this.active.isEmpty();
526    }
527
528    public boolean hasActive() { 
529      return this.active != null && !this.active.isEmpty();
530    }
531
532    /**
533     * @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
534     */
535    public HealthcareService setActiveElement(BooleanType value) { 
536      this.active = value;
537      return this;
538    }
539
540    /**
541     * @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.
542     */
543    public boolean getActive() { 
544      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
545    }
546
547    /**
548     * @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.
549     */
550    public HealthcareService setActive(boolean value) { 
551        if (this.active == null)
552          this.active = new BooleanType();
553        this.active.setValue(value);
554      return this;
555    }
556
557    /**
558     * @return {@link #providedBy} (The organization that provides this healthcare service.)
559     */
560    public Reference getProvidedBy() { 
561      if (this.providedBy == null)
562        if (Configuration.errorOnAutoCreate())
563          throw new Error("Attempt to auto-create HealthcareService.providedBy");
564        else if (Configuration.doAutoCreate())
565          this.providedBy = new Reference(); // cc
566      return this.providedBy;
567    }
568
569    public boolean hasProvidedBy() { 
570      return this.providedBy != null && !this.providedBy.isEmpty();
571    }
572
573    /**
574     * @param value {@link #providedBy} (The organization that provides this healthcare service.)
575     */
576    public HealthcareService setProvidedBy(Reference value) { 
577      this.providedBy = value;
578      return this;
579    }
580
581    /**
582     * @return {@link #offeredIn} (When the HealthcareService is representing a specific, schedulable service, the availableIn property can refer to a generic service.)
583     */
584    public List<Reference> getOfferedIn() { 
585      if (this.offeredIn == null)
586        this.offeredIn = new ArrayList<Reference>();
587      return this.offeredIn;
588    }
589
590    /**
591     * @return Returns a reference to <code>this</code> for easy method chaining
592     */
593    public HealthcareService setOfferedIn(List<Reference> theOfferedIn) { 
594      this.offeredIn = theOfferedIn;
595      return this;
596    }
597
598    public boolean hasOfferedIn() { 
599      if (this.offeredIn == null)
600        return false;
601      for (Reference item : this.offeredIn)
602        if (!item.isEmpty())
603          return true;
604      return false;
605    }
606
607    public Reference addOfferedIn() { //3
608      Reference t = new Reference();
609      if (this.offeredIn == null)
610        this.offeredIn = new ArrayList<Reference>();
611      this.offeredIn.add(t);
612      return t;
613    }
614
615    public HealthcareService addOfferedIn(Reference t) { //3
616      if (t == null)
617        return this;
618      if (this.offeredIn == null)
619        this.offeredIn = new ArrayList<Reference>();
620      this.offeredIn.add(t);
621      return this;
622    }
623
624    /**
625     * @return The first repetition of repeating field {@link #offeredIn}, creating it if it does not already exist {3}
626     */
627    public Reference getOfferedInFirstRep() { 
628      if (getOfferedIn().isEmpty()) {
629        addOfferedIn();
630      }
631      return getOfferedIn().get(0);
632    }
633
634    /**
635     * @return {@link #category} (Identifies the broad category of service being performed or delivered.)
636     */
637    public List<CodeableConcept> getCategory() { 
638      if (this.category == null)
639        this.category = new ArrayList<CodeableConcept>();
640      return this.category;
641    }
642
643    /**
644     * @return Returns a reference to <code>this</code> for easy method chaining
645     */
646    public HealthcareService setCategory(List<CodeableConcept> theCategory) { 
647      this.category = theCategory;
648      return this;
649    }
650
651    public boolean hasCategory() { 
652      if (this.category == null)
653        return false;
654      for (CodeableConcept item : this.category)
655        if (!item.isEmpty())
656          return true;
657      return false;
658    }
659
660    public CodeableConcept addCategory() { //3
661      CodeableConcept t = new CodeableConcept();
662      if (this.category == null)
663        this.category = new ArrayList<CodeableConcept>();
664      this.category.add(t);
665      return t;
666    }
667
668    public HealthcareService addCategory(CodeableConcept t) { //3
669      if (t == null)
670        return this;
671      if (this.category == null)
672        this.category = new ArrayList<CodeableConcept>();
673      this.category.add(t);
674      return this;
675    }
676
677    /**
678     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist {3}
679     */
680    public CodeableConcept getCategoryFirstRep() { 
681      if (getCategory().isEmpty()) {
682        addCategory();
683      }
684      return getCategory().get(0);
685    }
686
687    /**
688     * @return {@link #type} (The specific type of service that may be delivered or performed.)
689     */
690    public List<CodeableConcept> getType() { 
691      if (this.type == null)
692        this.type = new ArrayList<CodeableConcept>();
693      return this.type;
694    }
695
696    /**
697     * @return Returns a reference to <code>this</code> for easy method chaining
698     */
699    public HealthcareService setType(List<CodeableConcept> theType) { 
700      this.type = theType;
701      return this;
702    }
703
704    public boolean hasType() { 
705      if (this.type == null)
706        return false;
707      for (CodeableConcept item : this.type)
708        if (!item.isEmpty())
709          return true;
710      return false;
711    }
712
713    public CodeableConcept addType() { //3
714      CodeableConcept t = new CodeableConcept();
715      if (this.type == null)
716        this.type = new ArrayList<CodeableConcept>();
717      this.type.add(t);
718      return t;
719    }
720
721    public HealthcareService addType(CodeableConcept t) { //3
722      if (t == null)
723        return this;
724      if (this.type == null)
725        this.type = new ArrayList<CodeableConcept>();
726      this.type.add(t);
727      return this;
728    }
729
730    /**
731     * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
732     */
733    public CodeableConcept getTypeFirstRep() { 
734      if (getType().isEmpty()) {
735        addType();
736      }
737      return getType().get(0);
738    }
739
740    /**
741     * @return {@link #specialty} (Collection of specialties handled by the Healthcare service. This is more of a medical term.)
742     */
743    public List<CodeableConcept> getSpecialty() { 
744      if (this.specialty == null)
745        this.specialty = new ArrayList<CodeableConcept>();
746      return this.specialty;
747    }
748
749    /**
750     * @return Returns a reference to <code>this</code> for easy method chaining
751     */
752    public HealthcareService setSpecialty(List<CodeableConcept> theSpecialty) { 
753      this.specialty = theSpecialty;
754      return this;
755    }
756
757    public boolean hasSpecialty() { 
758      if (this.specialty == null)
759        return false;
760      for (CodeableConcept item : this.specialty)
761        if (!item.isEmpty())
762          return true;
763      return false;
764    }
765
766    public CodeableConcept addSpecialty() { //3
767      CodeableConcept t = new CodeableConcept();
768      if (this.specialty == null)
769        this.specialty = new ArrayList<CodeableConcept>();
770      this.specialty.add(t);
771      return t;
772    }
773
774    public HealthcareService addSpecialty(CodeableConcept t) { //3
775      if (t == null)
776        return this;
777      if (this.specialty == null)
778        this.specialty = new ArrayList<CodeableConcept>();
779      this.specialty.add(t);
780      return this;
781    }
782
783    /**
784     * @return The first repetition of repeating field {@link #specialty}, creating it if it does not already exist {3}
785     */
786    public CodeableConcept getSpecialtyFirstRep() { 
787      if (getSpecialty().isEmpty()) {
788        addSpecialty();
789      }
790      return getSpecialty().get(0);
791    }
792
793    /**
794     * @return {@link #location} (The location(s) where this healthcare service may be provided.)
795     */
796    public List<Reference> getLocation() { 
797      if (this.location == null)
798        this.location = new ArrayList<Reference>();
799      return this.location;
800    }
801
802    /**
803     * @return Returns a reference to <code>this</code> for easy method chaining
804     */
805    public HealthcareService setLocation(List<Reference> theLocation) { 
806      this.location = theLocation;
807      return this;
808    }
809
810    public boolean hasLocation() { 
811      if (this.location == null)
812        return false;
813      for (Reference item : this.location)
814        if (!item.isEmpty())
815          return true;
816      return false;
817    }
818
819    public Reference addLocation() { //3
820      Reference t = new Reference();
821      if (this.location == null)
822        this.location = new ArrayList<Reference>();
823      this.location.add(t);
824      return t;
825    }
826
827    public HealthcareService addLocation(Reference t) { //3
828      if (t == null)
829        return this;
830      if (this.location == null)
831        this.location = new ArrayList<Reference>();
832      this.location.add(t);
833      return this;
834    }
835
836    /**
837     * @return The first repetition of repeating field {@link #location}, creating it if it does not already exist {3}
838     */
839    public Reference getLocationFirstRep() { 
840      if (getLocation().isEmpty()) {
841        addLocation();
842      }
843      return getLocation().get(0);
844    }
845
846    /**
847     * @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
848     */
849    public StringType getNameElement() { 
850      if (this.name == null)
851        if (Configuration.errorOnAutoCreate())
852          throw new Error("Attempt to auto-create HealthcareService.name");
853        else if (Configuration.doAutoCreate())
854          this.name = new StringType(); // bb
855      return this.name;
856    }
857
858    public boolean hasNameElement() { 
859      return this.name != null && !this.name.isEmpty();
860    }
861
862    public boolean hasName() { 
863      return this.name != null && !this.name.isEmpty();
864    }
865
866    /**
867     * @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
868     */
869    public HealthcareService setNameElement(StringType value) { 
870      this.name = value;
871      return this;
872    }
873
874    /**
875     * @return Further description of the service as it would be presented to a consumer while searching.
876     */
877    public String getName() { 
878      return this.name == null ? null : this.name.getValue();
879    }
880
881    /**
882     * @param value Further description of the service as it would be presented to a consumer while searching.
883     */
884    public HealthcareService setName(String value) { 
885      if (Utilities.noString(value))
886        this.name = null;
887      else {
888        if (this.name == null)
889          this.name = new StringType();
890        this.name.setValue(value);
891      }
892      return this;
893    }
894
895    /**
896     * @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
897     */
898    public MarkdownType getCommentElement() { 
899      if (this.comment == null)
900        if (Configuration.errorOnAutoCreate())
901          throw new Error("Attempt to auto-create HealthcareService.comment");
902        else if (Configuration.doAutoCreate())
903          this.comment = new MarkdownType(); // bb
904      return this.comment;
905    }
906
907    public boolean hasCommentElement() { 
908      return this.comment != null && !this.comment.isEmpty();
909    }
910
911    public boolean hasComment() { 
912      return this.comment != null && !this.comment.isEmpty();
913    }
914
915    /**
916     * @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
917     */
918    public HealthcareService setCommentElement(MarkdownType value) { 
919      this.comment = value;
920      return this;
921    }
922
923    /**
924     * @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.
925     */
926    public String getComment() { 
927      return this.comment == null ? null : this.comment.getValue();
928    }
929
930    /**
931     * @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.
932     */
933    public HealthcareService setComment(String value) { 
934      if (Utilities.noString(value))
935        this.comment = null;
936      else {
937        if (this.comment == null)
938          this.comment = new MarkdownType();
939        this.comment.setValue(value);
940      }
941      return this;
942    }
943
944    /**
945     * @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
946     */
947    public MarkdownType getExtraDetailsElement() { 
948      if (this.extraDetails == null)
949        if (Configuration.errorOnAutoCreate())
950          throw new Error("Attempt to auto-create HealthcareService.extraDetails");
951        else if (Configuration.doAutoCreate())
952          this.extraDetails = new MarkdownType(); // bb
953      return this.extraDetails;
954    }
955
956    public boolean hasExtraDetailsElement() { 
957      return this.extraDetails != null && !this.extraDetails.isEmpty();
958    }
959
960    public boolean hasExtraDetails() { 
961      return this.extraDetails != null && !this.extraDetails.isEmpty();
962    }
963
964    /**
965     * @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
966     */
967    public HealthcareService setExtraDetailsElement(MarkdownType value) { 
968      this.extraDetails = value;
969      return this;
970    }
971
972    /**
973     * @return Extra details about the service that can't be placed in the other fields.
974     */
975    public String getExtraDetails() { 
976      return this.extraDetails == null ? null : this.extraDetails.getValue();
977    }
978
979    /**
980     * @param value Extra details about the service that can't be placed in the other fields.
981     */
982    public HealthcareService setExtraDetails(String value) { 
983      if (Utilities.noString(value))
984        this.extraDetails = null;
985      else {
986        if (this.extraDetails == null)
987          this.extraDetails = new MarkdownType();
988        this.extraDetails.setValue(value);
989      }
990      return this;
991    }
992
993    /**
994     * @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.)
995     */
996    public Attachment getPhoto() { 
997      if (this.photo == null)
998        if (Configuration.errorOnAutoCreate())
999          throw new Error("Attempt to auto-create HealthcareService.photo");
1000        else if (Configuration.doAutoCreate())
1001          this.photo = new Attachment(); // cc
1002      return this.photo;
1003    }
1004
1005    public boolean hasPhoto() { 
1006      return this.photo != null && !this.photo.isEmpty();
1007    }
1008
1009    /**
1010     * @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.)
1011     */
1012    public HealthcareService setPhoto(Attachment value) { 
1013      this.photo = value;
1014      return this;
1015    }
1016
1017    /**
1018     * @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.)
1019     */
1020    public List<ExtendedContactDetail> getContact() { 
1021      if (this.contact == null)
1022        this.contact = new ArrayList<ExtendedContactDetail>();
1023      return this.contact;
1024    }
1025
1026    /**
1027     * @return Returns a reference to <code>this</code> for easy method chaining
1028     */
1029    public HealthcareService setContact(List<ExtendedContactDetail> theContact) { 
1030      this.contact = theContact;
1031      return this;
1032    }
1033
1034    public boolean hasContact() { 
1035      if (this.contact == null)
1036        return false;
1037      for (ExtendedContactDetail item : this.contact)
1038        if (!item.isEmpty())
1039          return true;
1040      return false;
1041    }
1042
1043    public ExtendedContactDetail addContact() { //3
1044      ExtendedContactDetail t = new ExtendedContactDetail();
1045      if (this.contact == null)
1046        this.contact = new ArrayList<ExtendedContactDetail>();
1047      this.contact.add(t);
1048      return t;
1049    }
1050
1051    public HealthcareService addContact(ExtendedContactDetail t) { //3
1052      if (t == null)
1053        return this;
1054      if (this.contact == null)
1055        this.contact = new ArrayList<ExtendedContactDetail>();
1056      this.contact.add(t);
1057      return this;
1058    }
1059
1060    /**
1061     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
1062     */
1063    public ExtendedContactDetail getContactFirstRep() { 
1064      if (getContact().isEmpty()) {
1065        addContact();
1066      }
1067      return getContact().get(0);
1068    }
1069
1070    /**
1071     * @return {@link #coverageArea} (The location(s) that this service is available to (not where the service is provided).)
1072     */
1073    public List<Reference> getCoverageArea() { 
1074      if (this.coverageArea == null)
1075        this.coverageArea = new ArrayList<Reference>();
1076      return this.coverageArea;
1077    }
1078
1079    /**
1080     * @return Returns a reference to <code>this</code> for easy method chaining
1081     */
1082    public HealthcareService setCoverageArea(List<Reference> theCoverageArea) { 
1083      this.coverageArea = theCoverageArea;
1084      return this;
1085    }
1086
1087    public boolean hasCoverageArea() { 
1088      if (this.coverageArea == null)
1089        return false;
1090      for (Reference item : this.coverageArea)
1091        if (!item.isEmpty())
1092          return true;
1093      return false;
1094    }
1095
1096    public Reference addCoverageArea() { //3
1097      Reference t = new Reference();
1098      if (this.coverageArea == null)
1099        this.coverageArea = new ArrayList<Reference>();
1100      this.coverageArea.add(t);
1101      return t;
1102    }
1103
1104    public HealthcareService addCoverageArea(Reference t) { //3
1105      if (t == null)
1106        return this;
1107      if (this.coverageArea == null)
1108        this.coverageArea = new ArrayList<Reference>();
1109      this.coverageArea.add(t);
1110      return this;
1111    }
1112
1113    /**
1114     * @return The first repetition of repeating field {@link #coverageArea}, creating it if it does not already exist {3}
1115     */
1116    public Reference getCoverageAreaFirstRep() { 
1117      if (getCoverageArea().isEmpty()) {
1118        addCoverageArea();
1119      }
1120      return getCoverageArea().get(0);
1121    }
1122
1123    /**
1124     * @return {@link #serviceProvisionCode} (The code(s) that detail the conditions under which the healthcare service is available/offered.)
1125     */
1126    public List<CodeableConcept> getServiceProvisionCode() { 
1127      if (this.serviceProvisionCode == null)
1128        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1129      return this.serviceProvisionCode;
1130    }
1131
1132    /**
1133     * @return Returns a reference to <code>this</code> for easy method chaining
1134     */
1135    public HealthcareService setServiceProvisionCode(List<CodeableConcept> theServiceProvisionCode) { 
1136      this.serviceProvisionCode = theServiceProvisionCode;
1137      return this;
1138    }
1139
1140    public boolean hasServiceProvisionCode() { 
1141      if (this.serviceProvisionCode == null)
1142        return false;
1143      for (CodeableConcept item : this.serviceProvisionCode)
1144        if (!item.isEmpty())
1145          return true;
1146      return false;
1147    }
1148
1149    public CodeableConcept addServiceProvisionCode() { //3
1150      CodeableConcept t = new CodeableConcept();
1151      if (this.serviceProvisionCode == null)
1152        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1153      this.serviceProvisionCode.add(t);
1154      return t;
1155    }
1156
1157    public HealthcareService addServiceProvisionCode(CodeableConcept t) { //3
1158      if (t == null)
1159        return this;
1160      if (this.serviceProvisionCode == null)
1161        this.serviceProvisionCode = new ArrayList<CodeableConcept>();
1162      this.serviceProvisionCode.add(t);
1163      return this;
1164    }
1165
1166    /**
1167     * @return The first repetition of repeating field {@link #serviceProvisionCode}, creating it if it does not already exist {3}
1168     */
1169    public CodeableConcept getServiceProvisionCodeFirstRep() { 
1170      if (getServiceProvisionCode().isEmpty()) {
1171        addServiceProvisionCode();
1172      }
1173      return getServiceProvisionCode().get(0);
1174    }
1175
1176    /**
1177     * @return {@link #eligibility} (Does this service have specific eligibility requirements that need to be met in order to use the service?)
1178     */
1179    public List<HealthcareServiceEligibilityComponent> getEligibility() { 
1180      if (this.eligibility == null)
1181        this.eligibility = new ArrayList<HealthcareServiceEligibilityComponent>();
1182      return this.eligibility;
1183    }
1184
1185    /**
1186     * @return Returns a reference to <code>this</code> for easy method chaining
1187     */
1188    public HealthcareService setEligibility(List<HealthcareServiceEligibilityComponent> theEligibility) { 
1189      this.eligibility = theEligibility;
1190      return this;
1191    }
1192
1193    public boolean hasEligibility() { 
1194      if (this.eligibility == null)
1195        return false;
1196      for (HealthcareServiceEligibilityComponent item : this.eligibility)
1197        if (!item.isEmpty())
1198          return true;
1199      return false;
1200    }
1201
1202    public HealthcareServiceEligibilityComponent addEligibility() { //3
1203      HealthcareServiceEligibilityComponent t = new HealthcareServiceEligibilityComponent();
1204      if (this.eligibility == null)
1205        this.eligibility = new ArrayList<HealthcareServiceEligibilityComponent>();
1206      this.eligibility.add(t);
1207      return t;
1208    }
1209
1210    public HealthcareService addEligibility(HealthcareServiceEligibilityComponent t) { //3
1211      if (t == null)
1212        return this;
1213      if (this.eligibility == null)
1214        this.eligibility = new ArrayList<HealthcareServiceEligibilityComponent>();
1215      this.eligibility.add(t);
1216      return this;
1217    }
1218
1219    /**
1220     * @return The first repetition of repeating field {@link #eligibility}, creating it if it does not already exist {3}
1221     */
1222    public HealthcareServiceEligibilityComponent getEligibilityFirstRep() { 
1223      if (getEligibility().isEmpty()) {
1224        addEligibility();
1225      }
1226      return getEligibility().get(0);
1227    }
1228
1229    /**
1230     * @return {@link #program} (Programs that this service is applicable to.)
1231     */
1232    public List<CodeableConcept> getProgram() { 
1233      if (this.program == null)
1234        this.program = new ArrayList<CodeableConcept>();
1235      return this.program;
1236    }
1237
1238    /**
1239     * @return Returns a reference to <code>this</code> for easy method chaining
1240     */
1241    public HealthcareService setProgram(List<CodeableConcept> theProgram) { 
1242      this.program = theProgram;
1243      return this;
1244    }
1245
1246    public boolean hasProgram() { 
1247      if (this.program == null)
1248        return false;
1249      for (CodeableConcept item : this.program)
1250        if (!item.isEmpty())
1251          return true;
1252      return false;
1253    }
1254
1255    public CodeableConcept addProgram() { //3
1256      CodeableConcept t = new CodeableConcept();
1257      if (this.program == null)
1258        this.program = new ArrayList<CodeableConcept>();
1259      this.program.add(t);
1260      return t;
1261    }
1262
1263    public HealthcareService addProgram(CodeableConcept t) { //3
1264      if (t == null)
1265        return this;
1266      if (this.program == null)
1267        this.program = new ArrayList<CodeableConcept>();
1268      this.program.add(t);
1269      return this;
1270    }
1271
1272    /**
1273     * @return The first repetition of repeating field {@link #program}, creating it if it does not already exist {3}
1274     */
1275    public CodeableConcept getProgramFirstRep() { 
1276      if (getProgram().isEmpty()) {
1277        addProgram();
1278      }
1279      return getProgram().get(0);
1280    }
1281
1282    /**
1283     * @return {@link #characteristic} (Collection of characteristics (attributes).)
1284     */
1285    public List<CodeableConcept> getCharacteristic() { 
1286      if (this.characteristic == null)
1287        this.characteristic = new ArrayList<CodeableConcept>();
1288      return this.characteristic;
1289    }
1290
1291    /**
1292     * @return Returns a reference to <code>this</code> for easy method chaining
1293     */
1294    public HealthcareService setCharacteristic(List<CodeableConcept> theCharacteristic) { 
1295      this.characteristic = theCharacteristic;
1296      return this;
1297    }
1298
1299    public boolean hasCharacteristic() { 
1300      if (this.characteristic == null)
1301        return false;
1302      for (CodeableConcept item : this.characteristic)
1303        if (!item.isEmpty())
1304          return true;
1305      return false;
1306    }
1307
1308    public CodeableConcept addCharacteristic() { //3
1309      CodeableConcept t = new CodeableConcept();
1310      if (this.characteristic == null)
1311        this.characteristic = new ArrayList<CodeableConcept>();
1312      this.characteristic.add(t);
1313      return t;
1314    }
1315
1316    public HealthcareService addCharacteristic(CodeableConcept t) { //3
1317      if (t == null)
1318        return this;
1319      if (this.characteristic == null)
1320        this.characteristic = new ArrayList<CodeableConcept>();
1321      this.characteristic.add(t);
1322      return this;
1323    }
1324
1325    /**
1326     * @return The first repetition of repeating field {@link #characteristic}, creating it if it does not already exist {3}
1327     */
1328    public CodeableConcept getCharacteristicFirstRep() { 
1329      if (getCharacteristic().isEmpty()) {
1330        addCharacteristic();
1331      }
1332      return getCharacteristic().get(0);
1333    }
1334
1335    /**
1336     * @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.)
1337     */
1338    public List<CodeableConcept> getCommunication() { 
1339      if (this.communication == null)
1340        this.communication = new ArrayList<CodeableConcept>();
1341      return this.communication;
1342    }
1343
1344    /**
1345     * @return Returns a reference to <code>this</code> for easy method chaining
1346     */
1347    public HealthcareService setCommunication(List<CodeableConcept> theCommunication) { 
1348      this.communication = theCommunication;
1349      return this;
1350    }
1351
1352    public boolean hasCommunication() { 
1353      if (this.communication == null)
1354        return false;
1355      for (CodeableConcept item : this.communication)
1356        if (!item.isEmpty())
1357          return true;
1358      return false;
1359    }
1360
1361    public CodeableConcept addCommunication() { //3
1362      CodeableConcept t = new CodeableConcept();
1363      if (this.communication == null)
1364        this.communication = new ArrayList<CodeableConcept>();
1365      this.communication.add(t);
1366      return t;
1367    }
1368
1369    public HealthcareService addCommunication(CodeableConcept t) { //3
1370      if (t == null)
1371        return this;
1372      if (this.communication == null)
1373        this.communication = new ArrayList<CodeableConcept>();
1374      this.communication.add(t);
1375      return this;
1376    }
1377
1378    /**
1379     * @return The first repetition of repeating field {@link #communication}, creating it if it does not already exist {3}
1380     */
1381    public CodeableConcept getCommunicationFirstRep() { 
1382      if (getCommunication().isEmpty()) {
1383        addCommunication();
1384      }
1385      return getCommunication().get(0);
1386    }
1387
1388    /**
1389     * @return {@link #referralMethod} (Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.)
1390     */
1391    public List<CodeableConcept> getReferralMethod() { 
1392      if (this.referralMethod == null)
1393        this.referralMethod = new ArrayList<CodeableConcept>();
1394      return this.referralMethod;
1395    }
1396
1397    /**
1398     * @return Returns a reference to <code>this</code> for easy method chaining
1399     */
1400    public HealthcareService setReferralMethod(List<CodeableConcept> theReferralMethod) { 
1401      this.referralMethod = theReferralMethod;
1402      return this;
1403    }
1404
1405    public boolean hasReferralMethod() { 
1406      if (this.referralMethod == null)
1407        return false;
1408      for (CodeableConcept item : this.referralMethod)
1409        if (!item.isEmpty())
1410          return true;
1411      return false;
1412    }
1413
1414    public CodeableConcept addReferralMethod() { //3
1415      CodeableConcept t = new CodeableConcept();
1416      if (this.referralMethod == null)
1417        this.referralMethod = new ArrayList<CodeableConcept>();
1418      this.referralMethod.add(t);
1419      return t;
1420    }
1421
1422    public HealthcareService addReferralMethod(CodeableConcept t) { //3
1423      if (t == null)
1424        return this;
1425      if (this.referralMethod == null)
1426        this.referralMethod = new ArrayList<CodeableConcept>();
1427      this.referralMethod.add(t);
1428      return this;
1429    }
1430
1431    /**
1432     * @return The first repetition of repeating field {@link #referralMethod}, creating it if it does not already exist {3}
1433     */
1434    public CodeableConcept getReferralMethodFirstRep() { 
1435      if (getReferralMethod().isEmpty()) {
1436        addReferralMethod();
1437      }
1438      return getReferralMethod().get(0);
1439    }
1440
1441    /**
1442     * @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
1443     */
1444    public BooleanType getAppointmentRequiredElement() { 
1445      if (this.appointmentRequired == null)
1446        if (Configuration.errorOnAutoCreate())
1447          throw new Error("Attempt to auto-create HealthcareService.appointmentRequired");
1448        else if (Configuration.doAutoCreate())
1449          this.appointmentRequired = new BooleanType(); // bb
1450      return this.appointmentRequired;
1451    }
1452
1453    public boolean hasAppointmentRequiredElement() { 
1454      return this.appointmentRequired != null && !this.appointmentRequired.isEmpty();
1455    }
1456
1457    public boolean hasAppointmentRequired() { 
1458      return this.appointmentRequired != null && !this.appointmentRequired.isEmpty();
1459    }
1460
1461    /**
1462     * @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
1463     */
1464    public HealthcareService setAppointmentRequiredElement(BooleanType value) { 
1465      this.appointmentRequired = value;
1466      return this;
1467    }
1468
1469    /**
1470     * @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.
1471     */
1472    public boolean getAppointmentRequired() { 
1473      return this.appointmentRequired == null || this.appointmentRequired.isEmpty() ? false : this.appointmentRequired.getValue();
1474    }
1475
1476    /**
1477     * @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.
1478     */
1479    public HealthcareService setAppointmentRequired(boolean value) { 
1480        if (this.appointmentRequired == null)
1481          this.appointmentRequired = new BooleanType();
1482        this.appointmentRequired.setValue(value);
1483      return this;
1484    }
1485
1486    /**
1487     * @return {@link #availability} (A collection of times that the healthcare service is available.)
1488     */
1489    public List<Availability> getAvailability() { 
1490      if (this.availability == null)
1491        this.availability = new ArrayList<Availability>();
1492      return this.availability;
1493    }
1494
1495    /**
1496     * @return Returns a reference to <code>this</code> for easy method chaining
1497     */
1498    public HealthcareService setAvailability(List<Availability> theAvailability) { 
1499      this.availability = theAvailability;
1500      return this;
1501    }
1502
1503    public boolean hasAvailability() { 
1504      if (this.availability == null)
1505        return false;
1506      for (Availability item : this.availability)
1507        if (!item.isEmpty())
1508          return true;
1509      return false;
1510    }
1511
1512    public Availability addAvailability() { //3
1513      Availability t = new Availability();
1514      if (this.availability == null)
1515        this.availability = new ArrayList<Availability>();
1516      this.availability.add(t);
1517      return t;
1518    }
1519
1520    public HealthcareService addAvailability(Availability t) { //3
1521      if (t == null)
1522        return this;
1523      if (this.availability == null)
1524        this.availability = new ArrayList<Availability>();
1525      this.availability.add(t);
1526      return this;
1527    }
1528
1529    /**
1530     * @return The first repetition of repeating field {@link #availability}, creating it if it does not already exist {3}
1531     */
1532    public Availability getAvailabilityFirstRep() { 
1533      if (getAvailability().isEmpty()) {
1534        addAvailability();
1535      }
1536      return getAvailability().get(0);
1537    }
1538
1539    /**
1540     * @return {@link #endpoint} (Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.)
1541     */
1542    public List<Reference> getEndpoint() { 
1543      if (this.endpoint == null)
1544        this.endpoint = new ArrayList<Reference>();
1545      return this.endpoint;
1546    }
1547
1548    /**
1549     * @return Returns a reference to <code>this</code> for easy method chaining
1550     */
1551    public HealthcareService setEndpoint(List<Reference> theEndpoint) { 
1552      this.endpoint = theEndpoint;
1553      return this;
1554    }
1555
1556    public boolean hasEndpoint() { 
1557      if (this.endpoint == null)
1558        return false;
1559      for (Reference item : this.endpoint)
1560        if (!item.isEmpty())
1561          return true;
1562      return false;
1563    }
1564
1565    public Reference addEndpoint() { //3
1566      Reference t = new Reference();
1567      if (this.endpoint == null)
1568        this.endpoint = new ArrayList<Reference>();
1569      this.endpoint.add(t);
1570      return t;
1571    }
1572
1573    public HealthcareService addEndpoint(Reference t) { //3
1574      if (t == null)
1575        return this;
1576      if (this.endpoint == null)
1577        this.endpoint = new ArrayList<Reference>();
1578      this.endpoint.add(t);
1579      return this;
1580    }
1581
1582    /**
1583     * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist {3}
1584     */
1585    public Reference getEndpointFirstRep() { 
1586      if (getEndpoint().isEmpty()) {
1587        addEndpoint();
1588      }
1589      return getEndpoint().get(0);
1590    }
1591
1592      protected void listChildren(List<Property> children) {
1593        super.listChildren(children);
1594        children.add(new Property("identifier", "Identifier", "External identifiers for this item.", 0, java.lang.Integer.MAX_VALUE, identifier));
1595        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));
1596        children.add(new Property("providedBy", "Reference(Organization)", "The organization that provides this healthcare service.", 0, 1, providedBy));
1597        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));
1598        children.add(new Property("category", "CodeableConcept", "Identifies the broad category of service being performed or delivered.", 0, java.lang.Integer.MAX_VALUE, category));
1599        children.add(new Property("type", "CodeableConcept", "The specific type of service that may be delivered or performed.", 0, java.lang.Integer.MAX_VALUE, type));
1600        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));
1601        children.add(new Property("location", "Reference(Location)", "The location(s) where this healthcare service may be provided.", 0, java.lang.Integer.MAX_VALUE, location));
1602        children.add(new Property("name", "string", "Further description of the service as it would be presented to a consumer while searching.", 0, 1, name));
1603        children.add(new Property("comment", "markdown", "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));
1604        children.add(new Property("extraDetails", "markdown", "Extra details about the service that can't be placed in the other fields.", 0, 1, extraDetails));
1605        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));
1606        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));
1607        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));
1608        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));
1609        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));
1610        children.add(new Property("program", "CodeableConcept", "Programs that this service is applicable to.", 0, java.lang.Integer.MAX_VALUE, program));
1611        children.add(new Property("characteristic", "CodeableConcept", "Collection of characteristics (attributes).", 0, java.lang.Integer.MAX_VALUE, characteristic));
1612        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));
1613        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));
1614        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));
1615        children.add(new Property("availability", "Availability", "A collection of times that the healthcare service is available.", 0, java.lang.Integer.MAX_VALUE, availability));
1616        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));
1617      }
1618
1619      @Override
1620      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1621        switch (_hash) {
1622        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "External identifiers for this item.", 0, java.lang.Integer.MAX_VALUE, identifier);
1623        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);
1624        case 205136282: /*providedBy*/  return new Property("providedBy", "Reference(Organization)", "The organization that provides this healthcare service.", 0, 1, providedBy);
1625        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);
1626        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);
1627        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);
1628        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);
1629        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);
1630        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);
1631        case 950398559: /*comment*/  return new Property("comment", "markdown", "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);
1632        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);
1633        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);
1634        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);
1635        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);
1636        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);
1637        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);
1638        case -309387644: /*program*/  return new Property("program", "CodeableConcept", "Programs that this service is applicable to.", 0, java.lang.Integer.MAX_VALUE, program);
1639        case 366313883: /*characteristic*/  return new Property("characteristic", "CodeableConcept", "Collection of characteristics (attributes).", 0, java.lang.Integer.MAX_VALUE, characteristic);
1640        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);
1641        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);
1642        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);
1643        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);
1644        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);
1645        default: return super.getNamedProperty(_hash, _name, _checkValid);
1646        }
1647
1648      }
1649
1650      @Override
1651      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1652        switch (hash) {
1653        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1654        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1655        case 205136282: /*providedBy*/ return this.providedBy == null ? new Base[0] : new Base[] {this.providedBy}; // Reference
1656        case 1945040512: /*offeredIn*/ return this.offeredIn == null ? new Base[0] : this.offeredIn.toArray(new Base[this.offeredIn.size()]); // Reference
1657        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
1658        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
1659        case -1694759682: /*specialty*/ return this.specialty == null ? new Base[0] : this.specialty.toArray(new Base[this.specialty.size()]); // CodeableConcept
1660        case 1901043637: /*location*/ return this.location == null ? new Base[0] : this.location.toArray(new Base[this.location.size()]); // Reference
1661        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1662        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // MarkdownType
1663        case -1469168622: /*extraDetails*/ return this.extraDetails == null ? new Base[0] : new Base[] {this.extraDetails}; // MarkdownType
1664        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : new Base[] {this.photo}; // Attachment
1665        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ExtendedContactDetail
1666        case -1532328299: /*coverageArea*/ return this.coverageArea == null ? new Base[0] : this.coverageArea.toArray(new Base[this.coverageArea.size()]); // Reference
1667        case 1504575405: /*serviceProvisionCode*/ return this.serviceProvisionCode == null ? new Base[0] : this.serviceProvisionCode.toArray(new Base[this.serviceProvisionCode.size()]); // CodeableConcept
1668        case -930847859: /*eligibility*/ return this.eligibility == null ? new Base[0] : this.eligibility.toArray(new Base[this.eligibility.size()]); // HealthcareServiceEligibilityComponent
1669        case -309387644: /*program*/ return this.program == null ? new Base[0] : this.program.toArray(new Base[this.program.size()]); // CodeableConcept
1670        case 366313883: /*characteristic*/ return this.characteristic == null ? new Base[0] : this.characteristic.toArray(new Base[this.characteristic.size()]); // CodeableConcept
1671        case -1035284522: /*communication*/ return this.communication == null ? new Base[0] : this.communication.toArray(new Base[this.communication.size()]); // CodeableConcept
1672        case -2092740898: /*referralMethod*/ return this.referralMethod == null ? new Base[0] : this.referralMethod.toArray(new Base[this.referralMethod.size()]); // CodeableConcept
1673        case 427220062: /*appointmentRequired*/ return this.appointmentRequired == null ? new Base[0] : new Base[] {this.appointmentRequired}; // BooleanType
1674        case 1997542747: /*availability*/ return this.availability == null ? new Base[0] : this.availability.toArray(new Base[this.availability.size()]); // Availability
1675        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
1676        default: return super.getProperty(hash, name, checkValid);
1677        }
1678
1679      }
1680
1681      @Override
1682      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1683        switch (hash) {
1684        case -1618432855: // identifier
1685          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1686          return value;
1687        case -1422950650: // active
1688          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1689          return value;
1690        case 205136282: // providedBy
1691          this.providedBy = TypeConvertor.castToReference(value); // Reference
1692          return value;
1693        case 1945040512: // offeredIn
1694          this.getOfferedIn().add(TypeConvertor.castToReference(value)); // Reference
1695          return value;
1696        case 50511102: // category
1697          this.getCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1698          return value;
1699        case 3575610: // type
1700          this.getType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1701          return value;
1702        case -1694759682: // specialty
1703          this.getSpecialty().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1704          return value;
1705        case 1901043637: // location
1706          this.getLocation().add(TypeConvertor.castToReference(value)); // Reference
1707          return value;
1708        case 3373707: // name
1709          this.name = TypeConvertor.castToString(value); // StringType
1710          return value;
1711        case 950398559: // comment
1712          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
1713          return value;
1714        case -1469168622: // extraDetails
1715          this.extraDetails = TypeConvertor.castToMarkdown(value); // MarkdownType
1716          return value;
1717        case 106642994: // photo
1718          this.photo = TypeConvertor.castToAttachment(value); // Attachment
1719          return value;
1720        case 951526432: // contact
1721          this.getContact().add(TypeConvertor.castToExtendedContactDetail(value)); // ExtendedContactDetail
1722          return value;
1723        case -1532328299: // coverageArea
1724          this.getCoverageArea().add(TypeConvertor.castToReference(value)); // Reference
1725          return value;
1726        case 1504575405: // serviceProvisionCode
1727          this.getServiceProvisionCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1728          return value;
1729        case -930847859: // eligibility
1730          this.getEligibility().add((HealthcareServiceEligibilityComponent) value); // HealthcareServiceEligibilityComponent
1731          return value;
1732        case -309387644: // program
1733          this.getProgram().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1734          return value;
1735        case 366313883: // characteristic
1736          this.getCharacteristic().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1737          return value;
1738        case -1035284522: // communication
1739          this.getCommunication().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1740          return value;
1741        case -2092740898: // referralMethod
1742          this.getReferralMethod().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1743          return value;
1744        case 427220062: // appointmentRequired
1745          this.appointmentRequired = TypeConvertor.castToBoolean(value); // BooleanType
1746          return value;
1747        case 1997542747: // availability
1748          this.getAvailability().add(TypeConvertor.castToAvailability(value)); // Availability
1749          return value;
1750        case 1741102485: // endpoint
1751          this.getEndpoint().add(TypeConvertor.castToReference(value)); // Reference
1752          return value;
1753        default: return super.setProperty(hash, name, value);
1754        }
1755
1756      }
1757
1758      @Override
1759      public Base setProperty(String name, Base value) throws FHIRException {
1760        if (name.equals("identifier")) {
1761          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1762        } else if (name.equals("active")) {
1763          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1764        } else if (name.equals("providedBy")) {
1765          this.providedBy = TypeConvertor.castToReference(value); // Reference
1766        } else if (name.equals("offeredIn")) {
1767          this.getOfferedIn().add(TypeConvertor.castToReference(value));
1768        } else if (name.equals("category")) {
1769          this.getCategory().add(TypeConvertor.castToCodeableConcept(value));
1770        } else if (name.equals("type")) {
1771          this.getType().add(TypeConvertor.castToCodeableConcept(value));
1772        } else if (name.equals("specialty")) {
1773          this.getSpecialty().add(TypeConvertor.castToCodeableConcept(value));
1774        } else if (name.equals("location")) {
1775          this.getLocation().add(TypeConvertor.castToReference(value));
1776        } else if (name.equals("name")) {
1777          this.name = TypeConvertor.castToString(value); // StringType
1778        } else if (name.equals("comment")) {
1779          this.comment = TypeConvertor.castToMarkdown(value); // MarkdownType
1780        } else if (name.equals("extraDetails")) {
1781          this.extraDetails = TypeConvertor.castToMarkdown(value); // MarkdownType
1782        } else if (name.equals("photo")) {
1783          this.photo = TypeConvertor.castToAttachment(value); // Attachment
1784        } else if (name.equals("contact")) {
1785          this.getContact().add(TypeConvertor.castToExtendedContactDetail(value));
1786        } else if (name.equals("coverageArea")) {
1787          this.getCoverageArea().add(TypeConvertor.castToReference(value));
1788        } else if (name.equals("serviceProvisionCode")) {
1789          this.getServiceProvisionCode().add(TypeConvertor.castToCodeableConcept(value));
1790        } else if (name.equals("eligibility")) {
1791          this.getEligibility().add((HealthcareServiceEligibilityComponent) value);
1792        } else if (name.equals("program")) {
1793          this.getProgram().add(TypeConvertor.castToCodeableConcept(value));
1794        } else if (name.equals("characteristic")) {
1795          this.getCharacteristic().add(TypeConvertor.castToCodeableConcept(value));
1796        } else if (name.equals("communication")) {
1797          this.getCommunication().add(TypeConvertor.castToCodeableConcept(value));
1798        } else if (name.equals("referralMethod")) {
1799          this.getReferralMethod().add(TypeConvertor.castToCodeableConcept(value));
1800        } else if (name.equals("appointmentRequired")) {
1801          this.appointmentRequired = TypeConvertor.castToBoolean(value); // BooleanType
1802        } else if (name.equals("availability")) {
1803          this.getAvailability().add(TypeConvertor.castToAvailability(value));
1804        } else if (name.equals("endpoint")) {
1805          this.getEndpoint().add(TypeConvertor.castToReference(value));
1806        } else
1807          return super.setProperty(name, value);
1808        return value;
1809      }
1810
1811      @Override
1812      public Base makeProperty(int hash, String name) throws FHIRException {
1813        switch (hash) {
1814        case -1618432855:  return addIdentifier(); 
1815        case -1422950650:  return getActiveElement();
1816        case 205136282:  return getProvidedBy();
1817        case 1945040512:  return addOfferedIn(); 
1818        case 50511102:  return addCategory(); 
1819        case 3575610:  return addType(); 
1820        case -1694759682:  return addSpecialty(); 
1821        case 1901043637:  return addLocation(); 
1822        case 3373707:  return getNameElement();
1823        case 950398559:  return getCommentElement();
1824        case -1469168622:  return getExtraDetailsElement();
1825        case 106642994:  return getPhoto();
1826        case 951526432:  return addContact(); 
1827        case -1532328299:  return addCoverageArea(); 
1828        case 1504575405:  return addServiceProvisionCode(); 
1829        case -930847859:  return addEligibility(); 
1830        case -309387644:  return addProgram(); 
1831        case 366313883:  return addCharacteristic(); 
1832        case -1035284522:  return addCommunication(); 
1833        case -2092740898:  return addReferralMethod(); 
1834        case 427220062:  return getAppointmentRequiredElement();
1835        case 1997542747:  return addAvailability(); 
1836        case 1741102485:  return addEndpoint(); 
1837        default: return super.makeProperty(hash, name);
1838        }
1839
1840      }
1841
1842      @Override
1843      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1844        switch (hash) {
1845        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1846        case -1422950650: /*active*/ return new String[] {"boolean"};
1847        case 205136282: /*providedBy*/ return new String[] {"Reference"};
1848        case 1945040512: /*offeredIn*/ return new String[] {"Reference"};
1849        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1850        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1851        case -1694759682: /*specialty*/ return new String[] {"CodeableConcept"};
1852        case 1901043637: /*location*/ return new String[] {"Reference"};
1853        case 3373707: /*name*/ return new String[] {"string"};
1854        case 950398559: /*comment*/ return new String[] {"markdown"};
1855        case -1469168622: /*extraDetails*/ return new String[] {"markdown"};
1856        case 106642994: /*photo*/ return new String[] {"Attachment"};
1857        case 951526432: /*contact*/ return new String[] {"ExtendedContactDetail"};
1858        case -1532328299: /*coverageArea*/ return new String[] {"Reference"};
1859        case 1504575405: /*serviceProvisionCode*/ return new String[] {"CodeableConcept"};
1860        case -930847859: /*eligibility*/ return new String[] {};
1861        case -309387644: /*program*/ return new String[] {"CodeableConcept"};
1862        case 366313883: /*characteristic*/ return new String[] {"CodeableConcept"};
1863        case -1035284522: /*communication*/ return new String[] {"CodeableConcept"};
1864        case -2092740898: /*referralMethod*/ return new String[] {"CodeableConcept"};
1865        case 427220062: /*appointmentRequired*/ return new String[] {"boolean"};
1866        case 1997542747: /*availability*/ return new String[] {"Availability"};
1867        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
1868        default: return super.getTypesForProperty(hash, name);
1869        }
1870
1871      }
1872
1873      @Override
1874      public Base addChild(String name) throws FHIRException {
1875        if (name.equals("identifier")) {
1876          return addIdentifier();
1877        }
1878        else if (name.equals("active")) {
1879          throw new FHIRException("Cannot call addChild on a singleton property HealthcareService.active");
1880        }
1881        else if (name.equals("providedBy")) {
1882          this.providedBy = new Reference();
1883          return this.providedBy;
1884        }
1885        else if (name.equals("offeredIn")) {
1886          return addOfferedIn();
1887        }
1888        else if (name.equals("category")) {
1889          return addCategory();
1890        }
1891        else if (name.equals("type")) {
1892          return addType();
1893        }
1894        else if (name.equals("specialty")) {
1895          return addSpecialty();
1896        }
1897        else if (name.equals("location")) {
1898          return addLocation();
1899        }
1900        else if (name.equals("name")) {
1901          throw new FHIRException("Cannot call addChild on a singleton property HealthcareService.name");
1902        }
1903        else if (name.equals("comment")) {
1904          throw new FHIRException("Cannot call addChild on a singleton property HealthcareService.comment");
1905        }
1906        else if (name.equals("extraDetails")) {
1907          throw new FHIRException("Cannot call addChild on a singleton property HealthcareService.extraDetails");
1908        }
1909        else if (name.equals("photo")) {
1910          this.photo = new Attachment();
1911          return this.photo;
1912        }
1913        else if (name.equals("contact")) {
1914          return addContact();
1915        }
1916        else if (name.equals("coverageArea")) {
1917          return addCoverageArea();
1918        }
1919        else if (name.equals("serviceProvisionCode")) {
1920          return addServiceProvisionCode();
1921        }
1922        else if (name.equals("eligibility")) {
1923          return addEligibility();
1924        }
1925        else if (name.equals("program")) {
1926          return addProgram();
1927        }
1928        else if (name.equals("characteristic")) {
1929          return addCharacteristic();
1930        }
1931        else if (name.equals("communication")) {
1932          return addCommunication();
1933        }
1934        else if (name.equals("referralMethod")) {
1935          return addReferralMethod();
1936        }
1937        else if (name.equals("appointmentRequired")) {
1938          throw new FHIRException("Cannot call addChild on a singleton property HealthcareService.appointmentRequired");
1939        }
1940        else if (name.equals("availability")) {
1941          return addAvailability();
1942        }
1943        else if (name.equals("endpoint")) {
1944          return addEndpoint();
1945        }
1946        else
1947          return super.addChild(name);
1948      }
1949
1950  public String fhirType() {
1951    return "HealthcareService";
1952
1953  }
1954
1955      public HealthcareService copy() {
1956        HealthcareService dst = new HealthcareService();
1957        copyValues(dst);
1958        return dst;
1959      }
1960
1961      public void copyValues(HealthcareService dst) {
1962        super.copyValues(dst);
1963        if (identifier != null) {
1964          dst.identifier = new ArrayList<Identifier>();
1965          for (Identifier i : identifier)
1966            dst.identifier.add(i.copy());
1967        };
1968        dst.active = active == null ? null : active.copy();
1969        dst.providedBy = providedBy == null ? null : providedBy.copy();
1970        if (offeredIn != null) {
1971          dst.offeredIn = new ArrayList<Reference>();
1972          for (Reference i : offeredIn)
1973            dst.offeredIn.add(i.copy());
1974        };
1975        if (category != null) {
1976          dst.category = new ArrayList<CodeableConcept>();
1977          for (CodeableConcept i : category)
1978            dst.category.add(i.copy());
1979        };
1980        if (type != null) {
1981          dst.type = new ArrayList<CodeableConcept>();
1982          for (CodeableConcept i : type)
1983            dst.type.add(i.copy());
1984        };
1985        if (specialty != null) {
1986          dst.specialty = new ArrayList<CodeableConcept>();
1987          for (CodeableConcept i : specialty)
1988            dst.specialty.add(i.copy());
1989        };
1990        if (location != null) {
1991          dst.location = new ArrayList<Reference>();
1992          for (Reference i : location)
1993            dst.location.add(i.copy());
1994        };
1995        dst.name = name == null ? null : name.copy();
1996        dst.comment = comment == null ? null : comment.copy();
1997        dst.extraDetails = extraDetails == null ? null : extraDetails.copy();
1998        dst.photo = photo == null ? null : photo.copy();
1999        if (contact != null) {
2000          dst.contact = new ArrayList<ExtendedContactDetail>();
2001          for (ExtendedContactDetail i : contact)
2002            dst.contact.add(i.copy());
2003        };
2004        if (coverageArea != null) {
2005          dst.coverageArea = new ArrayList<Reference>();
2006          for (Reference i : coverageArea)
2007            dst.coverageArea.add(i.copy());
2008        };
2009        if (serviceProvisionCode != null) {
2010          dst.serviceProvisionCode = new ArrayList<CodeableConcept>();
2011          for (CodeableConcept i : serviceProvisionCode)
2012            dst.serviceProvisionCode.add(i.copy());
2013        };
2014        if (eligibility != null) {
2015          dst.eligibility = new ArrayList<HealthcareServiceEligibilityComponent>();
2016          for (HealthcareServiceEligibilityComponent i : eligibility)
2017            dst.eligibility.add(i.copy());
2018        };
2019        if (program != null) {
2020          dst.program = new ArrayList<CodeableConcept>();
2021          for (CodeableConcept i : program)
2022            dst.program.add(i.copy());
2023        };
2024        if (characteristic != null) {
2025          dst.characteristic = new ArrayList<CodeableConcept>();
2026          for (CodeableConcept i : characteristic)
2027            dst.characteristic.add(i.copy());
2028        };
2029        if (communication != null) {
2030          dst.communication = new ArrayList<CodeableConcept>();
2031          for (CodeableConcept i : communication)
2032            dst.communication.add(i.copy());
2033        };
2034        if (referralMethod != null) {
2035          dst.referralMethod = new ArrayList<CodeableConcept>();
2036          for (CodeableConcept i : referralMethod)
2037            dst.referralMethod.add(i.copy());
2038        };
2039        dst.appointmentRequired = appointmentRequired == null ? null : appointmentRequired.copy();
2040        if (availability != null) {
2041          dst.availability = new ArrayList<Availability>();
2042          for (Availability i : availability)
2043            dst.availability.add(i.copy());
2044        };
2045        if (endpoint != null) {
2046          dst.endpoint = new ArrayList<Reference>();
2047          for (Reference i : endpoint)
2048            dst.endpoint.add(i.copy());
2049        };
2050      }
2051
2052      protected HealthcareService typedCopy() {
2053        return copy();
2054      }
2055
2056      @Override
2057      public boolean equalsDeep(Base other_) {
2058        if (!super.equalsDeep(other_))
2059          return false;
2060        if (!(other_ instanceof HealthcareService))
2061          return false;
2062        HealthcareService o = (HealthcareService) other_;
2063        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(providedBy, o.providedBy, true)
2064           && compareDeep(offeredIn, o.offeredIn, true) && compareDeep(category, o.category, true) && compareDeep(type, o.type, true)
2065           && compareDeep(specialty, o.specialty, true) && compareDeep(location, o.location, true) && compareDeep(name, o.name, true)
2066           && compareDeep(comment, o.comment, true) && compareDeep(extraDetails, o.extraDetails, true) && compareDeep(photo, o.photo, true)
2067           && compareDeep(contact, o.contact, true) && compareDeep(coverageArea, o.coverageArea, true) && compareDeep(serviceProvisionCode, o.serviceProvisionCode, true)
2068           && compareDeep(eligibility, o.eligibility, true) && compareDeep(program, o.program, true) && compareDeep(characteristic, o.characteristic, true)
2069           && compareDeep(communication, o.communication, true) && compareDeep(referralMethod, o.referralMethod, true)
2070           && compareDeep(appointmentRequired, o.appointmentRequired, true) && compareDeep(availability, o.availability, true)
2071           && compareDeep(endpoint, o.endpoint, true);
2072      }
2073
2074      @Override
2075      public boolean equalsShallow(Base other_) {
2076        if (!super.equalsShallow(other_))
2077          return false;
2078        if (!(other_ instanceof HealthcareService))
2079          return false;
2080        HealthcareService o = (HealthcareService) other_;
2081        return compareValues(active, o.active, true) && compareValues(name, o.name, true) && compareValues(comment, o.comment, true)
2082           && compareValues(extraDetails, o.extraDetails, true) && compareValues(appointmentRequired, o.appointmentRequired, true)
2083          ;
2084      }
2085
2086      public boolean isEmpty() {
2087        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, providedBy
2088          , offeredIn, category, type, specialty, location, name, comment, extraDetails
2089          , photo, contact, coverageArea, serviceProvisionCode, eligibility, program, characteristic
2090          , communication, referralMethod, appointmentRequired, availability, endpoint);
2091      }
2092
2093  @Override
2094  public ResourceType getResourceType() {
2095    return ResourceType.HealthcareService;
2096   }
2097
2098 /**
2099   * Search parameter: <b>active</b>
2100   * <p>
2101   * Description: <b>The Healthcare Service is currently marked as active</b><br>
2102   * Type: <b>token</b><br>
2103   * Path: <b>HealthcareService.active</b><br>
2104   * </p>
2105   */
2106  @SearchParamDefinition(name="active", path="HealthcareService.active", description="The Healthcare Service is currently marked as active", type="token" )
2107  public static final String SP_ACTIVE = "active";
2108 /**
2109   * <b>Fluent Client</b> search parameter constant for <b>active</b>
2110   * <p>
2111   * Description: <b>The Healthcare Service is currently marked as active</b><br>
2112   * Type: <b>token</b><br>
2113   * Path: <b>HealthcareService.active</b><br>
2114   * </p>
2115   */
2116  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
2117
2118 /**
2119   * Search parameter: <b>characteristic</b>
2120   * <p>
2121   * Description: <b>One of the HealthcareService's characteristics</b><br>
2122   * Type: <b>token</b><br>
2123   * Path: <b>HealthcareService.characteristic</b><br>
2124   * </p>
2125   */
2126  @SearchParamDefinition(name="characteristic", path="HealthcareService.characteristic", description="One of the HealthcareService's characteristics", type="token" )
2127  public static final String SP_CHARACTERISTIC = "characteristic";
2128 /**
2129   * <b>Fluent Client</b> search parameter constant for <b>characteristic</b>
2130   * <p>
2131   * Description: <b>One of the HealthcareService's characteristics</b><br>
2132   * Type: <b>token</b><br>
2133   * Path: <b>HealthcareService.characteristic</b><br>
2134   * </p>
2135   */
2136  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CHARACTERISTIC = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CHARACTERISTIC);
2137
2138 /**
2139   * Search parameter: <b>communication</b>
2140   * <p>
2141   * Description: <b>Languages that are available at this service</b><br>
2142   * Type: <b>token</b><br>
2143   * Path: <b>HealthcareService.communication</b><br>
2144   * </p>
2145   */
2146  @SearchParamDefinition(name="communication", path="HealthcareService.communication", description="Languages that are available at this service", type="token" )
2147  public static final String SP_COMMUNICATION = "communication";
2148 /**
2149   * <b>Fluent Client</b> search parameter constant for <b>communication</b>
2150   * <p>
2151   * Description: <b>Languages that are available at this service</b><br>
2152   * Type: <b>token</b><br>
2153   * Path: <b>HealthcareService.communication</b><br>
2154   * </p>
2155   */
2156  public static final ca.uhn.fhir.rest.gclient.TokenClientParam COMMUNICATION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_COMMUNICATION);
2157
2158 /**
2159   * Search parameter: <b>coverage-area</b>
2160   * <p>
2161   * Description: <b>Location(s) service is intended for/available to</b><br>
2162   * Type: <b>reference</b><br>
2163   * Path: <b>HealthcareService.coverageArea</b><br>
2164   * </p>
2165   */
2166  @SearchParamDefinition(name="coverage-area", path="HealthcareService.coverageArea", description="Location(s) service is intended for/available to", type="reference", target={Location.class } )
2167  public static final String SP_COVERAGE_AREA = "coverage-area";
2168 /**
2169   * <b>Fluent Client</b> search parameter constant for <b>coverage-area</b>
2170   * <p>
2171   * Description: <b>Location(s) service is intended for/available to</b><br>
2172   * Type: <b>reference</b><br>
2173   * Path: <b>HealthcareService.coverageArea</b><br>
2174   * </p>
2175   */
2176  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam COVERAGE_AREA = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_COVERAGE_AREA);
2177
2178/**
2179   * Constant for fluent queries to be used to add include statements. Specifies
2180   * the path value of "<b>HealthcareService:coverage-area</b>".
2181   */
2182  public static final ca.uhn.fhir.model.api.Include INCLUDE_COVERAGE_AREA = new ca.uhn.fhir.model.api.Include("HealthcareService:coverage-area").toLocked();
2183
2184 /**
2185   * Search parameter: <b>eligibility</b>
2186   * <p>
2187   * Description: <b>One of the HealthcareService's eligibility requirements</b><br>
2188   * Type: <b>token</b><br>
2189   * Path: <b>HealthcareService.eligibility.code</b><br>
2190   * </p>
2191   */
2192  @SearchParamDefinition(name="eligibility", path="HealthcareService.eligibility.code", description="One of the HealthcareService's eligibility requirements", type="token" )
2193  public static final String SP_ELIGIBILITY = "eligibility";
2194 /**
2195   * <b>Fluent Client</b> search parameter constant for <b>eligibility</b>
2196   * <p>
2197   * Description: <b>One of the HealthcareService's eligibility requirements</b><br>
2198   * Type: <b>token</b><br>
2199   * Path: <b>HealthcareService.eligibility.code</b><br>
2200   * </p>
2201   */
2202  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ELIGIBILITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ELIGIBILITY);
2203
2204 /**
2205   * Search parameter: <b>endpoint</b>
2206   * <p>
2207   * Description: <b>Technical endpoints providing access to electronic services operated for the healthcare service</b><br>
2208   * Type: <b>reference</b><br>
2209   * Path: <b>HealthcareService.endpoint</b><br>
2210   * </p>
2211   */
2212  @SearchParamDefinition(name="endpoint", path="HealthcareService.endpoint", description="Technical endpoints providing access to electronic services operated for the healthcare service", type="reference", target={Endpoint.class } )
2213  public static final String SP_ENDPOINT = "endpoint";
2214 /**
2215   * <b>Fluent Client</b> search parameter constant for <b>endpoint</b>
2216   * <p>
2217   * Description: <b>Technical endpoints providing access to electronic services operated for the healthcare service</b><br>
2218   * Type: <b>reference</b><br>
2219   * Path: <b>HealthcareService.endpoint</b><br>
2220   * </p>
2221   */
2222  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENDPOINT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENDPOINT);
2223
2224/**
2225   * Constant for fluent queries to be used to add include statements. Specifies
2226   * the path value of "<b>HealthcareService:endpoint</b>".
2227   */
2228  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENDPOINT = new ca.uhn.fhir.model.api.Include("HealthcareService:endpoint").toLocked();
2229
2230 /**
2231   * Search parameter: <b>identifier</b>
2232   * <p>
2233   * Description: <b>External identifiers for this item</b><br>
2234   * Type: <b>token</b><br>
2235   * Path: <b>HealthcareService.identifier</b><br>
2236   * </p>
2237   */
2238  @SearchParamDefinition(name="identifier", path="HealthcareService.identifier", description="External identifiers for this item", type="token" )
2239  public static final String SP_IDENTIFIER = "identifier";
2240 /**
2241   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2242   * <p>
2243   * Description: <b>External identifiers for this item</b><br>
2244   * Type: <b>token</b><br>
2245   * Path: <b>HealthcareService.identifier</b><br>
2246   * </p>
2247   */
2248  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2249
2250 /**
2251   * Search parameter: <b>location</b>
2252   * <p>
2253   * Description: <b>The location of the Healthcare Service</b><br>
2254   * Type: <b>reference</b><br>
2255   * Path: <b>HealthcareService.location</b><br>
2256   * </p>
2257   */
2258  @SearchParamDefinition(name="location", path="HealthcareService.location", description="The location of the Healthcare Service", type="reference", target={Location.class } )
2259  public static final String SP_LOCATION = "location";
2260 /**
2261   * <b>Fluent Client</b> search parameter constant for <b>location</b>
2262   * <p>
2263   * Description: <b>The location of the Healthcare Service</b><br>
2264   * Type: <b>reference</b><br>
2265   * Path: <b>HealthcareService.location</b><br>
2266   * </p>
2267   */
2268  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LOCATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LOCATION);
2269
2270/**
2271   * Constant for fluent queries to be used to add include statements. Specifies
2272   * the path value of "<b>HealthcareService:location</b>".
2273   */
2274  public static final ca.uhn.fhir.model.api.Include INCLUDE_LOCATION = new ca.uhn.fhir.model.api.Include("HealthcareService:location").toLocked();
2275
2276 /**
2277   * Search parameter: <b>name</b>
2278   * <p>
2279   * Description: <b>A portion of the Healthcare service name</b><br>
2280   * Type: <b>string</b><br>
2281   * Path: <b>HealthcareService.name</b><br>
2282   * </p>
2283   */
2284  @SearchParamDefinition(name="name", path="HealthcareService.name", description="A portion of the Healthcare service name", type="string" )
2285  public static final String SP_NAME = "name";
2286 /**
2287   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2288   * <p>
2289   * Description: <b>A portion of the Healthcare service name</b><br>
2290   * Type: <b>string</b><br>
2291   * Path: <b>HealthcareService.name</b><br>
2292   * </p>
2293   */
2294  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2295
2296 /**
2297   * Search parameter: <b>offered-in</b>
2298   * <p>
2299   * Description: <b>The service within which this service is offered</b><br>
2300   * Type: <b>reference</b><br>
2301   * Path: <b>HealthcareService.offeredIn</b><br>
2302   * </p>
2303   */
2304  @SearchParamDefinition(name="offered-in", path="HealthcareService.offeredIn", description="The service within which this service is offered", type="reference", target={HealthcareService.class } )
2305  public static final String SP_OFFERED_IN = "offered-in";
2306 /**
2307   * <b>Fluent Client</b> search parameter constant for <b>offered-in</b>
2308   * <p>
2309   * Description: <b>The service within which this service is offered</b><br>
2310   * Type: <b>reference</b><br>
2311   * Path: <b>HealthcareService.offeredIn</b><br>
2312   * </p>
2313   */
2314  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam OFFERED_IN = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_OFFERED_IN);
2315
2316/**
2317   * Constant for fluent queries to be used to add include statements. Specifies
2318   * the path value of "<b>HealthcareService:offered-in</b>".
2319   */
2320  public static final ca.uhn.fhir.model.api.Include INCLUDE_OFFERED_IN = new ca.uhn.fhir.model.api.Include("HealthcareService:offered-in").toLocked();
2321
2322 /**
2323   * Search parameter: <b>organization</b>
2324   * <p>
2325   * Description: <b>The organization that provides this Healthcare Service</b><br>
2326   * Type: <b>reference</b><br>
2327   * Path: <b>HealthcareService.providedBy</b><br>
2328   * </p>
2329   */
2330  @SearchParamDefinition(name="organization", path="HealthcareService.providedBy", description="The organization that provides this Healthcare Service", type="reference", target={Organization.class } )
2331  public static final String SP_ORGANIZATION = "organization";
2332 /**
2333   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
2334   * <p>
2335   * Description: <b>The organization that provides this Healthcare Service</b><br>
2336   * Type: <b>reference</b><br>
2337   * Path: <b>HealthcareService.providedBy</b><br>
2338   * </p>
2339   */
2340  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
2341
2342/**
2343   * Constant for fluent queries to be used to add include statements. Specifies
2344   * the path value of "<b>HealthcareService:organization</b>".
2345   */
2346  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("HealthcareService:organization").toLocked();
2347
2348 /**
2349   * Search parameter: <b>program</b>
2350   * <p>
2351   * Description: <b>One of the Programs supported by this HealthcareService</b><br>
2352   * Type: <b>token</b><br>
2353   * Path: <b>HealthcareService.program</b><br>
2354   * </p>
2355   */
2356  @SearchParamDefinition(name="program", path="HealthcareService.program", description="One of the Programs supported by this HealthcareService", type="token" )
2357  public static final String SP_PROGRAM = "program";
2358 /**
2359   * <b>Fluent Client</b> search parameter constant for <b>program</b>
2360   * <p>
2361   * Description: <b>One of the Programs supported by this HealthcareService</b><br>
2362   * Type: <b>token</b><br>
2363   * Path: <b>HealthcareService.program</b><br>
2364   * </p>
2365   */
2366  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PROGRAM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PROGRAM);
2367
2368 /**
2369   * Search parameter: <b>service-category</b>
2370   * <p>
2371   * Description: <b>Service Category of the Healthcare Service</b><br>
2372   * Type: <b>token</b><br>
2373   * Path: <b>HealthcareService.category</b><br>
2374   * </p>
2375   */
2376  @SearchParamDefinition(name="service-category", path="HealthcareService.category", description="Service Category of the Healthcare Service", type="token" )
2377  public static final String SP_SERVICE_CATEGORY = "service-category";
2378 /**
2379   * <b>Fluent Client</b> search parameter constant for <b>service-category</b>
2380   * <p>
2381   * Description: <b>Service Category of the Healthcare Service</b><br>
2382   * Type: <b>token</b><br>
2383   * Path: <b>HealthcareService.category</b><br>
2384   * </p>
2385   */
2386  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SERVICE_CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SERVICE_CATEGORY);
2387
2388 /**
2389   * Search parameter: <b>service-type</b>
2390   * <p>
2391   * Description: <b>The type of service provided by this healthcare service</b><br>
2392   * Type: <b>token</b><br>
2393   * Path: <b>HealthcareService.type</b><br>
2394   * </p>
2395   */
2396  @SearchParamDefinition(name="service-type", path="HealthcareService.type", description="The type of service provided by this healthcare service", type="token" )
2397  public static final String SP_SERVICE_TYPE = "service-type";
2398 /**
2399   * <b>Fluent Client</b> search parameter constant for <b>service-type</b>
2400   * <p>
2401   * Description: <b>The type of service provided by this healthcare service</b><br>
2402   * Type: <b>token</b><br>
2403   * Path: <b>HealthcareService.type</b><br>
2404   * </p>
2405   */
2406  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SERVICE_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SERVICE_TYPE);
2407
2408 /**
2409   * Search parameter: <b>specialty</b>
2410   * <p>
2411   * Description: <b>The specialty of the service provided by this healthcare service</b><br>
2412   * Type: <b>token</b><br>
2413   * Path: <b>HealthcareService.specialty</b><br>
2414   * </p>
2415   */
2416  @SearchParamDefinition(name="specialty", path="HealthcareService.specialty", description="The specialty of the service provided by this healthcare service", type="token" )
2417  public static final String SP_SPECIALTY = "specialty";
2418 /**
2419   * <b>Fluent Client</b> search parameter constant for <b>specialty</b>
2420   * <p>
2421   * Description: <b>The specialty of the service provided by this healthcare service</b><br>
2422   * Type: <b>token</b><br>
2423   * Path: <b>HealthcareService.specialty</b><br>
2424   * </p>
2425   */
2426  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SPECIALTY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SPECIALTY);
2427
2428
2429}
2430