001package org.hl7.fhir.r4b.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 Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.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 * This resource provides eligibility and plan details from the processing of an CoverageEligibilityRequest resource.
052 */
053@ResourceDef(name="CoverageEligibilityResponse", profile="http://hl7.org/fhir/StructureDefinition/CoverageEligibilityResponse")
054public class CoverageEligibilityResponse extends DomainResource {
055
056    public enum EligibilityResponsePurpose {
057        /**
058         * The prior authorization requirements for the listed, or discovered if specified, converages for the categories of service and/or specifed biling codes are requested.
059         */
060        AUTHREQUIREMENTS, 
061        /**
062         * The plan benefits and optionally benefits consumed  for the listed, or discovered if specified, converages are requested.
063         */
064        BENEFITS, 
065        /**
066         * The insurer is requested to report on any coverages which they are aware of in addition to any specifed.
067         */
068        DISCOVERY, 
069        /**
070         * A check that the specified coverages are in-force is requested.
071         */
072        VALIDATION, 
073        /**
074         * added to help the parsers with the generic types
075         */
076        NULL;
077        public static EligibilityResponsePurpose fromCode(String codeString) throws FHIRException {
078            if (codeString == null || "".equals(codeString))
079                return null;
080        if ("auth-requirements".equals(codeString))
081          return AUTHREQUIREMENTS;
082        if ("benefits".equals(codeString))
083          return BENEFITS;
084        if ("discovery".equals(codeString))
085          return DISCOVERY;
086        if ("validation".equals(codeString))
087          return VALIDATION;
088        if (Configuration.isAcceptInvalidEnums())
089          return null;
090        else
091          throw new FHIRException("Unknown EligibilityResponsePurpose code '"+codeString+"'");
092        }
093        public String toCode() {
094          switch (this) {
095            case AUTHREQUIREMENTS: return "auth-requirements";
096            case BENEFITS: return "benefits";
097            case DISCOVERY: return "discovery";
098            case VALIDATION: return "validation";
099            case NULL: return null;
100            default: return "?";
101          }
102        }
103        public String getSystem() {
104          switch (this) {
105            case AUTHREQUIREMENTS: return "http://hl7.org/fhir/eligibilityresponse-purpose";
106            case BENEFITS: return "http://hl7.org/fhir/eligibilityresponse-purpose";
107            case DISCOVERY: return "http://hl7.org/fhir/eligibilityresponse-purpose";
108            case VALIDATION: return "http://hl7.org/fhir/eligibilityresponse-purpose";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113        public String getDefinition() {
114          switch (this) {
115            case AUTHREQUIREMENTS: return "The prior authorization requirements for the listed, or discovered if specified, converages for the categories of service and/or specifed biling codes are requested.";
116            case BENEFITS: return "The plan benefits and optionally benefits consumed  for the listed, or discovered if specified, converages are requested.";
117            case DISCOVERY: return "The insurer is requested to report on any coverages which they are aware of in addition to any specifed.";
118            case VALIDATION: return "A check that the specified coverages are in-force is requested.";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123        public String getDisplay() {
124          switch (this) {
125            case AUTHREQUIREMENTS: return "Coverage auth-requirements";
126            case BENEFITS: return "Coverage benefits";
127            case DISCOVERY: return "Coverage Discovery";
128            case VALIDATION: return "Coverage Validation";
129            case NULL: return null;
130            default: return "?";
131          }
132        }
133    }
134
135  public static class EligibilityResponsePurposeEnumFactory implements EnumFactory<EligibilityResponsePurpose> {
136    public EligibilityResponsePurpose fromCode(String codeString) throws IllegalArgumentException {
137      if (codeString == null || "".equals(codeString))
138            if (codeString == null || "".equals(codeString))
139                return null;
140        if ("auth-requirements".equals(codeString))
141          return EligibilityResponsePurpose.AUTHREQUIREMENTS;
142        if ("benefits".equals(codeString))
143          return EligibilityResponsePurpose.BENEFITS;
144        if ("discovery".equals(codeString))
145          return EligibilityResponsePurpose.DISCOVERY;
146        if ("validation".equals(codeString))
147          return EligibilityResponsePurpose.VALIDATION;
148        throw new IllegalArgumentException("Unknown EligibilityResponsePurpose code '"+codeString+"'");
149        }
150        public Enumeration<EligibilityResponsePurpose> fromType(Base code) throws FHIRException {
151          if (code == null)
152            return null;
153          if (code.isEmpty())
154            return new Enumeration<EligibilityResponsePurpose>(this);
155          String codeString = ((PrimitiveType) code).asStringValue();
156          if (codeString == null || "".equals(codeString))
157            return null;
158        if ("auth-requirements".equals(codeString))
159          return new Enumeration<EligibilityResponsePurpose>(this, EligibilityResponsePurpose.AUTHREQUIREMENTS);
160        if ("benefits".equals(codeString))
161          return new Enumeration<EligibilityResponsePurpose>(this, EligibilityResponsePurpose.BENEFITS);
162        if ("discovery".equals(codeString))
163          return new Enumeration<EligibilityResponsePurpose>(this, EligibilityResponsePurpose.DISCOVERY);
164        if ("validation".equals(codeString))
165          return new Enumeration<EligibilityResponsePurpose>(this, EligibilityResponsePurpose.VALIDATION);
166        throw new FHIRException("Unknown EligibilityResponsePurpose code '"+codeString+"'");
167        }
168    public String toCode(EligibilityResponsePurpose code) {
169      if (code == EligibilityResponsePurpose.AUTHREQUIREMENTS)
170        return "auth-requirements";
171      if (code == EligibilityResponsePurpose.BENEFITS)
172        return "benefits";
173      if (code == EligibilityResponsePurpose.DISCOVERY)
174        return "discovery";
175      if (code == EligibilityResponsePurpose.VALIDATION)
176        return "validation";
177      return "?";
178      }
179    public String toSystem(EligibilityResponsePurpose code) {
180      return code.getSystem();
181      }
182    }
183
184    @Block()
185    public static class InsuranceComponent extends BackboneElement implements IBaseBackboneElement {
186        /**
187         * Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.
188         */
189        @Child(name = "coverage", type = {Coverage.class}, order=1, min=1, max=1, modifier=false, summary=true)
190        @Description(shortDefinition="Insurance information", formalDefinition="Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system." )
191        protected Reference coverage;
192
193        /**
194         * Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.
195         */
196        @Child(name = "inforce", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
197        @Description(shortDefinition="Coverage inforce indicator", formalDefinition="Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates." )
198        protected BooleanType inforce;
199
200        /**
201         * The term of the benefits documented in this response.
202         */
203        @Child(name = "benefitPeriod", type = {Period.class}, order=3, min=0, max=1, modifier=false, summary=false)
204        @Description(shortDefinition="When the benefits are applicable", formalDefinition="The term of the benefits documented in this response." )
205        protected Period benefitPeriod;
206
207        /**
208         * Benefits and optionally current balances, and authorization details by category or service.
209         */
210        @Child(name = "item", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
211        @Description(shortDefinition="Benefits and authorization details", formalDefinition="Benefits and optionally current balances, and authorization details by category or service." )
212        protected List<ItemsComponent> item;
213
214        private static final long serialVersionUID = 1473928476L;
215
216    /**
217     * Constructor
218     */
219      public InsuranceComponent() {
220        super();
221      }
222
223    /**
224     * Constructor
225     */
226      public InsuranceComponent(Reference coverage) {
227        super();
228        this.setCoverage(coverage);
229      }
230
231        /**
232         * @return {@link #coverage} (Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.)
233         */
234        public Reference getCoverage() { 
235          if (this.coverage == null)
236            if (Configuration.errorOnAutoCreate())
237              throw new Error("Attempt to auto-create InsuranceComponent.coverage");
238            else if (Configuration.doAutoCreate())
239              this.coverage = new Reference(); // cc
240          return this.coverage;
241        }
242
243        public boolean hasCoverage() { 
244          return this.coverage != null && !this.coverage.isEmpty();
245        }
246
247        /**
248         * @param value {@link #coverage} (Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.)
249         */
250        public InsuranceComponent setCoverage(Reference value) { 
251          this.coverage = value;
252          return this;
253        }
254
255        /**
256         * @return {@link #inforce} (Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.). This is the underlying object with id, value and extensions. The accessor "getInforce" gives direct access to the value
257         */
258        public BooleanType getInforceElement() { 
259          if (this.inforce == null)
260            if (Configuration.errorOnAutoCreate())
261              throw new Error("Attempt to auto-create InsuranceComponent.inforce");
262            else if (Configuration.doAutoCreate())
263              this.inforce = new BooleanType(); // bb
264          return this.inforce;
265        }
266
267        public boolean hasInforceElement() { 
268          return this.inforce != null && !this.inforce.isEmpty();
269        }
270
271        public boolean hasInforce() { 
272          return this.inforce != null && !this.inforce.isEmpty();
273        }
274
275        /**
276         * @param value {@link #inforce} (Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.). This is the underlying object with id, value and extensions. The accessor "getInforce" gives direct access to the value
277         */
278        public InsuranceComponent setInforceElement(BooleanType value) { 
279          this.inforce = value;
280          return this;
281        }
282
283        /**
284         * @return Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.
285         */
286        public boolean getInforce() { 
287          return this.inforce == null || this.inforce.isEmpty() ? false : this.inforce.getValue();
288        }
289
290        /**
291         * @param value Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.
292         */
293        public InsuranceComponent setInforce(boolean value) { 
294            if (this.inforce == null)
295              this.inforce = new BooleanType();
296            this.inforce.setValue(value);
297          return this;
298        }
299
300        /**
301         * @return {@link #benefitPeriod} (The term of the benefits documented in this response.)
302         */
303        public Period getBenefitPeriod() { 
304          if (this.benefitPeriod == null)
305            if (Configuration.errorOnAutoCreate())
306              throw new Error("Attempt to auto-create InsuranceComponent.benefitPeriod");
307            else if (Configuration.doAutoCreate())
308              this.benefitPeriod = new Period(); // cc
309          return this.benefitPeriod;
310        }
311
312        public boolean hasBenefitPeriod() { 
313          return this.benefitPeriod != null && !this.benefitPeriod.isEmpty();
314        }
315
316        /**
317         * @param value {@link #benefitPeriod} (The term of the benefits documented in this response.)
318         */
319        public InsuranceComponent setBenefitPeriod(Period value) { 
320          this.benefitPeriod = value;
321          return this;
322        }
323
324        /**
325         * @return {@link #item} (Benefits and optionally current balances, and authorization details by category or service.)
326         */
327        public List<ItemsComponent> getItem() { 
328          if (this.item == null)
329            this.item = new ArrayList<ItemsComponent>();
330          return this.item;
331        }
332
333        /**
334         * @return Returns a reference to <code>this</code> for easy method chaining
335         */
336        public InsuranceComponent setItem(List<ItemsComponent> theItem) { 
337          this.item = theItem;
338          return this;
339        }
340
341        public boolean hasItem() { 
342          if (this.item == null)
343            return false;
344          for (ItemsComponent item : this.item)
345            if (!item.isEmpty())
346              return true;
347          return false;
348        }
349
350        public ItemsComponent addItem() { //3
351          ItemsComponent t = new ItemsComponent();
352          if (this.item == null)
353            this.item = new ArrayList<ItemsComponent>();
354          this.item.add(t);
355          return t;
356        }
357
358        public InsuranceComponent addItem(ItemsComponent t) { //3
359          if (t == null)
360            return this;
361          if (this.item == null)
362            this.item = new ArrayList<ItemsComponent>();
363          this.item.add(t);
364          return this;
365        }
366
367        /**
368         * @return The first repetition of repeating field {@link #item}, creating it if it does not already exist {3}
369         */
370        public ItemsComponent getItemFirstRep() { 
371          if (getItem().isEmpty()) {
372            addItem();
373          }
374          return getItem().get(0);
375        }
376
377        protected void listChildren(List<Property> children) {
378          super.listChildren(children);
379          children.add(new Property("coverage", "Reference(Coverage)", "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.", 0, 1, coverage));
380          children.add(new Property("inforce", "boolean", "Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.", 0, 1, inforce));
381          children.add(new Property("benefitPeriod", "Period", "The term of the benefits documented in this response.", 0, 1, benefitPeriod));
382          children.add(new Property("item", "", "Benefits and optionally current balances, and authorization details by category or service.", 0, java.lang.Integer.MAX_VALUE, item));
383        }
384
385        @Override
386        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
387          switch (_hash) {
388          case -351767064: /*coverage*/  return new Property("coverage", "Reference(Coverage)", "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient's actual coverage within the insurer's information system.", 0, 1, coverage);
389          case 1945431270: /*inforce*/  return new Property("inforce", "boolean", "Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.", 0, 1, inforce);
390          case -407369416: /*benefitPeriod*/  return new Property("benefitPeriod", "Period", "The term of the benefits documented in this response.", 0, 1, benefitPeriod);
391          case 3242771: /*item*/  return new Property("item", "", "Benefits and optionally current balances, and authorization details by category or service.", 0, java.lang.Integer.MAX_VALUE, item);
392          default: return super.getNamedProperty(_hash, _name, _checkValid);
393          }
394
395        }
396
397      @Override
398      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
399        switch (hash) {
400        case -351767064: /*coverage*/ return this.coverage == null ? new Base[0] : new Base[] {this.coverage}; // Reference
401        case 1945431270: /*inforce*/ return this.inforce == null ? new Base[0] : new Base[] {this.inforce}; // BooleanType
402        case -407369416: /*benefitPeriod*/ return this.benefitPeriod == null ? new Base[0] : new Base[] {this.benefitPeriod}; // Period
403        case 3242771: /*item*/ return this.item == null ? new Base[0] : this.item.toArray(new Base[this.item.size()]); // ItemsComponent
404        default: return super.getProperty(hash, name, checkValid);
405        }
406
407      }
408
409      @Override
410      public Base setProperty(int hash, String name, Base value) throws FHIRException {
411        switch (hash) {
412        case -351767064: // coverage
413          this.coverage = TypeConvertor.castToReference(value); // Reference
414          return value;
415        case 1945431270: // inforce
416          this.inforce = TypeConvertor.castToBoolean(value); // BooleanType
417          return value;
418        case -407369416: // benefitPeriod
419          this.benefitPeriod = TypeConvertor.castToPeriod(value); // Period
420          return value;
421        case 3242771: // item
422          this.getItem().add((ItemsComponent) value); // ItemsComponent
423          return value;
424        default: return super.setProperty(hash, name, value);
425        }
426
427      }
428
429      @Override
430      public Base setProperty(String name, Base value) throws FHIRException {
431        if (name.equals("coverage")) {
432          this.coverage = TypeConvertor.castToReference(value); // Reference
433        } else if (name.equals("inforce")) {
434          this.inforce = TypeConvertor.castToBoolean(value); // BooleanType
435        } else if (name.equals("benefitPeriod")) {
436          this.benefitPeriod = TypeConvertor.castToPeriod(value); // Period
437        } else if (name.equals("item")) {
438          this.getItem().add((ItemsComponent) value);
439        } else
440          return super.setProperty(name, value);
441        return value;
442      }
443
444      @Override
445      public Base makeProperty(int hash, String name) throws FHIRException {
446        switch (hash) {
447        case -351767064:  return getCoverage();
448        case 1945431270:  return getInforceElement();
449        case -407369416:  return getBenefitPeriod();
450        case 3242771:  return addItem(); 
451        default: return super.makeProperty(hash, name);
452        }
453
454      }
455
456      @Override
457      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
458        switch (hash) {
459        case -351767064: /*coverage*/ return new String[] {"Reference"};
460        case 1945431270: /*inforce*/ return new String[] {"boolean"};
461        case -407369416: /*benefitPeriod*/ return new String[] {"Period"};
462        case 3242771: /*item*/ return new String[] {};
463        default: return super.getTypesForProperty(hash, name);
464        }
465
466      }
467
468      @Override
469      public Base addChild(String name) throws FHIRException {
470        if (name.equals("coverage")) {
471          this.coverage = new Reference();
472          return this.coverage;
473        }
474        else if (name.equals("inforce")) {
475          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.insurance.inforce");
476        }
477        else if (name.equals("benefitPeriod")) {
478          this.benefitPeriod = new Period();
479          return this.benefitPeriod;
480        }
481        else if (name.equals("item")) {
482          return addItem();
483        }
484        else
485          return super.addChild(name);
486      }
487
488      public InsuranceComponent copy() {
489        InsuranceComponent dst = new InsuranceComponent();
490        copyValues(dst);
491        return dst;
492      }
493
494      public void copyValues(InsuranceComponent dst) {
495        super.copyValues(dst);
496        dst.coverage = coverage == null ? null : coverage.copy();
497        dst.inforce = inforce == null ? null : inforce.copy();
498        dst.benefitPeriod = benefitPeriod == null ? null : benefitPeriod.copy();
499        if (item != null) {
500          dst.item = new ArrayList<ItemsComponent>();
501          for (ItemsComponent i : item)
502            dst.item.add(i.copy());
503        };
504      }
505
506      @Override
507      public boolean equalsDeep(Base other_) {
508        if (!super.equalsDeep(other_))
509          return false;
510        if (!(other_ instanceof InsuranceComponent))
511          return false;
512        InsuranceComponent o = (InsuranceComponent) other_;
513        return compareDeep(coverage, o.coverage, true) && compareDeep(inforce, o.inforce, true) && compareDeep(benefitPeriod, o.benefitPeriod, true)
514           && compareDeep(item, o.item, true);
515      }
516
517      @Override
518      public boolean equalsShallow(Base other_) {
519        if (!super.equalsShallow(other_))
520          return false;
521        if (!(other_ instanceof InsuranceComponent))
522          return false;
523        InsuranceComponent o = (InsuranceComponent) other_;
524        return compareValues(inforce, o.inforce, true);
525      }
526
527      public boolean isEmpty() {
528        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(coverage, inforce, benefitPeriod
529          , item);
530      }
531
532  public String fhirType() {
533    return "CoverageEligibilityResponse.insurance";
534
535  }
536
537  }
538
539    @Block()
540    public static class ItemsComponent extends BackboneElement implements IBaseBackboneElement {
541        /**
542         * Code to identify the general type of benefits under which products and services are provided.
543         */
544        @Child(name = "category", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
545        @Description(shortDefinition="Benefit classification", formalDefinition="Code to identify the general type of benefits under which products and services are provided." )
546        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-benefitcategory")
547        protected CodeableConcept category;
548
549        /**
550         * This contains the product, service, drug or other billing code for the item.
551         */
552        @Child(name = "productOrService", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
553        @Description(shortDefinition="Billing, service, product, or drug code", formalDefinition="This contains the product, service, drug or other billing code for the item." )
554        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-uscls")
555        protected CodeableConcept productOrService;
556
557        /**
558         * Item typification or modifiers codes to convey additional context for the product or service.
559         */
560        @Child(name = "modifier", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
561        @Description(shortDefinition="Product or service billing modifiers", formalDefinition="Item typification or modifiers codes to convey additional context for the product or service." )
562        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-modifiers")
563        protected List<CodeableConcept> modifier;
564
565        /**
566         * The practitioner who is eligible for the provision of the product or service.
567         */
568        @Child(name = "provider", type = {Practitioner.class, PractitionerRole.class}, order=4, min=0, max=1, modifier=false, summary=false)
569        @Description(shortDefinition="Performing practitioner", formalDefinition="The practitioner who is eligible for the provision of the product or service." )
570        protected Reference provider;
571
572        /**
573         * True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.
574         */
575        @Child(name = "excluded", type = {BooleanType.class}, order=5, min=0, max=1, modifier=false, summary=false)
576        @Description(shortDefinition="Excluded from the plan", formalDefinition="True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage." )
577        protected BooleanType excluded;
578
579        /**
580         * A short name or tag for the benefit.
581         */
582        @Child(name = "name", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
583        @Description(shortDefinition="Short name for the benefit", formalDefinition="A short name or tag for the benefit." )
584        protected StringType name;
585
586        /**
587         * A richer description of the benefit or services covered.
588         */
589        @Child(name = "description", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=false)
590        @Description(shortDefinition="Description of the benefit or services covered", formalDefinition="A richer description of the benefit or services covered." )
591        protected StringType description;
592
593        /**
594         * Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.
595         */
596        @Child(name = "network", type = {CodeableConcept.class}, order=8, min=0, max=1, modifier=false, summary=false)
597        @Description(shortDefinition="In or out of network", formalDefinition="Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers." )
598        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-network")
599        protected CodeableConcept network;
600
601        /**
602         * Indicates if the benefits apply to an individual or to the family.
603         */
604        @Child(name = "unit", type = {CodeableConcept.class}, order=9, min=0, max=1, modifier=false, summary=false)
605        @Description(shortDefinition="Individual or family", formalDefinition="Indicates if the benefits apply to an individual or to the family." )
606        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-unit")
607        protected CodeableConcept unit;
608
609        /**
610         * The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.
611         */
612        @Child(name = "term", type = {CodeableConcept.class}, order=10, min=0, max=1, modifier=false, summary=false)
613        @Description(shortDefinition="Annual or lifetime", formalDefinition="The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'." )
614        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-term")
615        protected CodeableConcept term;
616
617        /**
618         * Benefits used to date.
619         */
620        @Child(name = "benefit", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
621        @Description(shortDefinition="Benefit Summary", formalDefinition="Benefits used to date." )
622        protected List<BenefitComponent> benefit;
623
624        /**
625         * A boolean flag indicating whether a preauthorization is required prior to actual service delivery.
626         */
627        @Child(name = "authorizationRequired", type = {BooleanType.class}, order=12, min=0, max=1, modifier=false, summary=false)
628        @Description(shortDefinition="Authorization required flag", formalDefinition="A boolean flag indicating whether a preauthorization is required prior to actual service delivery." )
629        protected BooleanType authorizationRequired;
630
631        /**
632         * Codes or comments regarding information or actions associated with the preauthorization.
633         */
634        @Child(name = "authorizationSupporting", type = {CodeableConcept.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
635        @Description(shortDefinition="Type of required supporting materials", formalDefinition="Codes or comments regarding information or actions associated with the preauthorization." )
636        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/coverageeligibilityresponse-ex-auth-support")
637        protected List<CodeableConcept> authorizationSupporting;
638
639        /**
640         * A web location for obtaining requirements or descriptive information regarding the preauthorization.
641         */
642        @Child(name = "authorizationUrl", type = {UriType.class}, order=14, min=0, max=1, modifier=false, summary=false)
643        @Description(shortDefinition="Preauthorization requirements endpoint", formalDefinition="A web location for obtaining requirements or descriptive information regarding the preauthorization." )
644        protected UriType authorizationUrl;
645
646        private static final long serialVersionUID = 1706159945L;
647
648    /**
649     * Constructor
650     */
651      public ItemsComponent() {
652        super();
653      }
654
655        /**
656         * @return {@link #category} (Code to identify the general type of benefits under which products and services are provided.)
657         */
658        public CodeableConcept getCategory() { 
659          if (this.category == null)
660            if (Configuration.errorOnAutoCreate())
661              throw new Error("Attempt to auto-create ItemsComponent.category");
662            else if (Configuration.doAutoCreate())
663              this.category = new CodeableConcept(); // cc
664          return this.category;
665        }
666
667        public boolean hasCategory() { 
668          return this.category != null && !this.category.isEmpty();
669        }
670
671        /**
672         * @param value {@link #category} (Code to identify the general type of benefits under which products and services are provided.)
673         */
674        public ItemsComponent setCategory(CodeableConcept value) { 
675          this.category = value;
676          return this;
677        }
678
679        /**
680         * @return {@link #productOrService} (This contains the product, service, drug or other billing code for the item.)
681         */
682        public CodeableConcept getProductOrService() { 
683          if (this.productOrService == null)
684            if (Configuration.errorOnAutoCreate())
685              throw new Error("Attempt to auto-create ItemsComponent.productOrService");
686            else if (Configuration.doAutoCreate())
687              this.productOrService = new CodeableConcept(); // cc
688          return this.productOrService;
689        }
690
691        public boolean hasProductOrService() { 
692          return this.productOrService != null && !this.productOrService.isEmpty();
693        }
694
695        /**
696         * @param value {@link #productOrService} (This contains the product, service, drug or other billing code for the item.)
697         */
698        public ItemsComponent setProductOrService(CodeableConcept value) { 
699          this.productOrService = value;
700          return this;
701        }
702
703        /**
704         * @return {@link #modifier} (Item typification or modifiers codes to convey additional context for the product or service.)
705         */
706        public List<CodeableConcept> getModifier() { 
707          if (this.modifier == null)
708            this.modifier = new ArrayList<CodeableConcept>();
709          return this.modifier;
710        }
711
712        /**
713         * @return Returns a reference to <code>this</code> for easy method chaining
714         */
715        public ItemsComponent setModifier(List<CodeableConcept> theModifier) { 
716          this.modifier = theModifier;
717          return this;
718        }
719
720        public boolean hasModifier() { 
721          if (this.modifier == null)
722            return false;
723          for (CodeableConcept item : this.modifier)
724            if (!item.isEmpty())
725              return true;
726          return false;
727        }
728
729        public CodeableConcept addModifier() { //3
730          CodeableConcept t = new CodeableConcept();
731          if (this.modifier == null)
732            this.modifier = new ArrayList<CodeableConcept>();
733          this.modifier.add(t);
734          return t;
735        }
736
737        public ItemsComponent addModifier(CodeableConcept t) { //3
738          if (t == null)
739            return this;
740          if (this.modifier == null)
741            this.modifier = new ArrayList<CodeableConcept>();
742          this.modifier.add(t);
743          return this;
744        }
745
746        /**
747         * @return The first repetition of repeating field {@link #modifier}, creating it if it does not already exist {3}
748         */
749        public CodeableConcept getModifierFirstRep() { 
750          if (getModifier().isEmpty()) {
751            addModifier();
752          }
753          return getModifier().get(0);
754        }
755
756        /**
757         * @return {@link #provider} (The practitioner who is eligible for the provision of the product or service.)
758         */
759        public Reference getProvider() { 
760          if (this.provider == null)
761            if (Configuration.errorOnAutoCreate())
762              throw new Error("Attempt to auto-create ItemsComponent.provider");
763            else if (Configuration.doAutoCreate())
764              this.provider = new Reference(); // cc
765          return this.provider;
766        }
767
768        public boolean hasProvider() { 
769          return this.provider != null && !this.provider.isEmpty();
770        }
771
772        /**
773         * @param value {@link #provider} (The practitioner who is eligible for the provision of the product or service.)
774         */
775        public ItemsComponent setProvider(Reference value) { 
776          this.provider = value;
777          return this;
778        }
779
780        /**
781         * @return {@link #excluded} (True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.). This is the underlying object with id, value and extensions. The accessor "getExcluded" gives direct access to the value
782         */
783        public BooleanType getExcludedElement() { 
784          if (this.excluded == null)
785            if (Configuration.errorOnAutoCreate())
786              throw new Error("Attempt to auto-create ItemsComponent.excluded");
787            else if (Configuration.doAutoCreate())
788              this.excluded = new BooleanType(); // bb
789          return this.excluded;
790        }
791
792        public boolean hasExcludedElement() { 
793          return this.excluded != null && !this.excluded.isEmpty();
794        }
795
796        public boolean hasExcluded() { 
797          return this.excluded != null && !this.excluded.isEmpty();
798        }
799
800        /**
801         * @param value {@link #excluded} (True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.). This is the underlying object with id, value and extensions. The accessor "getExcluded" gives direct access to the value
802         */
803        public ItemsComponent setExcludedElement(BooleanType value) { 
804          this.excluded = value;
805          return this;
806        }
807
808        /**
809         * @return True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.
810         */
811        public boolean getExcluded() { 
812          return this.excluded == null || this.excluded.isEmpty() ? false : this.excluded.getValue();
813        }
814
815        /**
816         * @param value True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.
817         */
818        public ItemsComponent setExcluded(boolean value) { 
819            if (this.excluded == null)
820              this.excluded = new BooleanType();
821            this.excluded.setValue(value);
822          return this;
823        }
824
825        /**
826         * @return {@link #name} (A short name or tag for the benefit.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
827         */
828        public StringType getNameElement() { 
829          if (this.name == null)
830            if (Configuration.errorOnAutoCreate())
831              throw new Error("Attempt to auto-create ItemsComponent.name");
832            else if (Configuration.doAutoCreate())
833              this.name = new StringType(); // bb
834          return this.name;
835        }
836
837        public boolean hasNameElement() { 
838          return this.name != null && !this.name.isEmpty();
839        }
840
841        public boolean hasName() { 
842          return this.name != null && !this.name.isEmpty();
843        }
844
845        /**
846         * @param value {@link #name} (A short name or tag for the benefit.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
847         */
848        public ItemsComponent setNameElement(StringType value) { 
849          this.name = value;
850          return this;
851        }
852
853        /**
854         * @return A short name or tag for the benefit.
855         */
856        public String getName() { 
857          return this.name == null ? null : this.name.getValue();
858        }
859
860        /**
861         * @param value A short name or tag for the benefit.
862         */
863        public ItemsComponent setName(String value) { 
864          if (Utilities.noString(value))
865            this.name = null;
866          else {
867            if (this.name == null)
868              this.name = new StringType();
869            this.name.setValue(value);
870          }
871          return this;
872        }
873
874        /**
875         * @return {@link #description} (A richer description of the benefit or services covered.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
876         */
877        public StringType getDescriptionElement() { 
878          if (this.description == null)
879            if (Configuration.errorOnAutoCreate())
880              throw new Error("Attempt to auto-create ItemsComponent.description");
881            else if (Configuration.doAutoCreate())
882              this.description = new StringType(); // bb
883          return this.description;
884        }
885
886        public boolean hasDescriptionElement() { 
887          return this.description != null && !this.description.isEmpty();
888        }
889
890        public boolean hasDescription() { 
891          return this.description != null && !this.description.isEmpty();
892        }
893
894        /**
895         * @param value {@link #description} (A richer description of the benefit or services covered.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
896         */
897        public ItemsComponent setDescriptionElement(StringType value) { 
898          this.description = value;
899          return this;
900        }
901
902        /**
903         * @return A richer description of the benefit or services covered.
904         */
905        public String getDescription() { 
906          return this.description == null ? null : this.description.getValue();
907        }
908
909        /**
910         * @param value A richer description of the benefit or services covered.
911         */
912        public ItemsComponent setDescription(String value) { 
913          if (Utilities.noString(value))
914            this.description = null;
915          else {
916            if (this.description == null)
917              this.description = new StringType();
918            this.description.setValue(value);
919          }
920          return this;
921        }
922
923        /**
924         * @return {@link #network} (Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.)
925         */
926        public CodeableConcept getNetwork() { 
927          if (this.network == null)
928            if (Configuration.errorOnAutoCreate())
929              throw new Error("Attempt to auto-create ItemsComponent.network");
930            else if (Configuration.doAutoCreate())
931              this.network = new CodeableConcept(); // cc
932          return this.network;
933        }
934
935        public boolean hasNetwork() { 
936          return this.network != null && !this.network.isEmpty();
937        }
938
939        /**
940         * @param value {@link #network} (Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.)
941         */
942        public ItemsComponent setNetwork(CodeableConcept value) { 
943          this.network = value;
944          return this;
945        }
946
947        /**
948         * @return {@link #unit} (Indicates if the benefits apply to an individual or to the family.)
949         */
950        public CodeableConcept getUnit() { 
951          if (this.unit == null)
952            if (Configuration.errorOnAutoCreate())
953              throw new Error("Attempt to auto-create ItemsComponent.unit");
954            else if (Configuration.doAutoCreate())
955              this.unit = new CodeableConcept(); // cc
956          return this.unit;
957        }
958
959        public boolean hasUnit() { 
960          return this.unit != null && !this.unit.isEmpty();
961        }
962
963        /**
964         * @param value {@link #unit} (Indicates if the benefits apply to an individual or to the family.)
965         */
966        public ItemsComponent setUnit(CodeableConcept value) { 
967          this.unit = value;
968          return this;
969        }
970
971        /**
972         * @return {@link #term} (The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.)
973         */
974        public CodeableConcept getTerm() { 
975          if (this.term == null)
976            if (Configuration.errorOnAutoCreate())
977              throw new Error("Attempt to auto-create ItemsComponent.term");
978            else if (Configuration.doAutoCreate())
979              this.term = new CodeableConcept(); // cc
980          return this.term;
981        }
982
983        public boolean hasTerm() { 
984          return this.term != null && !this.term.isEmpty();
985        }
986
987        /**
988         * @param value {@link #term} (The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.)
989         */
990        public ItemsComponent setTerm(CodeableConcept value) { 
991          this.term = value;
992          return this;
993        }
994
995        /**
996         * @return {@link #benefit} (Benefits used to date.)
997         */
998        public List<BenefitComponent> getBenefit() { 
999          if (this.benefit == null)
1000            this.benefit = new ArrayList<BenefitComponent>();
1001          return this.benefit;
1002        }
1003
1004        /**
1005         * @return Returns a reference to <code>this</code> for easy method chaining
1006         */
1007        public ItemsComponent setBenefit(List<BenefitComponent> theBenefit) { 
1008          this.benefit = theBenefit;
1009          return this;
1010        }
1011
1012        public boolean hasBenefit() { 
1013          if (this.benefit == null)
1014            return false;
1015          for (BenefitComponent item : this.benefit)
1016            if (!item.isEmpty())
1017              return true;
1018          return false;
1019        }
1020
1021        public BenefitComponent addBenefit() { //3
1022          BenefitComponent t = new BenefitComponent();
1023          if (this.benefit == null)
1024            this.benefit = new ArrayList<BenefitComponent>();
1025          this.benefit.add(t);
1026          return t;
1027        }
1028
1029        public ItemsComponent addBenefit(BenefitComponent t) { //3
1030          if (t == null)
1031            return this;
1032          if (this.benefit == null)
1033            this.benefit = new ArrayList<BenefitComponent>();
1034          this.benefit.add(t);
1035          return this;
1036        }
1037
1038        /**
1039         * @return The first repetition of repeating field {@link #benefit}, creating it if it does not already exist {3}
1040         */
1041        public BenefitComponent getBenefitFirstRep() { 
1042          if (getBenefit().isEmpty()) {
1043            addBenefit();
1044          }
1045          return getBenefit().get(0);
1046        }
1047
1048        /**
1049         * @return {@link #authorizationRequired} (A boolean flag indicating whether a preauthorization is required prior to actual service delivery.). This is the underlying object with id, value and extensions. The accessor "getAuthorizationRequired" gives direct access to the value
1050         */
1051        public BooleanType getAuthorizationRequiredElement() { 
1052          if (this.authorizationRequired == null)
1053            if (Configuration.errorOnAutoCreate())
1054              throw new Error("Attempt to auto-create ItemsComponent.authorizationRequired");
1055            else if (Configuration.doAutoCreate())
1056              this.authorizationRequired = new BooleanType(); // bb
1057          return this.authorizationRequired;
1058        }
1059
1060        public boolean hasAuthorizationRequiredElement() { 
1061          return this.authorizationRequired != null && !this.authorizationRequired.isEmpty();
1062        }
1063
1064        public boolean hasAuthorizationRequired() { 
1065          return this.authorizationRequired != null && !this.authorizationRequired.isEmpty();
1066        }
1067
1068        /**
1069         * @param value {@link #authorizationRequired} (A boolean flag indicating whether a preauthorization is required prior to actual service delivery.). This is the underlying object with id, value and extensions. The accessor "getAuthorizationRequired" gives direct access to the value
1070         */
1071        public ItemsComponent setAuthorizationRequiredElement(BooleanType value) { 
1072          this.authorizationRequired = value;
1073          return this;
1074        }
1075
1076        /**
1077         * @return A boolean flag indicating whether a preauthorization is required prior to actual service delivery.
1078         */
1079        public boolean getAuthorizationRequired() { 
1080          return this.authorizationRequired == null || this.authorizationRequired.isEmpty() ? false : this.authorizationRequired.getValue();
1081        }
1082
1083        /**
1084         * @param value A boolean flag indicating whether a preauthorization is required prior to actual service delivery.
1085         */
1086        public ItemsComponent setAuthorizationRequired(boolean value) { 
1087            if (this.authorizationRequired == null)
1088              this.authorizationRequired = new BooleanType();
1089            this.authorizationRequired.setValue(value);
1090          return this;
1091        }
1092
1093        /**
1094         * @return {@link #authorizationSupporting} (Codes or comments regarding information or actions associated with the preauthorization.)
1095         */
1096        public List<CodeableConcept> getAuthorizationSupporting() { 
1097          if (this.authorizationSupporting == null)
1098            this.authorizationSupporting = new ArrayList<CodeableConcept>();
1099          return this.authorizationSupporting;
1100        }
1101
1102        /**
1103         * @return Returns a reference to <code>this</code> for easy method chaining
1104         */
1105        public ItemsComponent setAuthorizationSupporting(List<CodeableConcept> theAuthorizationSupporting) { 
1106          this.authorizationSupporting = theAuthorizationSupporting;
1107          return this;
1108        }
1109
1110        public boolean hasAuthorizationSupporting() { 
1111          if (this.authorizationSupporting == null)
1112            return false;
1113          for (CodeableConcept item : this.authorizationSupporting)
1114            if (!item.isEmpty())
1115              return true;
1116          return false;
1117        }
1118
1119        public CodeableConcept addAuthorizationSupporting() { //3
1120          CodeableConcept t = new CodeableConcept();
1121          if (this.authorizationSupporting == null)
1122            this.authorizationSupporting = new ArrayList<CodeableConcept>();
1123          this.authorizationSupporting.add(t);
1124          return t;
1125        }
1126
1127        public ItemsComponent addAuthorizationSupporting(CodeableConcept t) { //3
1128          if (t == null)
1129            return this;
1130          if (this.authorizationSupporting == null)
1131            this.authorizationSupporting = new ArrayList<CodeableConcept>();
1132          this.authorizationSupporting.add(t);
1133          return this;
1134        }
1135
1136        /**
1137         * @return The first repetition of repeating field {@link #authorizationSupporting}, creating it if it does not already exist {3}
1138         */
1139        public CodeableConcept getAuthorizationSupportingFirstRep() { 
1140          if (getAuthorizationSupporting().isEmpty()) {
1141            addAuthorizationSupporting();
1142          }
1143          return getAuthorizationSupporting().get(0);
1144        }
1145
1146        /**
1147         * @return {@link #authorizationUrl} (A web location for obtaining requirements or descriptive information regarding the preauthorization.). This is the underlying object with id, value and extensions. The accessor "getAuthorizationUrl" gives direct access to the value
1148         */
1149        public UriType getAuthorizationUrlElement() { 
1150          if (this.authorizationUrl == null)
1151            if (Configuration.errorOnAutoCreate())
1152              throw new Error("Attempt to auto-create ItemsComponent.authorizationUrl");
1153            else if (Configuration.doAutoCreate())
1154              this.authorizationUrl = new UriType(); // bb
1155          return this.authorizationUrl;
1156        }
1157
1158        public boolean hasAuthorizationUrlElement() { 
1159          return this.authorizationUrl != null && !this.authorizationUrl.isEmpty();
1160        }
1161
1162        public boolean hasAuthorizationUrl() { 
1163          return this.authorizationUrl != null && !this.authorizationUrl.isEmpty();
1164        }
1165
1166        /**
1167         * @param value {@link #authorizationUrl} (A web location for obtaining requirements or descriptive information regarding the preauthorization.). This is the underlying object with id, value and extensions. The accessor "getAuthorizationUrl" gives direct access to the value
1168         */
1169        public ItemsComponent setAuthorizationUrlElement(UriType value) { 
1170          this.authorizationUrl = value;
1171          return this;
1172        }
1173
1174        /**
1175         * @return A web location for obtaining requirements or descriptive information regarding the preauthorization.
1176         */
1177        public String getAuthorizationUrl() { 
1178          return this.authorizationUrl == null ? null : this.authorizationUrl.getValue();
1179        }
1180
1181        /**
1182         * @param value A web location for obtaining requirements or descriptive information regarding the preauthorization.
1183         */
1184        public ItemsComponent setAuthorizationUrl(String value) { 
1185          if (Utilities.noString(value))
1186            this.authorizationUrl = null;
1187          else {
1188            if (this.authorizationUrl == null)
1189              this.authorizationUrl = new UriType();
1190            this.authorizationUrl.setValue(value);
1191          }
1192          return this;
1193        }
1194
1195        protected void listChildren(List<Property> children) {
1196          super.listChildren(children);
1197          children.add(new Property("category", "CodeableConcept", "Code to identify the general type of benefits under which products and services are provided.", 0, 1, category));
1198          children.add(new Property("productOrService", "CodeableConcept", "This contains the product, service, drug or other billing code for the item.", 0, 1, productOrService));
1199          children.add(new Property("modifier", "CodeableConcept", "Item typification or modifiers codes to convey additional context for the product or service.", 0, java.lang.Integer.MAX_VALUE, modifier));
1200          children.add(new Property("provider", "Reference(Practitioner|PractitionerRole)", "The practitioner who is eligible for the provision of the product or service.", 0, 1, provider));
1201          children.add(new Property("excluded", "boolean", "True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.", 0, 1, excluded));
1202          children.add(new Property("name", "string", "A short name or tag for the benefit.", 0, 1, name));
1203          children.add(new Property("description", "string", "A richer description of the benefit or services covered.", 0, 1, description));
1204          children.add(new Property("network", "CodeableConcept", "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", 0, 1, network));
1205          children.add(new Property("unit", "CodeableConcept", "Indicates if the benefits apply to an individual or to the family.", 0, 1, unit));
1206          children.add(new Property("term", "CodeableConcept", "The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.", 0, 1, term));
1207          children.add(new Property("benefit", "", "Benefits used to date.", 0, java.lang.Integer.MAX_VALUE, benefit));
1208          children.add(new Property("authorizationRequired", "boolean", "A boolean flag indicating whether a preauthorization is required prior to actual service delivery.", 0, 1, authorizationRequired));
1209          children.add(new Property("authorizationSupporting", "CodeableConcept", "Codes or comments regarding information or actions associated with the preauthorization.", 0, java.lang.Integer.MAX_VALUE, authorizationSupporting));
1210          children.add(new Property("authorizationUrl", "uri", "A web location for obtaining requirements or descriptive information regarding the preauthorization.", 0, 1, authorizationUrl));
1211        }
1212
1213        @Override
1214        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1215          switch (_hash) {
1216          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Code to identify the general type of benefits under which products and services are provided.", 0, 1, category);
1217          case 1957227299: /*productOrService*/  return new Property("productOrService", "CodeableConcept", "This contains the product, service, drug or other billing code for the item.", 0, 1, productOrService);
1218          case -615513385: /*modifier*/  return new Property("modifier", "CodeableConcept", "Item typification or modifiers codes to convey additional context for the product or service.", 0, java.lang.Integer.MAX_VALUE, modifier);
1219          case -987494927: /*provider*/  return new Property("provider", "Reference(Practitioner|PractitionerRole)", "The practitioner who is eligible for the provision of the product or service.", 0, 1, provider);
1220          case 1994055114: /*excluded*/  return new Property("excluded", "boolean", "True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.", 0, 1, excluded);
1221          case 3373707: /*name*/  return new Property("name", "string", "A short name or tag for the benefit.", 0, 1, name);
1222          case -1724546052: /*description*/  return new Property("description", "string", "A richer description of the benefit or services covered.", 0, 1, description);
1223          case 1843485230: /*network*/  return new Property("network", "CodeableConcept", "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", 0, 1, network);
1224          case 3594628: /*unit*/  return new Property("unit", "CodeableConcept", "Indicates if the benefits apply to an individual or to the family.", 0, 1, unit);
1225          case 3556460: /*term*/  return new Property("term", "CodeableConcept", "The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.", 0, 1, term);
1226          case -222710633: /*benefit*/  return new Property("benefit", "", "Benefits used to date.", 0, java.lang.Integer.MAX_VALUE, benefit);
1227          case 374204216: /*authorizationRequired*/  return new Property("authorizationRequired", "boolean", "A boolean flag indicating whether a preauthorization is required prior to actual service delivery.", 0, 1, authorizationRequired);
1228          case -1931146484: /*authorizationSupporting*/  return new Property("authorizationSupporting", "CodeableConcept", "Codes or comments regarding information or actions associated with the preauthorization.", 0, java.lang.Integer.MAX_VALUE, authorizationSupporting);
1229          case 1409445430: /*authorizationUrl*/  return new Property("authorizationUrl", "uri", "A web location for obtaining requirements or descriptive information regarding the preauthorization.", 0, 1, authorizationUrl);
1230          default: return super.getNamedProperty(_hash, _name, _checkValid);
1231          }
1232
1233        }
1234
1235      @Override
1236      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1237        switch (hash) {
1238        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
1239        case 1957227299: /*productOrService*/ return this.productOrService == null ? new Base[0] : new Base[] {this.productOrService}; // CodeableConcept
1240        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : this.modifier.toArray(new Base[this.modifier.size()]); // CodeableConcept
1241        case -987494927: /*provider*/ return this.provider == null ? new Base[0] : new Base[] {this.provider}; // Reference
1242        case 1994055114: /*excluded*/ return this.excluded == null ? new Base[0] : new Base[] {this.excluded}; // BooleanType
1243        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
1244        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
1245        case 1843485230: /*network*/ return this.network == null ? new Base[0] : new Base[] {this.network}; // CodeableConcept
1246        case 3594628: /*unit*/ return this.unit == null ? new Base[0] : new Base[] {this.unit}; // CodeableConcept
1247        case 3556460: /*term*/ return this.term == null ? new Base[0] : new Base[] {this.term}; // CodeableConcept
1248        case -222710633: /*benefit*/ return this.benefit == null ? new Base[0] : this.benefit.toArray(new Base[this.benefit.size()]); // BenefitComponent
1249        case 374204216: /*authorizationRequired*/ return this.authorizationRequired == null ? new Base[0] : new Base[] {this.authorizationRequired}; // BooleanType
1250        case -1931146484: /*authorizationSupporting*/ return this.authorizationSupporting == null ? new Base[0] : this.authorizationSupporting.toArray(new Base[this.authorizationSupporting.size()]); // CodeableConcept
1251        case 1409445430: /*authorizationUrl*/ return this.authorizationUrl == null ? new Base[0] : new Base[] {this.authorizationUrl}; // UriType
1252        default: return super.getProperty(hash, name, checkValid);
1253        }
1254
1255      }
1256
1257      @Override
1258      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1259        switch (hash) {
1260        case 50511102: // category
1261          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1262          return value;
1263        case 1957227299: // productOrService
1264          this.productOrService = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1265          return value;
1266        case -615513385: // modifier
1267          this.getModifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1268          return value;
1269        case -987494927: // provider
1270          this.provider = TypeConvertor.castToReference(value); // Reference
1271          return value;
1272        case 1994055114: // excluded
1273          this.excluded = TypeConvertor.castToBoolean(value); // BooleanType
1274          return value;
1275        case 3373707: // name
1276          this.name = TypeConvertor.castToString(value); // StringType
1277          return value;
1278        case -1724546052: // description
1279          this.description = TypeConvertor.castToString(value); // StringType
1280          return value;
1281        case 1843485230: // network
1282          this.network = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1283          return value;
1284        case 3594628: // unit
1285          this.unit = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1286          return value;
1287        case 3556460: // term
1288          this.term = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1289          return value;
1290        case -222710633: // benefit
1291          this.getBenefit().add((BenefitComponent) value); // BenefitComponent
1292          return value;
1293        case 374204216: // authorizationRequired
1294          this.authorizationRequired = TypeConvertor.castToBoolean(value); // BooleanType
1295          return value;
1296        case -1931146484: // authorizationSupporting
1297          this.getAuthorizationSupporting().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1298          return value;
1299        case 1409445430: // authorizationUrl
1300          this.authorizationUrl = TypeConvertor.castToUri(value); // UriType
1301          return value;
1302        default: return super.setProperty(hash, name, value);
1303        }
1304
1305      }
1306
1307      @Override
1308      public Base setProperty(String name, Base value) throws FHIRException {
1309        if (name.equals("category")) {
1310          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1311        } else if (name.equals("productOrService")) {
1312          this.productOrService = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1313        } else if (name.equals("modifier")) {
1314          this.getModifier().add(TypeConvertor.castToCodeableConcept(value));
1315        } else if (name.equals("provider")) {
1316          this.provider = TypeConvertor.castToReference(value); // Reference
1317        } else if (name.equals("excluded")) {
1318          this.excluded = TypeConvertor.castToBoolean(value); // BooleanType
1319        } else if (name.equals("name")) {
1320          this.name = TypeConvertor.castToString(value); // StringType
1321        } else if (name.equals("description")) {
1322          this.description = TypeConvertor.castToString(value); // StringType
1323        } else if (name.equals("network")) {
1324          this.network = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1325        } else if (name.equals("unit")) {
1326          this.unit = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1327        } else if (name.equals("term")) {
1328          this.term = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1329        } else if (name.equals("benefit")) {
1330          this.getBenefit().add((BenefitComponent) value);
1331        } else if (name.equals("authorizationRequired")) {
1332          this.authorizationRequired = TypeConvertor.castToBoolean(value); // BooleanType
1333        } else if (name.equals("authorizationSupporting")) {
1334          this.getAuthorizationSupporting().add(TypeConvertor.castToCodeableConcept(value));
1335        } else if (name.equals("authorizationUrl")) {
1336          this.authorizationUrl = TypeConvertor.castToUri(value); // UriType
1337        } else
1338          return super.setProperty(name, value);
1339        return value;
1340      }
1341
1342      @Override
1343      public Base makeProperty(int hash, String name) throws FHIRException {
1344        switch (hash) {
1345        case 50511102:  return getCategory();
1346        case 1957227299:  return getProductOrService();
1347        case -615513385:  return addModifier(); 
1348        case -987494927:  return getProvider();
1349        case 1994055114:  return getExcludedElement();
1350        case 3373707:  return getNameElement();
1351        case -1724546052:  return getDescriptionElement();
1352        case 1843485230:  return getNetwork();
1353        case 3594628:  return getUnit();
1354        case 3556460:  return getTerm();
1355        case -222710633:  return addBenefit(); 
1356        case 374204216:  return getAuthorizationRequiredElement();
1357        case -1931146484:  return addAuthorizationSupporting(); 
1358        case 1409445430:  return getAuthorizationUrlElement();
1359        default: return super.makeProperty(hash, name);
1360        }
1361
1362      }
1363
1364      @Override
1365      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1366        switch (hash) {
1367        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1368        case 1957227299: /*productOrService*/ return new String[] {"CodeableConcept"};
1369        case -615513385: /*modifier*/ return new String[] {"CodeableConcept"};
1370        case -987494927: /*provider*/ return new String[] {"Reference"};
1371        case 1994055114: /*excluded*/ return new String[] {"boolean"};
1372        case 3373707: /*name*/ return new String[] {"string"};
1373        case -1724546052: /*description*/ return new String[] {"string"};
1374        case 1843485230: /*network*/ return new String[] {"CodeableConcept"};
1375        case 3594628: /*unit*/ return new String[] {"CodeableConcept"};
1376        case 3556460: /*term*/ return new String[] {"CodeableConcept"};
1377        case -222710633: /*benefit*/ return new String[] {};
1378        case 374204216: /*authorizationRequired*/ return new String[] {"boolean"};
1379        case -1931146484: /*authorizationSupporting*/ return new String[] {"CodeableConcept"};
1380        case 1409445430: /*authorizationUrl*/ return new String[] {"uri"};
1381        default: return super.getTypesForProperty(hash, name);
1382        }
1383
1384      }
1385
1386      @Override
1387      public Base addChild(String name) throws FHIRException {
1388        if (name.equals("category")) {
1389          this.category = new CodeableConcept();
1390          return this.category;
1391        }
1392        else if (name.equals("productOrService")) {
1393          this.productOrService = new CodeableConcept();
1394          return this.productOrService;
1395        }
1396        else if (name.equals("modifier")) {
1397          return addModifier();
1398        }
1399        else if (name.equals("provider")) {
1400          this.provider = new Reference();
1401          return this.provider;
1402        }
1403        else if (name.equals("excluded")) {
1404          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.insurance.item.excluded");
1405        }
1406        else if (name.equals("name")) {
1407          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.insurance.item.name");
1408        }
1409        else if (name.equals("description")) {
1410          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.insurance.item.description");
1411        }
1412        else if (name.equals("network")) {
1413          this.network = new CodeableConcept();
1414          return this.network;
1415        }
1416        else if (name.equals("unit")) {
1417          this.unit = new CodeableConcept();
1418          return this.unit;
1419        }
1420        else if (name.equals("term")) {
1421          this.term = new CodeableConcept();
1422          return this.term;
1423        }
1424        else if (name.equals("benefit")) {
1425          return addBenefit();
1426        }
1427        else if (name.equals("authorizationRequired")) {
1428          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.insurance.item.authorizationRequired");
1429        }
1430        else if (name.equals("authorizationSupporting")) {
1431          return addAuthorizationSupporting();
1432        }
1433        else if (name.equals("authorizationUrl")) {
1434          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.insurance.item.authorizationUrl");
1435        }
1436        else
1437          return super.addChild(name);
1438      }
1439
1440      public ItemsComponent copy() {
1441        ItemsComponent dst = new ItemsComponent();
1442        copyValues(dst);
1443        return dst;
1444      }
1445
1446      public void copyValues(ItemsComponent dst) {
1447        super.copyValues(dst);
1448        dst.category = category == null ? null : category.copy();
1449        dst.productOrService = productOrService == null ? null : productOrService.copy();
1450        if (modifier != null) {
1451          dst.modifier = new ArrayList<CodeableConcept>();
1452          for (CodeableConcept i : modifier)
1453            dst.modifier.add(i.copy());
1454        };
1455        dst.provider = provider == null ? null : provider.copy();
1456        dst.excluded = excluded == null ? null : excluded.copy();
1457        dst.name = name == null ? null : name.copy();
1458        dst.description = description == null ? null : description.copy();
1459        dst.network = network == null ? null : network.copy();
1460        dst.unit = unit == null ? null : unit.copy();
1461        dst.term = term == null ? null : term.copy();
1462        if (benefit != null) {
1463          dst.benefit = new ArrayList<BenefitComponent>();
1464          for (BenefitComponent i : benefit)
1465            dst.benefit.add(i.copy());
1466        };
1467        dst.authorizationRequired = authorizationRequired == null ? null : authorizationRequired.copy();
1468        if (authorizationSupporting != null) {
1469          dst.authorizationSupporting = new ArrayList<CodeableConcept>();
1470          for (CodeableConcept i : authorizationSupporting)
1471            dst.authorizationSupporting.add(i.copy());
1472        };
1473        dst.authorizationUrl = authorizationUrl == null ? null : authorizationUrl.copy();
1474      }
1475
1476      @Override
1477      public boolean equalsDeep(Base other_) {
1478        if (!super.equalsDeep(other_))
1479          return false;
1480        if (!(other_ instanceof ItemsComponent))
1481          return false;
1482        ItemsComponent o = (ItemsComponent) other_;
1483        return compareDeep(category, o.category, true) && compareDeep(productOrService, o.productOrService, true)
1484           && compareDeep(modifier, o.modifier, true) && compareDeep(provider, o.provider, true) && compareDeep(excluded, o.excluded, true)
1485           && compareDeep(name, o.name, true) && compareDeep(description, o.description, true) && compareDeep(network, o.network, true)
1486           && compareDeep(unit, o.unit, true) && compareDeep(term, o.term, true) && compareDeep(benefit, o.benefit, true)
1487           && compareDeep(authorizationRequired, o.authorizationRequired, true) && compareDeep(authorizationSupporting, o.authorizationSupporting, true)
1488           && compareDeep(authorizationUrl, o.authorizationUrl, true);
1489      }
1490
1491      @Override
1492      public boolean equalsShallow(Base other_) {
1493        if (!super.equalsShallow(other_))
1494          return false;
1495        if (!(other_ instanceof ItemsComponent))
1496          return false;
1497        ItemsComponent o = (ItemsComponent) other_;
1498        return compareValues(excluded, o.excluded, true) && compareValues(name, o.name, true) && compareValues(description, o.description, true)
1499           && compareValues(authorizationRequired, o.authorizationRequired, true) && compareValues(authorizationUrl, o.authorizationUrl, true)
1500          ;
1501      }
1502
1503      public boolean isEmpty() {
1504        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(category, productOrService
1505          , modifier, provider, excluded, name, description, network, unit, term, benefit
1506          , authorizationRequired, authorizationSupporting, authorizationUrl);
1507      }
1508
1509  public String fhirType() {
1510    return "CoverageEligibilityResponse.insurance.item";
1511
1512  }
1513
1514  }
1515
1516    @Block()
1517    public static class BenefitComponent extends BackboneElement implements IBaseBackboneElement {
1518        /**
1519         * Classification of benefit being provided.
1520         */
1521        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1522        @Description(shortDefinition="Benefit classification", formalDefinition="Classification of benefit being provided." )
1523        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-type")
1524        protected CodeableConcept type;
1525
1526        /**
1527         * The quantity of the benefit which is permitted under the coverage.
1528         */
1529        @Child(name = "allowed", type = {UnsignedIntType.class, StringType.class, Money.class}, order=2, min=0, max=1, modifier=false, summary=false)
1530        @Description(shortDefinition="Benefits allowed", formalDefinition="The quantity of the benefit which is permitted under the coverage." )
1531        protected DataType allowed;
1532
1533        /**
1534         * The quantity of the benefit which have been consumed to date.
1535         */
1536        @Child(name = "used", type = {UnsignedIntType.class, StringType.class, Money.class}, order=3, min=0, max=1, modifier=false, summary=false)
1537        @Description(shortDefinition="Benefits used", formalDefinition="The quantity of the benefit which have been consumed to date." )
1538        protected DataType used;
1539
1540        private static final long serialVersionUID = 1900247614L;
1541
1542    /**
1543     * Constructor
1544     */
1545      public BenefitComponent() {
1546        super();
1547      }
1548
1549    /**
1550     * Constructor
1551     */
1552      public BenefitComponent(CodeableConcept type) {
1553        super();
1554        this.setType(type);
1555      }
1556
1557        /**
1558         * @return {@link #type} (Classification of benefit being provided.)
1559         */
1560        public CodeableConcept getType() { 
1561          if (this.type == null)
1562            if (Configuration.errorOnAutoCreate())
1563              throw new Error("Attempt to auto-create BenefitComponent.type");
1564            else if (Configuration.doAutoCreate())
1565              this.type = new CodeableConcept(); // cc
1566          return this.type;
1567        }
1568
1569        public boolean hasType() { 
1570          return this.type != null && !this.type.isEmpty();
1571        }
1572
1573        /**
1574         * @param value {@link #type} (Classification of benefit being provided.)
1575         */
1576        public BenefitComponent setType(CodeableConcept value) { 
1577          this.type = value;
1578          return this;
1579        }
1580
1581        /**
1582         * @return {@link #allowed} (The quantity of the benefit which is permitted under the coverage.)
1583         */
1584        public DataType getAllowed() { 
1585          return this.allowed;
1586        }
1587
1588        /**
1589         * @return {@link #allowed} (The quantity of the benefit which is permitted under the coverage.)
1590         */
1591        public UnsignedIntType getAllowedUnsignedIntType() throws FHIRException { 
1592          if (this.allowed == null)
1593            this.allowed = new UnsignedIntType();
1594          if (!(this.allowed instanceof UnsignedIntType))
1595            throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.allowed.getClass().getName()+" was encountered");
1596          return (UnsignedIntType) this.allowed;
1597        }
1598
1599        public boolean hasAllowedUnsignedIntType() { 
1600          return this != null && this.allowed instanceof UnsignedIntType;
1601        }
1602
1603        /**
1604         * @return {@link #allowed} (The quantity of the benefit which is permitted under the coverage.)
1605         */
1606        public StringType getAllowedStringType() throws FHIRException { 
1607          if (this.allowed == null)
1608            this.allowed = new StringType();
1609          if (!(this.allowed instanceof StringType))
1610            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.allowed.getClass().getName()+" was encountered");
1611          return (StringType) this.allowed;
1612        }
1613
1614        public boolean hasAllowedStringType() { 
1615          return this != null && this.allowed instanceof StringType;
1616        }
1617
1618        /**
1619         * @return {@link #allowed} (The quantity of the benefit which is permitted under the coverage.)
1620         */
1621        public Money getAllowedMoney() throws FHIRException { 
1622          if (this.allowed == null)
1623            this.allowed = new Money();
1624          if (!(this.allowed instanceof Money))
1625            throw new FHIRException("Type mismatch: the type Money was expected, but "+this.allowed.getClass().getName()+" was encountered");
1626          return (Money) this.allowed;
1627        }
1628
1629        public boolean hasAllowedMoney() { 
1630          return this != null && this.allowed instanceof Money;
1631        }
1632
1633        public boolean hasAllowed() { 
1634          return this.allowed != null && !this.allowed.isEmpty();
1635        }
1636
1637        /**
1638         * @param value {@link #allowed} (The quantity of the benefit which is permitted under the coverage.)
1639         */
1640        public BenefitComponent setAllowed(DataType value) { 
1641          if (value != null && !(value instanceof UnsignedIntType || value instanceof StringType || value instanceof Money))
1642            throw new Error("Not the right type for CoverageEligibilityResponse.insurance.item.benefit.allowed[x]: "+value.fhirType());
1643          this.allowed = value;
1644          return this;
1645        }
1646
1647        /**
1648         * @return {@link #used} (The quantity of the benefit which have been consumed to date.)
1649         */
1650        public DataType getUsed() { 
1651          return this.used;
1652        }
1653
1654        /**
1655         * @return {@link #used} (The quantity of the benefit which have been consumed to date.)
1656         */
1657        public UnsignedIntType getUsedUnsignedIntType() throws FHIRException { 
1658          if (this.used == null)
1659            this.used = new UnsignedIntType();
1660          if (!(this.used instanceof UnsignedIntType))
1661            throw new FHIRException("Type mismatch: the type UnsignedIntType was expected, but "+this.used.getClass().getName()+" was encountered");
1662          return (UnsignedIntType) this.used;
1663        }
1664
1665        public boolean hasUsedUnsignedIntType() { 
1666          return this != null && this.used instanceof UnsignedIntType;
1667        }
1668
1669        /**
1670         * @return {@link #used} (The quantity of the benefit which have been consumed to date.)
1671         */
1672        public StringType getUsedStringType() throws FHIRException { 
1673          if (this.used == null)
1674            this.used = new StringType();
1675          if (!(this.used instanceof StringType))
1676            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.used.getClass().getName()+" was encountered");
1677          return (StringType) this.used;
1678        }
1679
1680        public boolean hasUsedStringType() { 
1681          return this != null && this.used instanceof StringType;
1682        }
1683
1684        /**
1685         * @return {@link #used} (The quantity of the benefit which have been consumed to date.)
1686         */
1687        public Money getUsedMoney() throws FHIRException { 
1688          if (this.used == null)
1689            this.used = new Money();
1690          if (!(this.used instanceof Money))
1691            throw new FHIRException("Type mismatch: the type Money was expected, but "+this.used.getClass().getName()+" was encountered");
1692          return (Money) this.used;
1693        }
1694
1695        public boolean hasUsedMoney() { 
1696          return this != null && this.used instanceof Money;
1697        }
1698
1699        public boolean hasUsed() { 
1700          return this.used != null && !this.used.isEmpty();
1701        }
1702
1703        /**
1704         * @param value {@link #used} (The quantity of the benefit which have been consumed to date.)
1705         */
1706        public BenefitComponent setUsed(DataType value) { 
1707          if (value != null && !(value instanceof UnsignedIntType || value instanceof StringType || value instanceof Money))
1708            throw new Error("Not the right type for CoverageEligibilityResponse.insurance.item.benefit.used[x]: "+value.fhirType());
1709          this.used = value;
1710          return this;
1711        }
1712
1713        protected void listChildren(List<Property> children) {
1714          super.listChildren(children);
1715          children.add(new Property("type", "CodeableConcept", "Classification of benefit being provided.", 0, 1, type));
1716          children.add(new Property("allowed[x]", "unsignedInt|string|Money", "The quantity of the benefit which is permitted under the coverage.", 0, 1, allowed));
1717          children.add(new Property("used[x]", "unsignedInt|string|Money", "The quantity of the benefit which have been consumed to date.", 0, 1, used));
1718        }
1719
1720        @Override
1721        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1722          switch (_hash) {
1723          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Classification of benefit being provided.", 0, 1, type);
1724          case -1336663592: /*allowed[x]*/  return new Property("allowed[x]", "unsignedInt|string|Money", "The quantity of the benefit which is permitted under the coverage.", 0, 1, allowed);
1725          case -911343192: /*allowed*/  return new Property("allowed[x]", "unsignedInt|string|Money", "The quantity of the benefit which is permitted under the coverage.", 0, 1, allowed);
1726          case 1668802034: /*allowedUnsignedInt*/  return new Property("allowed[x]", "unsignedInt", "The quantity of the benefit which is permitted under the coverage.", 0, 1, allowed);
1727          case -2135265319: /*allowedString*/  return new Property("allowed[x]", "string", "The quantity of the benefit which is permitted under the coverage.", 0, 1, allowed);
1728          case -351668232: /*allowedMoney*/  return new Property("allowed[x]", "Money", "The quantity of the benefit which is permitted under the coverage.", 0, 1, allowed);
1729          case -147553373: /*used[x]*/  return new Property("used[x]", "unsignedInt|string|Money", "The quantity of the benefit which have been consumed to date.", 0, 1, used);
1730          case 3599293: /*used*/  return new Property("used[x]", "unsignedInt|string|Money", "The quantity of the benefit which have been consumed to date.", 0, 1, used);
1731          case 1252740285: /*usedUnsignedInt*/  return new Property("used[x]", "unsignedInt", "The quantity of the benefit which have been consumed to date.", 0, 1, used);
1732          case 2051978798: /*usedString*/  return new Property("used[x]", "string", "The quantity of the benefit which have been consumed to date.", 0, 1, used);
1733          case -78048509: /*usedMoney*/  return new Property("used[x]", "Money", "The quantity of the benefit which have been consumed to date.", 0, 1, used);
1734          default: return super.getNamedProperty(_hash, _name, _checkValid);
1735          }
1736
1737        }
1738
1739      @Override
1740      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1741        switch (hash) {
1742        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1743        case -911343192: /*allowed*/ return this.allowed == null ? new Base[0] : new Base[] {this.allowed}; // DataType
1744        case 3599293: /*used*/ return this.used == null ? new Base[0] : new Base[] {this.used}; // DataType
1745        default: return super.getProperty(hash, name, checkValid);
1746        }
1747
1748      }
1749
1750      @Override
1751      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1752        switch (hash) {
1753        case 3575610: // type
1754          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1755          return value;
1756        case -911343192: // allowed
1757          this.allowed = TypeConvertor.castToType(value); // DataType
1758          return value;
1759        case 3599293: // used
1760          this.used = TypeConvertor.castToType(value); // DataType
1761          return value;
1762        default: return super.setProperty(hash, name, value);
1763        }
1764
1765      }
1766
1767      @Override
1768      public Base setProperty(String name, Base value) throws FHIRException {
1769        if (name.equals("type")) {
1770          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1771        } else if (name.equals("allowed[x]")) {
1772          this.allowed = TypeConvertor.castToType(value); // DataType
1773        } else if (name.equals("used[x]")) {
1774          this.used = TypeConvertor.castToType(value); // DataType
1775        } else
1776          return super.setProperty(name, value);
1777        return value;
1778      }
1779
1780      @Override
1781      public Base makeProperty(int hash, String name) throws FHIRException {
1782        switch (hash) {
1783        case 3575610:  return getType();
1784        case -1336663592:  return getAllowed();
1785        case -911343192:  return getAllowed();
1786        case -147553373:  return getUsed();
1787        case 3599293:  return getUsed();
1788        default: return super.makeProperty(hash, name);
1789        }
1790
1791      }
1792
1793      @Override
1794      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1795        switch (hash) {
1796        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1797        case -911343192: /*allowed*/ return new String[] {"unsignedInt", "string", "Money"};
1798        case 3599293: /*used*/ return new String[] {"unsignedInt", "string", "Money"};
1799        default: return super.getTypesForProperty(hash, name);
1800        }
1801
1802      }
1803
1804      @Override
1805      public Base addChild(String name) throws FHIRException {
1806        if (name.equals("type")) {
1807          this.type = new CodeableConcept();
1808          return this.type;
1809        }
1810        else if (name.equals("allowedUnsignedInt")) {
1811          this.allowed = new UnsignedIntType();
1812          return this.allowed;
1813        }
1814        else if (name.equals("allowedString")) {
1815          this.allowed = new StringType();
1816          return this.allowed;
1817        }
1818        else if (name.equals("allowedMoney")) {
1819          this.allowed = new Money();
1820          return this.allowed;
1821        }
1822        else if (name.equals("usedUnsignedInt")) {
1823          this.used = new UnsignedIntType();
1824          return this.used;
1825        }
1826        else if (name.equals("usedString")) {
1827          this.used = new StringType();
1828          return this.used;
1829        }
1830        else if (name.equals("usedMoney")) {
1831          this.used = new Money();
1832          return this.used;
1833        }
1834        else
1835          return super.addChild(name);
1836      }
1837
1838      public BenefitComponent copy() {
1839        BenefitComponent dst = new BenefitComponent();
1840        copyValues(dst);
1841        return dst;
1842      }
1843
1844      public void copyValues(BenefitComponent dst) {
1845        super.copyValues(dst);
1846        dst.type = type == null ? null : type.copy();
1847        dst.allowed = allowed == null ? null : allowed.copy();
1848        dst.used = used == null ? null : used.copy();
1849      }
1850
1851      @Override
1852      public boolean equalsDeep(Base other_) {
1853        if (!super.equalsDeep(other_))
1854          return false;
1855        if (!(other_ instanceof BenefitComponent))
1856          return false;
1857        BenefitComponent o = (BenefitComponent) other_;
1858        return compareDeep(type, o.type, true) && compareDeep(allowed, o.allowed, true) && compareDeep(used, o.used, true)
1859          ;
1860      }
1861
1862      @Override
1863      public boolean equalsShallow(Base other_) {
1864        if (!super.equalsShallow(other_))
1865          return false;
1866        if (!(other_ instanceof BenefitComponent))
1867          return false;
1868        BenefitComponent o = (BenefitComponent) other_;
1869        return true;
1870      }
1871
1872      public boolean isEmpty() {
1873        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, allowed, used);
1874      }
1875
1876  public String fhirType() {
1877    return "CoverageEligibilityResponse.insurance.item.benefit";
1878
1879  }
1880
1881  }
1882
1883    @Block()
1884    public static class ErrorsComponent extends BackboneElement implements IBaseBackboneElement {
1885        /**
1886         * An error code,from a specified code system, which details why the eligibility check could not be performed.
1887         */
1888        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
1889        @Description(shortDefinition="Error code detailing processing issues", formalDefinition="An error code,from a specified code system, which details why the eligibility check could not be performed." )
1890        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/adjudication-error")
1891        protected CodeableConcept code;
1892
1893        private static final long serialVersionUID = -1048343046L;
1894
1895    /**
1896     * Constructor
1897     */
1898      public ErrorsComponent() {
1899        super();
1900      }
1901
1902    /**
1903     * Constructor
1904     */
1905      public ErrorsComponent(CodeableConcept code) {
1906        super();
1907        this.setCode(code);
1908      }
1909
1910        /**
1911         * @return {@link #code} (An error code,from a specified code system, which details why the eligibility check could not be performed.)
1912         */
1913        public CodeableConcept getCode() { 
1914          if (this.code == null)
1915            if (Configuration.errorOnAutoCreate())
1916              throw new Error("Attempt to auto-create ErrorsComponent.code");
1917            else if (Configuration.doAutoCreate())
1918              this.code = new CodeableConcept(); // cc
1919          return this.code;
1920        }
1921
1922        public boolean hasCode() { 
1923          return this.code != null && !this.code.isEmpty();
1924        }
1925
1926        /**
1927         * @param value {@link #code} (An error code,from a specified code system, which details why the eligibility check could not be performed.)
1928         */
1929        public ErrorsComponent setCode(CodeableConcept value) { 
1930          this.code = value;
1931          return this;
1932        }
1933
1934        protected void listChildren(List<Property> children) {
1935          super.listChildren(children);
1936          children.add(new Property("code", "CodeableConcept", "An error code,from a specified code system, which details why the eligibility check could not be performed.", 0, 1, code));
1937        }
1938
1939        @Override
1940        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1941          switch (_hash) {
1942          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "An error code,from a specified code system, which details why the eligibility check could not be performed.", 0, 1, code);
1943          default: return super.getNamedProperty(_hash, _name, _checkValid);
1944          }
1945
1946        }
1947
1948      @Override
1949      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1950        switch (hash) {
1951        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1952        default: return super.getProperty(hash, name, checkValid);
1953        }
1954
1955      }
1956
1957      @Override
1958      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1959        switch (hash) {
1960        case 3059181: // code
1961          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1962          return value;
1963        default: return super.setProperty(hash, name, value);
1964        }
1965
1966      }
1967
1968      @Override
1969      public Base setProperty(String name, Base value) throws FHIRException {
1970        if (name.equals("code")) {
1971          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1972        } else
1973          return super.setProperty(name, value);
1974        return value;
1975      }
1976
1977      @Override
1978      public Base makeProperty(int hash, String name) throws FHIRException {
1979        switch (hash) {
1980        case 3059181:  return getCode();
1981        default: return super.makeProperty(hash, name);
1982        }
1983
1984      }
1985
1986      @Override
1987      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1988        switch (hash) {
1989        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1990        default: return super.getTypesForProperty(hash, name);
1991        }
1992
1993      }
1994
1995      @Override
1996      public Base addChild(String name) throws FHIRException {
1997        if (name.equals("code")) {
1998          this.code = new CodeableConcept();
1999          return this.code;
2000        }
2001        else
2002          return super.addChild(name);
2003      }
2004
2005      public ErrorsComponent copy() {
2006        ErrorsComponent dst = new ErrorsComponent();
2007        copyValues(dst);
2008        return dst;
2009      }
2010
2011      public void copyValues(ErrorsComponent dst) {
2012        super.copyValues(dst);
2013        dst.code = code == null ? null : code.copy();
2014      }
2015
2016      @Override
2017      public boolean equalsDeep(Base other_) {
2018        if (!super.equalsDeep(other_))
2019          return false;
2020        if (!(other_ instanceof ErrorsComponent))
2021          return false;
2022        ErrorsComponent o = (ErrorsComponent) other_;
2023        return compareDeep(code, o.code, true);
2024      }
2025
2026      @Override
2027      public boolean equalsShallow(Base other_) {
2028        if (!super.equalsShallow(other_))
2029          return false;
2030        if (!(other_ instanceof ErrorsComponent))
2031          return false;
2032        ErrorsComponent o = (ErrorsComponent) other_;
2033        return true;
2034      }
2035
2036      public boolean isEmpty() {
2037        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code);
2038      }
2039
2040  public String fhirType() {
2041    return "CoverageEligibilityResponse.error";
2042
2043  }
2044
2045  }
2046
2047    /**
2048     * A unique identifier assigned to this coverage eligiblity request.
2049     */
2050    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2051    @Description(shortDefinition="Business Identifier for coverage eligiblity request", formalDefinition="A unique identifier assigned to this coverage eligiblity request." )
2052    protected List<Identifier> identifier;
2053
2054    /**
2055     * The status of the resource instance.
2056     */
2057    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
2058    @Description(shortDefinition="active | cancelled | draft | entered-in-error", formalDefinition="The status of the resource instance." )
2059    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fm-status")
2060    protected Enumeration<FinancialResourceStatusCodes> status;
2061
2062    /**
2063     * Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.
2064     */
2065    @Child(name = "purpose", type = {CodeType.class}, order=2, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2066    @Description(shortDefinition="auth-requirements | benefits | discovery | validation", formalDefinition="Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified." )
2067    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/eligibilityresponse-purpose")
2068    protected List<Enumeration<EligibilityResponsePurpose>> purpose;
2069
2070    /**
2071     * The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.
2072     */
2073    @Child(name = "patient", type = {Patient.class}, order=3, min=1, max=1, modifier=false, summary=true)
2074    @Description(shortDefinition="Intended recipient of products and services", formalDefinition="The party who is the beneficiary of the supplied coverage and for whom eligibility is sought." )
2075    protected Reference patient;
2076
2077    /**
2078     * The date or dates when the enclosed suite of services were performed or completed.
2079     */
2080    @Child(name = "serviced", type = {DateType.class, Period.class}, order=4, min=0, max=1, modifier=false, summary=false)
2081    @Description(shortDefinition="Estimated date or dates of service", formalDefinition="The date or dates when the enclosed suite of services were performed or completed." )
2082    protected DataType serviced;
2083
2084    /**
2085     * The date this resource was created.
2086     */
2087    @Child(name = "created", type = {DateTimeType.class}, order=5, min=1, max=1, modifier=false, summary=true)
2088    @Description(shortDefinition="Response creation date", formalDefinition="The date this resource was created." )
2089    protected DateTimeType created;
2090
2091    /**
2092     * The provider which is responsible for the request.
2093     */
2094    @Child(name = "requestor", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=6, min=0, max=1, modifier=false, summary=false)
2095    @Description(shortDefinition="Party responsible for the request", formalDefinition="The provider which is responsible for the request." )
2096    protected Reference requestor;
2097
2098    /**
2099     * Reference to the original request resource.
2100     */
2101    @Child(name = "request", type = {CoverageEligibilityRequest.class}, order=7, min=1, max=1, modifier=false, summary=true)
2102    @Description(shortDefinition="Eligibility request reference", formalDefinition="Reference to the original request resource." )
2103    protected Reference request;
2104
2105    /**
2106     * The outcome of the request processing.
2107     */
2108    @Child(name = "outcome", type = {CodeType.class}, order=8, min=1, max=1, modifier=false, summary=true)
2109    @Description(shortDefinition="queued | complete | error | partial", formalDefinition="The outcome of the request processing." )
2110    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/remittance-outcome")
2111    protected Enumeration<RemittanceOutcome> outcome;
2112
2113    /**
2114     * A human readable description of the status of the adjudication.
2115     */
2116    @Child(name = "disposition", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=false)
2117    @Description(shortDefinition="Disposition Message", formalDefinition="A human readable description of the status of the adjudication." )
2118    protected StringType disposition;
2119
2120    /**
2121     * The Insurer who issued the coverage in question and is the author of the response.
2122     */
2123    @Child(name = "insurer", type = {Organization.class}, order=10, min=1, max=1, modifier=false, summary=true)
2124    @Description(shortDefinition="Coverage issuer", formalDefinition="The Insurer who issued the coverage in question and is the author of the response." )
2125    protected Reference insurer;
2126
2127    /**
2128     * Financial instruments for reimbursement for the health care products and services.
2129     */
2130    @Child(name = "insurance", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2131    @Description(shortDefinition="Patient insurance information", formalDefinition="Financial instruments for reimbursement for the health care products and services." )
2132    protected List<InsuranceComponent> insurance;
2133
2134    /**
2135     * A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.
2136     */
2137    @Child(name = "preAuthRef", type = {StringType.class}, order=12, min=0, max=1, modifier=false, summary=false)
2138    @Description(shortDefinition="Preauthorization reference", formalDefinition="A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred." )
2139    protected StringType preAuthRef;
2140
2141    /**
2142     * A code for the form to be used for printing the content.
2143     */
2144    @Child(name = "form", type = {CodeableConcept.class}, order=13, min=0, max=1, modifier=false, summary=false)
2145    @Description(shortDefinition="Printed form identifier", formalDefinition="A code for the form to be used for printing the content." )
2146    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/forms")
2147    protected CodeableConcept form;
2148
2149    /**
2150     * Errors encountered during the processing of the request.
2151     */
2152    @Child(name = "error", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2153    @Description(shortDefinition="Processing errors", formalDefinition="Errors encountered during the processing of the request." )
2154    protected List<ErrorsComponent> error;
2155
2156    private static final long serialVersionUID = -1997519247L;
2157
2158  /**
2159   * Constructor
2160   */
2161    public CoverageEligibilityResponse() {
2162      super();
2163    }
2164
2165  /**
2166   * Constructor
2167   */
2168    public CoverageEligibilityResponse(FinancialResourceStatusCodes status, EligibilityResponsePurpose purpose, Reference patient, Date created, Reference request, RemittanceOutcome outcome, Reference insurer) {
2169      super();
2170      this.setStatus(status);
2171      this.addPurpose(purpose);
2172      this.setPatient(patient);
2173      this.setCreated(created);
2174      this.setRequest(request);
2175      this.setOutcome(outcome);
2176      this.setInsurer(insurer);
2177    }
2178
2179    /**
2180     * @return {@link #identifier} (A unique identifier assigned to this coverage eligiblity request.)
2181     */
2182    public List<Identifier> getIdentifier() { 
2183      if (this.identifier == null)
2184        this.identifier = new ArrayList<Identifier>();
2185      return this.identifier;
2186    }
2187
2188    /**
2189     * @return Returns a reference to <code>this</code> for easy method chaining
2190     */
2191    public CoverageEligibilityResponse setIdentifier(List<Identifier> theIdentifier) { 
2192      this.identifier = theIdentifier;
2193      return this;
2194    }
2195
2196    public boolean hasIdentifier() { 
2197      if (this.identifier == null)
2198        return false;
2199      for (Identifier item : this.identifier)
2200        if (!item.isEmpty())
2201          return true;
2202      return false;
2203    }
2204
2205    public Identifier addIdentifier() { //3
2206      Identifier t = new Identifier();
2207      if (this.identifier == null)
2208        this.identifier = new ArrayList<Identifier>();
2209      this.identifier.add(t);
2210      return t;
2211    }
2212
2213    public CoverageEligibilityResponse addIdentifier(Identifier t) { //3
2214      if (t == null)
2215        return this;
2216      if (this.identifier == null)
2217        this.identifier = new ArrayList<Identifier>();
2218      this.identifier.add(t);
2219      return this;
2220    }
2221
2222    /**
2223     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
2224     */
2225    public Identifier getIdentifierFirstRep() { 
2226      if (getIdentifier().isEmpty()) {
2227        addIdentifier();
2228      }
2229      return getIdentifier().get(0);
2230    }
2231
2232    /**
2233     * @return {@link #status} (The status of the resource instance.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2234     */
2235    public Enumeration<FinancialResourceStatusCodes> getStatusElement() { 
2236      if (this.status == null)
2237        if (Configuration.errorOnAutoCreate())
2238          throw new Error("Attempt to auto-create CoverageEligibilityResponse.status");
2239        else if (Configuration.doAutoCreate())
2240          this.status = new Enumeration<FinancialResourceStatusCodes>(new FinancialResourceStatusCodesEnumFactory()); // bb
2241      return this.status;
2242    }
2243
2244    public boolean hasStatusElement() { 
2245      return this.status != null && !this.status.isEmpty();
2246    }
2247
2248    public boolean hasStatus() { 
2249      return this.status != null && !this.status.isEmpty();
2250    }
2251
2252    /**
2253     * @param value {@link #status} (The status of the resource instance.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2254     */
2255    public CoverageEligibilityResponse setStatusElement(Enumeration<FinancialResourceStatusCodes> value) { 
2256      this.status = value;
2257      return this;
2258    }
2259
2260    /**
2261     * @return The status of the resource instance.
2262     */
2263    public FinancialResourceStatusCodes getStatus() { 
2264      return this.status == null ? null : this.status.getValue();
2265    }
2266
2267    /**
2268     * @param value The status of the resource instance.
2269     */
2270    public CoverageEligibilityResponse setStatus(FinancialResourceStatusCodes value) { 
2271        if (this.status == null)
2272          this.status = new Enumeration<FinancialResourceStatusCodes>(new FinancialResourceStatusCodesEnumFactory());
2273        this.status.setValue(value);
2274      return this;
2275    }
2276
2277    /**
2278     * @return {@link #purpose} (Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.)
2279     */
2280    public List<Enumeration<EligibilityResponsePurpose>> getPurpose() { 
2281      if (this.purpose == null)
2282        this.purpose = new ArrayList<Enumeration<EligibilityResponsePurpose>>();
2283      return this.purpose;
2284    }
2285
2286    /**
2287     * @return Returns a reference to <code>this</code> for easy method chaining
2288     */
2289    public CoverageEligibilityResponse setPurpose(List<Enumeration<EligibilityResponsePurpose>> thePurpose) { 
2290      this.purpose = thePurpose;
2291      return this;
2292    }
2293
2294    public boolean hasPurpose() { 
2295      if (this.purpose == null)
2296        return false;
2297      for (Enumeration<EligibilityResponsePurpose> item : this.purpose)
2298        if (!item.isEmpty())
2299          return true;
2300      return false;
2301    }
2302
2303    /**
2304     * @return {@link #purpose} (Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.)
2305     */
2306    public Enumeration<EligibilityResponsePurpose> addPurposeElement() {//2 
2307      Enumeration<EligibilityResponsePurpose> t = new Enumeration<EligibilityResponsePurpose>(new EligibilityResponsePurposeEnumFactory());
2308      if (this.purpose == null)
2309        this.purpose = new ArrayList<Enumeration<EligibilityResponsePurpose>>();
2310      this.purpose.add(t);
2311      return t;
2312    }
2313
2314    /**
2315     * @param value {@link #purpose} (Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.)
2316     */
2317    public CoverageEligibilityResponse addPurpose(EligibilityResponsePurpose value) { //1
2318      Enumeration<EligibilityResponsePurpose> t = new Enumeration<EligibilityResponsePurpose>(new EligibilityResponsePurposeEnumFactory());
2319      t.setValue(value);
2320      if (this.purpose == null)
2321        this.purpose = new ArrayList<Enumeration<EligibilityResponsePurpose>>();
2322      this.purpose.add(t);
2323      return this;
2324    }
2325
2326    /**
2327     * @param value {@link #purpose} (Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.)
2328     */
2329    public boolean hasPurpose(EligibilityResponsePurpose value) { 
2330      if (this.purpose == null)
2331        return false;
2332      for (Enumeration<EligibilityResponsePurpose> v : this.purpose)
2333        if (v.getValue().equals(value)) // code
2334          return true;
2335      return false;
2336    }
2337
2338    /**
2339     * @return {@link #patient} (The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.)
2340     */
2341    public Reference getPatient() { 
2342      if (this.patient == null)
2343        if (Configuration.errorOnAutoCreate())
2344          throw new Error("Attempt to auto-create CoverageEligibilityResponse.patient");
2345        else if (Configuration.doAutoCreate())
2346          this.patient = new Reference(); // cc
2347      return this.patient;
2348    }
2349
2350    public boolean hasPatient() { 
2351      return this.patient != null && !this.patient.isEmpty();
2352    }
2353
2354    /**
2355     * @param value {@link #patient} (The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.)
2356     */
2357    public CoverageEligibilityResponse setPatient(Reference value) { 
2358      this.patient = value;
2359      return this;
2360    }
2361
2362    /**
2363     * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2364     */
2365    public DataType getServiced() { 
2366      return this.serviced;
2367    }
2368
2369    /**
2370     * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2371     */
2372    public DateType getServicedDateType() throws FHIRException { 
2373      if (this.serviced == null)
2374        this.serviced = new DateType();
2375      if (!(this.serviced instanceof DateType))
2376        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.serviced.getClass().getName()+" was encountered");
2377      return (DateType) this.serviced;
2378    }
2379
2380    public boolean hasServicedDateType() { 
2381      return this != null && this.serviced instanceof DateType;
2382    }
2383
2384    /**
2385     * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2386     */
2387    public Period getServicedPeriod() throws FHIRException { 
2388      if (this.serviced == null)
2389        this.serviced = new Period();
2390      if (!(this.serviced instanceof Period))
2391        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.serviced.getClass().getName()+" was encountered");
2392      return (Period) this.serviced;
2393    }
2394
2395    public boolean hasServicedPeriod() { 
2396      return this != null && this.serviced instanceof Period;
2397    }
2398
2399    public boolean hasServiced() { 
2400      return this.serviced != null && !this.serviced.isEmpty();
2401    }
2402
2403    /**
2404     * @param value {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2405     */
2406    public CoverageEligibilityResponse setServiced(DataType value) { 
2407      if (value != null && !(value instanceof DateType || value instanceof Period))
2408        throw new Error("Not the right type for CoverageEligibilityResponse.serviced[x]: "+value.fhirType());
2409      this.serviced = value;
2410      return this;
2411    }
2412
2413    /**
2414     * @return {@link #created} (The date this resource was created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
2415     */
2416    public DateTimeType getCreatedElement() { 
2417      if (this.created == null)
2418        if (Configuration.errorOnAutoCreate())
2419          throw new Error("Attempt to auto-create CoverageEligibilityResponse.created");
2420        else if (Configuration.doAutoCreate())
2421          this.created = new DateTimeType(); // bb
2422      return this.created;
2423    }
2424
2425    public boolean hasCreatedElement() { 
2426      return this.created != null && !this.created.isEmpty();
2427    }
2428
2429    public boolean hasCreated() { 
2430      return this.created != null && !this.created.isEmpty();
2431    }
2432
2433    /**
2434     * @param value {@link #created} (The date this resource was created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
2435     */
2436    public CoverageEligibilityResponse setCreatedElement(DateTimeType value) { 
2437      this.created = value;
2438      return this;
2439    }
2440
2441    /**
2442     * @return The date this resource was created.
2443     */
2444    public Date getCreated() { 
2445      return this.created == null ? null : this.created.getValue();
2446    }
2447
2448    /**
2449     * @param value The date this resource was created.
2450     */
2451    public CoverageEligibilityResponse setCreated(Date value) { 
2452        if (this.created == null)
2453          this.created = new DateTimeType();
2454        this.created.setValue(value);
2455      return this;
2456    }
2457
2458    /**
2459     * @return {@link #requestor} (The provider which is responsible for the request.)
2460     */
2461    public Reference getRequestor() { 
2462      if (this.requestor == null)
2463        if (Configuration.errorOnAutoCreate())
2464          throw new Error("Attempt to auto-create CoverageEligibilityResponse.requestor");
2465        else if (Configuration.doAutoCreate())
2466          this.requestor = new Reference(); // cc
2467      return this.requestor;
2468    }
2469
2470    public boolean hasRequestor() { 
2471      return this.requestor != null && !this.requestor.isEmpty();
2472    }
2473
2474    /**
2475     * @param value {@link #requestor} (The provider which is responsible for the request.)
2476     */
2477    public CoverageEligibilityResponse setRequestor(Reference value) { 
2478      this.requestor = value;
2479      return this;
2480    }
2481
2482    /**
2483     * @return {@link #request} (Reference to the original request resource.)
2484     */
2485    public Reference getRequest() { 
2486      if (this.request == null)
2487        if (Configuration.errorOnAutoCreate())
2488          throw new Error("Attempt to auto-create CoverageEligibilityResponse.request");
2489        else if (Configuration.doAutoCreate())
2490          this.request = new Reference(); // cc
2491      return this.request;
2492    }
2493
2494    public boolean hasRequest() { 
2495      return this.request != null && !this.request.isEmpty();
2496    }
2497
2498    /**
2499     * @param value {@link #request} (Reference to the original request resource.)
2500     */
2501    public CoverageEligibilityResponse setRequest(Reference value) { 
2502      this.request = value;
2503      return this;
2504    }
2505
2506    /**
2507     * @return {@link #outcome} (The outcome of the request processing.). This is the underlying object with id, value and extensions. The accessor "getOutcome" gives direct access to the value
2508     */
2509    public Enumeration<RemittanceOutcome> getOutcomeElement() { 
2510      if (this.outcome == null)
2511        if (Configuration.errorOnAutoCreate())
2512          throw new Error("Attempt to auto-create CoverageEligibilityResponse.outcome");
2513        else if (Configuration.doAutoCreate())
2514          this.outcome = new Enumeration<RemittanceOutcome>(new RemittanceOutcomeEnumFactory()); // bb
2515      return this.outcome;
2516    }
2517
2518    public boolean hasOutcomeElement() { 
2519      return this.outcome != null && !this.outcome.isEmpty();
2520    }
2521
2522    public boolean hasOutcome() { 
2523      return this.outcome != null && !this.outcome.isEmpty();
2524    }
2525
2526    /**
2527     * @param value {@link #outcome} (The outcome of the request processing.). This is the underlying object with id, value and extensions. The accessor "getOutcome" gives direct access to the value
2528     */
2529    public CoverageEligibilityResponse setOutcomeElement(Enumeration<RemittanceOutcome> value) { 
2530      this.outcome = value;
2531      return this;
2532    }
2533
2534    /**
2535     * @return The outcome of the request processing.
2536     */
2537    public RemittanceOutcome getOutcome() { 
2538      return this.outcome == null ? null : this.outcome.getValue();
2539    }
2540
2541    /**
2542     * @param value The outcome of the request processing.
2543     */
2544    public CoverageEligibilityResponse setOutcome(RemittanceOutcome value) { 
2545        if (this.outcome == null)
2546          this.outcome = new Enumeration<RemittanceOutcome>(new RemittanceOutcomeEnumFactory());
2547        this.outcome.setValue(value);
2548      return this;
2549    }
2550
2551    /**
2552     * @return {@link #disposition} (A human readable description of the status of the adjudication.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
2553     */
2554    public StringType getDispositionElement() { 
2555      if (this.disposition == null)
2556        if (Configuration.errorOnAutoCreate())
2557          throw new Error("Attempt to auto-create CoverageEligibilityResponse.disposition");
2558        else if (Configuration.doAutoCreate())
2559          this.disposition = new StringType(); // bb
2560      return this.disposition;
2561    }
2562
2563    public boolean hasDispositionElement() { 
2564      return this.disposition != null && !this.disposition.isEmpty();
2565    }
2566
2567    public boolean hasDisposition() { 
2568      return this.disposition != null && !this.disposition.isEmpty();
2569    }
2570
2571    /**
2572     * @param value {@link #disposition} (A human readable description of the status of the adjudication.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
2573     */
2574    public CoverageEligibilityResponse setDispositionElement(StringType value) { 
2575      this.disposition = value;
2576      return this;
2577    }
2578
2579    /**
2580     * @return A human readable description of the status of the adjudication.
2581     */
2582    public String getDisposition() { 
2583      return this.disposition == null ? null : this.disposition.getValue();
2584    }
2585
2586    /**
2587     * @param value A human readable description of the status of the adjudication.
2588     */
2589    public CoverageEligibilityResponse setDisposition(String value) { 
2590      if (Utilities.noString(value))
2591        this.disposition = null;
2592      else {
2593        if (this.disposition == null)
2594          this.disposition = new StringType();
2595        this.disposition.setValue(value);
2596      }
2597      return this;
2598    }
2599
2600    /**
2601     * @return {@link #insurer} (The Insurer who issued the coverage in question and is the author of the response.)
2602     */
2603    public Reference getInsurer() { 
2604      if (this.insurer == null)
2605        if (Configuration.errorOnAutoCreate())
2606          throw new Error("Attempt to auto-create CoverageEligibilityResponse.insurer");
2607        else if (Configuration.doAutoCreate())
2608          this.insurer = new Reference(); // cc
2609      return this.insurer;
2610    }
2611
2612    public boolean hasInsurer() { 
2613      return this.insurer != null && !this.insurer.isEmpty();
2614    }
2615
2616    /**
2617     * @param value {@link #insurer} (The Insurer who issued the coverage in question and is the author of the response.)
2618     */
2619    public CoverageEligibilityResponse setInsurer(Reference value) { 
2620      this.insurer = value;
2621      return this;
2622    }
2623
2624    /**
2625     * @return {@link #insurance} (Financial instruments for reimbursement for the health care products and services.)
2626     */
2627    public List<InsuranceComponent> getInsurance() { 
2628      if (this.insurance == null)
2629        this.insurance = new ArrayList<InsuranceComponent>();
2630      return this.insurance;
2631    }
2632
2633    /**
2634     * @return Returns a reference to <code>this</code> for easy method chaining
2635     */
2636    public CoverageEligibilityResponse setInsurance(List<InsuranceComponent> theInsurance) { 
2637      this.insurance = theInsurance;
2638      return this;
2639    }
2640
2641    public boolean hasInsurance() { 
2642      if (this.insurance == null)
2643        return false;
2644      for (InsuranceComponent item : this.insurance)
2645        if (!item.isEmpty())
2646          return true;
2647      return false;
2648    }
2649
2650    public InsuranceComponent addInsurance() { //3
2651      InsuranceComponent t = new InsuranceComponent();
2652      if (this.insurance == null)
2653        this.insurance = new ArrayList<InsuranceComponent>();
2654      this.insurance.add(t);
2655      return t;
2656    }
2657
2658    public CoverageEligibilityResponse addInsurance(InsuranceComponent t) { //3
2659      if (t == null)
2660        return this;
2661      if (this.insurance == null)
2662        this.insurance = new ArrayList<InsuranceComponent>();
2663      this.insurance.add(t);
2664      return this;
2665    }
2666
2667    /**
2668     * @return The first repetition of repeating field {@link #insurance}, creating it if it does not already exist {3}
2669     */
2670    public InsuranceComponent getInsuranceFirstRep() { 
2671      if (getInsurance().isEmpty()) {
2672        addInsurance();
2673      }
2674      return getInsurance().get(0);
2675    }
2676
2677    /**
2678     * @return {@link #preAuthRef} (A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.). This is the underlying object with id, value and extensions. The accessor "getPreAuthRef" gives direct access to the value
2679     */
2680    public StringType getPreAuthRefElement() { 
2681      if (this.preAuthRef == null)
2682        if (Configuration.errorOnAutoCreate())
2683          throw new Error("Attempt to auto-create CoverageEligibilityResponse.preAuthRef");
2684        else if (Configuration.doAutoCreate())
2685          this.preAuthRef = new StringType(); // bb
2686      return this.preAuthRef;
2687    }
2688
2689    public boolean hasPreAuthRefElement() { 
2690      return this.preAuthRef != null && !this.preAuthRef.isEmpty();
2691    }
2692
2693    public boolean hasPreAuthRef() { 
2694      return this.preAuthRef != null && !this.preAuthRef.isEmpty();
2695    }
2696
2697    /**
2698     * @param value {@link #preAuthRef} (A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.). This is the underlying object with id, value and extensions. The accessor "getPreAuthRef" gives direct access to the value
2699     */
2700    public CoverageEligibilityResponse setPreAuthRefElement(StringType value) { 
2701      this.preAuthRef = value;
2702      return this;
2703    }
2704
2705    /**
2706     * @return A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.
2707     */
2708    public String getPreAuthRef() { 
2709      return this.preAuthRef == null ? null : this.preAuthRef.getValue();
2710    }
2711
2712    /**
2713     * @param value A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.
2714     */
2715    public CoverageEligibilityResponse setPreAuthRef(String value) { 
2716      if (Utilities.noString(value))
2717        this.preAuthRef = null;
2718      else {
2719        if (this.preAuthRef == null)
2720          this.preAuthRef = new StringType();
2721        this.preAuthRef.setValue(value);
2722      }
2723      return this;
2724    }
2725
2726    /**
2727     * @return {@link #form} (A code for the form to be used for printing the content.)
2728     */
2729    public CodeableConcept getForm() { 
2730      if (this.form == null)
2731        if (Configuration.errorOnAutoCreate())
2732          throw new Error("Attempt to auto-create CoverageEligibilityResponse.form");
2733        else if (Configuration.doAutoCreate())
2734          this.form = new CodeableConcept(); // cc
2735      return this.form;
2736    }
2737
2738    public boolean hasForm() { 
2739      return this.form != null && !this.form.isEmpty();
2740    }
2741
2742    /**
2743     * @param value {@link #form} (A code for the form to be used for printing the content.)
2744     */
2745    public CoverageEligibilityResponse setForm(CodeableConcept value) { 
2746      this.form = value;
2747      return this;
2748    }
2749
2750    /**
2751     * @return {@link #error} (Errors encountered during the processing of the request.)
2752     */
2753    public List<ErrorsComponent> getError() { 
2754      if (this.error == null)
2755        this.error = new ArrayList<ErrorsComponent>();
2756      return this.error;
2757    }
2758
2759    /**
2760     * @return Returns a reference to <code>this</code> for easy method chaining
2761     */
2762    public CoverageEligibilityResponse setError(List<ErrorsComponent> theError) { 
2763      this.error = theError;
2764      return this;
2765    }
2766
2767    public boolean hasError() { 
2768      if (this.error == null)
2769        return false;
2770      for (ErrorsComponent item : this.error)
2771        if (!item.isEmpty())
2772          return true;
2773      return false;
2774    }
2775
2776    public ErrorsComponent addError() { //3
2777      ErrorsComponent t = new ErrorsComponent();
2778      if (this.error == null)
2779        this.error = new ArrayList<ErrorsComponent>();
2780      this.error.add(t);
2781      return t;
2782    }
2783
2784    public CoverageEligibilityResponse addError(ErrorsComponent t) { //3
2785      if (t == null)
2786        return this;
2787      if (this.error == null)
2788        this.error = new ArrayList<ErrorsComponent>();
2789      this.error.add(t);
2790      return this;
2791    }
2792
2793    /**
2794     * @return The first repetition of repeating field {@link #error}, creating it if it does not already exist {3}
2795     */
2796    public ErrorsComponent getErrorFirstRep() { 
2797      if (getError().isEmpty()) {
2798        addError();
2799      }
2800      return getError().get(0);
2801    }
2802
2803      protected void listChildren(List<Property> children) {
2804        super.listChildren(children);
2805        children.add(new Property("identifier", "Identifier", "A unique identifier assigned to this coverage eligiblity request.", 0, java.lang.Integer.MAX_VALUE, identifier));
2806        children.add(new Property("status", "code", "The status of the resource instance.", 0, 1, status));
2807        children.add(new Property("purpose", "code", "Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.", 0, java.lang.Integer.MAX_VALUE, purpose));
2808        children.add(new Property("patient", "Reference(Patient)", "The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.", 0, 1, patient));
2809        children.add(new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced));
2810        children.add(new Property("created", "dateTime", "The date this resource was created.", 0, 1, created));
2811        children.add(new Property("requestor", "Reference(Practitioner|PractitionerRole|Organization)", "The provider which is responsible for the request.", 0, 1, requestor));
2812        children.add(new Property("request", "Reference(CoverageEligibilityRequest)", "Reference to the original request resource.", 0, 1, request));
2813        children.add(new Property("outcome", "code", "The outcome of the request processing.", 0, 1, outcome));
2814        children.add(new Property("disposition", "string", "A human readable description of the status of the adjudication.", 0, 1, disposition));
2815        children.add(new Property("insurer", "Reference(Organization)", "The Insurer who issued the coverage in question and is the author of the response.", 0, 1, insurer));
2816        children.add(new Property("insurance", "", "Financial instruments for reimbursement for the health care products and services.", 0, java.lang.Integer.MAX_VALUE, insurance));
2817        children.add(new Property("preAuthRef", "string", "A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.", 0, 1, preAuthRef));
2818        children.add(new Property("form", "CodeableConcept", "A code for the form to be used for printing the content.", 0, 1, form));
2819        children.add(new Property("error", "", "Errors encountered during the processing of the request.", 0, java.lang.Integer.MAX_VALUE, error));
2820      }
2821
2822      @Override
2823      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2824        switch (_hash) {
2825        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A unique identifier assigned to this coverage eligiblity request.", 0, java.lang.Integer.MAX_VALUE, identifier);
2826        case -892481550: /*status*/  return new Property("status", "code", "The status of the resource instance.", 0, 1, status);
2827        case -220463842: /*purpose*/  return new Property("purpose", "code", "Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or 'now' if not specified.", 0, java.lang.Integer.MAX_VALUE, purpose);
2828        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.", 0, 1, patient);
2829        case -1927922223: /*serviced[x]*/  return new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
2830        case 1379209295: /*serviced*/  return new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
2831        case 363246749: /*servicedDate*/  return new Property("serviced[x]", "date", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
2832        case 1534966512: /*servicedPeriod*/  return new Property("serviced[x]", "Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
2833        case 1028554472: /*created*/  return new Property("created", "dateTime", "The date this resource was created.", 0, 1, created);
2834        case 693934258: /*requestor*/  return new Property("requestor", "Reference(Practitioner|PractitionerRole|Organization)", "The provider which is responsible for the request.", 0, 1, requestor);
2835        case 1095692943: /*request*/  return new Property("request", "Reference(CoverageEligibilityRequest)", "Reference to the original request resource.", 0, 1, request);
2836        case -1106507950: /*outcome*/  return new Property("outcome", "code", "The outcome of the request processing.", 0, 1, outcome);
2837        case 583380919: /*disposition*/  return new Property("disposition", "string", "A human readable description of the status of the adjudication.", 0, 1, disposition);
2838        case 1957615864: /*insurer*/  return new Property("insurer", "Reference(Organization)", "The Insurer who issued the coverage in question and is the author of the response.", 0, 1, insurer);
2839        case 73049818: /*insurance*/  return new Property("insurance", "", "Financial instruments for reimbursement for the health care products and services.", 0, java.lang.Integer.MAX_VALUE, insurance);
2840        case 522246568: /*preAuthRef*/  return new Property("preAuthRef", "string", "A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.", 0, 1, preAuthRef);
2841        case 3148996: /*form*/  return new Property("form", "CodeableConcept", "A code for the form to be used for printing the content.", 0, 1, form);
2842        case 96784904: /*error*/  return new Property("error", "", "Errors encountered during the processing of the request.", 0, java.lang.Integer.MAX_VALUE, error);
2843        default: return super.getNamedProperty(_hash, _name, _checkValid);
2844        }
2845
2846      }
2847
2848      @Override
2849      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2850        switch (hash) {
2851        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2852        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<FinancialResourceStatusCodes>
2853        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : this.purpose.toArray(new Base[this.purpose.size()]); // Enumeration<EligibilityResponsePurpose>
2854        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
2855        case 1379209295: /*serviced*/ return this.serviced == null ? new Base[0] : new Base[] {this.serviced}; // DataType
2856        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
2857        case 693934258: /*requestor*/ return this.requestor == null ? new Base[0] : new Base[] {this.requestor}; // Reference
2858        case 1095692943: /*request*/ return this.request == null ? new Base[0] : new Base[] {this.request}; // Reference
2859        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // Enumeration<RemittanceOutcome>
2860        case 583380919: /*disposition*/ return this.disposition == null ? new Base[0] : new Base[] {this.disposition}; // StringType
2861        case 1957615864: /*insurer*/ return this.insurer == null ? new Base[0] : new Base[] {this.insurer}; // Reference
2862        case 73049818: /*insurance*/ return this.insurance == null ? new Base[0] : this.insurance.toArray(new Base[this.insurance.size()]); // InsuranceComponent
2863        case 522246568: /*preAuthRef*/ return this.preAuthRef == null ? new Base[0] : new Base[] {this.preAuthRef}; // StringType
2864        case 3148996: /*form*/ return this.form == null ? new Base[0] : new Base[] {this.form}; // CodeableConcept
2865        case 96784904: /*error*/ return this.error == null ? new Base[0] : this.error.toArray(new Base[this.error.size()]); // ErrorsComponent
2866        default: return super.getProperty(hash, name, checkValid);
2867        }
2868
2869      }
2870
2871      @Override
2872      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2873        switch (hash) {
2874        case -1618432855: // identifier
2875          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2876          return value;
2877        case -892481550: // status
2878          value = new FinancialResourceStatusCodesEnumFactory().fromType(TypeConvertor.castToCode(value));
2879          this.status = (Enumeration) value; // Enumeration<FinancialResourceStatusCodes>
2880          return value;
2881        case -220463842: // purpose
2882          value = new EligibilityResponsePurposeEnumFactory().fromType(TypeConvertor.castToCode(value));
2883          this.getPurpose().add((Enumeration) value); // Enumeration<EligibilityResponsePurpose>
2884          return value;
2885        case -791418107: // patient
2886          this.patient = TypeConvertor.castToReference(value); // Reference
2887          return value;
2888        case 1379209295: // serviced
2889          this.serviced = TypeConvertor.castToType(value); // DataType
2890          return value;
2891        case 1028554472: // created
2892          this.created = TypeConvertor.castToDateTime(value); // DateTimeType
2893          return value;
2894        case 693934258: // requestor
2895          this.requestor = TypeConvertor.castToReference(value); // Reference
2896          return value;
2897        case 1095692943: // request
2898          this.request = TypeConvertor.castToReference(value); // Reference
2899          return value;
2900        case -1106507950: // outcome
2901          value = new RemittanceOutcomeEnumFactory().fromType(TypeConvertor.castToCode(value));
2902          this.outcome = (Enumeration) value; // Enumeration<RemittanceOutcome>
2903          return value;
2904        case 583380919: // disposition
2905          this.disposition = TypeConvertor.castToString(value); // StringType
2906          return value;
2907        case 1957615864: // insurer
2908          this.insurer = TypeConvertor.castToReference(value); // Reference
2909          return value;
2910        case 73049818: // insurance
2911          this.getInsurance().add((InsuranceComponent) value); // InsuranceComponent
2912          return value;
2913        case 522246568: // preAuthRef
2914          this.preAuthRef = TypeConvertor.castToString(value); // StringType
2915          return value;
2916        case 3148996: // form
2917          this.form = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2918          return value;
2919        case 96784904: // error
2920          this.getError().add((ErrorsComponent) value); // ErrorsComponent
2921          return value;
2922        default: return super.setProperty(hash, name, value);
2923        }
2924
2925      }
2926
2927      @Override
2928      public Base setProperty(String name, Base value) throws FHIRException {
2929        if (name.equals("identifier")) {
2930          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2931        } else if (name.equals("status")) {
2932          value = new FinancialResourceStatusCodesEnumFactory().fromType(TypeConvertor.castToCode(value));
2933          this.status = (Enumeration) value; // Enumeration<FinancialResourceStatusCodes>
2934        } else if (name.equals("purpose")) {
2935          value = new EligibilityResponsePurposeEnumFactory().fromType(TypeConvertor.castToCode(value));
2936          this.getPurpose().add((Enumeration) value);
2937        } else if (name.equals("patient")) {
2938          this.patient = TypeConvertor.castToReference(value); // Reference
2939        } else if (name.equals("serviced[x]")) {
2940          this.serviced = TypeConvertor.castToType(value); // DataType
2941        } else if (name.equals("created")) {
2942          this.created = TypeConvertor.castToDateTime(value); // DateTimeType
2943        } else if (name.equals("requestor")) {
2944          this.requestor = TypeConvertor.castToReference(value); // Reference
2945        } else if (name.equals("request")) {
2946          this.request = TypeConvertor.castToReference(value); // Reference
2947        } else if (name.equals("outcome")) {
2948          value = new RemittanceOutcomeEnumFactory().fromType(TypeConvertor.castToCode(value));
2949          this.outcome = (Enumeration) value; // Enumeration<RemittanceOutcome>
2950        } else if (name.equals("disposition")) {
2951          this.disposition = TypeConvertor.castToString(value); // StringType
2952        } else if (name.equals("insurer")) {
2953          this.insurer = TypeConvertor.castToReference(value); // Reference
2954        } else if (name.equals("insurance")) {
2955          this.getInsurance().add((InsuranceComponent) value);
2956        } else if (name.equals("preAuthRef")) {
2957          this.preAuthRef = TypeConvertor.castToString(value); // StringType
2958        } else if (name.equals("form")) {
2959          this.form = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2960        } else if (name.equals("error")) {
2961          this.getError().add((ErrorsComponent) value);
2962        } else
2963          return super.setProperty(name, value);
2964        return value;
2965      }
2966
2967      @Override
2968      public Base makeProperty(int hash, String name) throws FHIRException {
2969        switch (hash) {
2970        case -1618432855:  return addIdentifier(); 
2971        case -892481550:  return getStatusElement();
2972        case -220463842:  return addPurposeElement();
2973        case -791418107:  return getPatient();
2974        case -1927922223:  return getServiced();
2975        case 1379209295:  return getServiced();
2976        case 1028554472:  return getCreatedElement();
2977        case 693934258:  return getRequestor();
2978        case 1095692943:  return getRequest();
2979        case -1106507950:  return getOutcomeElement();
2980        case 583380919:  return getDispositionElement();
2981        case 1957615864:  return getInsurer();
2982        case 73049818:  return addInsurance(); 
2983        case 522246568:  return getPreAuthRefElement();
2984        case 3148996:  return getForm();
2985        case 96784904:  return addError(); 
2986        default: return super.makeProperty(hash, name);
2987        }
2988
2989      }
2990
2991      @Override
2992      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2993        switch (hash) {
2994        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2995        case -892481550: /*status*/ return new String[] {"code"};
2996        case -220463842: /*purpose*/ return new String[] {"code"};
2997        case -791418107: /*patient*/ return new String[] {"Reference"};
2998        case 1379209295: /*serviced*/ return new String[] {"date", "Period"};
2999        case 1028554472: /*created*/ return new String[] {"dateTime"};
3000        case 693934258: /*requestor*/ return new String[] {"Reference"};
3001        case 1095692943: /*request*/ return new String[] {"Reference"};
3002        case -1106507950: /*outcome*/ return new String[] {"code"};
3003        case 583380919: /*disposition*/ return new String[] {"string"};
3004        case 1957615864: /*insurer*/ return new String[] {"Reference"};
3005        case 73049818: /*insurance*/ return new String[] {};
3006        case 522246568: /*preAuthRef*/ return new String[] {"string"};
3007        case 3148996: /*form*/ return new String[] {"CodeableConcept"};
3008        case 96784904: /*error*/ return new String[] {};
3009        default: return super.getTypesForProperty(hash, name);
3010        }
3011
3012      }
3013
3014      @Override
3015      public Base addChild(String name) throws FHIRException {
3016        if (name.equals("identifier")) {
3017          return addIdentifier();
3018        }
3019        else if (name.equals("status")) {
3020          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.status");
3021        }
3022        else if (name.equals("purpose")) {
3023          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.purpose");
3024        }
3025        else if (name.equals("patient")) {
3026          this.patient = new Reference();
3027          return this.patient;
3028        }
3029        else if (name.equals("servicedDate")) {
3030          this.serviced = new DateType();
3031          return this.serviced;
3032        }
3033        else if (name.equals("servicedPeriod")) {
3034          this.serviced = new Period();
3035          return this.serviced;
3036        }
3037        else if (name.equals("created")) {
3038          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.created");
3039        }
3040        else if (name.equals("requestor")) {
3041          this.requestor = new Reference();
3042          return this.requestor;
3043        }
3044        else if (name.equals("request")) {
3045          this.request = new Reference();
3046          return this.request;
3047        }
3048        else if (name.equals("outcome")) {
3049          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.outcome");
3050        }
3051        else if (name.equals("disposition")) {
3052          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.disposition");
3053        }
3054        else if (name.equals("insurer")) {
3055          this.insurer = new Reference();
3056          return this.insurer;
3057        }
3058        else if (name.equals("insurance")) {
3059          return addInsurance();
3060        }
3061        else if (name.equals("preAuthRef")) {
3062          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityResponse.preAuthRef");
3063        }
3064        else if (name.equals("form")) {
3065          this.form = new CodeableConcept();
3066          return this.form;
3067        }
3068        else if (name.equals("error")) {
3069          return addError();
3070        }
3071        else
3072          return super.addChild(name);
3073      }
3074
3075  public String fhirType() {
3076    return "CoverageEligibilityResponse";
3077
3078  }
3079
3080      public CoverageEligibilityResponse copy() {
3081        CoverageEligibilityResponse dst = new CoverageEligibilityResponse();
3082        copyValues(dst);
3083        return dst;
3084      }
3085
3086      public void copyValues(CoverageEligibilityResponse dst) {
3087        super.copyValues(dst);
3088        if (identifier != null) {
3089          dst.identifier = new ArrayList<Identifier>();
3090          for (Identifier i : identifier)
3091            dst.identifier.add(i.copy());
3092        };
3093        dst.status = status == null ? null : status.copy();
3094        if (purpose != null) {
3095          dst.purpose = new ArrayList<Enumeration<EligibilityResponsePurpose>>();
3096          for (Enumeration<EligibilityResponsePurpose> i : purpose)
3097            dst.purpose.add(i.copy());
3098        };
3099        dst.patient = patient == null ? null : patient.copy();
3100        dst.serviced = serviced == null ? null : serviced.copy();
3101        dst.created = created == null ? null : created.copy();
3102        dst.requestor = requestor == null ? null : requestor.copy();
3103        dst.request = request == null ? null : request.copy();
3104        dst.outcome = outcome == null ? null : outcome.copy();
3105        dst.disposition = disposition == null ? null : disposition.copy();
3106        dst.insurer = insurer == null ? null : insurer.copy();
3107        if (insurance != null) {
3108          dst.insurance = new ArrayList<InsuranceComponent>();
3109          for (InsuranceComponent i : insurance)
3110            dst.insurance.add(i.copy());
3111        };
3112        dst.preAuthRef = preAuthRef == null ? null : preAuthRef.copy();
3113        dst.form = form == null ? null : form.copy();
3114        if (error != null) {
3115          dst.error = new ArrayList<ErrorsComponent>();
3116          for (ErrorsComponent i : error)
3117            dst.error.add(i.copy());
3118        };
3119      }
3120
3121      protected CoverageEligibilityResponse typedCopy() {
3122        return copy();
3123      }
3124
3125      @Override
3126      public boolean equalsDeep(Base other_) {
3127        if (!super.equalsDeep(other_))
3128          return false;
3129        if (!(other_ instanceof CoverageEligibilityResponse))
3130          return false;
3131        CoverageEligibilityResponse o = (CoverageEligibilityResponse) other_;
3132        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(purpose, o.purpose, true)
3133           && compareDeep(patient, o.patient, true) && compareDeep(serviced, o.serviced, true) && compareDeep(created, o.created, true)
3134           && compareDeep(requestor, o.requestor, true) && compareDeep(request, o.request, true) && compareDeep(outcome, o.outcome, true)
3135           && compareDeep(disposition, o.disposition, true) && compareDeep(insurer, o.insurer, true) && compareDeep(insurance, o.insurance, true)
3136           && compareDeep(preAuthRef, o.preAuthRef, true) && compareDeep(form, o.form, true) && compareDeep(error, o.error, true)
3137          ;
3138      }
3139
3140      @Override
3141      public boolean equalsShallow(Base other_) {
3142        if (!super.equalsShallow(other_))
3143          return false;
3144        if (!(other_ instanceof CoverageEligibilityResponse))
3145          return false;
3146        CoverageEligibilityResponse o = (CoverageEligibilityResponse) other_;
3147        return compareValues(status, o.status, true) && compareValues(purpose, o.purpose, true) && compareValues(created, o.created, true)
3148           && compareValues(outcome, o.outcome, true) && compareValues(disposition, o.disposition, true) && compareValues(preAuthRef, o.preAuthRef, true)
3149          ;
3150      }
3151
3152      public boolean isEmpty() {
3153        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, purpose
3154          , patient, serviced, created, requestor, request, outcome, disposition, insurer
3155          , insurance, preAuthRef, form, error);
3156      }
3157
3158  @Override
3159  public ResourceType getResourceType() {
3160    return ResourceType.CoverageEligibilityResponse;
3161   }
3162
3163 /**
3164   * Search parameter: <b>created</b>
3165   * <p>
3166   * Description: <b>The creation date</b><br>
3167   * Type: <b>date</b><br>
3168   * Path: <b>CoverageEligibilityResponse.created</b><br>
3169   * </p>
3170   */
3171  @SearchParamDefinition(name="created", path="CoverageEligibilityResponse.created", description="The creation date", type="date" )
3172  public static final String SP_CREATED = "created";
3173 /**
3174   * <b>Fluent Client</b> search parameter constant for <b>created</b>
3175   * <p>
3176   * Description: <b>The creation date</b><br>
3177   * Type: <b>date</b><br>
3178   * Path: <b>CoverageEligibilityResponse.created</b><br>
3179   * </p>
3180   */
3181  public static final ca.uhn.fhir.rest.gclient.DateClientParam CREATED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_CREATED);
3182
3183 /**
3184   * Search parameter: <b>disposition</b>
3185   * <p>
3186   * Description: <b>The contents of the disposition message</b><br>
3187   * Type: <b>string</b><br>
3188   * Path: <b>CoverageEligibilityResponse.disposition</b><br>
3189   * </p>
3190   */
3191  @SearchParamDefinition(name="disposition", path="CoverageEligibilityResponse.disposition", description="The contents of the disposition message", type="string" )
3192  public static final String SP_DISPOSITION = "disposition";
3193 /**
3194   * <b>Fluent Client</b> search parameter constant for <b>disposition</b>
3195   * <p>
3196   * Description: <b>The contents of the disposition message</b><br>
3197   * Type: <b>string</b><br>
3198   * Path: <b>CoverageEligibilityResponse.disposition</b><br>
3199   * </p>
3200   */
3201  public static final ca.uhn.fhir.rest.gclient.StringClientParam DISPOSITION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DISPOSITION);
3202
3203 /**
3204   * Search parameter: <b>identifier</b>
3205   * <p>
3206   * Description: <b>The business identifier</b><br>
3207   * Type: <b>token</b><br>
3208   * Path: <b>CoverageEligibilityResponse.identifier</b><br>
3209   * </p>
3210   */
3211  @SearchParamDefinition(name="identifier", path="CoverageEligibilityResponse.identifier", description="The business identifier", type="token" )
3212  public static final String SP_IDENTIFIER = "identifier";
3213 /**
3214   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3215   * <p>
3216   * Description: <b>The business identifier</b><br>
3217   * Type: <b>token</b><br>
3218   * Path: <b>CoverageEligibilityResponse.identifier</b><br>
3219   * </p>
3220   */
3221  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3222
3223 /**
3224   * Search parameter: <b>insurer</b>
3225   * <p>
3226   * Description: <b>The organization which generated this resource</b><br>
3227   * Type: <b>reference</b><br>
3228   * Path: <b>CoverageEligibilityResponse.insurer</b><br>
3229   * </p>
3230   */
3231  @SearchParamDefinition(name="insurer", path="CoverageEligibilityResponse.insurer", description="The organization which generated this resource", type="reference", target={Organization.class } )
3232  public static final String SP_INSURER = "insurer";
3233 /**
3234   * <b>Fluent Client</b> search parameter constant for <b>insurer</b>
3235   * <p>
3236   * Description: <b>The organization which generated this resource</b><br>
3237   * Type: <b>reference</b><br>
3238   * Path: <b>CoverageEligibilityResponse.insurer</b><br>
3239   * </p>
3240   */
3241  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INSURER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INSURER);
3242
3243/**
3244   * Constant for fluent queries to be used to add include statements. Specifies
3245   * the path value of "<b>CoverageEligibilityResponse:insurer</b>".
3246   */
3247  public static final ca.uhn.fhir.model.api.Include INCLUDE_INSURER = new ca.uhn.fhir.model.api.Include("CoverageEligibilityResponse:insurer").toLocked();
3248
3249 /**
3250   * Search parameter: <b>outcome</b>
3251   * <p>
3252   * Description: <b>The processing outcome</b><br>
3253   * Type: <b>token</b><br>
3254   * Path: <b>CoverageEligibilityResponse.outcome</b><br>
3255   * </p>
3256   */
3257  @SearchParamDefinition(name="outcome", path="CoverageEligibilityResponse.outcome", description="The processing outcome", type="token" )
3258  public static final String SP_OUTCOME = "outcome";
3259 /**
3260   * <b>Fluent Client</b> search parameter constant for <b>outcome</b>
3261   * <p>
3262   * Description: <b>The processing outcome</b><br>
3263   * Type: <b>token</b><br>
3264   * Path: <b>CoverageEligibilityResponse.outcome</b><br>
3265   * </p>
3266   */
3267  public static final ca.uhn.fhir.rest.gclient.TokenClientParam OUTCOME = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_OUTCOME);
3268
3269 /**
3270   * Search parameter: <b>patient</b>
3271   * <p>
3272   * Description: <b>The reference to the patient</b><br>
3273   * Type: <b>reference</b><br>
3274   * Path: <b>CoverageEligibilityResponse.patient</b><br>
3275   * </p>
3276   */
3277  @SearchParamDefinition(name="patient", path="CoverageEligibilityResponse.patient", description="The reference to the patient", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Patient.class } )
3278  public static final String SP_PATIENT = "patient";
3279 /**
3280   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3281   * <p>
3282   * Description: <b>The reference to the patient</b><br>
3283   * Type: <b>reference</b><br>
3284   * Path: <b>CoverageEligibilityResponse.patient</b><br>
3285   * </p>
3286   */
3287  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3288
3289/**
3290   * Constant for fluent queries to be used to add include statements. Specifies
3291   * the path value of "<b>CoverageEligibilityResponse:patient</b>".
3292   */
3293  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("CoverageEligibilityResponse:patient").toLocked();
3294
3295 /**
3296   * Search parameter: <b>request</b>
3297   * <p>
3298   * Description: <b>The EligibilityRequest reference</b><br>
3299   * Type: <b>reference</b><br>
3300   * Path: <b>CoverageEligibilityResponse.request</b><br>
3301   * </p>
3302   */
3303  @SearchParamDefinition(name="request", path="CoverageEligibilityResponse.request", description="The EligibilityRequest reference", type="reference", target={CoverageEligibilityRequest.class } )
3304  public static final String SP_REQUEST = "request";
3305 /**
3306   * <b>Fluent Client</b> search parameter constant for <b>request</b>
3307   * <p>
3308   * Description: <b>The EligibilityRequest reference</b><br>
3309   * Type: <b>reference</b><br>
3310   * Path: <b>CoverageEligibilityResponse.request</b><br>
3311   * </p>
3312   */
3313  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUEST = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUEST);
3314
3315/**
3316   * Constant for fluent queries to be used to add include statements. Specifies
3317   * the path value of "<b>CoverageEligibilityResponse:request</b>".
3318   */
3319  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUEST = new ca.uhn.fhir.model.api.Include("CoverageEligibilityResponse:request").toLocked();
3320
3321 /**
3322   * Search parameter: <b>requestor</b>
3323   * <p>
3324   * Description: <b>The EligibilityRequest provider</b><br>
3325   * Type: <b>reference</b><br>
3326   * Path: <b>CoverageEligibilityResponse.requestor</b><br>
3327   * </p>
3328   */
3329  @SearchParamDefinition(name="requestor", path="CoverageEligibilityResponse.requestor", description="The EligibilityRequest provider", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Organization.class, Practitioner.class, PractitionerRole.class } )
3330  public static final String SP_REQUESTOR = "requestor";
3331 /**
3332   * <b>Fluent Client</b> search parameter constant for <b>requestor</b>
3333   * <p>
3334   * Description: <b>The EligibilityRequest provider</b><br>
3335   * Type: <b>reference</b><br>
3336   * Path: <b>CoverageEligibilityResponse.requestor</b><br>
3337   * </p>
3338   */
3339  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUESTOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUESTOR);
3340
3341/**
3342   * Constant for fluent queries to be used to add include statements. Specifies
3343   * the path value of "<b>CoverageEligibilityResponse:requestor</b>".
3344   */
3345  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUESTOR = new ca.uhn.fhir.model.api.Include("CoverageEligibilityResponse:requestor").toLocked();
3346
3347 /**
3348   * Search parameter: <b>status</b>
3349   * <p>
3350   * Description: <b>The EligibilityRequest status</b><br>
3351   * Type: <b>token</b><br>
3352   * Path: <b>CoverageEligibilityResponse.status</b><br>
3353   * </p>
3354   */
3355  @SearchParamDefinition(name="status", path="CoverageEligibilityResponse.status", description="The EligibilityRequest status", type="token" )
3356  public static final String SP_STATUS = "status";
3357 /**
3358   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3359   * <p>
3360   * Description: <b>The EligibilityRequest status</b><br>
3361   * Type: <b>token</b><br>
3362   * Path: <b>CoverageEligibilityResponse.status</b><br>
3363   * </p>
3364   */
3365  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3366
3367
3368}
3369