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