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 * The CoverageEligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an CoverageEligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.
052 */
053@ResourceDef(name="CoverageEligibilityRequest", profile="http://hl7.org/fhir/StructureDefinition/CoverageEligibilityRequest")
054public class CoverageEligibilityRequest extends DomainResource {
055
056    public enum EligibilityRequestPurpose {
057        /**
058         * The prior authorization requirements for the listed, or discovered if specified, converages for the categories of service and/or specifed biling codes are requested.
059         */
060        AUTHREQUIREMENTS, 
061        /**
062         * The plan benefits and optionally benefits consumed  for the listed, or discovered if specified, converages are requested.
063         */
064        BENEFITS, 
065        /**
066         * The insurer is requested to report on any coverages which they are aware of in addition to any specifed.
067         */
068        DISCOVERY, 
069        /**
070         * A check that the specified coverages are in-force is requested.
071         */
072        VALIDATION, 
073        /**
074         * added to help the parsers with the generic types
075         */
076        NULL;
077        public static EligibilityRequestPurpose fromCode(String codeString) throws FHIRException {
078            if (codeString == null || "".equals(codeString))
079                return null;
080        if ("auth-requirements".equals(codeString))
081          return AUTHREQUIREMENTS;
082        if ("benefits".equals(codeString))
083          return BENEFITS;
084        if ("discovery".equals(codeString))
085          return DISCOVERY;
086        if ("validation".equals(codeString))
087          return VALIDATION;
088        if (Configuration.isAcceptInvalidEnums())
089          return null;
090        else
091          throw new FHIRException("Unknown EligibilityRequestPurpose code '"+codeString+"'");
092        }
093        public String toCode() {
094          switch (this) {
095            case AUTHREQUIREMENTS: return "auth-requirements";
096            case BENEFITS: return "benefits";
097            case DISCOVERY: return "discovery";
098            case VALIDATION: return "validation";
099            case NULL: return null;
100            default: return "?";
101          }
102        }
103        public String getSystem() {
104          switch (this) {
105            case AUTHREQUIREMENTS: return "http://hl7.org/fhir/eligibilityrequest-purpose";
106            case BENEFITS: return "http://hl7.org/fhir/eligibilityrequest-purpose";
107            case DISCOVERY: return "http://hl7.org/fhir/eligibilityrequest-purpose";
108            case VALIDATION: return "http://hl7.org/fhir/eligibilityrequest-purpose";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113        public String getDefinition() {
114          switch (this) {
115            case AUTHREQUIREMENTS: return "The prior authorization requirements for the listed, or discovered if specified, converages for the categories of service and/or specifed biling codes are requested.";
116            case BENEFITS: return "The plan benefits and optionally benefits consumed  for the listed, or discovered if specified, converages are requested.";
117            case DISCOVERY: return "The insurer is requested to report on any coverages which they are aware of in addition to any specifed.";
118            case VALIDATION: return "A check that the specified coverages are in-force is requested.";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123        public String getDisplay() {
124          switch (this) {
125            case AUTHREQUIREMENTS: return "Coverage auth-requirements";
126            case BENEFITS: return "Coverage benefits";
127            case DISCOVERY: return "Coverage Discovery";
128            case VALIDATION: return "Coverage Validation";
129            case NULL: return null;
130            default: return "?";
131          }
132        }
133    }
134
135  public static class EligibilityRequestPurposeEnumFactory implements EnumFactory<EligibilityRequestPurpose> {
136    public EligibilityRequestPurpose fromCode(String codeString) throws IllegalArgumentException {
137      if (codeString == null || "".equals(codeString))
138            if (codeString == null || "".equals(codeString))
139                return null;
140        if ("auth-requirements".equals(codeString))
141          return EligibilityRequestPurpose.AUTHREQUIREMENTS;
142        if ("benefits".equals(codeString))
143          return EligibilityRequestPurpose.BENEFITS;
144        if ("discovery".equals(codeString))
145          return EligibilityRequestPurpose.DISCOVERY;
146        if ("validation".equals(codeString))
147          return EligibilityRequestPurpose.VALIDATION;
148        throw new IllegalArgumentException("Unknown EligibilityRequestPurpose code '"+codeString+"'");
149        }
150        public Enumeration<EligibilityRequestPurpose> fromType(Base code) throws FHIRException {
151          if (code == null)
152            return null;
153          if (code.isEmpty())
154            return new Enumeration<EligibilityRequestPurpose>(this);
155          String codeString = ((PrimitiveType) code).asStringValue();
156          if (codeString == null || "".equals(codeString))
157            return null;
158        if ("auth-requirements".equals(codeString))
159          return new Enumeration<EligibilityRequestPurpose>(this, EligibilityRequestPurpose.AUTHREQUIREMENTS);
160        if ("benefits".equals(codeString))
161          return new Enumeration<EligibilityRequestPurpose>(this, EligibilityRequestPurpose.BENEFITS);
162        if ("discovery".equals(codeString))
163          return new Enumeration<EligibilityRequestPurpose>(this, EligibilityRequestPurpose.DISCOVERY);
164        if ("validation".equals(codeString))
165          return new Enumeration<EligibilityRequestPurpose>(this, EligibilityRequestPurpose.VALIDATION);
166        throw new FHIRException("Unknown EligibilityRequestPurpose code '"+codeString+"'");
167        }
168    public String toCode(EligibilityRequestPurpose code) {
169      if (code == EligibilityRequestPurpose.AUTHREQUIREMENTS)
170        return "auth-requirements";
171      if (code == EligibilityRequestPurpose.BENEFITS)
172        return "benefits";
173      if (code == EligibilityRequestPurpose.DISCOVERY)
174        return "discovery";
175      if (code == EligibilityRequestPurpose.VALIDATION)
176        return "validation";
177      return "?";
178      }
179    public String toSystem(EligibilityRequestPurpose code) {
180      return code.getSystem();
181      }
182    }
183
184    @Block()
185    public static class SupportingInformationComponent extends BackboneElement implements IBaseBackboneElement {
186        /**
187         * A number to uniquely identify supporting information entries.
188         */
189        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
190        @Description(shortDefinition="Information instance identifier", formalDefinition="A number to uniquely identify supporting information entries." )
191        protected PositiveIntType sequence;
192
193        /**
194         * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
195         */
196        @Child(name = "information", type = {Reference.class}, order=2, min=1, max=1, modifier=false, summary=false)
197        @Description(shortDefinition="Data to be provided", formalDefinition="Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data." )
198        protected Reference information;
199
200        /**
201         * The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.
202         */
203        @Child(name = "appliesToAll", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
204        @Description(shortDefinition="Applies to all items", formalDefinition="The supporting materials are applicable for all detail items, product/servce categories and specific billing codes." )
205        protected BooleanType appliesToAll;
206
207        private static final long serialVersionUID = -1430960090L;
208
209    /**
210     * Constructor
211     */
212      public SupportingInformationComponent() {
213        super();
214      }
215
216    /**
217     * Constructor
218     */
219      public SupportingInformationComponent(int sequence, Reference information) {
220        super();
221        this.setSequence(sequence);
222        this.setInformation(information);
223      }
224
225        /**
226         * @return {@link #sequence} (A number to uniquely identify supporting information entries.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
227         */
228        public PositiveIntType getSequenceElement() { 
229          if (this.sequence == null)
230            if (Configuration.errorOnAutoCreate())
231              throw new Error("Attempt to auto-create SupportingInformationComponent.sequence");
232            else if (Configuration.doAutoCreate())
233              this.sequence = new PositiveIntType(); // bb
234          return this.sequence;
235        }
236
237        public boolean hasSequenceElement() { 
238          return this.sequence != null && !this.sequence.isEmpty();
239        }
240
241        public boolean hasSequence() { 
242          return this.sequence != null && !this.sequence.isEmpty();
243        }
244
245        /**
246         * @param value {@link #sequence} (A number to uniquely identify supporting information entries.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
247         */
248        public SupportingInformationComponent setSequenceElement(PositiveIntType value) { 
249          this.sequence = value;
250          return this;
251        }
252
253        /**
254         * @return A number to uniquely identify supporting information entries.
255         */
256        public int getSequence() { 
257          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
258        }
259
260        /**
261         * @param value A number to uniquely identify supporting information entries.
262         */
263        public SupportingInformationComponent setSequence(int value) { 
264            if (this.sequence == null)
265              this.sequence = new PositiveIntType();
266            this.sequence.setValue(value);
267          return this;
268        }
269
270        /**
271         * @return {@link #information} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
272         */
273        public Reference getInformation() { 
274          if (this.information == null)
275            if (Configuration.errorOnAutoCreate())
276              throw new Error("Attempt to auto-create SupportingInformationComponent.information");
277            else if (Configuration.doAutoCreate())
278              this.information = new Reference(); // cc
279          return this.information;
280        }
281
282        public boolean hasInformation() { 
283          return this.information != null && !this.information.isEmpty();
284        }
285
286        /**
287         * @param value {@link #information} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
288         */
289        public SupportingInformationComponent setInformation(Reference value) { 
290          this.information = value;
291          return this;
292        }
293
294        /**
295         * @return {@link #appliesToAll} (The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.). This is the underlying object with id, value and extensions. The accessor "getAppliesToAll" gives direct access to the value
296         */
297        public BooleanType getAppliesToAllElement() { 
298          if (this.appliesToAll == null)
299            if (Configuration.errorOnAutoCreate())
300              throw new Error("Attempt to auto-create SupportingInformationComponent.appliesToAll");
301            else if (Configuration.doAutoCreate())
302              this.appliesToAll = new BooleanType(); // bb
303          return this.appliesToAll;
304        }
305
306        public boolean hasAppliesToAllElement() { 
307          return this.appliesToAll != null && !this.appliesToAll.isEmpty();
308        }
309
310        public boolean hasAppliesToAll() { 
311          return this.appliesToAll != null && !this.appliesToAll.isEmpty();
312        }
313
314        /**
315         * @param value {@link #appliesToAll} (The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.). This is the underlying object with id, value and extensions. The accessor "getAppliesToAll" gives direct access to the value
316         */
317        public SupportingInformationComponent setAppliesToAllElement(BooleanType value) { 
318          this.appliesToAll = value;
319          return this;
320        }
321
322        /**
323         * @return The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.
324         */
325        public boolean getAppliesToAll() { 
326          return this.appliesToAll == null || this.appliesToAll.isEmpty() ? false : this.appliesToAll.getValue();
327        }
328
329        /**
330         * @param value The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.
331         */
332        public SupportingInformationComponent setAppliesToAll(boolean value) { 
333            if (this.appliesToAll == null)
334              this.appliesToAll = new BooleanType();
335            this.appliesToAll.setValue(value);
336          return this;
337        }
338
339        protected void listChildren(List<Property> children) {
340          super.listChildren(children);
341          children.add(new Property("sequence", "positiveInt", "A number to uniquely identify supporting information entries.", 0, 1, sequence));
342          children.add(new Property("information", "Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, information));
343          children.add(new Property("appliesToAll", "boolean", "The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.", 0, 1, appliesToAll));
344        }
345
346        @Override
347        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
348          switch (_hash) {
349          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "A number to uniquely identify supporting information entries.", 0, 1, sequence);
350          case 1968600364: /*information*/  return new Property("information", "Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, information);
351          case -1096846342: /*appliesToAll*/  return new Property("appliesToAll", "boolean", "The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.", 0, 1, appliesToAll);
352          default: return super.getNamedProperty(_hash, _name, _checkValid);
353          }
354
355        }
356
357      @Override
358      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
359        switch (hash) {
360        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
361        case 1968600364: /*information*/ return this.information == null ? new Base[0] : new Base[] {this.information}; // Reference
362        case -1096846342: /*appliesToAll*/ return this.appliesToAll == null ? new Base[0] : new Base[] {this.appliesToAll}; // BooleanType
363        default: return super.getProperty(hash, name, checkValid);
364        }
365
366      }
367
368      @Override
369      public Base setProperty(int hash, String name, Base value) throws FHIRException {
370        switch (hash) {
371        case 1349547969: // sequence
372          this.sequence = TypeConvertor.castToPositiveInt(value); // PositiveIntType
373          return value;
374        case 1968600364: // information
375          this.information = TypeConvertor.castToReference(value); // Reference
376          return value;
377        case -1096846342: // appliesToAll
378          this.appliesToAll = TypeConvertor.castToBoolean(value); // BooleanType
379          return value;
380        default: return super.setProperty(hash, name, value);
381        }
382
383      }
384
385      @Override
386      public Base setProperty(String name, Base value) throws FHIRException {
387        if (name.equals("sequence")) {
388          this.sequence = TypeConvertor.castToPositiveInt(value); // PositiveIntType
389        } else if (name.equals("information")) {
390          this.information = TypeConvertor.castToReference(value); // Reference
391        } else if (name.equals("appliesToAll")) {
392          this.appliesToAll = TypeConvertor.castToBoolean(value); // BooleanType
393        } else
394          return super.setProperty(name, value);
395        return value;
396      }
397
398      @Override
399      public Base makeProperty(int hash, String name) throws FHIRException {
400        switch (hash) {
401        case 1349547969:  return getSequenceElement();
402        case 1968600364:  return getInformation();
403        case -1096846342:  return getAppliesToAllElement();
404        default: return super.makeProperty(hash, name);
405        }
406
407      }
408
409      @Override
410      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
411        switch (hash) {
412        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
413        case 1968600364: /*information*/ return new String[] {"Reference"};
414        case -1096846342: /*appliesToAll*/ return new String[] {"boolean"};
415        default: return super.getTypesForProperty(hash, name);
416        }
417
418      }
419
420      @Override
421      public Base addChild(String name) throws FHIRException {
422        if (name.equals("sequence")) {
423          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.supportingInfo.sequence");
424        }
425        else if (name.equals("information")) {
426          this.information = new Reference();
427          return this.information;
428        }
429        else if (name.equals("appliesToAll")) {
430          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.supportingInfo.appliesToAll");
431        }
432        else
433          return super.addChild(name);
434      }
435
436      public SupportingInformationComponent copy() {
437        SupportingInformationComponent dst = new SupportingInformationComponent();
438        copyValues(dst);
439        return dst;
440      }
441
442      public void copyValues(SupportingInformationComponent dst) {
443        super.copyValues(dst);
444        dst.sequence = sequence == null ? null : sequence.copy();
445        dst.information = information == null ? null : information.copy();
446        dst.appliesToAll = appliesToAll == null ? null : appliesToAll.copy();
447      }
448
449      @Override
450      public boolean equalsDeep(Base other_) {
451        if (!super.equalsDeep(other_))
452          return false;
453        if (!(other_ instanceof SupportingInformationComponent))
454          return false;
455        SupportingInformationComponent o = (SupportingInformationComponent) other_;
456        return compareDeep(sequence, o.sequence, true) && compareDeep(information, o.information, true)
457           && compareDeep(appliesToAll, o.appliesToAll, true);
458      }
459
460      @Override
461      public boolean equalsShallow(Base other_) {
462        if (!super.equalsShallow(other_))
463          return false;
464        if (!(other_ instanceof SupportingInformationComponent))
465          return false;
466        SupportingInformationComponent o = (SupportingInformationComponent) other_;
467        return compareValues(sequence, o.sequence, true) && compareValues(appliesToAll, o.appliesToAll, true)
468          ;
469      }
470
471      public boolean isEmpty() {
472        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, information, appliesToAll
473          );
474      }
475
476  public String fhirType() {
477    return "CoverageEligibilityRequest.supportingInfo";
478
479  }
480
481  }
482
483    @Block()
484    public static class InsuranceComponent extends BackboneElement implements IBaseBackboneElement {
485        /**
486         * A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.
487         */
488        @Child(name = "focal", type = {BooleanType.class}, order=1, min=0, max=1, modifier=false, summary=false)
489        @Description(shortDefinition="Applicable coverage", formalDefinition="A flag to indicate that this Coverage is to be used for evaluation of this request when set to true." )
490        protected BooleanType focal;
491
492        /**
493         * 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.
494         */
495        @Child(name = "coverage", type = {Coverage.class}, order=2, min=1, max=1, modifier=false, summary=false)
496        @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." )
497        protected Reference coverage;
498
499        /**
500         * A business agreement number established between the provider and the insurer for special business processing purposes.
501         */
502        @Child(name = "businessArrangement", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
503        @Description(shortDefinition="Additional provider contract number", formalDefinition="A business agreement number established between the provider and the insurer for special business processing purposes." )
504        protected StringType businessArrangement;
505
506        private static final long serialVersionUID = -1656150261L;
507
508    /**
509     * Constructor
510     */
511      public InsuranceComponent() {
512        super();
513      }
514
515    /**
516     * Constructor
517     */
518      public InsuranceComponent(Reference coverage) {
519        super();
520        this.setCoverage(coverage);
521      }
522
523        /**
524         * @return {@link #focal} (A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.). This is the underlying object with id, value and extensions. The accessor "getFocal" gives direct access to the value
525         */
526        public BooleanType getFocalElement() { 
527          if (this.focal == null)
528            if (Configuration.errorOnAutoCreate())
529              throw new Error("Attempt to auto-create InsuranceComponent.focal");
530            else if (Configuration.doAutoCreate())
531              this.focal = new BooleanType(); // bb
532          return this.focal;
533        }
534
535        public boolean hasFocalElement() { 
536          return this.focal != null && !this.focal.isEmpty();
537        }
538
539        public boolean hasFocal() { 
540          return this.focal != null && !this.focal.isEmpty();
541        }
542
543        /**
544         * @param value {@link #focal} (A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.). This is the underlying object with id, value and extensions. The accessor "getFocal" gives direct access to the value
545         */
546        public InsuranceComponent setFocalElement(BooleanType value) { 
547          this.focal = value;
548          return this;
549        }
550
551        /**
552         * @return A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.
553         */
554        public boolean getFocal() { 
555          return this.focal == null || this.focal.isEmpty() ? false : this.focal.getValue();
556        }
557
558        /**
559         * @param value A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.
560         */
561        public InsuranceComponent setFocal(boolean value) { 
562            if (this.focal == null)
563              this.focal = new BooleanType();
564            this.focal.setValue(value);
565          return this;
566        }
567
568        /**
569         * @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.)
570         */
571        public Reference getCoverage() { 
572          if (this.coverage == null)
573            if (Configuration.errorOnAutoCreate())
574              throw new Error("Attempt to auto-create InsuranceComponent.coverage");
575            else if (Configuration.doAutoCreate())
576              this.coverage = new Reference(); // cc
577          return this.coverage;
578        }
579
580        public boolean hasCoverage() { 
581          return this.coverage != null && !this.coverage.isEmpty();
582        }
583
584        /**
585         * @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.)
586         */
587        public InsuranceComponent setCoverage(Reference value) { 
588          this.coverage = value;
589          return this;
590        }
591
592        /**
593         * @return {@link #businessArrangement} (A business agreement number established between the provider and the insurer for special business processing purposes.). This is the underlying object with id, value and extensions. The accessor "getBusinessArrangement" gives direct access to the value
594         */
595        public StringType getBusinessArrangementElement() { 
596          if (this.businessArrangement == null)
597            if (Configuration.errorOnAutoCreate())
598              throw new Error("Attempt to auto-create InsuranceComponent.businessArrangement");
599            else if (Configuration.doAutoCreate())
600              this.businessArrangement = new StringType(); // bb
601          return this.businessArrangement;
602        }
603
604        public boolean hasBusinessArrangementElement() { 
605          return this.businessArrangement != null && !this.businessArrangement.isEmpty();
606        }
607
608        public boolean hasBusinessArrangement() { 
609          return this.businessArrangement != null && !this.businessArrangement.isEmpty();
610        }
611
612        /**
613         * @param value {@link #businessArrangement} (A business agreement number established between the provider and the insurer for special business processing purposes.). This is the underlying object with id, value and extensions. The accessor "getBusinessArrangement" gives direct access to the value
614         */
615        public InsuranceComponent setBusinessArrangementElement(StringType value) { 
616          this.businessArrangement = value;
617          return this;
618        }
619
620        /**
621         * @return A business agreement number established between the provider and the insurer for special business processing purposes.
622         */
623        public String getBusinessArrangement() { 
624          return this.businessArrangement == null ? null : this.businessArrangement.getValue();
625        }
626
627        /**
628         * @param value A business agreement number established between the provider and the insurer for special business processing purposes.
629         */
630        public InsuranceComponent setBusinessArrangement(String value) { 
631          if (Utilities.noString(value))
632            this.businessArrangement = null;
633          else {
634            if (this.businessArrangement == null)
635              this.businessArrangement = new StringType();
636            this.businessArrangement.setValue(value);
637          }
638          return this;
639        }
640
641        protected void listChildren(List<Property> children) {
642          super.listChildren(children);
643          children.add(new Property("focal", "boolean", "A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.", 0, 1, focal));
644          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));
645          children.add(new Property("businessArrangement", "string", "A business agreement number established between the provider and the insurer for special business processing purposes.", 0, 1, businessArrangement));
646        }
647
648        @Override
649        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
650          switch (_hash) {
651          case 97604197: /*focal*/  return new Property("focal", "boolean", "A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.", 0, 1, focal);
652          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);
653          case 259920682: /*businessArrangement*/  return new Property("businessArrangement", "string", "A business agreement number established between the provider and the insurer for special business processing purposes.", 0, 1, businessArrangement);
654          default: return super.getNamedProperty(_hash, _name, _checkValid);
655          }
656
657        }
658
659      @Override
660      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
661        switch (hash) {
662        case 97604197: /*focal*/ return this.focal == null ? new Base[0] : new Base[] {this.focal}; // BooleanType
663        case -351767064: /*coverage*/ return this.coverage == null ? new Base[0] : new Base[] {this.coverage}; // Reference
664        case 259920682: /*businessArrangement*/ return this.businessArrangement == null ? new Base[0] : new Base[] {this.businessArrangement}; // StringType
665        default: return super.getProperty(hash, name, checkValid);
666        }
667
668      }
669
670      @Override
671      public Base setProperty(int hash, String name, Base value) throws FHIRException {
672        switch (hash) {
673        case 97604197: // focal
674          this.focal = TypeConvertor.castToBoolean(value); // BooleanType
675          return value;
676        case -351767064: // coverage
677          this.coverage = TypeConvertor.castToReference(value); // Reference
678          return value;
679        case 259920682: // businessArrangement
680          this.businessArrangement = TypeConvertor.castToString(value); // StringType
681          return value;
682        default: return super.setProperty(hash, name, value);
683        }
684
685      }
686
687      @Override
688      public Base setProperty(String name, Base value) throws FHIRException {
689        if (name.equals("focal")) {
690          this.focal = TypeConvertor.castToBoolean(value); // BooleanType
691        } else if (name.equals("coverage")) {
692          this.coverage = TypeConvertor.castToReference(value); // Reference
693        } else if (name.equals("businessArrangement")) {
694          this.businessArrangement = TypeConvertor.castToString(value); // StringType
695        } else
696          return super.setProperty(name, value);
697        return value;
698      }
699
700      @Override
701      public Base makeProperty(int hash, String name) throws FHIRException {
702        switch (hash) {
703        case 97604197:  return getFocalElement();
704        case -351767064:  return getCoverage();
705        case 259920682:  return getBusinessArrangementElement();
706        default: return super.makeProperty(hash, name);
707        }
708
709      }
710
711      @Override
712      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
713        switch (hash) {
714        case 97604197: /*focal*/ return new String[] {"boolean"};
715        case -351767064: /*coverage*/ return new String[] {"Reference"};
716        case 259920682: /*businessArrangement*/ return new String[] {"string"};
717        default: return super.getTypesForProperty(hash, name);
718        }
719
720      }
721
722      @Override
723      public Base addChild(String name) throws FHIRException {
724        if (name.equals("focal")) {
725          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.insurance.focal");
726        }
727        else if (name.equals("coverage")) {
728          this.coverage = new Reference();
729          return this.coverage;
730        }
731        else if (name.equals("businessArrangement")) {
732          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.insurance.businessArrangement");
733        }
734        else
735          return super.addChild(name);
736      }
737
738      public InsuranceComponent copy() {
739        InsuranceComponent dst = new InsuranceComponent();
740        copyValues(dst);
741        return dst;
742      }
743
744      public void copyValues(InsuranceComponent dst) {
745        super.copyValues(dst);
746        dst.focal = focal == null ? null : focal.copy();
747        dst.coverage = coverage == null ? null : coverage.copy();
748        dst.businessArrangement = businessArrangement == null ? null : businessArrangement.copy();
749      }
750
751      @Override
752      public boolean equalsDeep(Base other_) {
753        if (!super.equalsDeep(other_))
754          return false;
755        if (!(other_ instanceof InsuranceComponent))
756          return false;
757        InsuranceComponent o = (InsuranceComponent) other_;
758        return compareDeep(focal, o.focal, true) && compareDeep(coverage, o.coverage, true) && compareDeep(businessArrangement, o.businessArrangement, true)
759          ;
760      }
761
762      @Override
763      public boolean equalsShallow(Base other_) {
764        if (!super.equalsShallow(other_))
765          return false;
766        if (!(other_ instanceof InsuranceComponent))
767          return false;
768        InsuranceComponent o = (InsuranceComponent) other_;
769        return compareValues(focal, o.focal, true) && compareValues(businessArrangement, o.businessArrangement, true)
770          ;
771      }
772
773      public boolean isEmpty() {
774        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(focal, coverage, businessArrangement
775          );
776      }
777
778  public String fhirType() {
779    return "CoverageEligibilityRequest.insurance";
780
781  }
782
783  }
784
785    @Block()
786    public static class DetailsComponent extends BackboneElement implements IBaseBackboneElement {
787        /**
788         * Exceptions, special conditions and supporting information applicable for this service or product line.
789         */
790        @Child(name = "supportingInfoSequence", type = {PositiveIntType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
791        @Description(shortDefinition="Applicable exception or supporting information", formalDefinition="Exceptions, special conditions and supporting information applicable for this service or product line." )
792        protected List<PositiveIntType> supportingInfoSequence;
793
794        /**
795         * Code to identify the general type of benefits under which products and services are provided.
796         */
797        @Child(name = "category", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
798        @Description(shortDefinition="Benefit classification", formalDefinition="Code to identify the general type of benefits under which products and services are provided." )
799        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-benefitcategory")
800        protected CodeableConcept category;
801
802        /**
803         * This contains the product, service, drug or other billing code for the item.
804         */
805        @Child(name = "productOrService", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
806        @Description(shortDefinition="Billing, service, product, or drug code", formalDefinition="This contains the product, service, drug or other billing code for the item." )
807        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-uscls")
808        protected CodeableConcept productOrService;
809
810        /**
811         * Item typification or modifiers codes to convey additional context for the product or service.
812         */
813        @Child(name = "modifier", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
814        @Description(shortDefinition="Product or service billing modifiers", formalDefinition="Item typification or modifiers codes to convey additional context for the product or service." )
815        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-modifiers")
816        protected List<CodeableConcept> modifier;
817
818        /**
819         * The practitioner who is responsible for the product or service to be rendered to the patient.
820         */
821        @Child(name = "provider", type = {Practitioner.class, PractitionerRole.class}, order=5, min=0, max=1, modifier=false, summary=false)
822        @Description(shortDefinition="Perfoming practitioner", formalDefinition="The practitioner who is responsible for the product or service to be rendered to the patient." )
823        protected Reference provider;
824
825        /**
826         * The number of repetitions of a service or product.
827         */
828        @Child(name = "quantity", type = {Quantity.class}, order=6, min=0, max=1, modifier=false, summary=false)
829        @Description(shortDefinition="Count of products or services", formalDefinition="The number of repetitions of a service or product." )
830        protected Quantity quantity;
831
832        /**
833         * The amount charged to the patient by the provider for a single unit.
834         */
835        @Child(name = "unitPrice", type = {Money.class}, order=7, min=0, max=1, modifier=false, summary=false)
836        @Description(shortDefinition="Fee, charge or cost per item", formalDefinition="The amount charged to the patient by the provider for a single unit." )
837        protected Money unitPrice;
838
839        /**
840         * Facility where the services will be provided.
841         */
842        @Child(name = "facility", type = {Location.class, Organization.class}, order=8, min=0, max=1, modifier=false, summary=false)
843        @Description(shortDefinition="Servicing facility", formalDefinition="Facility where the services will be provided." )
844        protected Reference facility;
845
846        /**
847         * Patient diagnosis for which care is sought.
848         */
849        @Child(name = "diagnosis", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
850        @Description(shortDefinition="Applicable diagnosis", formalDefinition="Patient diagnosis for which care is sought." )
851        protected List<DiagnosisComponent> diagnosis;
852
853        /**
854         * The plan/proposal/order describing the proposed service in detail.
855         */
856        @Child(name = "detail", type = {Reference.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
857        @Description(shortDefinition="Product or service details", formalDefinition="The plan/proposal/order describing the proposed service in detail." )
858        protected List<Reference> detail;
859
860        private static final long serialVersionUID = 1615052611L;
861
862    /**
863     * Constructor
864     */
865      public DetailsComponent() {
866        super();
867      }
868
869        /**
870         * @return {@link #supportingInfoSequence} (Exceptions, special conditions and supporting information applicable for this service or product line.)
871         */
872        public List<PositiveIntType> getSupportingInfoSequence() { 
873          if (this.supportingInfoSequence == null)
874            this.supportingInfoSequence = new ArrayList<PositiveIntType>();
875          return this.supportingInfoSequence;
876        }
877
878        /**
879         * @return Returns a reference to <code>this</code> for easy method chaining
880         */
881        public DetailsComponent setSupportingInfoSequence(List<PositiveIntType> theSupportingInfoSequence) { 
882          this.supportingInfoSequence = theSupportingInfoSequence;
883          return this;
884        }
885
886        public boolean hasSupportingInfoSequence() { 
887          if (this.supportingInfoSequence == null)
888            return false;
889          for (PositiveIntType item : this.supportingInfoSequence)
890            if (!item.isEmpty())
891              return true;
892          return false;
893        }
894
895        /**
896         * @return {@link #supportingInfoSequence} (Exceptions, special conditions and supporting information applicable for this service or product line.)
897         */
898        public PositiveIntType addSupportingInfoSequenceElement() {//2 
899          PositiveIntType t = new PositiveIntType();
900          if (this.supportingInfoSequence == null)
901            this.supportingInfoSequence = new ArrayList<PositiveIntType>();
902          this.supportingInfoSequence.add(t);
903          return t;
904        }
905
906        /**
907         * @param value {@link #supportingInfoSequence} (Exceptions, special conditions and supporting information applicable for this service or product line.)
908         */
909        public DetailsComponent addSupportingInfoSequence(int value) { //1
910          PositiveIntType t = new PositiveIntType();
911          t.setValue(value);
912          if (this.supportingInfoSequence == null)
913            this.supportingInfoSequence = new ArrayList<PositiveIntType>();
914          this.supportingInfoSequence.add(t);
915          return this;
916        }
917
918        /**
919         * @param value {@link #supportingInfoSequence} (Exceptions, special conditions and supporting information applicable for this service or product line.)
920         */
921        public boolean hasSupportingInfoSequence(int value) { 
922          if (this.supportingInfoSequence == null)
923            return false;
924          for (PositiveIntType v : this.supportingInfoSequence)
925            if (v.getValue().equals(value)) // positiveInt
926              return true;
927          return false;
928        }
929
930        /**
931         * @return {@link #category} (Code to identify the general type of benefits under which products and services are provided.)
932         */
933        public CodeableConcept getCategory() { 
934          if (this.category == null)
935            if (Configuration.errorOnAutoCreate())
936              throw new Error("Attempt to auto-create DetailsComponent.category");
937            else if (Configuration.doAutoCreate())
938              this.category = new CodeableConcept(); // cc
939          return this.category;
940        }
941
942        public boolean hasCategory() { 
943          return this.category != null && !this.category.isEmpty();
944        }
945
946        /**
947         * @param value {@link #category} (Code to identify the general type of benefits under which products and services are provided.)
948         */
949        public DetailsComponent setCategory(CodeableConcept value) { 
950          this.category = value;
951          return this;
952        }
953
954        /**
955         * @return {@link #productOrService} (This contains the product, service, drug or other billing code for the item.)
956         */
957        public CodeableConcept getProductOrService() { 
958          if (this.productOrService == null)
959            if (Configuration.errorOnAutoCreate())
960              throw new Error("Attempt to auto-create DetailsComponent.productOrService");
961            else if (Configuration.doAutoCreate())
962              this.productOrService = new CodeableConcept(); // cc
963          return this.productOrService;
964        }
965
966        public boolean hasProductOrService() { 
967          return this.productOrService != null && !this.productOrService.isEmpty();
968        }
969
970        /**
971         * @param value {@link #productOrService} (This contains the product, service, drug or other billing code for the item.)
972         */
973        public DetailsComponent setProductOrService(CodeableConcept value) { 
974          this.productOrService = value;
975          return this;
976        }
977
978        /**
979         * @return {@link #modifier} (Item typification or modifiers codes to convey additional context for the product or service.)
980         */
981        public List<CodeableConcept> getModifier() { 
982          if (this.modifier == null)
983            this.modifier = new ArrayList<CodeableConcept>();
984          return this.modifier;
985        }
986
987        /**
988         * @return Returns a reference to <code>this</code> for easy method chaining
989         */
990        public DetailsComponent setModifier(List<CodeableConcept> theModifier) { 
991          this.modifier = theModifier;
992          return this;
993        }
994
995        public boolean hasModifier() { 
996          if (this.modifier == null)
997            return false;
998          for (CodeableConcept item : this.modifier)
999            if (!item.isEmpty())
1000              return true;
1001          return false;
1002        }
1003
1004        public CodeableConcept addModifier() { //3
1005          CodeableConcept t = new CodeableConcept();
1006          if (this.modifier == null)
1007            this.modifier = new ArrayList<CodeableConcept>();
1008          this.modifier.add(t);
1009          return t;
1010        }
1011
1012        public DetailsComponent addModifier(CodeableConcept t) { //3
1013          if (t == null)
1014            return this;
1015          if (this.modifier == null)
1016            this.modifier = new ArrayList<CodeableConcept>();
1017          this.modifier.add(t);
1018          return this;
1019        }
1020
1021        /**
1022         * @return The first repetition of repeating field {@link #modifier}, creating it if it does not already exist {3}
1023         */
1024        public CodeableConcept getModifierFirstRep() { 
1025          if (getModifier().isEmpty()) {
1026            addModifier();
1027          }
1028          return getModifier().get(0);
1029        }
1030
1031        /**
1032         * @return {@link #provider} (The practitioner who is responsible for the product or service to be rendered to the patient.)
1033         */
1034        public Reference getProvider() { 
1035          if (this.provider == null)
1036            if (Configuration.errorOnAutoCreate())
1037              throw new Error("Attempt to auto-create DetailsComponent.provider");
1038            else if (Configuration.doAutoCreate())
1039              this.provider = new Reference(); // cc
1040          return this.provider;
1041        }
1042
1043        public boolean hasProvider() { 
1044          return this.provider != null && !this.provider.isEmpty();
1045        }
1046
1047        /**
1048         * @param value {@link #provider} (The practitioner who is responsible for the product or service to be rendered to the patient.)
1049         */
1050        public DetailsComponent setProvider(Reference value) { 
1051          this.provider = value;
1052          return this;
1053        }
1054
1055        /**
1056         * @return {@link #quantity} (The number of repetitions of a service or product.)
1057         */
1058        public Quantity getQuantity() { 
1059          if (this.quantity == null)
1060            if (Configuration.errorOnAutoCreate())
1061              throw new Error("Attempt to auto-create DetailsComponent.quantity");
1062            else if (Configuration.doAutoCreate())
1063              this.quantity = new Quantity(); // cc
1064          return this.quantity;
1065        }
1066
1067        public boolean hasQuantity() { 
1068          return this.quantity != null && !this.quantity.isEmpty();
1069        }
1070
1071        /**
1072         * @param value {@link #quantity} (The number of repetitions of a service or product.)
1073         */
1074        public DetailsComponent setQuantity(Quantity value) { 
1075          this.quantity = value;
1076          return this;
1077        }
1078
1079        /**
1080         * @return {@link #unitPrice} (The amount charged to the patient by the provider for a single unit.)
1081         */
1082        public Money getUnitPrice() { 
1083          if (this.unitPrice == null)
1084            if (Configuration.errorOnAutoCreate())
1085              throw new Error("Attempt to auto-create DetailsComponent.unitPrice");
1086            else if (Configuration.doAutoCreate())
1087              this.unitPrice = new Money(); // cc
1088          return this.unitPrice;
1089        }
1090
1091        public boolean hasUnitPrice() { 
1092          return this.unitPrice != null && !this.unitPrice.isEmpty();
1093        }
1094
1095        /**
1096         * @param value {@link #unitPrice} (The amount charged to the patient by the provider for a single unit.)
1097         */
1098        public DetailsComponent setUnitPrice(Money value) { 
1099          this.unitPrice = value;
1100          return this;
1101        }
1102
1103        /**
1104         * @return {@link #facility} (Facility where the services will be provided.)
1105         */
1106        public Reference getFacility() { 
1107          if (this.facility == null)
1108            if (Configuration.errorOnAutoCreate())
1109              throw new Error("Attempt to auto-create DetailsComponent.facility");
1110            else if (Configuration.doAutoCreate())
1111              this.facility = new Reference(); // cc
1112          return this.facility;
1113        }
1114
1115        public boolean hasFacility() { 
1116          return this.facility != null && !this.facility.isEmpty();
1117        }
1118
1119        /**
1120         * @param value {@link #facility} (Facility where the services will be provided.)
1121         */
1122        public DetailsComponent setFacility(Reference value) { 
1123          this.facility = value;
1124          return this;
1125        }
1126
1127        /**
1128         * @return {@link #diagnosis} (Patient diagnosis for which care is sought.)
1129         */
1130        public List<DiagnosisComponent> getDiagnosis() { 
1131          if (this.diagnosis == null)
1132            this.diagnosis = new ArrayList<DiagnosisComponent>();
1133          return this.diagnosis;
1134        }
1135
1136        /**
1137         * @return Returns a reference to <code>this</code> for easy method chaining
1138         */
1139        public DetailsComponent setDiagnosis(List<DiagnosisComponent> theDiagnosis) { 
1140          this.diagnosis = theDiagnosis;
1141          return this;
1142        }
1143
1144        public boolean hasDiagnosis() { 
1145          if (this.diagnosis == null)
1146            return false;
1147          for (DiagnosisComponent item : this.diagnosis)
1148            if (!item.isEmpty())
1149              return true;
1150          return false;
1151        }
1152
1153        public DiagnosisComponent addDiagnosis() { //3
1154          DiagnosisComponent t = new DiagnosisComponent();
1155          if (this.diagnosis == null)
1156            this.diagnosis = new ArrayList<DiagnosisComponent>();
1157          this.diagnosis.add(t);
1158          return t;
1159        }
1160
1161        public DetailsComponent addDiagnosis(DiagnosisComponent t) { //3
1162          if (t == null)
1163            return this;
1164          if (this.diagnosis == null)
1165            this.diagnosis = new ArrayList<DiagnosisComponent>();
1166          this.diagnosis.add(t);
1167          return this;
1168        }
1169
1170        /**
1171         * @return The first repetition of repeating field {@link #diagnosis}, creating it if it does not already exist {3}
1172         */
1173        public DiagnosisComponent getDiagnosisFirstRep() { 
1174          if (getDiagnosis().isEmpty()) {
1175            addDiagnosis();
1176          }
1177          return getDiagnosis().get(0);
1178        }
1179
1180        /**
1181         * @return {@link #detail} (The plan/proposal/order describing the proposed service in detail.)
1182         */
1183        public List<Reference> getDetail() { 
1184          if (this.detail == null)
1185            this.detail = new ArrayList<Reference>();
1186          return this.detail;
1187        }
1188
1189        /**
1190         * @return Returns a reference to <code>this</code> for easy method chaining
1191         */
1192        public DetailsComponent setDetail(List<Reference> theDetail) { 
1193          this.detail = theDetail;
1194          return this;
1195        }
1196
1197        public boolean hasDetail() { 
1198          if (this.detail == null)
1199            return false;
1200          for (Reference item : this.detail)
1201            if (!item.isEmpty())
1202              return true;
1203          return false;
1204        }
1205
1206        public Reference addDetail() { //3
1207          Reference t = new Reference();
1208          if (this.detail == null)
1209            this.detail = new ArrayList<Reference>();
1210          this.detail.add(t);
1211          return t;
1212        }
1213
1214        public DetailsComponent addDetail(Reference t) { //3
1215          if (t == null)
1216            return this;
1217          if (this.detail == null)
1218            this.detail = new ArrayList<Reference>();
1219          this.detail.add(t);
1220          return this;
1221        }
1222
1223        /**
1224         * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist {3}
1225         */
1226        public Reference getDetailFirstRep() { 
1227          if (getDetail().isEmpty()) {
1228            addDetail();
1229          }
1230          return getDetail().get(0);
1231        }
1232
1233        protected void listChildren(List<Property> children) {
1234          super.listChildren(children);
1235          children.add(new Property("supportingInfoSequence", "positiveInt", "Exceptions, special conditions and supporting information applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, supportingInfoSequence));
1236          children.add(new Property("category", "CodeableConcept", "Code to identify the general type of benefits under which products and services are provided.", 0, 1, category));
1237          children.add(new Property("productOrService", "CodeableConcept", "This contains the product, service, drug or other billing code for the item.", 0, 1, productOrService));
1238          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));
1239          children.add(new Property("provider", "Reference(Practitioner|PractitionerRole)", "The practitioner who is responsible for the product or service to be rendered to the patient.", 0, 1, provider));
1240          children.add(new Property("quantity", "Quantity", "The number of repetitions of a service or product.", 0, 1, quantity));
1241          children.add(new Property("unitPrice", "Money", "The amount charged to the patient by the provider for a single unit.", 0, 1, unitPrice));
1242          children.add(new Property("facility", "Reference(Location|Organization)", "Facility where the services will be provided.", 0, 1, facility));
1243          children.add(new Property("diagnosis", "", "Patient diagnosis for which care is sought.", 0, java.lang.Integer.MAX_VALUE, diagnosis));
1244          children.add(new Property("detail", "Reference(Any)", "The plan/proposal/order describing the proposed service in detail.", 0, java.lang.Integer.MAX_VALUE, detail));
1245        }
1246
1247        @Override
1248        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1249          switch (_hash) {
1250          case -595860510: /*supportingInfoSequence*/  return new Property("supportingInfoSequence", "positiveInt", "Exceptions, special conditions and supporting information applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, supportingInfoSequence);
1251          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);
1252          case 1957227299: /*productOrService*/  return new Property("productOrService", "CodeableConcept", "This contains the product, service, drug or other billing code for the item.", 0, 1, productOrService);
1253          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);
1254          case -987494927: /*provider*/  return new Property("provider", "Reference(Practitioner|PractitionerRole)", "The practitioner who is responsible for the product or service to be rendered to the patient.", 0, 1, provider);
1255          case -1285004149: /*quantity*/  return new Property("quantity", "Quantity", "The number of repetitions of a service or product.", 0, 1, quantity);
1256          case -486196699: /*unitPrice*/  return new Property("unitPrice", "Money", "The amount charged to the patient by the provider for a single unit.", 0, 1, unitPrice);
1257          case 501116579: /*facility*/  return new Property("facility", "Reference(Location|Organization)", "Facility where the services will be provided.", 0, 1, facility);
1258          case 1196993265: /*diagnosis*/  return new Property("diagnosis", "", "Patient diagnosis for which care is sought.", 0, java.lang.Integer.MAX_VALUE, diagnosis);
1259          case -1335224239: /*detail*/  return new Property("detail", "Reference(Any)", "The plan/proposal/order describing the proposed service in detail.", 0, java.lang.Integer.MAX_VALUE, detail);
1260          default: return super.getNamedProperty(_hash, _name, _checkValid);
1261          }
1262
1263        }
1264
1265      @Override
1266      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1267        switch (hash) {
1268        case -595860510: /*supportingInfoSequence*/ return this.supportingInfoSequence == null ? new Base[0] : this.supportingInfoSequence.toArray(new Base[this.supportingInfoSequence.size()]); // PositiveIntType
1269        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
1270        case 1957227299: /*productOrService*/ return this.productOrService == null ? new Base[0] : new Base[] {this.productOrService}; // CodeableConcept
1271        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : this.modifier.toArray(new Base[this.modifier.size()]); // CodeableConcept
1272        case -987494927: /*provider*/ return this.provider == null ? new Base[0] : new Base[] {this.provider}; // Reference
1273        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // Quantity
1274        case -486196699: /*unitPrice*/ return this.unitPrice == null ? new Base[0] : new Base[] {this.unitPrice}; // Money
1275        case 501116579: /*facility*/ return this.facility == null ? new Base[0] : new Base[] {this.facility}; // Reference
1276        case 1196993265: /*diagnosis*/ return this.diagnosis == null ? new Base[0] : this.diagnosis.toArray(new Base[this.diagnosis.size()]); // DiagnosisComponent
1277        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // Reference
1278        default: return super.getProperty(hash, name, checkValid);
1279        }
1280
1281      }
1282
1283      @Override
1284      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1285        switch (hash) {
1286        case -595860510: // supportingInfoSequence
1287          this.getSupportingInfoSequence().add(TypeConvertor.castToPositiveInt(value)); // PositiveIntType
1288          return value;
1289        case 50511102: // category
1290          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1291          return value;
1292        case 1957227299: // productOrService
1293          this.productOrService = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1294          return value;
1295        case -615513385: // modifier
1296          this.getModifier().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1297          return value;
1298        case -987494927: // provider
1299          this.provider = TypeConvertor.castToReference(value); // Reference
1300          return value;
1301        case -1285004149: // quantity
1302          this.quantity = TypeConvertor.castToQuantity(value); // Quantity
1303          return value;
1304        case -486196699: // unitPrice
1305          this.unitPrice = TypeConvertor.castToMoney(value); // Money
1306          return value;
1307        case 501116579: // facility
1308          this.facility = TypeConvertor.castToReference(value); // Reference
1309          return value;
1310        case 1196993265: // diagnosis
1311          this.getDiagnosis().add((DiagnosisComponent) value); // DiagnosisComponent
1312          return value;
1313        case -1335224239: // detail
1314          this.getDetail().add(TypeConvertor.castToReference(value)); // Reference
1315          return value;
1316        default: return super.setProperty(hash, name, value);
1317        }
1318
1319      }
1320
1321      @Override
1322      public Base setProperty(String name, Base value) throws FHIRException {
1323        if (name.equals("supportingInfoSequence")) {
1324          this.getSupportingInfoSequence().add(TypeConvertor.castToPositiveInt(value));
1325        } else if (name.equals("category")) {
1326          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1327        } else if (name.equals("productOrService")) {
1328          this.productOrService = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1329        } else if (name.equals("modifier")) {
1330          this.getModifier().add(TypeConvertor.castToCodeableConcept(value));
1331        } else if (name.equals("provider")) {
1332          this.provider = TypeConvertor.castToReference(value); // Reference
1333        } else if (name.equals("quantity")) {
1334          this.quantity = TypeConvertor.castToQuantity(value); // Quantity
1335        } else if (name.equals("unitPrice")) {
1336          this.unitPrice = TypeConvertor.castToMoney(value); // Money
1337        } else if (name.equals("facility")) {
1338          this.facility = TypeConvertor.castToReference(value); // Reference
1339        } else if (name.equals("diagnosis")) {
1340          this.getDiagnosis().add((DiagnosisComponent) value);
1341        } else if (name.equals("detail")) {
1342          this.getDetail().add(TypeConvertor.castToReference(value));
1343        } else
1344          return super.setProperty(name, value);
1345        return value;
1346      }
1347
1348      @Override
1349      public Base makeProperty(int hash, String name) throws FHIRException {
1350        switch (hash) {
1351        case -595860510:  return addSupportingInfoSequenceElement();
1352        case 50511102:  return getCategory();
1353        case 1957227299:  return getProductOrService();
1354        case -615513385:  return addModifier(); 
1355        case -987494927:  return getProvider();
1356        case -1285004149:  return getQuantity();
1357        case -486196699:  return getUnitPrice();
1358        case 501116579:  return getFacility();
1359        case 1196993265:  return addDiagnosis(); 
1360        case -1335224239:  return addDetail(); 
1361        default: return super.makeProperty(hash, name);
1362        }
1363
1364      }
1365
1366      @Override
1367      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1368        switch (hash) {
1369        case -595860510: /*supportingInfoSequence*/ return new String[] {"positiveInt"};
1370        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1371        case 1957227299: /*productOrService*/ return new String[] {"CodeableConcept"};
1372        case -615513385: /*modifier*/ return new String[] {"CodeableConcept"};
1373        case -987494927: /*provider*/ return new String[] {"Reference"};
1374        case -1285004149: /*quantity*/ return new String[] {"Quantity"};
1375        case -486196699: /*unitPrice*/ return new String[] {"Money"};
1376        case 501116579: /*facility*/ return new String[] {"Reference"};
1377        case 1196993265: /*diagnosis*/ return new String[] {};
1378        case -1335224239: /*detail*/ return new String[] {"Reference"};
1379        default: return super.getTypesForProperty(hash, name);
1380        }
1381
1382      }
1383
1384      @Override
1385      public Base addChild(String name) throws FHIRException {
1386        if (name.equals("supportingInfoSequence")) {
1387          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.item.supportingInfoSequence");
1388        }
1389        else if (name.equals("category")) {
1390          this.category = new CodeableConcept();
1391          return this.category;
1392        }
1393        else if (name.equals("productOrService")) {
1394          this.productOrService = new CodeableConcept();
1395          return this.productOrService;
1396        }
1397        else if (name.equals("modifier")) {
1398          return addModifier();
1399        }
1400        else if (name.equals("provider")) {
1401          this.provider = new Reference();
1402          return this.provider;
1403        }
1404        else if (name.equals("quantity")) {
1405          this.quantity = new Quantity();
1406          return this.quantity;
1407        }
1408        else if (name.equals("unitPrice")) {
1409          this.unitPrice = new Money();
1410          return this.unitPrice;
1411        }
1412        else if (name.equals("facility")) {
1413          this.facility = new Reference();
1414          return this.facility;
1415        }
1416        else if (name.equals("diagnosis")) {
1417          return addDiagnosis();
1418        }
1419        else if (name.equals("detail")) {
1420          return addDetail();
1421        }
1422        else
1423          return super.addChild(name);
1424      }
1425
1426      public DetailsComponent copy() {
1427        DetailsComponent dst = new DetailsComponent();
1428        copyValues(dst);
1429        return dst;
1430      }
1431
1432      public void copyValues(DetailsComponent dst) {
1433        super.copyValues(dst);
1434        if (supportingInfoSequence != null) {
1435          dst.supportingInfoSequence = new ArrayList<PositiveIntType>();
1436          for (PositiveIntType i : supportingInfoSequence)
1437            dst.supportingInfoSequence.add(i.copy());
1438        };
1439        dst.category = category == null ? null : category.copy();
1440        dst.productOrService = productOrService == null ? null : productOrService.copy();
1441        if (modifier != null) {
1442          dst.modifier = new ArrayList<CodeableConcept>();
1443          for (CodeableConcept i : modifier)
1444            dst.modifier.add(i.copy());
1445        };
1446        dst.provider = provider == null ? null : provider.copy();
1447        dst.quantity = quantity == null ? null : quantity.copy();
1448        dst.unitPrice = unitPrice == null ? null : unitPrice.copy();
1449        dst.facility = facility == null ? null : facility.copy();
1450        if (diagnosis != null) {
1451          dst.diagnosis = new ArrayList<DiagnosisComponent>();
1452          for (DiagnosisComponent i : diagnosis)
1453            dst.diagnosis.add(i.copy());
1454        };
1455        if (detail != null) {
1456          dst.detail = new ArrayList<Reference>();
1457          for (Reference i : detail)
1458            dst.detail.add(i.copy());
1459        };
1460      }
1461
1462      @Override
1463      public boolean equalsDeep(Base other_) {
1464        if (!super.equalsDeep(other_))
1465          return false;
1466        if (!(other_ instanceof DetailsComponent))
1467          return false;
1468        DetailsComponent o = (DetailsComponent) other_;
1469        return compareDeep(supportingInfoSequence, o.supportingInfoSequence, true) && compareDeep(category, o.category, true)
1470           && compareDeep(productOrService, o.productOrService, true) && compareDeep(modifier, o.modifier, true)
1471           && compareDeep(provider, o.provider, true) && compareDeep(quantity, o.quantity, true) && compareDeep(unitPrice, o.unitPrice, true)
1472           && compareDeep(facility, o.facility, true) && compareDeep(diagnosis, o.diagnosis, true) && compareDeep(detail, o.detail, true)
1473          ;
1474      }
1475
1476      @Override
1477      public boolean equalsShallow(Base other_) {
1478        if (!super.equalsShallow(other_))
1479          return false;
1480        if (!(other_ instanceof DetailsComponent))
1481          return false;
1482        DetailsComponent o = (DetailsComponent) other_;
1483        return compareValues(supportingInfoSequence, o.supportingInfoSequence, true);
1484      }
1485
1486      public boolean isEmpty() {
1487        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(supportingInfoSequence, category
1488          , productOrService, modifier, provider, quantity, unitPrice, facility, diagnosis
1489          , detail);
1490      }
1491
1492  public String fhirType() {
1493    return "CoverageEligibilityRequest.item";
1494
1495  }
1496
1497  }
1498
1499    @Block()
1500    public static class DiagnosisComponent extends BackboneElement implements IBaseBackboneElement {
1501        /**
1502         * The nature of illness or problem in a coded form or as a reference to an external defined Condition.
1503         */
1504        @Child(name = "diagnosis", type = {CodeableConcept.class, Condition.class}, order=1, min=0, max=1, modifier=false, summary=false)
1505        @Description(shortDefinition="Nature of illness or problem", formalDefinition="The nature of illness or problem in a coded form or as a reference to an external defined Condition." )
1506        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/icd-10")
1507        protected DataType diagnosis;
1508
1509        private static final long serialVersionUID = 947131409L;
1510
1511    /**
1512     * Constructor
1513     */
1514      public DiagnosisComponent() {
1515        super();
1516      }
1517
1518        /**
1519         * @return {@link #diagnosis} (The nature of illness or problem in a coded form or as a reference to an external defined Condition.)
1520         */
1521        public DataType getDiagnosis() { 
1522          return this.diagnosis;
1523        }
1524
1525        /**
1526         * @return {@link #diagnosis} (The nature of illness or problem in a coded form or as a reference to an external defined Condition.)
1527         */
1528        public CodeableConcept getDiagnosisCodeableConcept() throws FHIRException { 
1529          if (this.diagnosis == null)
1530            this.diagnosis = new CodeableConcept();
1531          if (!(this.diagnosis instanceof CodeableConcept))
1532            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.diagnosis.getClass().getName()+" was encountered");
1533          return (CodeableConcept) this.diagnosis;
1534        }
1535
1536        public boolean hasDiagnosisCodeableConcept() { 
1537          return this != null && this.diagnosis instanceof CodeableConcept;
1538        }
1539
1540        /**
1541         * @return {@link #diagnosis} (The nature of illness or problem in a coded form or as a reference to an external defined Condition.)
1542         */
1543        public Reference getDiagnosisReference() throws FHIRException { 
1544          if (this.diagnosis == null)
1545            this.diagnosis = new Reference();
1546          if (!(this.diagnosis instanceof Reference))
1547            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.diagnosis.getClass().getName()+" was encountered");
1548          return (Reference) this.diagnosis;
1549        }
1550
1551        public boolean hasDiagnosisReference() { 
1552          return this != null && this.diagnosis instanceof Reference;
1553        }
1554
1555        public boolean hasDiagnosis() { 
1556          return this.diagnosis != null && !this.diagnosis.isEmpty();
1557        }
1558
1559        /**
1560         * @param value {@link #diagnosis} (The nature of illness or problem in a coded form or as a reference to an external defined Condition.)
1561         */
1562        public DiagnosisComponent setDiagnosis(DataType value) { 
1563          if (value != null && !(value instanceof CodeableConcept || value instanceof Reference))
1564            throw new Error("Not the right type for CoverageEligibilityRequest.item.diagnosis.diagnosis[x]: "+value.fhirType());
1565          this.diagnosis = value;
1566          return this;
1567        }
1568
1569        protected void listChildren(List<Property> children) {
1570          super.listChildren(children);
1571          children.add(new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", 0, 1, diagnosis));
1572        }
1573
1574        @Override
1575        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1576          switch (_hash) {
1577          case -1487009809: /*diagnosis[x]*/  return new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", 0, 1, diagnosis);
1578          case 1196993265: /*diagnosis*/  return new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", 0, 1, diagnosis);
1579          case 277781616: /*diagnosisCodeableConcept*/  return new Property("diagnosis[x]", "CodeableConcept", "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", 0, 1, diagnosis);
1580          case 2050454362: /*diagnosisReference*/  return new Property("diagnosis[x]", "Reference(Condition)", "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", 0, 1, diagnosis);
1581          default: return super.getNamedProperty(_hash, _name, _checkValid);
1582          }
1583
1584        }
1585
1586      @Override
1587      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1588        switch (hash) {
1589        case 1196993265: /*diagnosis*/ return this.diagnosis == null ? new Base[0] : new Base[] {this.diagnosis}; // DataType
1590        default: return super.getProperty(hash, name, checkValid);
1591        }
1592
1593      }
1594
1595      @Override
1596      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1597        switch (hash) {
1598        case 1196993265: // diagnosis
1599          this.diagnosis = TypeConvertor.castToType(value); // DataType
1600          return value;
1601        default: return super.setProperty(hash, name, value);
1602        }
1603
1604      }
1605
1606      @Override
1607      public Base setProperty(String name, Base value) throws FHIRException {
1608        if (name.equals("diagnosis[x]")) {
1609          this.diagnosis = TypeConvertor.castToType(value); // DataType
1610        } else
1611          return super.setProperty(name, value);
1612        return value;
1613      }
1614
1615      @Override
1616      public Base makeProperty(int hash, String name) throws FHIRException {
1617        switch (hash) {
1618        case -1487009809:  return getDiagnosis();
1619        case 1196993265:  return getDiagnosis();
1620        default: return super.makeProperty(hash, name);
1621        }
1622
1623      }
1624
1625      @Override
1626      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1627        switch (hash) {
1628        case 1196993265: /*diagnosis*/ return new String[] {"CodeableConcept", "Reference"};
1629        default: return super.getTypesForProperty(hash, name);
1630        }
1631
1632      }
1633
1634      @Override
1635      public Base addChild(String name) throws FHIRException {
1636        if (name.equals("diagnosisCodeableConcept")) {
1637          this.diagnosis = new CodeableConcept();
1638          return this.diagnosis;
1639        }
1640        else if (name.equals("diagnosisReference")) {
1641          this.diagnosis = new Reference();
1642          return this.diagnosis;
1643        }
1644        else
1645          return super.addChild(name);
1646      }
1647
1648      public DiagnosisComponent copy() {
1649        DiagnosisComponent dst = new DiagnosisComponent();
1650        copyValues(dst);
1651        return dst;
1652      }
1653
1654      public void copyValues(DiagnosisComponent dst) {
1655        super.copyValues(dst);
1656        dst.diagnosis = diagnosis == null ? null : diagnosis.copy();
1657      }
1658
1659      @Override
1660      public boolean equalsDeep(Base other_) {
1661        if (!super.equalsDeep(other_))
1662          return false;
1663        if (!(other_ instanceof DiagnosisComponent))
1664          return false;
1665        DiagnosisComponent o = (DiagnosisComponent) other_;
1666        return compareDeep(diagnosis, o.diagnosis, true);
1667      }
1668
1669      @Override
1670      public boolean equalsShallow(Base other_) {
1671        if (!super.equalsShallow(other_))
1672          return false;
1673        if (!(other_ instanceof DiagnosisComponent))
1674          return false;
1675        DiagnosisComponent o = (DiagnosisComponent) other_;
1676        return true;
1677      }
1678
1679      public boolean isEmpty() {
1680        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(diagnosis);
1681      }
1682
1683  public String fhirType() {
1684    return "CoverageEligibilityRequest.item.diagnosis";
1685
1686  }
1687
1688  }
1689
1690    /**
1691     * A unique identifier assigned to this coverage eligiblity request.
1692     */
1693    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1694    @Description(shortDefinition="Business Identifier for coverage eligiblity request", formalDefinition="A unique identifier assigned to this coverage eligiblity request." )
1695    protected List<Identifier> identifier;
1696
1697    /**
1698     * The status of the resource instance.
1699     */
1700    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
1701    @Description(shortDefinition="active | cancelled | draft | entered-in-error", formalDefinition="The status of the resource instance." )
1702    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fm-status")
1703    protected Enumeration<FinancialResourceStatusCodes> status;
1704
1705    /**
1706     * When the requestor expects the processor to complete processing.
1707     */
1708    @Child(name = "priority", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1709    @Description(shortDefinition="Desired processing priority", formalDefinition="When the requestor expects the processor to complete processing." )
1710    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/process-priority")
1711    protected CodeableConcept priority;
1712
1713    /**
1714     * 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.
1715     */
1716    @Child(name = "purpose", type = {CodeType.class}, order=3, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1717    @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." )
1718    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/eligibilityrequest-purpose")
1719    protected List<Enumeration<EligibilityRequestPurpose>> purpose;
1720
1721    /**
1722     * The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.
1723     */
1724    @Child(name = "patient", type = {Patient.class}, order=4, min=1, max=1, modifier=false, summary=true)
1725    @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." )
1726    protected Reference patient;
1727
1728    /**
1729     * The date or dates when the enclosed suite of services were performed or completed.
1730     */
1731    @Child(name = "serviced", type = {DateType.class, Period.class}, order=5, min=0, max=1, modifier=false, summary=false)
1732    @Description(shortDefinition="Estimated date or dates of service", formalDefinition="The date or dates when the enclosed suite of services were performed or completed." )
1733    protected DataType serviced;
1734
1735    /**
1736     * The date when this resource was created.
1737     */
1738    @Child(name = "created", type = {DateTimeType.class}, order=6, min=1, max=1, modifier=false, summary=true)
1739    @Description(shortDefinition="Creation date", formalDefinition="The date when this resource was created." )
1740    protected DateTimeType created;
1741
1742    /**
1743     * Person who created the request.
1744     */
1745    @Child(name = "enterer", type = {Practitioner.class, PractitionerRole.class}, order=7, min=0, max=1, modifier=false, summary=false)
1746    @Description(shortDefinition="Author", formalDefinition="Person who created the request." )
1747    protected Reference enterer;
1748
1749    /**
1750     * The provider which is responsible for the request.
1751     */
1752    @Child(name = "provider", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=8, min=0, max=1, modifier=false, summary=false)
1753    @Description(shortDefinition="Party responsible for the request", formalDefinition="The provider which is responsible for the request." )
1754    protected Reference provider;
1755
1756    /**
1757     * The Insurer who issued the coverage in question and is the recipient of the request.
1758     */
1759    @Child(name = "insurer", type = {Organization.class}, order=9, min=1, max=1, modifier=false, summary=true)
1760    @Description(shortDefinition="Coverage issuer", formalDefinition="The Insurer who issued the coverage in question and is the recipient of the request." )
1761    protected Reference insurer;
1762
1763    /**
1764     * Facility where the services are intended to be provided.
1765     */
1766    @Child(name = "facility", type = {Location.class}, order=10, min=0, max=1, modifier=false, summary=false)
1767    @Description(shortDefinition="Servicing facility", formalDefinition="Facility where the services are intended to be provided." )
1768    protected Reference facility;
1769
1770    /**
1771     * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.
1772     */
1773    @Child(name = "supportingInfo", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1774    @Description(shortDefinition="Supporting information", formalDefinition="Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues." )
1775    protected List<SupportingInformationComponent> supportingInfo;
1776
1777    /**
1778     * Financial instruments for reimbursement for the health care products and services.
1779     */
1780    @Child(name = "insurance", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1781    @Description(shortDefinition="Patient insurance information", formalDefinition="Financial instruments for reimbursement for the health care products and services." )
1782    protected List<InsuranceComponent> insurance;
1783
1784    /**
1785     * Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor.
1786     */
1787    @Child(name = "item", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1788    @Description(shortDefinition="Item to be evaluated for eligibiity", formalDefinition="Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor." )
1789    protected List<DetailsComponent> item;
1790
1791    private static final long serialVersionUID = -1573933127L;
1792
1793  /**
1794   * Constructor
1795   */
1796    public CoverageEligibilityRequest() {
1797      super();
1798    }
1799
1800  /**
1801   * Constructor
1802   */
1803    public CoverageEligibilityRequest(FinancialResourceStatusCodes status, EligibilityRequestPurpose purpose, Reference patient, Date created, Reference insurer) {
1804      super();
1805      this.setStatus(status);
1806      this.addPurpose(purpose);
1807      this.setPatient(patient);
1808      this.setCreated(created);
1809      this.setInsurer(insurer);
1810    }
1811
1812    /**
1813     * @return {@link #identifier} (A unique identifier assigned to this coverage eligiblity request.)
1814     */
1815    public List<Identifier> getIdentifier() { 
1816      if (this.identifier == null)
1817        this.identifier = new ArrayList<Identifier>();
1818      return this.identifier;
1819    }
1820
1821    /**
1822     * @return Returns a reference to <code>this</code> for easy method chaining
1823     */
1824    public CoverageEligibilityRequest setIdentifier(List<Identifier> theIdentifier) { 
1825      this.identifier = theIdentifier;
1826      return this;
1827    }
1828
1829    public boolean hasIdentifier() { 
1830      if (this.identifier == null)
1831        return false;
1832      for (Identifier item : this.identifier)
1833        if (!item.isEmpty())
1834          return true;
1835      return false;
1836    }
1837
1838    public Identifier addIdentifier() { //3
1839      Identifier t = new Identifier();
1840      if (this.identifier == null)
1841        this.identifier = new ArrayList<Identifier>();
1842      this.identifier.add(t);
1843      return t;
1844    }
1845
1846    public CoverageEligibilityRequest addIdentifier(Identifier t) { //3
1847      if (t == null)
1848        return this;
1849      if (this.identifier == null)
1850        this.identifier = new ArrayList<Identifier>();
1851      this.identifier.add(t);
1852      return this;
1853    }
1854
1855    /**
1856     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1857     */
1858    public Identifier getIdentifierFirstRep() { 
1859      if (getIdentifier().isEmpty()) {
1860        addIdentifier();
1861      }
1862      return getIdentifier().get(0);
1863    }
1864
1865    /**
1866     * @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
1867     */
1868    public Enumeration<FinancialResourceStatusCodes> getStatusElement() { 
1869      if (this.status == null)
1870        if (Configuration.errorOnAutoCreate())
1871          throw new Error("Attempt to auto-create CoverageEligibilityRequest.status");
1872        else if (Configuration.doAutoCreate())
1873          this.status = new Enumeration<FinancialResourceStatusCodes>(new FinancialResourceStatusCodesEnumFactory()); // bb
1874      return this.status;
1875    }
1876
1877    public boolean hasStatusElement() { 
1878      return this.status != null && !this.status.isEmpty();
1879    }
1880
1881    public boolean hasStatus() { 
1882      return this.status != null && !this.status.isEmpty();
1883    }
1884
1885    /**
1886     * @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
1887     */
1888    public CoverageEligibilityRequest setStatusElement(Enumeration<FinancialResourceStatusCodes> value) { 
1889      this.status = value;
1890      return this;
1891    }
1892
1893    /**
1894     * @return The status of the resource instance.
1895     */
1896    public FinancialResourceStatusCodes getStatus() { 
1897      return this.status == null ? null : this.status.getValue();
1898    }
1899
1900    /**
1901     * @param value The status of the resource instance.
1902     */
1903    public CoverageEligibilityRequest setStatus(FinancialResourceStatusCodes value) { 
1904        if (this.status == null)
1905          this.status = new Enumeration<FinancialResourceStatusCodes>(new FinancialResourceStatusCodesEnumFactory());
1906        this.status.setValue(value);
1907      return this;
1908    }
1909
1910    /**
1911     * @return {@link #priority} (When the requestor expects the processor to complete processing.)
1912     */
1913    public CodeableConcept getPriority() { 
1914      if (this.priority == null)
1915        if (Configuration.errorOnAutoCreate())
1916          throw new Error("Attempt to auto-create CoverageEligibilityRequest.priority");
1917        else if (Configuration.doAutoCreate())
1918          this.priority = new CodeableConcept(); // cc
1919      return this.priority;
1920    }
1921
1922    public boolean hasPriority() { 
1923      return this.priority != null && !this.priority.isEmpty();
1924    }
1925
1926    /**
1927     * @param value {@link #priority} (When the requestor expects the processor to complete processing.)
1928     */
1929    public CoverageEligibilityRequest setPriority(CodeableConcept value) { 
1930      this.priority = value;
1931      return this;
1932    }
1933
1934    /**
1935     * @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.)
1936     */
1937    public List<Enumeration<EligibilityRequestPurpose>> getPurpose() { 
1938      if (this.purpose == null)
1939        this.purpose = new ArrayList<Enumeration<EligibilityRequestPurpose>>();
1940      return this.purpose;
1941    }
1942
1943    /**
1944     * @return Returns a reference to <code>this</code> for easy method chaining
1945     */
1946    public CoverageEligibilityRequest setPurpose(List<Enumeration<EligibilityRequestPurpose>> thePurpose) { 
1947      this.purpose = thePurpose;
1948      return this;
1949    }
1950
1951    public boolean hasPurpose() { 
1952      if (this.purpose == null)
1953        return false;
1954      for (Enumeration<EligibilityRequestPurpose> item : this.purpose)
1955        if (!item.isEmpty())
1956          return true;
1957      return false;
1958    }
1959
1960    /**
1961     * @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.)
1962     */
1963    public Enumeration<EligibilityRequestPurpose> addPurposeElement() {//2 
1964      Enumeration<EligibilityRequestPurpose> t = new Enumeration<EligibilityRequestPurpose>(new EligibilityRequestPurposeEnumFactory());
1965      if (this.purpose == null)
1966        this.purpose = new ArrayList<Enumeration<EligibilityRequestPurpose>>();
1967      this.purpose.add(t);
1968      return t;
1969    }
1970
1971    /**
1972     * @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.)
1973     */
1974    public CoverageEligibilityRequest addPurpose(EligibilityRequestPurpose value) { //1
1975      Enumeration<EligibilityRequestPurpose> t = new Enumeration<EligibilityRequestPurpose>(new EligibilityRequestPurposeEnumFactory());
1976      t.setValue(value);
1977      if (this.purpose == null)
1978        this.purpose = new ArrayList<Enumeration<EligibilityRequestPurpose>>();
1979      this.purpose.add(t);
1980      return this;
1981    }
1982
1983    /**
1984     * @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.)
1985     */
1986    public boolean hasPurpose(EligibilityRequestPurpose value) { 
1987      if (this.purpose == null)
1988        return false;
1989      for (Enumeration<EligibilityRequestPurpose> v : this.purpose)
1990        if (v.getValue().equals(value)) // code
1991          return true;
1992      return false;
1993    }
1994
1995    /**
1996     * @return {@link #patient} (The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.)
1997     */
1998    public Reference getPatient() { 
1999      if (this.patient == null)
2000        if (Configuration.errorOnAutoCreate())
2001          throw new Error("Attempt to auto-create CoverageEligibilityRequest.patient");
2002        else if (Configuration.doAutoCreate())
2003          this.patient = new Reference(); // cc
2004      return this.patient;
2005    }
2006
2007    public boolean hasPatient() { 
2008      return this.patient != null && !this.patient.isEmpty();
2009    }
2010
2011    /**
2012     * @param value {@link #patient} (The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.)
2013     */
2014    public CoverageEligibilityRequest setPatient(Reference value) { 
2015      this.patient = value;
2016      return this;
2017    }
2018
2019    /**
2020     * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2021     */
2022    public DataType getServiced() { 
2023      return this.serviced;
2024    }
2025
2026    /**
2027     * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2028     */
2029    public DateType getServicedDateType() throws FHIRException { 
2030      if (this.serviced == null)
2031        this.serviced = new DateType();
2032      if (!(this.serviced instanceof DateType))
2033        throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.serviced.getClass().getName()+" was encountered");
2034      return (DateType) this.serviced;
2035    }
2036
2037    public boolean hasServicedDateType() { 
2038      return this != null && this.serviced instanceof DateType;
2039    }
2040
2041    /**
2042     * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2043     */
2044    public Period getServicedPeriod() throws FHIRException { 
2045      if (this.serviced == null)
2046        this.serviced = new Period();
2047      if (!(this.serviced instanceof Period))
2048        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.serviced.getClass().getName()+" was encountered");
2049      return (Period) this.serviced;
2050    }
2051
2052    public boolean hasServicedPeriod() { 
2053      return this != null && this.serviced instanceof Period;
2054    }
2055
2056    public boolean hasServiced() { 
2057      return this.serviced != null && !this.serviced.isEmpty();
2058    }
2059
2060    /**
2061     * @param value {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
2062     */
2063    public CoverageEligibilityRequest setServiced(DataType value) { 
2064      if (value != null && !(value instanceof DateType || value instanceof Period))
2065        throw new Error("Not the right type for CoverageEligibilityRequest.serviced[x]: "+value.fhirType());
2066      this.serviced = value;
2067      return this;
2068    }
2069
2070    /**
2071     * @return {@link #created} (The date when this resource was created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
2072     */
2073    public DateTimeType getCreatedElement() { 
2074      if (this.created == null)
2075        if (Configuration.errorOnAutoCreate())
2076          throw new Error("Attempt to auto-create CoverageEligibilityRequest.created");
2077        else if (Configuration.doAutoCreate())
2078          this.created = new DateTimeType(); // bb
2079      return this.created;
2080    }
2081
2082    public boolean hasCreatedElement() { 
2083      return this.created != null && !this.created.isEmpty();
2084    }
2085
2086    public boolean hasCreated() { 
2087      return this.created != null && !this.created.isEmpty();
2088    }
2089
2090    /**
2091     * @param value {@link #created} (The date when this resource was created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
2092     */
2093    public CoverageEligibilityRequest setCreatedElement(DateTimeType value) { 
2094      this.created = value;
2095      return this;
2096    }
2097
2098    /**
2099     * @return The date when this resource was created.
2100     */
2101    public Date getCreated() { 
2102      return this.created == null ? null : this.created.getValue();
2103    }
2104
2105    /**
2106     * @param value The date when this resource was created.
2107     */
2108    public CoverageEligibilityRequest setCreated(Date value) { 
2109        if (this.created == null)
2110          this.created = new DateTimeType();
2111        this.created.setValue(value);
2112      return this;
2113    }
2114
2115    /**
2116     * @return {@link #enterer} (Person who created the request.)
2117     */
2118    public Reference getEnterer() { 
2119      if (this.enterer == null)
2120        if (Configuration.errorOnAutoCreate())
2121          throw new Error("Attempt to auto-create CoverageEligibilityRequest.enterer");
2122        else if (Configuration.doAutoCreate())
2123          this.enterer = new Reference(); // cc
2124      return this.enterer;
2125    }
2126
2127    public boolean hasEnterer() { 
2128      return this.enterer != null && !this.enterer.isEmpty();
2129    }
2130
2131    /**
2132     * @param value {@link #enterer} (Person who created the request.)
2133     */
2134    public CoverageEligibilityRequest setEnterer(Reference value) { 
2135      this.enterer = value;
2136      return this;
2137    }
2138
2139    /**
2140     * @return {@link #provider} (The provider which is responsible for the request.)
2141     */
2142    public Reference getProvider() { 
2143      if (this.provider == null)
2144        if (Configuration.errorOnAutoCreate())
2145          throw new Error("Attempt to auto-create CoverageEligibilityRequest.provider");
2146        else if (Configuration.doAutoCreate())
2147          this.provider = new Reference(); // cc
2148      return this.provider;
2149    }
2150
2151    public boolean hasProvider() { 
2152      return this.provider != null && !this.provider.isEmpty();
2153    }
2154
2155    /**
2156     * @param value {@link #provider} (The provider which is responsible for the request.)
2157     */
2158    public CoverageEligibilityRequest setProvider(Reference value) { 
2159      this.provider = value;
2160      return this;
2161    }
2162
2163    /**
2164     * @return {@link #insurer} (The Insurer who issued the coverage in question and is the recipient of the request.)
2165     */
2166    public Reference getInsurer() { 
2167      if (this.insurer == null)
2168        if (Configuration.errorOnAutoCreate())
2169          throw new Error("Attempt to auto-create CoverageEligibilityRequest.insurer");
2170        else if (Configuration.doAutoCreate())
2171          this.insurer = new Reference(); // cc
2172      return this.insurer;
2173    }
2174
2175    public boolean hasInsurer() { 
2176      return this.insurer != null && !this.insurer.isEmpty();
2177    }
2178
2179    /**
2180     * @param value {@link #insurer} (The Insurer who issued the coverage in question and is the recipient of the request.)
2181     */
2182    public CoverageEligibilityRequest setInsurer(Reference value) { 
2183      this.insurer = value;
2184      return this;
2185    }
2186
2187    /**
2188     * @return {@link #facility} (Facility where the services are intended to be provided.)
2189     */
2190    public Reference getFacility() { 
2191      if (this.facility == null)
2192        if (Configuration.errorOnAutoCreate())
2193          throw new Error("Attempt to auto-create CoverageEligibilityRequest.facility");
2194        else if (Configuration.doAutoCreate())
2195          this.facility = new Reference(); // cc
2196      return this.facility;
2197    }
2198
2199    public boolean hasFacility() { 
2200      return this.facility != null && !this.facility.isEmpty();
2201    }
2202
2203    /**
2204     * @param value {@link #facility} (Facility where the services are intended to be provided.)
2205     */
2206    public CoverageEligibilityRequest setFacility(Reference value) { 
2207      this.facility = value;
2208      return this;
2209    }
2210
2211    /**
2212     * @return {@link #supportingInfo} (Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.)
2213     */
2214    public List<SupportingInformationComponent> getSupportingInfo() { 
2215      if (this.supportingInfo == null)
2216        this.supportingInfo = new ArrayList<SupportingInformationComponent>();
2217      return this.supportingInfo;
2218    }
2219
2220    /**
2221     * @return Returns a reference to <code>this</code> for easy method chaining
2222     */
2223    public CoverageEligibilityRequest setSupportingInfo(List<SupportingInformationComponent> theSupportingInfo) { 
2224      this.supportingInfo = theSupportingInfo;
2225      return this;
2226    }
2227
2228    public boolean hasSupportingInfo() { 
2229      if (this.supportingInfo == null)
2230        return false;
2231      for (SupportingInformationComponent item : this.supportingInfo)
2232        if (!item.isEmpty())
2233          return true;
2234      return false;
2235    }
2236
2237    public SupportingInformationComponent addSupportingInfo() { //3
2238      SupportingInformationComponent t = new SupportingInformationComponent();
2239      if (this.supportingInfo == null)
2240        this.supportingInfo = new ArrayList<SupportingInformationComponent>();
2241      this.supportingInfo.add(t);
2242      return t;
2243    }
2244
2245    public CoverageEligibilityRequest addSupportingInfo(SupportingInformationComponent t) { //3
2246      if (t == null)
2247        return this;
2248      if (this.supportingInfo == null)
2249        this.supportingInfo = new ArrayList<SupportingInformationComponent>();
2250      this.supportingInfo.add(t);
2251      return this;
2252    }
2253
2254    /**
2255     * @return The first repetition of repeating field {@link #supportingInfo}, creating it if it does not already exist {3}
2256     */
2257    public SupportingInformationComponent getSupportingInfoFirstRep() { 
2258      if (getSupportingInfo().isEmpty()) {
2259        addSupportingInfo();
2260      }
2261      return getSupportingInfo().get(0);
2262    }
2263
2264    /**
2265     * @return {@link #insurance} (Financial instruments for reimbursement for the health care products and services.)
2266     */
2267    public List<InsuranceComponent> getInsurance() { 
2268      if (this.insurance == null)
2269        this.insurance = new ArrayList<InsuranceComponent>();
2270      return this.insurance;
2271    }
2272
2273    /**
2274     * @return Returns a reference to <code>this</code> for easy method chaining
2275     */
2276    public CoverageEligibilityRequest setInsurance(List<InsuranceComponent> theInsurance) { 
2277      this.insurance = theInsurance;
2278      return this;
2279    }
2280
2281    public boolean hasInsurance() { 
2282      if (this.insurance == null)
2283        return false;
2284      for (InsuranceComponent item : this.insurance)
2285        if (!item.isEmpty())
2286          return true;
2287      return false;
2288    }
2289
2290    public InsuranceComponent addInsurance() { //3
2291      InsuranceComponent t = new InsuranceComponent();
2292      if (this.insurance == null)
2293        this.insurance = new ArrayList<InsuranceComponent>();
2294      this.insurance.add(t);
2295      return t;
2296    }
2297
2298    public CoverageEligibilityRequest addInsurance(InsuranceComponent t) { //3
2299      if (t == null)
2300        return this;
2301      if (this.insurance == null)
2302        this.insurance = new ArrayList<InsuranceComponent>();
2303      this.insurance.add(t);
2304      return this;
2305    }
2306
2307    /**
2308     * @return The first repetition of repeating field {@link #insurance}, creating it if it does not already exist {3}
2309     */
2310    public InsuranceComponent getInsuranceFirstRep() { 
2311      if (getInsurance().isEmpty()) {
2312        addInsurance();
2313      }
2314      return getInsurance().get(0);
2315    }
2316
2317    /**
2318     * @return {@link #item} (Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor.)
2319     */
2320    public List<DetailsComponent> getItem() { 
2321      if (this.item == null)
2322        this.item = new ArrayList<DetailsComponent>();
2323      return this.item;
2324    }
2325
2326    /**
2327     * @return Returns a reference to <code>this</code> for easy method chaining
2328     */
2329    public CoverageEligibilityRequest setItem(List<DetailsComponent> theItem) { 
2330      this.item = theItem;
2331      return this;
2332    }
2333
2334    public boolean hasItem() { 
2335      if (this.item == null)
2336        return false;
2337      for (DetailsComponent item : this.item)
2338        if (!item.isEmpty())
2339          return true;
2340      return false;
2341    }
2342
2343    public DetailsComponent addItem() { //3
2344      DetailsComponent t = new DetailsComponent();
2345      if (this.item == null)
2346        this.item = new ArrayList<DetailsComponent>();
2347      this.item.add(t);
2348      return t;
2349    }
2350
2351    public CoverageEligibilityRequest addItem(DetailsComponent t) { //3
2352      if (t == null)
2353        return this;
2354      if (this.item == null)
2355        this.item = new ArrayList<DetailsComponent>();
2356      this.item.add(t);
2357      return this;
2358    }
2359
2360    /**
2361     * @return The first repetition of repeating field {@link #item}, creating it if it does not already exist {3}
2362     */
2363    public DetailsComponent getItemFirstRep() { 
2364      if (getItem().isEmpty()) {
2365        addItem();
2366      }
2367      return getItem().get(0);
2368    }
2369
2370      protected void listChildren(List<Property> children) {
2371        super.listChildren(children);
2372        children.add(new Property("identifier", "Identifier", "A unique identifier assigned to this coverage eligiblity request.", 0, java.lang.Integer.MAX_VALUE, identifier));
2373        children.add(new Property("status", "code", "The status of the resource instance.", 0, 1, status));
2374        children.add(new Property("priority", "CodeableConcept", "When the requestor expects the processor to complete processing.", 0, 1, priority));
2375        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));
2376        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));
2377        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));
2378        children.add(new Property("created", "dateTime", "The date when this resource was created.", 0, 1, created));
2379        children.add(new Property("enterer", "Reference(Practitioner|PractitionerRole)", "Person who created the request.", 0, 1, enterer));
2380        children.add(new Property("provider", "Reference(Practitioner|PractitionerRole|Organization)", "The provider which is responsible for the request.", 0, 1, provider));
2381        children.add(new Property("insurer", "Reference(Organization)", "The Insurer who issued the coverage in question and is the recipient of the request.", 0, 1, insurer));
2382        children.add(new Property("facility", "Reference(Location)", "Facility where the services are intended to be provided.", 0, 1, facility));
2383        children.add(new Property("supportingInfo", "", "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", 0, java.lang.Integer.MAX_VALUE, supportingInfo));
2384        children.add(new Property("insurance", "", "Financial instruments for reimbursement for the health care products and services.", 0, java.lang.Integer.MAX_VALUE, insurance));
2385        children.add(new Property("item", "", "Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor.", 0, java.lang.Integer.MAX_VALUE, item));
2386      }
2387
2388      @Override
2389      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2390        switch (_hash) {
2391        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A unique identifier assigned to this coverage eligiblity request.", 0, java.lang.Integer.MAX_VALUE, identifier);
2392        case -892481550: /*status*/  return new Property("status", "code", "The status of the resource instance.", 0, 1, status);
2393        case -1165461084: /*priority*/  return new Property("priority", "CodeableConcept", "When the requestor expects the processor to complete processing.", 0, 1, priority);
2394        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);
2395        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);
2396        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);
2397        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);
2398        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);
2399        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);
2400        case 1028554472: /*created*/  return new Property("created", "dateTime", "The date when this resource was created.", 0, 1, created);
2401        case -1591951995: /*enterer*/  return new Property("enterer", "Reference(Practitioner|PractitionerRole)", "Person who created the request.", 0, 1, enterer);
2402        case -987494927: /*provider*/  return new Property("provider", "Reference(Practitioner|PractitionerRole|Organization)", "The provider which is responsible for the request.", 0, 1, provider);
2403        case 1957615864: /*insurer*/  return new Property("insurer", "Reference(Organization)", "The Insurer who issued the coverage in question and is the recipient of the request.", 0, 1, insurer);
2404        case 501116579: /*facility*/  return new Property("facility", "Reference(Location)", "Facility where the services are intended to be provided.", 0, 1, facility);
2405        case 1922406657: /*supportingInfo*/  return new Property("supportingInfo", "", "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", 0, java.lang.Integer.MAX_VALUE, supportingInfo);
2406        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);
2407        case 3242771: /*item*/  return new Property("item", "", "Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor.", 0, java.lang.Integer.MAX_VALUE, item);
2408        default: return super.getNamedProperty(_hash, _name, _checkValid);
2409        }
2410
2411      }
2412
2413      @Override
2414      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2415        switch (hash) {
2416        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2417        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<FinancialResourceStatusCodes>
2418        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // CodeableConcept
2419        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : this.purpose.toArray(new Base[this.purpose.size()]); // Enumeration<EligibilityRequestPurpose>
2420        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
2421        case 1379209295: /*serviced*/ return this.serviced == null ? new Base[0] : new Base[] {this.serviced}; // DataType
2422        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
2423        case -1591951995: /*enterer*/ return this.enterer == null ? new Base[0] : new Base[] {this.enterer}; // Reference
2424        case -987494927: /*provider*/ return this.provider == null ? new Base[0] : new Base[] {this.provider}; // Reference
2425        case 1957615864: /*insurer*/ return this.insurer == null ? new Base[0] : new Base[] {this.insurer}; // Reference
2426        case 501116579: /*facility*/ return this.facility == null ? new Base[0] : new Base[] {this.facility}; // Reference
2427        case 1922406657: /*supportingInfo*/ return this.supportingInfo == null ? new Base[0] : this.supportingInfo.toArray(new Base[this.supportingInfo.size()]); // SupportingInformationComponent
2428        case 73049818: /*insurance*/ return this.insurance == null ? new Base[0] : this.insurance.toArray(new Base[this.insurance.size()]); // InsuranceComponent
2429        case 3242771: /*item*/ return this.item == null ? new Base[0] : this.item.toArray(new Base[this.item.size()]); // DetailsComponent
2430        default: return super.getProperty(hash, name, checkValid);
2431        }
2432
2433      }
2434
2435      @Override
2436      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2437        switch (hash) {
2438        case -1618432855: // identifier
2439          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
2440          return value;
2441        case -892481550: // status
2442          value = new FinancialResourceStatusCodesEnumFactory().fromType(TypeConvertor.castToCode(value));
2443          this.status = (Enumeration) value; // Enumeration<FinancialResourceStatusCodes>
2444          return value;
2445        case -1165461084: // priority
2446          this.priority = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2447          return value;
2448        case -220463842: // purpose
2449          value = new EligibilityRequestPurposeEnumFactory().fromType(TypeConvertor.castToCode(value));
2450          this.getPurpose().add((Enumeration) value); // Enumeration<EligibilityRequestPurpose>
2451          return value;
2452        case -791418107: // patient
2453          this.patient = TypeConvertor.castToReference(value); // Reference
2454          return value;
2455        case 1379209295: // serviced
2456          this.serviced = TypeConvertor.castToType(value); // DataType
2457          return value;
2458        case 1028554472: // created
2459          this.created = TypeConvertor.castToDateTime(value); // DateTimeType
2460          return value;
2461        case -1591951995: // enterer
2462          this.enterer = TypeConvertor.castToReference(value); // Reference
2463          return value;
2464        case -987494927: // provider
2465          this.provider = TypeConvertor.castToReference(value); // Reference
2466          return value;
2467        case 1957615864: // insurer
2468          this.insurer = TypeConvertor.castToReference(value); // Reference
2469          return value;
2470        case 501116579: // facility
2471          this.facility = TypeConvertor.castToReference(value); // Reference
2472          return value;
2473        case 1922406657: // supportingInfo
2474          this.getSupportingInfo().add((SupportingInformationComponent) value); // SupportingInformationComponent
2475          return value;
2476        case 73049818: // insurance
2477          this.getInsurance().add((InsuranceComponent) value); // InsuranceComponent
2478          return value;
2479        case 3242771: // item
2480          this.getItem().add((DetailsComponent) value); // DetailsComponent
2481          return value;
2482        default: return super.setProperty(hash, name, value);
2483        }
2484
2485      }
2486
2487      @Override
2488      public Base setProperty(String name, Base value) throws FHIRException {
2489        if (name.equals("identifier")) {
2490          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2491        } else if (name.equals("status")) {
2492          value = new FinancialResourceStatusCodesEnumFactory().fromType(TypeConvertor.castToCode(value));
2493          this.status = (Enumeration) value; // Enumeration<FinancialResourceStatusCodes>
2494        } else if (name.equals("priority")) {
2495          this.priority = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2496        } else if (name.equals("purpose")) {
2497          value = new EligibilityRequestPurposeEnumFactory().fromType(TypeConvertor.castToCode(value));
2498          this.getPurpose().add((Enumeration) value);
2499        } else if (name.equals("patient")) {
2500          this.patient = TypeConvertor.castToReference(value); // Reference
2501        } else if (name.equals("serviced[x]")) {
2502          this.serviced = TypeConvertor.castToType(value); // DataType
2503        } else if (name.equals("created")) {
2504          this.created = TypeConvertor.castToDateTime(value); // DateTimeType
2505        } else if (name.equals("enterer")) {
2506          this.enterer = TypeConvertor.castToReference(value); // Reference
2507        } else if (name.equals("provider")) {
2508          this.provider = TypeConvertor.castToReference(value); // Reference
2509        } else if (name.equals("insurer")) {
2510          this.insurer = TypeConvertor.castToReference(value); // Reference
2511        } else if (name.equals("facility")) {
2512          this.facility = TypeConvertor.castToReference(value); // Reference
2513        } else if (name.equals("supportingInfo")) {
2514          this.getSupportingInfo().add((SupportingInformationComponent) value);
2515        } else if (name.equals("insurance")) {
2516          this.getInsurance().add((InsuranceComponent) value);
2517        } else if (name.equals("item")) {
2518          this.getItem().add((DetailsComponent) value);
2519        } else
2520          return super.setProperty(name, value);
2521        return value;
2522      }
2523
2524      @Override
2525      public Base makeProperty(int hash, String name) throws FHIRException {
2526        switch (hash) {
2527        case -1618432855:  return addIdentifier(); 
2528        case -892481550:  return getStatusElement();
2529        case -1165461084:  return getPriority();
2530        case -220463842:  return addPurposeElement();
2531        case -791418107:  return getPatient();
2532        case -1927922223:  return getServiced();
2533        case 1379209295:  return getServiced();
2534        case 1028554472:  return getCreatedElement();
2535        case -1591951995:  return getEnterer();
2536        case -987494927:  return getProvider();
2537        case 1957615864:  return getInsurer();
2538        case 501116579:  return getFacility();
2539        case 1922406657:  return addSupportingInfo(); 
2540        case 73049818:  return addInsurance(); 
2541        case 3242771:  return addItem(); 
2542        default: return super.makeProperty(hash, name);
2543        }
2544
2545      }
2546
2547      @Override
2548      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2549        switch (hash) {
2550        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2551        case -892481550: /*status*/ return new String[] {"code"};
2552        case -1165461084: /*priority*/ return new String[] {"CodeableConcept"};
2553        case -220463842: /*purpose*/ return new String[] {"code"};
2554        case -791418107: /*patient*/ return new String[] {"Reference"};
2555        case 1379209295: /*serviced*/ return new String[] {"date", "Period"};
2556        case 1028554472: /*created*/ return new String[] {"dateTime"};
2557        case -1591951995: /*enterer*/ return new String[] {"Reference"};
2558        case -987494927: /*provider*/ return new String[] {"Reference"};
2559        case 1957615864: /*insurer*/ return new String[] {"Reference"};
2560        case 501116579: /*facility*/ return new String[] {"Reference"};
2561        case 1922406657: /*supportingInfo*/ return new String[] {};
2562        case 73049818: /*insurance*/ return new String[] {};
2563        case 3242771: /*item*/ return new String[] {};
2564        default: return super.getTypesForProperty(hash, name);
2565        }
2566
2567      }
2568
2569      @Override
2570      public Base addChild(String name) throws FHIRException {
2571        if (name.equals("identifier")) {
2572          return addIdentifier();
2573        }
2574        else if (name.equals("status")) {
2575          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.status");
2576        }
2577        else if (name.equals("priority")) {
2578          this.priority = new CodeableConcept();
2579          return this.priority;
2580        }
2581        else if (name.equals("purpose")) {
2582          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.purpose");
2583        }
2584        else if (name.equals("patient")) {
2585          this.patient = new Reference();
2586          return this.patient;
2587        }
2588        else if (name.equals("servicedDate")) {
2589          this.serviced = new DateType();
2590          return this.serviced;
2591        }
2592        else if (name.equals("servicedPeriod")) {
2593          this.serviced = new Period();
2594          return this.serviced;
2595        }
2596        else if (name.equals("created")) {
2597          throw new FHIRException("Cannot call addChild on a primitive type CoverageEligibilityRequest.created");
2598        }
2599        else if (name.equals("enterer")) {
2600          this.enterer = new Reference();
2601          return this.enterer;
2602        }
2603        else if (name.equals("provider")) {
2604          this.provider = new Reference();
2605          return this.provider;
2606        }
2607        else if (name.equals("insurer")) {
2608          this.insurer = new Reference();
2609          return this.insurer;
2610        }
2611        else if (name.equals("facility")) {
2612          this.facility = new Reference();
2613          return this.facility;
2614        }
2615        else if (name.equals("supportingInfo")) {
2616          return addSupportingInfo();
2617        }
2618        else if (name.equals("insurance")) {
2619          return addInsurance();
2620        }
2621        else if (name.equals("item")) {
2622          return addItem();
2623        }
2624        else
2625          return super.addChild(name);
2626      }
2627
2628  public String fhirType() {
2629    return "CoverageEligibilityRequest";
2630
2631  }
2632
2633      public CoverageEligibilityRequest copy() {
2634        CoverageEligibilityRequest dst = new CoverageEligibilityRequest();
2635        copyValues(dst);
2636        return dst;
2637      }
2638
2639      public void copyValues(CoverageEligibilityRequest dst) {
2640        super.copyValues(dst);
2641        if (identifier != null) {
2642          dst.identifier = new ArrayList<Identifier>();
2643          for (Identifier i : identifier)
2644            dst.identifier.add(i.copy());
2645        };
2646        dst.status = status == null ? null : status.copy();
2647        dst.priority = priority == null ? null : priority.copy();
2648        if (purpose != null) {
2649          dst.purpose = new ArrayList<Enumeration<EligibilityRequestPurpose>>();
2650          for (Enumeration<EligibilityRequestPurpose> i : purpose)
2651            dst.purpose.add(i.copy());
2652        };
2653        dst.patient = patient == null ? null : patient.copy();
2654        dst.serviced = serviced == null ? null : serviced.copy();
2655        dst.created = created == null ? null : created.copy();
2656        dst.enterer = enterer == null ? null : enterer.copy();
2657        dst.provider = provider == null ? null : provider.copy();
2658        dst.insurer = insurer == null ? null : insurer.copy();
2659        dst.facility = facility == null ? null : facility.copy();
2660        if (supportingInfo != null) {
2661          dst.supportingInfo = new ArrayList<SupportingInformationComponent>();
2662          for (SupportingInformationComponent i : supportingInfo)
2663            dst.supportingInfo.add(i.copy());
2664        };
2665        if (insurance != null) {
2666          dst.insurance = new ArrayList<InsuranceComponent>();
2667          for (InsuranceComponent i : insurance)
2668            dst.insurance.add(i.copy());
2669        };
2670        if (item != null) {
2671          dst.item = new ArrayList<DetailsComponent>();
2672          for (DetailsComponent i : item)
2673            dst.item.add(i.copy());
2674        };
2675      }
2676
2677      protected CoverageEligibilityRequest typedCopy() {
2678        return copy();
2679      }
2680
2681      @Override
2682      public boolean equalsDeep(Base other_) {
2683        if (!super.equalsDeep(other_))
2684          return false;
2685        if (!(other_ instanceof CoverageEligibilityRequest))
2686          return false;
2687        CoverageEligibilityRequest o = (CoverageEligibilityRequest) other_;
2688        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(priority, o.priority, true)
2689           && compareDeep(purpose, o.purpose, true) && compareDeep(patient, o.patient, true) && compareDeep(serviced, o.serviced, true)
2690           && compareDeep(created, o.created, true) && compareDeep(enterer, o.enterer, true) && compareDeep(provider, o.provider, true)
2691           && compareDeep(insurer, o.insurer, true) && compareDeep(facility, o.facility, true) && compareDeep(supportingInfo, o.supportingInfo, true)
2692           && compareDeep(insurance, o.insurance, true) && compareDeep(item, o.item, true);
2693      }
2694
2695      @Override
2696      public boolean equalsShallow(Base other_) {
2697        if (!super.equalsShallow(other_))
2698          return false;
2699        if (!(other_ instanceof CoverageEligibilityRequest))
2700          return false;
2701        CoverageEligibilityRequest o = (CoverageEligibilityRequest) other_;
2702        return compareValues(status, o.status, true) && compareValues(purpose, o.purpose, true) && compareValues(created, o.created, true)
2703          ;
2704      }
2705
2706      public boolean isEmpty() {
2707        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, priority
2708          , purpose, patient, serviced, created, enterer, provider, insurer, facility
2709          , supportingInfo, insurance, item);
2710      }
2711
2712  @Override
2713  public ResourceType getResourceType() {
2714    return ResourceType.CoverageEligibilityRequest;
2715   }
2716
2717 /**
2718   * Search parameter: <b>created</b>
2719   * <p>
2720   * Description: <b>The creation date for the EOB</b><br>
2721   * Type: <b>date</b><br>
2722   * Path: <b>CoverageEligibilityRequest.created</b><br>
2723   * </p>
2724   */
2725  @SearchParamDefinition(name="created", path="CoverageEligibilityRequest.created", description="The creation date for the EOB", type="date" )
2726  public static final String SP_CREATED = "created";
2727 /**
2728   * <b>Fluent Client</b> search parameter constant for <b>created</b>
2729   * <p>
2730   * Description: <b>The creation date for the EOB</b><br>
2731   * Type: <b>date</b><br>
2732   * Path: <b>CoverageEligibilityRequest.created</b><br>
2733   * </p>
2734   */
2735  public static final ca.uhn.fhir.rest.gclient.DateClientParam CREATED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_CREATED);
2736
2737 /**
2738   * Search parameter: <b>enterer</b>
2739   * <p>
2740   * Description: <b>The party who is responsible for the request</b><br>
2741   * Type: <b>reference</b><br>
2742   * Path: <b>CoverageEligibilityRequest.enterer</b><br>
2743   * </p>
2744   */
2745  @SearchParamDefinition(name="enterer", path="CoverageEligibilityRequest.enterer", description="The party who is responsible for the request", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Practitioner.class, PractitionerRole.class } )
2746  public static final String SP_ENTERER = "enterer";
2747 /**
2748   * <b>Fluent Client</b> search parameter constant for <b>enterer</b>
2749   * <p>
2750   * Description: <b>The party who is responsible for the request</b><br>
2751   * Type: <b>reference</b><br>
2752   * Path: <b>CoverageEligibilityRequest.enterer</b><br>
2753   * </p>
2754   */
2755  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENTERER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENTERER);
2756
2757/**
2758   * Constant for fluent queries to be used to add include statements. Specifies
2759   * the path value of "<b>CoverageEligibilityRequest:enterer</b>".
2760   */
2761  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENTERER = new ca.uhn.fhir.model.api.Include("CoverageEligibilityRequest:enterer").toLocked();
2762
2763 /**
2764   * Search parameter: <b>facility</b>
2765   * <p>
2766   * Description: <b>Facility responsible for the goods and services</b><br>
2767   * Type: <b>reference</b><br>
2768   * Path: <b>CoverageEligibilityRequest.facility</b><br>
2769   * </p>
2770   */
2771  @SearchParamDefinition(name="facility", path="CoverageEligibilityRequest.facility", description="Facility responsible for the goods and services", type="reference", target={Location.class } )
2772  public static final String SP_FACILITY = "facility";
2773 /**
2774   * <b>Fluent Client</b> search parameter constant for <b>facility</b>
2775   * <p>
2776   * Description: <b>Facility responsible for the goods and services</b><br>
2777   * Type: <b>reference</b><br>
2778   * Path: <b>CoverageEligibilityRequest.facility</b><br>
2779   * </p>
2780   */
2781  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam FACILITY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_FACILITY);
2782
2783/**
2784   * Constant for fluent queries to be used to add include statements. Specifies
2785   * the path value of "<b>CoverageEligibilityRequest:facility</b>".
2786   */
2787  public static final ca.uhn.fhir.model.api.Include INCLUDE_FACILITY = new ca.uhn.fhir.model.api.Include("CoverageEligibilityRequest:facility").toLocked();
2788
2789 /**
2790   * Search parameter: <b>identifier</b>
2791   * <p>
2792   * Description: <b>The business identifier of the Eligibility</b><br>
2793   * Type: <b>token</b><br>
2794   * Path: <b>CoverageEligibilityRequest.identifier</b><br>
2795   * </p>
2796   */
2797  @SearchParamDefinition(name="identifier", path="CoverageEligibilityRequest.identifier", description="The business identifier of the Eligibility", type="token" )
2798  public static final String SP_IDENTIFIER = "identifier";
2799 /**
2800   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2801   * <p>
2802   * Description: <b>The business identifier of the Eligibility</b><br>
2803   * Type: <b>token</b><br>
2804   * Path: <b>CoverageEligibilityRequest.identifier</b><br>
2805   * </p>
2806   */
2807  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2808
2809 /**
2810   * Search parameter: <b>patient</b>
2811   * <p>
2812   * Description: <b>The reference to the patient</b><br>
2813   * Type: <b>reference</b><br>
2814   * Path: <b>CoverageEligibilityRequest.patient</b><br>
2815   * </p>
2816   */
2817  @SearchParamDefinition(name="patient", path="CoverageEligibilityRequest.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 } )
2818  public static final String SP_PATIENT = "patient";
2819 /**
2820   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2821   * <p>
2822   * Description: <b>The reference to the patient</b><br>
2823   * Type: <b>reference</b><br>
2824   * Path: <b>CoverageEligibilityRequest.patient</b><br>
2825   * </p>
2826   */
2827  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2828
2829/**
2830   * Constant for fluent queries to be used to add include statements. Specifies
2831   * the path value of "<b>CoverageEligibilityRequest:patient</b>".
2832   */
2833  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("CoverageEligibilityRequest:patient").toLocked();
2834
2835 /**
2836   * Search parameter: <b>provider</b>
2837   * <p>
2838   * Description: <b>The reference to the provider</b><br>
2839   * Type: <b>reference</b><br>
2840   * Path: <b>CoverageEligibilityRequest.provider</b><br>
2841   * </p>
2842   */
2843  @SearchParamDefinition(name="provider", path="CoverageEligibilityRequest.provider", description="The reference to the 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 } )
2844  public static final String SP_PROVIDER = "provider";
2845 /**
2846   * <b>Fluent Client</b> search parameter constant for <b>provider</b>
2847   * <p>
2848   * Description: <b>The reference to the provider</b><br>
2849   * Type: <b>reference</b><br>
2850   * Path: <b>CoverageEligibilityRequest.provider</b><br>
2851   * </p>
2852   */
2853  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROVIDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROVIDER);
2854
2855/**
2856   * Constant for fluent queries to be used to add include statements. Specifies
2857   * the path value of "<b>CoverageEligibilityRequest:provider</b>".
2858   */
2859  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROVIDER = new ca.uhn.fhir.model.api.Include("CoverageEligibilityRequest:provider").toLocked();
2860
2861 /**
2862   * Search parameter: <b>status</b>
2863   * <p>
2864   * Description: <b>The status of the EligibilityRequest</b><br>
2865   * Type: <b>token</b><br>
2866   * Path: <b>CoverageEligibilityRequest.status</b><br>
2867   * </p>
2868   */
2869  @SearchParamDefinition(name="status", path="CoverageEligibilityRequest.status", description="The status of the EligibilityRequest", type="token" )
2870  public static final String SP_STATUS = "status";
2871 /**
2872   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2873   * <p>
2874   * Description: <b>The status of the EligibilityRequest</b><br>
2875   * Type: <b>token</b><br>
2876   * Path: <b>CoverageEligibilityRequest.status</b><br>
2877   * </p>
2878   */
2879  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2880
2881
2882}
2883