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