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