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 Sat, Nov 5, 2022 10:47+1100 for FHIR v5.0.0-ballot
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 * Financial instrument which may be used to reimburse or pay for health care products and services. Includes both insurance and self-payment.
052 */
053@ResourceDef(name="Coverage", profile="http://hl7.org/fhir/StructureDefinition/Coverage")
054public class Coverage extends DomainResource {
055
056    public enum Kind {
057        /**
058         * The Coverage provides the identifiers and card-level details of an insurance policy.
059         */
060        INSURANCE, 
061        /**
062         * One or more persons and/or organizations are paying for the services rendered.
063         */
064        SELFPAY, 
065        /**
066         * Some other organization is paying for the service.
067         */
068        OTHER, 
069        /**
070         * added to help the parsers with the generic types
071         */
072        NULL;
073        public static Kind fromCode(String codeString) throws FHIRException {
074            if (codeString == null || "".equals(codeString))
075                return null;
076        if ("insurance".equals(codeString))
077          return INSURANCE;
078        if ("self-pay".equals(codeString))
079          return SELFPAY;
080        if ("other".equals(codeString))
081          return OTHER;
082        if (Configuration.isAcceptInvalidEnums())
083          return null;
084        else
085          throw new FHIRException("Unknown Kind code '"+codeString+"'");
086        }
087        public String toCode() {
088          switch (this) {
089            case INSURANCE: return "insurance";
090            case SELFPAY: return "self-pay";
091            case OTHER: return "other";
092            case NULL: return null;
093            default: return "?";
094          }
095        }
096        public String getSystem() {
097          switch (this) {
098            case INSURANCE: return "http://hl7.org/fhir/coverage-kind";
099            case SELFPAY: return "http://hl7.org/fhir/coverage-kind";
100            case OTHER: return "http://hl7.org/fhir/coverage-kind";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDefinition() {
106          switch (this) {
107            case INSURANCE: return "The Coverage provides the identifiers and card-level details of an insurance policy.";
108            case SELFPAY: return "One or more persons and/or organizations are paying for the services rendered.";
109            case OTHER: return "Some other organization is paying for the service.";
110            case NULL: return null;
111            default: return "?";
112          }
113        }
114        public String getDisplay() {
115          switch (this) {
116            case INSURANCE: return "Insurance";
117            case SELFPAY: return "Self-pay";
118            case OTHER: return "Other";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123    }
124
125  public static class KindEnumFactory implements EnumFactory<Kind> {
126    public Kind fromCode(String codeString) throws IllegalArgumentException {
127      if (codeString == null || "".equals(codeString))
128            if (codeString == null || "".equals(codeString))
129                return null;
130        if ("insurance".equals(codeString))
131          return Kind.INSURANCE;
132        if ("self-pay".equals(codeString))
133          return Kind.SELFPAY;
134        if ("other".equals(codeString))
135          return Kind.OTHER;
136        throw new IllegalArgumentException("Unknown Kind code '"+codeString+"'");
137        }
138        public Enumeration<Kind> fromType(Base code) throws FHIRException {
139          if (code == null)
140            return null;
141          if (code.isEmpty())
142            return new Enumeration<Kind>(this);
143          String codeString = ((PrimitiveType) code).asStringValue();
144          if (codeString == null || "".equals(codeString))
145            return null;
146        if ("insurance".equals(codeString))
147          return new Enumeration<Kind>(this, Kind.INSURANCE);
148        if ("self-pay".equals(codeString))
149          return new Enumeration<Kind>(this, Kind.SELFPAY);
150        if ("other".equals(codeString))
151          return new Enumeration<Kind>(this, Kind.OTHER);
152        throw new FHIRException("Unknown Kind code '"+codeString+"'");
153        }
154    public String toCode(Kind code) {
155      if (code == Kind.INSURANCE)
156        return "insurance";
157      if (code == Kind.SELFPAY)
158        return "self-pay";
159      if (code == Kind.OTHER)
160        return "other";
161      return "?";
162      }
163    public String toSystem(Kind code) {
164      return code.getSystem();
165      }
166    }
167
168    @Block()
169    public static class CoveragePaymentByComponent extends BackboneElement implements IBaseBackboneElement {
170        /**
171         * The list of parties providing non-insurance payment for the treatment costs.
172         */
173        @Child(name = "party", type = {Patient.class, RelatedPerson.class, Organization.class}, order=1, min=1, max=1, modifier=false, summary=true)
174        @Description(shortDefinition="Parties performing self-payment", formalDefinition="The list of parties providing non-insurance payment for the treatment costs." )
175        protected Reference party;
176
177        /**
178         *  Description of the financial responsibility.
179         */
180        @Child(name = "responsibility", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
181        @Description(shortDefinition="Party's responsibility", formalDefinition=" Description of the financial responsibility." )
182        protected StringType responsibility;
183
184        private static final long serialVersionUID = -1279858336L;
185
186    /**
187     * Constructor
188     */
189      public CoveragePaymentByComponent() {
190        super();
191      }
192
193    /**
194     * Constructor
195     */
196      public CoveragePaymentByComponent(Reference party) {
197        super();
198        this.setParty(party);
199      }
200
201        /**
202         * @return {@link #party} (The list of parties providing non-insurance payment for the treatment costs.)
203         */
204        public Reference getParty() { 
205          if (this.party == null)
206            if (Configuration.errorOnAutoCreate())
207              throw new Error("Attempt to auto-create CoveragePaymentByComponent.party");
208            else if (Configuration.doAutoCreate())
209              this.party = new Reference(); // cc
210          return this.party;
211        }
212
213        public boolean hasParty() { 
214          return this.party != null && !this.party.isEmpty();
215        }
216
217        /**
218         * @param value {@link #party} (The list of parties providing non-insurance payment for the treatment costs.)
219         */
220        public CoveragePaymentByComponent setParty(Reference value) { 
221          this.party = value;
222          return this;
223        }
224
225        /**
226         * @return {@link #responsibility} ( Description of the financial responsibility.). This is the underlying object with id, value and extensions. The accessor "getResponsibility" gives direct access to the value
227         */
228        public StringType getResponsibilityElement() { 
229          if (this.responsibility == null)
230            if (Configuration.errorOnAutoCreate())
231              throw new Error("Attempt to auto-create CoveragePaymentByComponent.responsibility");
232            else if (Configuration.doAutoCreate())
233              this.responsibility = new StringType(); // bb
234          return this.responsibility;
235        }
236
237        public boolean hasResponsibilityElement() { 
238          return this.responsibility != null && !this.responsibility.isEmpty();
239        }
240
241        public boolean hasResponsibility() { 
242          return this.responsibility != null && !this.responsibility.isEmpty();
243        }
244
245        /**
246         * @param value {@link #responsibility} ( Description of the financial responsibility.). This is the underlying object with id, value and extensions. The accessor "getResponsibility" gives direct access to the value
247         */
248        public CoveragePaymentByComponent setResponsibilityElement(StringType value) { 
249          this.responsibility = value;
250          return this;
251        }
252
253        /**
254         * @return  Description of the financial responsibility.
255         */
256        public String getResponsibility() { 
257          return this.responsibility == null ? null : this.responsibility.getValue();
258        }
259
260        /**
261         * @param value  Description of the financial responsibility.
262         */
263        public CoveragePaymentByComponent setResponsibility(String value) { 
264          if (Utilities.noString(value))
265            this.responsibility = null;
266          else {
267            if (this.responsibility == null)
268              this.responsibility = new StringType();
269            this.responsibility.setValue(value);
270          }
271          return this;
272        }
273
274        protected void listChildren(List<Property> children) {
275          super.listChildren(children);
276          children.add(new Property("party", "Reference(Patient|RelatedPerson|Organization)", "The list of parties providing non-insurance payment for the treatment costs.", 0, 1, party));
277          children.add(new Property("responsibility", "string", " Description of the financial responsibility.", 0, 1, responsibility));
278        }
279
280        @Override
281        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
282          switch (_hash) {
283          case 106437350: /*party*/  return new Property("party", "Reference(Patient|RelatedPerson|Organization)", "The list of parties providing non-insurance payment for the treatment costs.", 0, 1, party);
284          case -228897266: /*responsibility*/  return new Property("responsibility", "string", " Description of the financial responsibility.", 0, 1, responsibility);
285          default: return super.getNamedProperty(_hash, _name, _checkValid);
286          }
287
288        }
289
290      @Override
291      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
292        switch (hash) {
293        case 106437350: /*party*/ return this.party == null ? new Base[0] : new Base[] {this.party}; // Reference
294        case -228897266: /*responsibility*/ return this.responsibility == null ? new Base[0] : new Base[] {this.responsibility}; // StringType
295        default: return super.getProperty(hash, name, checkValid);
296        }
297
298      }
299
300      @Override
301      public Base setProperty(int hash, String name, Base value) throws FHIRException {
302        switch (hash) {
303        case 106437350: // party
304          this.party = TypeConvertor.castToReference(value); // Reference
305          return value;
306        case -228897266: // responsibility
307          this.responsibility = TypeConvertor.castToString(value); // StringType
308          return value;
309        default: return super.setProperty(hash, name, value);
310        }
311
312      }
313
314      @Override
315      public Base setProperty(String name, Base value) throws FHIRException {
316        if (name.equals("party")) {
317          this.party = TypeConvertor.castToReference(value); // Reference
318        } else if (name.equals("responsibility")) {
319          this.responsibility = TypeConvertor.castToString(value); // StringType
320        } else
321          return super.setProperty(name, value);
322        return value;
323      }
324
325      @Override
326      public Base makeProperty(int hash, String name) throws FHIRException {
327        switch (hash) {
328        case 106437350:  return getParty();
329        case -228897266:  return getResponsibilityElement();
330        default: return super.makeProperty(hash, name);
331        }
332
333      }
334
335      @Override
336      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
337        switch (hash) {
338        case 106437350: /*party*/ return new String[] {"Reference"};
339        case -228897266: /*responsibility*/ return new String[] {"string"};
340        default: return super.getTypesForProperty(hash, name);
341        }
342
343      }
344
345      @Override
346      public Base addChild(String name) throws FHIRException {
347        if (name.equals("party")) {
348          this.party = new Reference();
349          return this.party;
350        }
351        else if (name.equals("responsibility")) {
352          throw new FHIRException("Cannot call addChild on a primitive type Coverage.paymentBy.responsibility");
353        }
354        else
355          return super.addChild(name);
356      }
357
358      public CoveragePaymentByComponent copy() {
359        CoveragePaymentByComponent dst = new CoveragePaymentByComponent();
360        copyValues(dst);
361        return dst;
362      }
363
364      public void copyValues(CoveragePaymentByComponent dst) {
365        super.copyValues(dst);
366        dst.party = party == null ? null : party.copy();
367        dst.responsibility = responsibility == null ? null : responsibility.copy();
368      }
369
370      @Override
371      public boolean equalsDeep(Base other_) {
372        if (!super.equalsDeep(other_))
373          return false;
374        if (!(other_ instanceof CoveragePaymentByComponent))
375          return false;
376        CoveragePaymentByComponent o = (CoveragePaymentByComponent) other_;
377        return compareDeep(party, o.party, true) && compareDeep(responsibility, o.responsibility, true)
378          ;
379      }
380
381      @Override
382      public boolean equalsShallow(Base other_) {
383        if (!super.equalsShallow(other_))
384          return false;
385        if (!(other_ instanceof CoveragePaymentByComponent))
386          return false;
387        CoveragePaymentByComponent o = (CoveragePaymentByComponent) other_;
388        return compareValues(responsibility, o.responsibility, true);
389      }
390
391      public boolean isEmpty() {
392        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(party, responsibility);
393      }
394
395  public String fhirType() {
396    return "Coverage.paymentBy";
397
398  }
399
400  }
401
402    @Block()
403    public static class ClassComponent extends BackboneElement implements IBaseBackboneElement {
404        /**
405         * The type of classification for which an insurer-specific class label or number and optional name is provided.  For example, type may be used to identify a class of coverage or employer group, policy, or plan.
406         */
407        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=true)
408        @Description(shortDefinition="Type of class such as 'group' or 'plan'", formalDefinition="The type of classification for which an insurer-specific class label or number and optional name is provided.  For example, type may be used to identify a class of coverage or employer group, policy, or plan." )
409        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/coverage-class")
410        protected CodeableConcept type;
411
412        /**
413         * The alphanumeric identifier associated with the insurer issued label.
414         */
415        @Child(name = "value", type = {Identifier.class}, order=2, min=1, max=1, modifier=false, summary=true)
416        @Description(shortDefinition="Value associated with the type", formalDefinition="The alphanumeric identifier associated with the insurer issued label." )
417        protected Identifier value;
418
419        /**
420         * A short description for the class.
421         */
422        @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
423        @Description(shortDefinition="Human readable description of the type and value", formalDefinition="A short description for the class." )
424        protected StringType name;
425
426        private static final long serialVersionUID = 1395172201L;
427
428    /**
429     * Constructor
430     */
431      public ClassComponent() {
432        super();
433      }
434
435    /**
436     * Constructor
437     */
438      public ClassComponent(CodeableConcept type, Identifier value) {
439        super();
440        this.setType(type);
441        this.setValue(value);
442      }
443
444        /**
445         * @return {@link #type} (The type of classification for which an insurer-specific class label or number and optional name is provided.  For example, type may be used to identify a class of coverage or employer group, policy, or plan.)
446         */
447        public CodeableConcept getType() { 
448          if (this.type == null)
449            if (Configuration.errorOnAutoCreate())
450              throw new Error("Attempt to auto-create ClassComponent.type");
451            else if (Configuration.doAutoCreate())
452              this.type = new CodeableConcept(); // cc
453          return this.type;
454        }
455
456        public boolean hasType() { 
457          return this.type != null && !this.type.isEmpty();
458        }
459
460        /**
461         * @param value {@link #type} (The type of classification for which an insurer-specific class label or number and optional name is provided.  For example, type may be used to identify a class of coverage or employer group, policy, or plan.)
462         */
463        public ClassComponent setType(CodeableConcept value) { 
464          this.type = value;
465          return this;
466        }
467
468        /**
469         * @return {@link #value} (The alphanumeric identifier associated with the insurer issued label.)
470         */
471        public Identifier getValue() { 
472          if (this.value == null)
473            if (Configuration.errorOnAutoCreate())
474              throw new Error("Attempt to auto-create ClassComponent.value");
475            else if (Configuration.doAutoCreate())
476              this.value = new Identifier(); // cc
477          return this.value;
478        }
479
480        public boolean hasValue() { 
481          return this.value != null && !this.value.isEmpty();
482        }
483
484        /**
485         * @param value {@link #value} (The alphanumeric identifier associated with the insurer issued label.)
486         */
487        public ClassComponent setValue(Identifier value) { 
488          this.value = value;
489          return this;
490        }
491
492        /**
493         * @return {@link #name} (A short description for the class.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
494         */
495        public StringType getNameElement() { 
496          if (this.name == null)
497            if (Configuration.errorOnAutoCreate())
498              throw new Error("Attempt to auto-create ClassComponent.name");
499            else if (Configuration.doAutoCreate())
500              this.name = new StringType(); // bb
501          return this.name;
502        }
503
504        public boolean hasNameElement() { 
505          return this.name != null && !this.name.isEmpty();
506        }
507
508        public boolean hasName() { 
509          return this.name != null && !this.name.isEmpty();
510        }
511
512        /**
513         * @param value {@link #name} (A short description for the class.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
514         */
515        public ClassComponent setNameElement(StringType value) { 
516          this.name = value;
517          return this;
518        }
519
520        /**
521         * @return A short description for the class.
522         */
523        public String getName() { 
524          return this.name == null ? null : this.name.getValue();
525        }
526
527        /**
528         * @param value A short description for the class.
529         */
530        public ClassComponent setName(String value) { 
531          if (Utilities.noString(value))
532            this.name = null;
533          else {
534            if (this.name == null)
535              this.name = new StringType();
536            this.name.setValue(value);
537          }
538          return this;
539        }
540
541        protected void listChildren(List<Property> children) {
542          super.listChildren(children);
543          children.add(new Property("type", "CodeableConcept", "The type of classification for which an insurer-specific class label or number and optional name is provided.  For example, type may be used to identify a class of coverage or employer group, policy, or plan.", 0, 1, type));
544          children.add(new Property("value", "Identifier", "The alphanumeric identifier associated with the insurer issued label.", 0, 1, value));
545          children.add(new Property("name", "string", "A short description for the class.", 0, 1, name));
546        }
547
548        @Override
549        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
550          switch (_hash) {
551          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The type of classification for which an insurer-specific class label or number and optional name is provided.  For example, type may be used to identify a class of coverage or employer group, policy, or plan.", 0, 1, type);
552          case 111972721: /*value*/  return new Property("value", "Identifier", "The alphanumeric identifier associated with the insurer issued label.", 0, 1, value);
553          case 3373707: /*name*/  return new Property("name", "string", "A short description for the class.", 0, 1, name);
554          default: return super.getNamedProperty(_hash, _name, _checkValid);
555          }
556
557        }
558
559      @Override
560      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
561        switch (hash) {
562        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
563        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // Identifier
564        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
565        default: return super.getProperty(hash, name, checkValid);
566        }
567
568      }
569
570      @Override
571      public Base setProperty(int hash, String name, Base value) throws FHIRException {
572        switch (hash) {
573        case 3575610: // type
574          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
575          return value;
576        case 111972721: // value
577          this.value = TypeConvertor.castToIdentifier(value); // Identifier
578          return value;
579        case 3373707: // name
580          this.name = TypeConvertor.castToString(value); // StringType
581          return value;
582        default: return super.setProperty(hash, name, value);
583        }
584
585      }
586
587      @Override
588      public Base setProperty(String name, Base value) throws FHIRException {
589        if (name.equals("type")) {
590          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
591        } else if (name.equals("value")) {
592          this.value = TypeConvertor.castToIdentifier(value); // Identifier
593        } else if (name.equals("name")) {
594          this.name = TypeConvertor.castToString(value); // StringType
595        } else
596          return super.setProperty(name, value);
597        return value;
598      }
599
600      @Override
601      public Base makeProperty(int hash, String name) throws FHIRException {
602        switch (hash) {
603        case 3575610:  return getType();
604        case 111972721:  return getValue();
605        case 3373707:  return getNameElement();
606        default: return super.makeProperty(hash, name);
607        }
608
609      }
610
611      @Override
612      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
613        switch (hash) {
614        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
615        case 111972721: /*value*/ return new String[] {"Identifier"};
616        case 3373707: /*name*/ return new String[] {"string"};
617        default: return super.getTypesForProperty(hash, name);
618        }
619
620      }
621
622      @Override
623      public Base addChild(String name) throws FHIRException {
624        if (name.equals("type")) {
625          this.type = new CodeableConcept();
626          return this.type;
627        }
628        else if (name.equals("value")) {
629          this.value = new Identifier();
630          return this.value;
631        }
632        else if (name.equals("name")) {
633          throw new FHIRException("Cannot call addChild on a primitive type Coverage.class.name");
634        }
635        else
636          return super.addChild(name);
637      }
638
639      public ClassComponent copy() {
640        ClassComponent dst = new ClassComponent();
641        copyValues(dst);
642        return dst;
643      }
644
645      public void copyValues(ClassComponent dst) {
646        super.copyValues(dst);
647        dst.type = type == null ? null : type.copy();
648        dst.value = value == null ? null : value.copy();
649        dst.name = name == null ? null : name.copy();
650      }
651
652      @Override
653      public boolean equalsDeep(Base other_) {
654        if (!super.equalsDeep(other_))
655          return false;
656        if (!(other_ instanceof ClassComponent))
657          return false;
658        ClassComponent o = (ClassComponent) other_;
659        return compareDeep(type, o.type, true) && compareDeep(value, o.value, true) && compareDeep(name, o.name, true)
660          ;
661      }
662
663      @Override
664      public boolean equalsShallow(Base other_) {
665        if (!super.equalsShallow(other_))
666          return false;
667        if (!(other_ instanceof ClassComponent))
668          return false;
669        ClassComponent o = (ClassComponent) other_;
670        return compareValues(name, o.name, true);
671      }
672
673      public boolean isEmpty() {
674        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, value, name);
675      }
676
677  public String fhirType() {
678    return "Coverage.class";
679
680  }
681
682  }
683
684    @Block()
685    public static class CostToBeneficiaryComponent extends BackboneElement implements IBaseBackboneElement {
686        /**
687         * The category of patient centric costs associated with treatment.
688         */
689        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=true)
690        @Description(shortDefinition="Cost category", formalDefinition="The category of patient centric costs associated with treatment." )
691        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/coverage-copay-type")
692        protected CodeableConcept type;
693
694        /**
695         * Code to identify the general type of benefits under which products and services are provided.
696         */
697        @Child(name = "category", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
698        @Description(shortDefinition="Benefit classification", formalDefinition="Code to identify the general type of benefits under which products and services are provided." )
699        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-benefitcategory")
700        protected CodeableConcept category;
701
702        /**
703         * Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.
704         */
705        @Child(name = "network", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
706        @Description(shortDefinition="In or out of network", formalDefinition="Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers." )
707        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-network")
708        protected CodeableConcept network;
709
710        /**
711         * Indicates if the benefits apply to an individual or to the family.
712         */
713        @Child(name = "unit", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
714        @Description(shortDefinition="Individual or family", formalDefinition="Indicates if the benefits apply to an individual or to the family." )
715        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-unit")
716        protected CodeableConcept unit;
717
718        /**
719         * The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.
720         */
721        @Child(name = "term", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=false)
722        @Description(shortDefinition="Annual or lifetime", formalDefinition="The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'." )
723        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-term")
724        protected CodeableConcept term;
725
726        /**
727         * The amount due from the patient for the cost category.
728         */
729        @Child(name = "value", type = {Quantity.class, Money.class}, order=6, min=0, max=1, modifier=false, summary=true)
730        @Description(shortDefinition="The amount or percentage due from the beneficiary", formalDefinition="The amount due from the patient for the cost category." )
731        protected DataType value;
732
733        /**
734         * A suite of codes indicating exceptions or reductions to patient costs and their effective periods.
735         */
736        @Child(name = "exception", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
737        @Description(shortDefinition="Exceptions for patient payments", formalDefinition="A suite of codes indicating exceptions or reductions to patient costs and their effective periods." )
738        protected List<ExemptionComponent> exception;
739
740        private static final long serialVersionUID = 472499753L;
741
742    /**
743     * Constructor
744     */
745      public CostToBeneficiaryComponent() {
746        super();
747      }
748
749        /**
750         * @return {@link #type} (The category of patient centric costs associated with treatment.)
751         */
752        public CodeableConcept getType() { 
753          if (this.type == null)
754            if (Configuration.errorOnAutoCreate())
755              throw new Error("Attempt to auto-create CostToBeneficiaryComponent.type");
756            else if (Configuration.doAutoCreate())
757              this.type = new CodeableConcept(); // cc
758          return this.type;
759        }
760
761        public boolean hasType() { 
762          return this.type != null && !this.type.isEmpty();
763        }
764
765        /**
766         * @param value {@link #type} (The category of patient centric costs associated with treatment.)
767         */
768        public CostToBeneficiaryComponent setType(CodeableConcept value) { 
769          this.type = value;
770          return this;
771        }
772
773        /**
774         * @return {@link #category} (Code to identify the general type of benefits under which products and services are provided.)
775         */
776        public CodeableConcept getCategory() { 
777          if (this.category == null)
778            if (Configuration.errorOnAutoCreate())
779              throw new Error("Attempt to auto-create CostToBeneficiaryComponent.category");
780            else if (Configuration.doAutoCreate())
781              this.category = new CodeableConcept(); // cc
782          return this.category;
783        }
784
785        public boolean hasCategory() { 
786          return this.category != null && !this.category.isEmpty();
787        }
788
789        /**
790         * @param value {@link #category} (Code to identify the general type of benefits under which products and services are provided.)
791         */
792        public CostToBeneficiaryComponent setCategory(CodeableConcept value) { 
793          this.category = value;
794          return this;
795        }
796
797        /**
798         * @return {@link #network} (Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.)
799         */
800        public CodeableConcept getNetwork() { 
801          if (this.network == null)
802            if (Configuration.errorOnAutoCreate())
803              throw new Error("Attempt to auto-create CostToBeneficiaryComponent.network");
804            else if (Configuration.doAutoCreate())
805              this.network = new CodeableConcept(); // cc
806          return this.network;
807        }
808
809        public boolean hasNetwork() { 
810          return this.network != null && !this.network.isEmpty();
811        }
812
813        /**
814         * @param value {@link #network} (Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.)
815         */
816        public CostToBeneficiaryComponent setNetwork(CodeableConcept value) { 
817          this.network = value;
818          return this;
819        }
820
821        /**
822         * @return {@link #unit} (Indicates if the benefits apply to an individual or to the family.)
823         */
824        public CodeableConcept getUnit() { 
825          if (this.unit == null)
826            if (Configuration.errorOnAutoCreate())
827              throw new Error("Attempt to auto-create CostToBeneficiaryComponent.unit");
828            else if (Configuration.doAutoCreate())
829              this.unit = new CodeableConcept(); // cc
830          return this.unit;
831        }
832
833        public boolean hasUnit() { 
834          return this.unit != null && !this.unit.isEmpty();
835        }
836
837        /**
838         * @param value {@link #unit} (Indicates if the benefits apply to an individual or to the family.)
839         */
840        public CostToBeneficiaryComponent setUnit(CodeableConcept value) { 
841          this.unit = value;
842          return this;
843        }
844
845        /**
846         * @return {@link #term} (The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.)
847         */
848        public CodeableConcept getTerm() { 
849          if (this.term == null)
850            if (Configuration.errorOnAutoCreate())
851              throw new Error("Attempt to auto-create CostToBeneficiaryComponent.term");
852            else if (Configuration.doAutoCreate())
853              this.term = new CodeableConcept(); // cc
854          return this.term;
855        }
856
857        public boolean hasTerm() { 
858          return this.term != null && !this.term.isEmpty();
859        }
860
861        /**
862         * @param value {@link #term} (The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.)
863         */
864        public CostToBeneficiaryComponent setTerm(CodeableConcept value) { 
865          this.term = value;
866          return this;
867        }
868
869        /**
870         * @return {@link #value} (The amount due from the patient for the cost category.)
871         */
872        public DataType getValue() { 
873          return this.value;
874        }
875
876        /**
877         * @return {@link #value} (The amount due from the patient for the cost category.)
878         */
879        public Quantity getValueQuantity() throws FHIRException { 
880          if (this.value == null)
881            this.value = new Quantity();
882          if (!(this.value instanceof Quantity))
883            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
884          return (Quantity) this.value;
885        }
886
887        public boolean hasValueQuantity() { 
888          return this != null && this.value instanceof Quantity;
889        }
890
891        /**
892         * @return {@link #value} (The amount due from the patient for the cost category.)
893         */
894        public Money getValueMoney() throws FHIRException { 
895          if (this.value == null)
896            this.value = new Money();
897          if (!(this.value instanceof Money))
898            throw new FHIRException("Type mismatch: the type Money was expected, but "+this.value.getClass().getName()+" was encountered");
899          return (Money) this.value;
900        }
901
902        public boolean hasValueMoney() { 
903          return this != null && this.value instanceof Money;
904        }
905
906        public boolean hasValue() { 
907          return this.value != null && !this.value.isEmpty();
908        }
909
910        /**
911         * @param value {@link #value} (The amount due from the patient for the cost category.)
912         */
913        public CostToBeneficiaryComponent setValue(DataType value) { 
914          if (value != null && !(value instanceof Quantity || value instanceof Money))
915            throw new Error("Not the right type for Coverage.costToBeneficiary.value[x]: "+value.fhirType());
916          this.value = value;
917          return this;
918        }
919
920        /**
921         * @return {@link #exception} (A suite of codes indicating exceptions or reductions to patient costs and their effective periods.)
922         */
923        public List<ExemptionComponent> getException() { 
924          if (this.exception == null)
925            this.exception = new ArrayList<ExemptionComponent>();
926          return this.exception;
927        }
928
929        /**
930         * @return Returns a reference to <code>this</code> for easy method chaining
931         */
932        public CostToBeneficiaryComponent setException(List<ExemptionComponent> theException) { 
933          this.exception = theException;
934          return this;
935        }
936
937        public boolean hasException() { 
938          if (this.exception == null)
939            return false;
940          for (ExemptionComponent item : this.exception)
941            if (!item.isEmpty())
942              return true;
943          return false;
944        }
945
946        public ExemptionComponent addException() { //3
947          ExemptionComponent t = new ExemptionComponent();
948          if (this.exception == null)
949            this.exception = new ArrayList<ExemptionComponent>();
950          this.exception.add(t);
951          return t;
952        }
953
954        public CostToBeneficiaryComponent addException(ExemptionComponent t) { //3
955          if (t == null)
956            return this;
957          if (this.exception == null)
958            this.exception = new ArrayList<ExemptionComponent>();
959          this.exception.add(t);
960          return this;
961        }
962
963        /**
964         * @return The first repetition of repeating field {@link #exception}, creating it if it does not already exist {3}
965         */
966        public ExemptionComponent getExceptionFirstRep() { 
967          if (getException().isEmpty()) {
968            addException();
969          }
970          return getException().get(0);
971        }
972
973        protected void listChildren(List<Property> children) {
974          super.listChildren(children);
975          children.add(new Property("type", "CodeableConcept", "The category of patient centric costs associated with treatment.", 0, 1, type));
976          children.add(new Property("category", "CodeableConcept", "Code to identify the general type of benefits under which products and services are provided.", 0, 1, category));
977          children.add(new Property("network", "CodeableConcept", "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", 0, 1, network));
978          children.add(new Property("unit", "CodeableConcept", "Indicates if the benefits apply to an individual or to the family.", 0, 1, unit));
979          children.add(new Property("term", "CodeableConcept", "The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.", 0, 1, term));
980          children.add(new Property("value[x]", "Quantity|Money", "The amount due from the patient for the cost category.", 0, 1, value));
981          children.add(new Property("exception", "", "A suite of codes indicating exceptions or reductions to patient costs and their effective periods.", 0, java.lang.Integer.MAX_VALUE, exception));
982        }
983
984        @Override
985        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
986          switch (_hash) {
987          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The category of patient centric costs associated with treatment.", 0, 1, type);
988          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);
989          case 1843485230: /*network*/  return new Property("network", "CodeableConcept", "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", 0, 1, network);
990          case 3594628: /*unit*/  return new Property("unit", "CodeableConcept", "Indicates if the benefits apply to an individual or to the family.", 0, 1, unit);
991          case 3556460: /*term*/  return new Property("term", "CodeableConcept", "The term or period of the values such as 'maximum lifetime benefit' or 'maximum annual visits'.", 0, 1, term);
992          case -1410166417: /*value[x]*/  return new Property("value[x]", "Quantity|Money", "The amount due from the patient for the cost category.", 0, 1, value);
993          case 111972721: /*value*/  return new Property("value[x]", "Quantity|Money", "The amount due from the patient for the cost category.", 0, 1, value);
994          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The amount due from the patient for the cost category.", 0, 1, value);
995          case 2026560975: /*valueMoney*/  return new Property("value[x]", "Money", "The amount due from the patient for the cost category.", 0, 1, value);
996          case 1481625679: /*exception*/  return new Property("exception", "", "A suite of codes indicating exceptions or reductions to patient costs and their effective periods.", 0, java.lang.Integer.MAX_VALUE, exception);
997          default: return super.getNamedProperty(_hash, _name, _checkValid);
998          }
999
1000        }
1001
1002      @Override
1003      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1004        switch (hash) {
1005        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1006        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
1007        case 1843485230: /*network*/ return this.network == null ? new Base[0] : new Base[] {this.network}; // CodeableConcept
1008        case 3594628: /*unit*/ return this.unit == null ? new Base[0] : new Base[] {this.unit}; // CodeableConcept
1009        case 3556460: /*term*/ return this.term == null ? new Base[0] : new Base[] {this.term}; // CodeableConcept
1010        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
1011        case 1481625679: /*exception*/ return this.exception == null ? new Base[0] : this.exception.toArray(new Base[this.exception.size()]); // ExemptionComponent
1012        default: return super.getProperty(hash, name, checkValid);
1013        }
1014
1015      }
1016
1017      @Override
1018      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1019        switch (hash) {
1020        case 3575610: // type
1021          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1022          return value;
1023        case 50511102: // category
1024          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1025          return value;
1026        case 1843485230: // network
1027          this.network = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1028          return value;
1029        case 3594628: // unit
1030          this.unit = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1031          return value;
1032        case 3556460: // term
1033          this.term = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1034          return value;
1035        case 111972721: // value
1036          this.value = TypeConvertor.castToType(value); // DataType
1037          return value;
1038        case 1481625679: // exception
1039          this.getException().add((ExemptionComponent) value); // ExemptionComponent
1040          return value;
1041        default: return super.setProperty(hash, name, value);
1042        }
1043
1044      }
1045
1046      @Override
1047      public Base setProperty(String name, Base value) throws FHIRException {
1048        if (name.equals("type")) {
1049          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1050        } else if (name.equals("category")) {
1051          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1052        } else if (name.equals("network")) {
1053          this.network = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1054        } else if (name.equals("unit")) {
1055          this.unit = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1056        } else if (name.equals("term")) {
1057          this.term = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1058        } else if (name.equals("value[x]")) {
1059          this.value = TypeConvertor.castToType(value); // DataType
1060        } else if (name.equals("exception")) {
1061          this.getException().add((ExemptionComponent) value);
1062        } else
1063          return super.setProperty(name, value);
1064        return value;
1065      }
1066
1067      @Override
1068      public Base makeProperty(int hash, String name) throws FHIRException {
1069        switch (hash) {
1070        case 3575610:  return getType();
1071        case 50511102:  return getCategory();
1072        case 1843485230:  return getNetwork();
1073        case 3594628:  return getUnit();
1074        case 3556460:  return getTerm();
1075        case -1410166417:  return getValue();
1076        case 111972721:  return getValue();
1077        case 1481625679:  return addException(); 
1078        default: return super.makeProperty(hash, name);
1079        }
1080
1081      }
1082
1083      @Override
1084      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1085        switch (hash) {
1086        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1087        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1088        case 1843485230: /*network*/ return new String[] {"CodeableConcept"};
1089        case 3594628: /*unit*/ return new String[] {"CodeableConcept"};
1090        case 3556460: /*term*/ return new String[] {"CodeableConcept"};
1091        case 111972721: /*value*/ return new String[] {"Quantity", "Money"};
1092        case 1481625679: /*exception*/ return new String[] {};
1093        default: return super.getTypesForProperty(hash, name);
1094        }
1095
1096      }
1097
1098      @Override
1099      public Base addChild(String name) throws FHIRException {
1100        if (name.equals("type")) {
1101          this.type = new CodeableConcept();
1102          return this.type;
1103        }
1104        else if (name.equals("category")) {
1105          this.category = new CodeableConcept();
1106          return this.category;
1107        }
1108        else if (name.equals("network")) {
1109          this.network = new CodeableConcept();
1110          return this.network;
1111        }
1112        else if (name.equals("unit")) {
1113          this.unit = new CodeableConcept();
1114          return this.unit;
1115        }
1116        else if (name.equals("term")) {
1117          this.term = new CodeableConcept();
1118          return this.term;
1119        }
1120        else if (name.equals("valueQuantity")) {
1121          this.value = new Quantity();
1122          return this.value;
1123        }
1124        else if (name.equals("valueMoney")) {
1125          this.value = new Money();
1126          return this.value;
1127        }
1128        else if (name.equals("exception")) {
1129          return addException();
1130        }
1131        else
1132          return super.addChild(name);
1133      }
1134
1135      public CostToBeneficiaryComponent copy() {
1136        CostToBeneficiaryComponent dst = new CostToBeneficiaryComponent();
1137        copyValues(dst);
1138        return dst;
1139      }
1140
1141      public void copyValues(CostToBeneficiaryComponent dst) {
1142        super.copyValues(dst);
1143        dst.type = type == null ? null : type.copy();
1144        dst.category = category == null ? null : category.copy();
1145        dst.network = network == null ? null : network.copy();
1146        dst.unit = unit == null ? null : unit.copy();
1147        dst.term = term == null ? null : term.copy();
1148        dst.value = value == null ? null : value.copy();
1149        if (exception != null) {
1150          dst.exception = new ArrayList<ExemptionComponent>();
1151          for (ExemptionComponent i : exception)
1152            dst.exception.add(i.copy());
1153        };
1154      }
1155
1156      @Override
1157      public boolean equalsDeep(Base other_) {
1158        if (!super.equalsDeep(other_))
1159          return false;
1160        if (!(other_ instanceof CostToBeneficiaryComponent))
1161          return false;
1162        CostToBeneficiaryComponent o = (CostToBeneficiaryComponent) other_;
1163        return compareDeep(type, o.type, true) && compareDeep(category, o.category, true) && compareDeep(network, o.network, true)
1164           && compareDeep(unit, o.unit, true) && compareDeep(term, o.term, true) && compareDeep(value, o.value, true)
1165           && compareDeep(exception, o.exception, true);
1166      }
1167
1168      @Override
1169      public boolean equalsShallow(Base other_) {
1170        if (!super.equalsShallow(other_))
1171          return false;
1172        if (!(other_ instanceof CostToBeneficiaryComponent))
1173          return false;
1174        CostToBeneficiaryComponent o = (CostToBeneficiaryComponent) other_;
1175        return true;
1176      }
1177
1178      public boolean isEmpty() {
1179        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, category, network
1180          , unit, term, value, exception);
1181      }
1182
1183  public String fhirType() {
1184    return "Coverage.costToBeneficiary";
1185
1186  }
1187
1188  }
1189
1190    @Block()
1191    public static class ExemptionComponent extends BackboneElement implements IBaseBackboneElement {
1192        /**
1193         * The code for the specific exception.
1194         */
1195        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=true)
1196        @Description(shortDefinition="Exception category", formalDefinition="The code for the specific exception." )
1197        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/coverage-financial-exception")
1198        protected CodeableConcept type;
1199
1200        /**
1201         * The timeframe the exception is in force.
1202         */
1203        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
1204        @Description(shortDefinition="The effective period of the exception", formalDefinition="The timeframe the exception is in force." )
1205        protected Period period;
1206
1207        private static final long serialVersionUID = 523191991L;
1208
1209    /**
1210     * Constructor
1211     */
1212      public ExemptionComponent() {
1213        super();
1214      }
1215
1216    /**
1217     * Constructor
1218     */
1219      public ExemptionComponent(CodeableConcept type) {
1220        super();
1221        this.setType(type);
1222      }
1223
1224        /**
1225         * @return {@link #type} (The code for the specific exception.)
1226         */
1227        public CodeableConcept getType() { 
1228          if (this.type == null)
1229            if (Configuration.errorOnAutoCreate())
1230              throw new Error("Attempt to auto-create ExemptionComponent.type");
1231            else if (Configuration.doAutoCreate())
1232              this.type = new CodeableConcept(); // cc
1233          return this.type;
1234        }
1235
1236        public boolean hasType() { 
1237          return this.type != null && !this.type.isEmpty();
1238        }
1239
1240        /**
1241         * @param value {@link #type} (The code for the specific exception.)
1242         */
1243        public ExemptionComponent setType(CodeableConcept value) { 
1244          this.type = value;
1245          return this;
1246        }
1247
1248        /**
1249         * @return {@link #period} (The timeframe the exception is in force.)
1250         */
1251        public Period getPeriod() { 
1252          if (this.period == null)
1253            if (Configuration.errorOnAutoCreate())
1254              throw new Error("Attempt to auto-create ExemptionComponent.period");
1255            else if (Configuration.doAutoCreate())
1256              this.period = new Period(); // cc
1257          return this.period;
1258        }
1259
1260        public boolean hasPeriod() { 
1261          return this.period != null && !this.period.isEmpty();
1262        }
1263
1264        /**
1265         * @param value {@link #period} (The timeframe the exception is in force.)
1266         */
1267        public ExemptionComponent setPeriod(Period value) { 
1268          this.period = value;
1269          return this;
1270        }
1271
1272        protected void listChildren(List<Property> children) {
1273          super.listChildren(children);
1274          children.add(new Property("type", "CodeableConcept", "The code for the specific exception.", 0, 1, type));
1275          children.add(new Property("period", "Period", "The timeframe the exception is in force.", 0, 1, period));
1276        }
1277
1278        @Override
1279        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1280          switch (_hash) {
1281          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The code for the specific exception.", 0, 1, type);
1282          case -991726143: /*period*/  return new Property("period", "Period", "The timeframe the exception is in force.", 0, 1, period);
1283          default: return super.getNamedProperty(_hash, _name, _checkValid);
1284          }
1285
1286        }
1287
1288      @Override
1289      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1290        switch (hash) {
1291        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1292        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1293        default: return super.getProperty(hash, name, checkValid);
1294        }
1295
1296      }
1297
1298      @Override
1299      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1300        switch (hash) {
1301        case 3575610: // type
1302          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1303          return value;
1304        case -991726143: // period
1305          this.period = TypeConvertor.castToPeriod(value); // Period
1306          return value;
1307        default: return super.setProperty(hash, name, value);
1308        }
1309
1310      }
1311
1312      @Override
1313      public Base setProperty(String name, Base value) throws FHIRException {
1314        if (name.equals("type")) {
1315          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1316        } else if (name.equals("period")) {
1317          this.period = TypeConvertor.castToPeriod(value); // Period
1318        } else
1319          return super.setProperty(name, value);
1320        return value;
1321      }
1322
1323      @Override
1324      public Base makeProperty(int hash, String name) throws FHIRException {
1325        switch (hash) {
1326        case 3575610:  return getType();
1327        case -991726143:  return getPeriod();
1328        default: return super.makeProperty(hash, name);
1329        }
1330
1331      }
1332
1333      @Override
1334      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1335        switch (hash) {
1336        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1337        case -991726143: /*period*/ return new String[] {"Period"};
1338        default: return super.getTypesForProperty(hash, name);
1339        }
1340
1341      }
1342
1343      @Override
1344      public Base addChild(String name) throws FHIRException {
1345        if (name.equals("type")) {
1346          this.type = new CodeableConcept();
1347          return this.type;
1348        }
1349        else if (name.equals("period")) {
1350          this.period = new Period();
1351          return this.period;
1352        }
1353        else
1354          return super.addChild(name);
1355      }
1356
1357      public ExemptionComponent copy() {
1358        ExemptionComponent dst = new ExemptionComponent();
1359        copyValues(dst);
1360        return dst;
1361      }
1362
1363      public void copyValues(ExemptionComponent dst) {
1364        super.copyValues(dst);
1365        dst.type = type == null ? null : type.copy();
1366        dst.period = period == null ? null : period.copy();
1367      }
1368
1369      @Override
1370      public boolean equalsDeep(Base other_) {
1371        if (!super.equalsDeep(other_))
1372          return false;
1373        if (!(other_ instanceof ExemptionComponent))
1374          return false;
1375        ExemptionComponent o = (ExemptionComponent) other_;
1376        return compareDeep(type, o.type, true) && compareDeep(period, o.period, true);
1377      }
1378
1379      @Override
1380      public boolean equalsShallow(Base other_) {
1381        if (!super.equalsShallow(other_))
1382          return false;
1383        if (!(other_ instanceof ExemptionComponent))
1384          return false;
1385        ExemptionComponent o = (ExemptionComponent) other_;
1386        return true;
1387      }
1388
1389      public boolean isEmpty() {
1390        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, period);
1391      }
1392
1393  public String fhirType() {
1394    return "Coverage.costToBeneficiary.exception";
1395
1396  }
1397
1398  }
1399
1400    /**
1401     * The identifier of the coverage as issued by the insurer.
1402     */
1403    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1404    @Description(shortDefinition="Business identifier(s) for this coverage", formalDefinition="The identifier of the coverage as issued by the insurer." )
1405    protected List<Identifier> identifier;
1406
1407    /**
1408     * The status of the resource instance.
1409     */
1410    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
1411    @Description(shortDefinition="active | cancelled | draft | entered-in-error", formalDefinition="The status of the resource instance." )
1412    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fm-status")
1413    protected Enumeration<FinancialResourceStatusCodes> status;
1414
1415    /**
1416     * The nature of the coverage be it insurance, or cash payment such as self-pay.
1417     */
1418    @Child(name = "kind", type = {CodeType.class}, order=2, min=1, max=1, modifier=false, summary=true)
1419    @Description(shortDefinition="insurance | self-pay | other", formalDefinition="The nature of the coverage be it insurance, or cash payment such as self-pay." )
1420    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/coverage-kind")
1421    protected Enumeration<Kind> kind;
1422
1423    /**
1424     * Link to the paying party and optionally what specifically they will be responsible to pay.
1425     */
1426    @Child(name = "paymentBy", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1427    @Description(shortDefinition="Self-pay parties and responsibility", formalDefinition="Link to the paying party and optionally what specifically they will be responsible to pay." )
1428    protected List<CoveragePaymentByComponent> paymentBy;
1429
1430    /**
1431     * The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.
1432     */
1433    @Child(name = "type", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=true)
1434    @Description(shortDefinition="Coverage category such as medical or accident", formalDefinition="The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization." )
1435    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/coverage-type")
1436    protected CodeableConcept type;
1437
1438    /**
1439     * The party who 'owns' the insurance policy.
1440     */
1441    @Child(name = "policyHolder", type = {Patient.class, RelatedPerson.class, Organization.class}, order=5, min=0, max=1, modifier=false, summary=true)
1442    @Description(shortDefinition="Owner of the policy", formalDefinition="The party who 'owns' the insurance policy." )
1443    protected Reference policyHolder;
1444
1445    /**
1446     * The party who has signed-up for or 'owns' the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due.
1447     */
1448    @Child(name = "subscriber", type = {Patient.class, RelatedPerson.class}, order=6, min=0, max=1, modifier=false, summary=true)
1449    @Description(shortDefinition="Subscriber to the policy", formalDefinition="The party who has signed-up for or 'owns' the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due." )
1450    protected Reference subscriber;
1451
1452    /**
1453     * The insurer assigned ID for the Subscriber.
1454     */
1455    @Child(name = "subscriberId", type = {Identifier.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1456    @Description(shortDefinition="ID assigned to the subscriber", formalDefinition="The insurer assigned ID for the Subscriber." )
1457    protected List<Identifier> subscriberId;
1458
1459    /**
1460     * The party who benefits from the insurance coverage; the patient when products and/or services are provided.
1461     */
1462    @Child(name = "beneficiary", type = {Patient.class}, order=8, min=1, max=1, modifier=false, summary=true)
1463    @Description(shortDefinition="Plan beneficiary", formalDefinition="The party who benefits from the insurance coverage; the patient when products and/or services are provided." )
1464    protected Reference beneficiary;
1465
1466    /**
1467     * A designator for a dependent under the coverage.
1468     */
1469    @Child(name = "dependent", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1470    @Description(shortDefinition="Dependent number", formalDefinition="A designator for a dependent under the coverage." )
1471    protected StringType dependent;
1472
1473    /**
1474     * The relationship of beneficiary (patient) to the subscriber.
1475     */
1476    @Child(name = "relationship", type = {CodeableConcept.class}, order=10, min=0, max=1, modifier=false, summary=false)
1477    @Description(shortDefinition="Beneficiary relationship to the subscriber", formalDefinition="The relationship of beneficiary (patient) to the subscriber." )
1478    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/subscriber-relationship")
1479    protected CodeableConcept relationship;
1480
1481    /**
1482     * Time period during which the coverage is in force. A missing start date indicates the start date isn't known, a missing end date means the coverage is continuing to be in force.
1483     */
1484    @Child(name = "period", type = {Period.class}, order=11, min=0, max=1, modifier=false, summary=true)
1485    @Description(shortDefinition="Coverage start and end dates", formalDefinition="Time period during which the coverage is in force. A missing start date indicates the start date isn't known, a missing end date means the coverage is continuing to be in force." )
1486    protected Period period;
1487
1488    /**
1489     * The program or plan underwriter, payor, insurance company.
1490     */
1491    @Child(name = "insurer", type = {Organization.class}, order=12, min=0, max=1, modifier=false, summary=true)
1492    @Description(shortDefinition="Issuer of the policy", formalDefinition="The program or plan underwriter, payor, insurance company." )
1493    protected Reference insurer;
1494
1495    /**
1496     * A suite of underwriter specific classifiers.
1497     */
1498    @Child(name = "class", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1499    @Description(shortDefinition="Additional coverage classifications", formalDefinition="A suite of underwriter specific classifiers." )
1500    protected List<ClassComponent> class_;
1501
1502    /**
1503     * The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis.
1504     */
1505    @Child(name = "order", type = {PositiveIntType.class}, order=14, min=0, max=1, modifier=false, summary=true)
1506    @Description(shortDefinition="Relative order of the coverage", formalDefinition="The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis." )
1507    protected PositiveIntType order;
1508
1509    /**
1510     * The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.
1511     */
1512    @Child(name = "network", type = {StringType.class}, order=15, min=0, max=1, modifier=false, summary=true)
1513    @Description(shortDefinition="Insurer network", formalDefinition="The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply." )
1514    protected StringType network;
1515
1516    /**
1517     * A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been  included on the health card.
1518     */
1519    @Child(name = "costToBeneficiary", type = {}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1520    @Description(shortDefinition="Patient payments for services/products", formalDefinition="A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been  included on the health card." )
1521    protected List<CostToBeneficiaryComponent> costToBeneficiary;
1522
1523    /**
1524     * When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.
1525     */
1526    @Child(name = "subrogation", type = {BooleanType.class}, order=17, min=0, max=1, modifier=false, summary=false)
1527    @Description(shortDefinition="Reimbursement to insurer", formalDefinition="When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs." )
1528    protected BooleanType subrogation;
1529
1530    /**
1531     * The policy(s) which constitute this insurance coverage.
1532     */
1533    @Child(name = "contract", type = {Contract.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1534    @Description(shortDefinition="Contract details", formalDefinition="The policy(s) which constitute this insurance coverage." )
1535    protected List<Reference> contract;
1536
1537    /**
1538     * The insurance plan details, benefits and costs, which constitute this insurance coverage.
1539     */
1540    @Child(name = "insurancePlan", type = {InsurancePlan.class}, order=19, min=0, max=1, modifier=false, summary=false)
1541    @Description(shortDefinition="Insurance plan details", formalDefinition="The insurance plan details, benefits and costs, which constitute this insurance coverage." )
1542    protected Reference insurancePlan;
1543
1544    private static final long serialVersionUID = -1129388911L;
1545
1546  /**
1547   * Constructor
1548   */
1549    public Coverage() {
1550      super();
1551    }
1552
1553  /**
1554   * Constructor
1555   */
1556    public Coverage(FinancialResourceStatusCodes status, Kind kind, Reference beneficiary) {
1557      super();
1558      this.setStatus(status);
1559      this.setKind(kind);
1560      this.setBeneficiary(beneficiary);
1561    }
1562
1563    /**
1564     * @return {@link #identifier} (The identifier of the coverage as issued by the insurer.)
1565     */
1566    public List<Identifier> getIdentifier() { 
1567      if (this.identifier == null)
1568        this.identifier = new ArrayList<Identifier>();
1569      return this.identifier;
1570    }
1571
1572    /**
1573     * @return Returns a reference to <code>this</code> for easy method chaining
1574     */
1575    public Coverage setIdentifier(List<Identifier> theIdentifier) { 
1576      this.identifier = theIdentifier;
1577      return this;
1578    }
1579
1580    public boolean hasIdentifier() { 
1581      if (this.identifier == null)
1582        return false;
1583      for (Identifier item : this.identifier)
1584        if (!item.isEmpty())
1585          return true;
1586      return false;
1587    }
1588
1589    public Identifier addIdentifier() { //3
1590      Identifier t = new Identifier();
1591      if (this.identifier == null)
1592        this.identifier = new ArrayList<Identifier>();
1593      this.identifier.add(t);
1594      return t;
1595    }
1596
1597    public Coverage addIdentifier(Identifier t) { //3
1598      if (t == null)
1599        return this;
1600      if (this.identifier == null)
1601        this.identifier = new ArrayList<Identifier>();
1602      this.identifier.add(t);
1603      return this;
1604    }
1605
1606    /**
1607     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1608     */
1609    public Identifier getIdentifierFirstRep() { 
1610      if (getIdentifier().isEmpty()) {
1611        addIdentifier();
1612      }
1613      return getIdentifier().get(0);
1614    }
1615
1616    /**
1617     * @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
1618     */
1619    public Enumeration<FinancialResourceStatusCodes> getStatusElement() { 
1620      if (this.status == null)
1621        if (Configuration.errorOnAutoCreate())
1622          throw new Error("Attempt to auto-create Coverage.status");
1623        else if (Configuration.doAutoCreate())
1624          this.status = new Enumeration<FinancialResourceStatusCodes>(new FinancialResourceStatusCodesEnumFactory()); // bb
1625      return this.status;
1626    }
1627
1628    public boolean hasStatusElement() { 
1629      return this.status != null && !this.status.isEmpty();
1630    }
1631
1632    public boolean hasStatus() { 
1633      return this.status != null && !this.status.isEmpty();
1634    }
1635
1636    /**
1637     * @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
1638     */
1639    public Coverage setStatusElement(Enumeration<FinancialResourceStatusCodes> value) { 
1640      this.status = value;
1641      return this;
1642    }
1643
1644    /**
1645     * @return The status of the resource instance.
1646     */
1647    public FinancialResourceStatusCodes getStatus() { 
1648      return this.status == null ? null : this.status.getValue();
1649    }
1650
1651    /**
1652     * @param value The status of the resource instance.
1653     */
1654    public Coverage setStatus(FinancialResourceStatusCodes value) { 
1655        if (this.status == null)
1656          this.status = new Enumeration<FinancialResourceStatusCodes>(new FinancialResourceStatusCodesEnumFactory());
1657        this.status.setValue(value);
1658      return this;
1659    }
1660
1661    /**
1662     * @return {@link #kind} (The nature of the coverage be it insurance, or cash payment such as self-pay.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
1663     */
1664    public Enumeration<Kind> getKindElement() { 
1665      if (this.kind == null)
1666        if (Configuration.errorOnAutoCreate())
1667          throw new Error("Attempt to auto-create Coverage.kind");
1668        else if (Configuration.doAutoCreate())
1669          this.kind = new Enumeration<Kind>(new KindEnumFactory()); // bb
1670      return this.kind;
1671    }
1672
1673    public boolean hasKindElement() { 
1674      return this.kind != null && !this.kind.isEmpty();
1675    }
1676
1677    public boolean hasKind() { 
1678      return this.kind != null && !this.kind.isEmpty();
1679    }
1680
1681    /**
1682     * @param value {@link #kind} (The nature of the coverage be it insurance, or cash payment such as self-pay.). This is the underlying object with id, value and extensions. The accessor "getKind" gives direct access to the value
1683     */
1684    public Coverage setKindElement(Enumeration<Kind> value) { 
1685      this.kind = value;
1686      return this;
1687    }
1688
1689    /**
1690     * @return The nature of the coverage be it insurance, or cash payment such as self-pay.
1691     */
1692    public Kind getKind() { 
1693      return this.kind == null ? null : this.kind.getValue();
1694    }
1695
1696    /**
1697     * @param value The nature of the coverage be it insurance, or cash payment such as self-pay.
1698     */
1699    public Coverage setKind(Kind value) { 
1700        if (this.kind == null)
1701          this.kind = new Enumeration<Kind>(new KindEnumFactory());
1702        this.kind.setValue(value);
1703      return this;
1704    }
1705
1706    /**
1707     * @return {@link #paymentBy} (Link to the paying party and optionally what specifically they will be responsible to pay.)
1708     */
1709    public List<CoveragePaymentByComponent> getPaymentBy() { 
1710      if (this.paymentBy == null)
1711        this.paymentBy = new ArrayList<CoveragePaymentByComponent>();
1712      return this.paymentBy;
1713    }
1714
1715    /**
1716     * @return Returns a reference to <code>this</code> for easy method chaining
1717     */
1718    public Coverage setPaymentBy(List<CoveragePaymentByComponent> thePaymentBy) { 
1719      this.paymentBy = thePaymentBy;
1720      return this;
1721    }
1722
1723    public boolean hasPaymentBy() { 
1724      if (this.paymentBy == null)
1725        return false;
1726      for (CoveragePaymentByComponent item : this.paymentBy)
1727        if (!item.isEmpty())
1728          return true;
1729      return false;
1730    }
1731
1732    public CoveragePaymentByComponent addPaymentBy() { //3
1733      CoveragePaymentByComponent t = new CoveragePaymentByComponent();
1734      if (this.paymentBy == null)
1735        this.paymentBy = new ArrayList<CoveragePaymentByComponent>();
1736      this.paymentBy.add(t);
1737      return t;
1738    }
1739
1740    public Coverage addPaymentBy(CoveragePaymentByComponent t) { //3
1741      if (t == null)
1742        return this;
1743      if (this.paymentBy == null)
1744        this.paymentBy = new ArrayList<CoveragePaymentByComponent>();
1745      this.paymentBy.add(t);
1746      return this;
1747    }
1748
1749    /**
1750     * @return The first repetition of repeating field {@link #paymentBy}, creating it if it does not already exist {3}
1751     */
1752    public CoveragePaymentByComponent getPaymentByFirstRep() { 
1753      if (getPaymentBy().isEmpty()) {
1754        addPaymentBy();
1755      }
1756      return getPaymentBy().get(0);
1757    }
1758
1759    /**
1760     * @return {@link #type} (The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.)
1761     */
1762    public CodeableConcept getType() { 
1763      if (this.type == null)
1764        if (Configuration.errorOnAutoCreate())
1765          throw new Error("Attempt to auto-create Coverage.type");
1766        else if (Configuration.doAutoCreate())
1767          this.type = new CodeableConcept(); // cc
1768      return this.type;
1769    }
1770
1771    public boolean hasType() { 
1772      return this.type != null && !this.type.isEmpty();
1773    }
1774
1775    /**
1776     * @param value {@link #type} (The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.)
1777     */
1778    public Coverage setType(CodeableConcept value) { 
1779      this.type = value;
1780      return this;
1781    }
1782
1783    /**
1784     * @return {@link #policyHolder} (The party who 'owns' the insurance policy.)
1785     */
1786    public Reference getPolicyHolder() { 
1787      if (this.policyHolder == null)
1788        if (Configuration.errorOnAutoCreate())
1789          throw new Error("Attempt to auto-create Coverage.policyHolder");
1790        else if (Configuration.doAutoCreate())
1791          this.policyHolder = new Reference(); // cc
1792      return this.policyHolder;
1793    }
1794
1795    public boolean hasPolicyHolder() { 
1796      return this.policyHolder != null && !this.policyHolder.isEmpty();
1797    }
1798
1799    /**
1800     * @param value {@link #policyHolder} (The party who 'owns' the insurance policy.)
1801     */
1802    public Coverage setPolicyHolder(Reference value) { 
1803      this.policyHolder = value;
1804      return this;
1805    }
1806
1807    /**
1808     * @return {@link #subscriber} (The party who has signed-up for or 'owns' the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due.)
1809     */
1810    public Reference getSubscriber() { 
1811      if (this.subscriber == null)
1812        if (Configuration.errorOnAutoCreate())
1813          throw new Error("Attempt to auto-create Coverage.subscriber");
1814        else if (Configuration.doAutoCreate())
1815          this.subscriber = new Reference(); // cc
1816      return this.subscriber;
1817    }
1818
1819    public boolean hasSubscriber() { 
1820      return this.subscriber != null && !this.subscriber.isEmpty();
1821    }
1822
1823    /**
1824     * @param value {@link #subscriber} (The party who has signed-up for or 'owns' the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due.)
1825     */
1826    public Coverage setSubscriber(Reference value) { 
1827      this.subscriber = value;
1828      return this;
1829    }
1830
1831    /**
1832     * @return {@link #subscriberId} (The insurer assigned ID for the Subscriber.)
1833     */
1834    public List<Identifier> getSubscriberId() { 
1835      if (this.subscriberId == null)
1836        this.subscriberId = new ArrayList<Identifier>();
1837      return this.subscriberId;
1838    }
1839
1840    /**
1841     * @return Returns a reference to <code>this</code> for easy method chaining
1842     */
1843    public Coverage setSubscriberId(List<Identifier> theSubscriberId) { 
1844      this.subscriberId = theSubscriberId;
1845      return this;
1846    }
1847
1848    public boolean hasSubscriberId() { 
1849      if (this.subscriberId == null)
1850        return false;
1851      for (Identifier item : this.subscriberId)
1852        if (!item.isEmpty())
1853          return true;
1854      return false;
1855    }
1856
1857    public Identifier addSubscriberId() { //3
1858      Identifier t = new Identifier();
1859      if (this.subscriberId == null)
1860        this.subscriberId = new ArrayList<Identifier>();
1861      this.subscriberId.add(t);
1862      return t;
1863    }
1864
1865    public Coverage addSubscriberId(Identifier t) { //3
1866      if (t == null)
1867        return this;
1868      if (this.subscriberId == null)
1869        this.subscriberId = new ArrayList<Identifier>();
1870      this.subscriberId.add(t);
1871      return this;
1872    }
1873
1874    /**
1875     * @return The first repetition of repeating field {@link #subscriberId}, creating it if it does not already exist {3}
1876     */
1877    public Identifier getSubscriberIdFirstRep() { 
1878      if (getSubscriberId().isEmpty()) {
1879        addSubscriberId();
1880      }
1881      return getSubscriberId().get(0);
1882    }
1883
1884    /**
1885     * @return {@link #beneficiary} (The party who benefits from the insurance coverage; the patient when products and/or services are provided.)
1886     */
1887    public Reference getBeneficiary() { 
1888      if (this.beneficiary == null)
1889        if (Configuration.errorOnAutoCreate())
1890          throw new Error("Attempt to auto-create Coverage.beneficiary");
1891        else if (Configuration.doAutoCreate())
1892          this.beneficiary = new Reference(); // cc
1893      return this.beneficiary;
1894    }
1895
1896    public boolean hasBeneficiary() { 
1897      return this.beneficiary != null && !this.beneficiary.isEmpty();
1898    }
1899
1900    /**
1901     * @param value {@link #beneficiary} (The party who benefits from the insurance coverage; the patient when products and/or services are provided.)
1902     */
1903    public Coverage setBeneficiary(Reference value) { 
1904      this.beneficiary = value;
1905      return this;
1906    }
1907
1908    /**
1909     * @return {@link #dependent} (A designator for a dependent under the coverage.). This is the underlying object with id, value and extensions. The accessor "getDependent" gives direct access to the value
1910     */
1911    public StringType getDependentElement() { 
1912      if (this.dependent == null)
1913        if (Configuration.errorOnAutoCreate())
1914          throw new Error("Attempt to auto-create Coverage.dependent");
1915        else if (Configuration.doAutoCreate())
1916          this.dependent = new StringType(); // bb
1917      return this.dependent;
1918    }
1919
1920    public boolean hasDependentElement() { 
1921      return this.dependent != null && !this.dependent.isEmpty();
1922    }
1923
1924    public boolean hasDependent() { 
1925      return this.dependent != null && !this.dependent.isEmpty();
1926    }
1927
1928    /**
1929     * @param value {@link #dependent} (A designator for a dependent under the coverage.). This is the underlying object with id, value and extensions. The accessor "getDependent" gives direct access to the value
1930     */
1931    public Coverage setDependentElement(StringType value) { 
1932      this.dependent = value;
1933      return this;
1934    }
1935
1936    /**
1937     * @return A designator for a dependent under the coverage.
1938     */
1939    public String getDependent() { 
1940      return this.dependent == null ? null : this.dependent.getValue();
1941    }
1942
1943    /**
1944     * @param value A designator for a dependent under the coverage.
1945     */
1946    public Coverage setDependent(String value) { 
1947      if (Utilities.noString(value))
1948        this.dependent = null;
1949      else {
1950        if (this.dependent == null)
1951          this.dependent = new StringType();
1952        this.dependent.setValue(value);
1953      }
1954      return this;
1955    }
1956
1957    /**
1958     * @return {@link #relationship} (The relationship of beneficiary (patient) to the subscriber.)
1959     */
1960    public CodeableConcept getRelationship() { 
1961      if (this.relationship == null)
1962        if (Configuration.errorOnAutoCreate())
1963          throw new Error("Attempt to auto-create Coverage.relationship");
1964        else if (Configuration.doAutoCreate())
1965          this.relationship = new CodeableConcept(); // cc
1966      return this.relationship;
1967    }
1968
1969    public boolean hasRelationship() { 
1970      return this.relationship != null && !this.relationship.isEmpty();
1971    }
1972
1973    /**
1974     * @param value {@link #relationship} (The relationship of beneficiary (patient) to the subscriber.)
1975     */
1976    public Coverage setRelationship(CodeableConcept value) { 
1977      this.relationship = value;
1978      return this;
1979    }
1980
1981    /**
1982     * @return {@link #period} (Time period during which the coverage is in force. A missing start date indicates the start date isn't known, a missing end date means the coverage is continuing to be in force.)
1983     */
1984    public Period getPeriod() { 
1985      if (this.period == null)
1986        if (Configuration.errorOnAutoCreate())
1987          throw new Error("Attempt to auto-create Coverage.period");
1988        else if (Configuration.doAutoCreate())
1989          this.period = new Period(); // cc
1990      return this.period;
1991    }
1992
1993    public boolean hasPeriod() { 
1994      return this.period != null && !this.period.isEmpty();
1995    }
1996
1997    /**
1998     * @param value {@link #period} (Time period during which the coverage is in force. A missing start date indicates the start date isn't known, a missing end date means the coverage is continuing to be in force.)
1999     */
2000    public Coverage setPeriod(Period value) { 
2001      this.period = value;
2002      return this;
2003    }
2004
2005    /**
2006     * @return {@link #insurer} (The program or plan underwriter, payor, insurance company.)
2007     */
2008    public Reference getInsurer() { 
2009      if (this.insurer == null)
2010        if (Configuration.errorOnAutoCreate())
2011          throw new Error("Attempt to auto-create Coverage.insurer");
2012        else if (Configuration.doAutoCreate())
2013          this.insurer = new Reference(); // cc
2014      return this.insurer;
2015    }
2016
2017    public boolean hasInsurer() { 
2018      return this.insurer != null && !this.insurer.isEmpty();
2019    }
2020
2021    /**
2022     * @param value {@link #insurer} (The program or plan underwriter, payor, insurance company.)
2023     */
2024    public Coverage setInsurer(Reference value) { 
2025      this.insurer = value;
2026      return this;
2027    }
2028
2029    /**
2030     * @return {@link #class_} (A suite of underwriter specific classifiers.)
2031     */
2032    public List<ClassComponent> getClass_() { 
2033      if (this.class_ == null)
2034        this.class_ = new ArrayList<ClassComponent>();
2035      return this.class_;
2036    }
2037
2038    /**
2039     * @return Returns a reference to <code>this</code> for easy method chaining
2040     */
2041    public Coverage setClass_(List<ClassComponent> theClass_) { 
2042      this.class_ = theClass_;
2043      return this;
2044    }
2045
2046    public boolean hasClass_() { 
2047      if (this.class_ == null)
2048        return false;
2049      for (ClassComponent item : this.class_)
2050        if (!item.isEmpty())
2051          return true;
2052      return false;
2053    }
2054
2055    public ClassComponent addClass_() { //3
2056      ClassComponent t = new ClassComponent();
2057      if (this.class_ == null)
2058        this.class_ = new ArrayList<ClassComponent>();
2059      this.class_.add(t);
2060      return t;
2061    }
2062
2063    public Coverage addClass_(ClassComponent t) { //3
2064      if (t == null)
2065        return this;
2066      if (this.class_ == null)
2067        this.class_ = new ArrayList<ClassComponent>();
2068      this.class_.add(t);
2069      return this;
2070    }
2071
2072    /**
2073     * @return The first repetition of repeating field {@link #class_}, creating it if it does not already exist {3}
2074     */
2075    public ClassComponent getClass_FirstRep() { 
2076      if (getClass_().isEmpty()) {
2077        addClass_();
2078      }
2079      return getClass_().get(0);
2080    }
2081
2082    /**
2083     * @return {@link #order} (The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis.). This is the underlying object with id, value and extensions. The accessor "getOrder" gives direct access to the value
2084     */
2085    public PositiveIntType getOrderElement() { 
2086      if (this.order == null)
2087        if (Configuration.errorOnAutoCreate())
2088          throw new Error("Attempt to auto-create Coverage.order");
2089        else if (Configuration.doAutoCreate())
2090          this.order = new PositiveIntType(); // bb
2091      return this.order;
2092    }
2093
2094    public boolean hasOrderElement() { 
2095      return this.order != null && !this.order.isEmpty();
2096    }
2097
2098    public boolean hasOrder() { 
2099      return this.order != null && !this.order.isEmpty();
2100    }
2101
2102    /**
2103     * @param value {@link #order} (The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis.). This is the underlying object with id, value and extensions. The accessor "getOrder" gives direct access to the value
2104     */
2105    public Coverage setOrderElement(PositiveIntType value) { 
2106      this.order = value;
2107      return this;
2108    }
2109
2110    /**
2111     * @return The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis.
2112     */
2113    public int getOrder() { 
2114      return this.order == null || this.order.isEmpty() ? 0 : this.order.getValue();
2115    }
2116
2117    /**
2118     * @param value The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis.
2119     */
2120    public Coverage setOrder(int value) { 
2121        if (this.order == null)
2122          this.order = new PositiveIntType();
2123        this.order.setValue(value);
2124      return this;
2125    }
2126
2127    /**
2128     * @return {@link #network} (The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.). This is the underlying object with id, value and extensions. The accessor "getNetwork" gives direct access to the value
2129     */
2130    public StringType getNetworkElement() { 
2131      if (this.network == null)
2132        if (Configuration.errorOnAutoCreate())
2133          throw new Error("Attempt to auto-create Coverage.network");
2134        else if (Configuration.doAutoCreate())
2135          this.network = new StringType(); // bb
2136      return this.network;
2137    }
2138
2139    public boolean hasNetworkElement() { 
2140      return this.network != null && !this.network.isEmpty();
2141    }
2142
2143    public boolean hasNetwork() { 
2144      return this.network != null && !this.network.isEmpty();
2145    }
2146
2147    /**
2148     * @param value {@link #network} (The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.). This is the underlying object with id, value and extensions. The accessor "getNetwork" gives direct access to the value
2149     */
2150    public Coverage setNetworkElement(StringType value) { 
2151      this.network = value;
2152      return this;
2153    }
2154
2155    /**
2156     * @return The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.
2157     */
2158    public String getNetwork() { 
2159      return this.network == null ? null : this.network.getValue();
2160    }
2161
2162    /**
2163     * @param value The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.
2164     */
2165    public Coverage setNetwork(String value) { 
2166      if (Utilities.noString(value))
2167        this.network = null;
2168      else {
2169        if (this.network == null)
2170          this.network = new StringType();
2171        this.network.setValue(value);
2172      }
2173      return this;
2174    }
2175
2176    /**
2177     * @return {@link #costToBeneficiary} (A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been  included on the health card.)
2178     */
2179    public List<CostToBeneficiaryComponent> getCostToBeneficiary() { 
2180      if (this.costToBeneficiary == null)
2181        this.costToBeneficiary = new ArrayList<CostToBeneficiaryComponent>();
2182      return this.costToBeneficiary;
2183    }
2184
2185    /**
2186     * @return Returns a reference to <code>this</code> for easy method chaining
2187     */
2188    public Coverage setCostToBeneficiary(List<CostToBeneficiaryComponent> theCostToBeneficiary) { 
2189      this.costToBeneficiary = theCostToBeneficiary;
2190      return this;
2191    }
2192
2193    public boolean hasCostToBeneficiary() { 
2194      if (this.costToBeneficiary == null)
2195        return false;
2196      for (CostToBeneficiaryComponent item : this.costToBeneficiary)
2197        if (!item.isEmpty())
2198          return true;
2199      return false;
2200    }
2201
2202    public CostToBeneficiaryComponent addCostToBeneficiary() { //3
2203      CostToBeneficiaryComponent t = new CostToBeneficiaryComponent();
2204      if (this.costToBeneficiary == null)
2205        this.costToBeneficiary = new ArrayList<CostToBeneficiaryComponent>();
2206      this.costToBeneficiary.add(t);
2207      return t;
2208    }
2209
2210    public Coverage addCostToBeneficiary(CostToBeneficiaryComponent t) { //3
2211      if (t == null)
2212        return this;
2213      if (this.costToBeneficiary == null)
2214        this.costToBeneficiary = new ArrayList<CostToBeneficiaryComponent>();
2215      this.costToBeneficiary.add(t);
2216      return this;
2217    }
2218
2219    /**
2220     * @return The first repetition of repeating field {@link #costToBeneficiary}, creating it if it does not already exist {3}
2221     */
2222    public CostToBeneficiaryComponent getCostToBeneficiaryFirstRep() { 
2223      if (getCostToBeneficiary().isEmpty()) {
2224        addCostToBeneficiary();
2225      }
2226      return getCostToBeneficiary().get(0);
2227    }
2228
2229    /**
2230     * @return {@link #subrogation} (When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.). This is the underlying object with id, value and extensions. The accessor "getSubrogation" gives direct access to the value
2231     */
2232    public BooleanType getSubrogationElement() { 
2233      if (this.subrogation == null)
2234        if (Configuration.errorOnAutoCreate())
2235          throw new Error("Attempt to auto-create Coverage.subrogation");
2236        else if (Configuration.doAutoCreate())
2237          this.subrogation = new BooleanType(); // bb
2238      return this.subrogation;
2239    }
2240
2241    public boolean hasSubrogationElement() { 
2242      return this.subrogation != null && !this.subrogation.isEmpty();
2243    }
2244
2245    public boolean hasSubrogation() { 
2246      return this.subrogation != null && !this.subrogation.isEmpty();
2247    }
2248
2249    /**
2250     * @param value {@link #subrogation} (When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.). This is the underlying object with id, value and extensions. The accessor "getSubrogation" gives direct access to the value
2251     */
2252    public Coverage setSubrogationElement(BooleanType value) { 
2253      this.subrogation = value;
2254      return this;
2255    }
2256
2257    /**
2258     * @return When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.
2259     */
2260    public boolean getSubrogation() { 
2261      return this.subrogation == null || this.subrogation.isEmpty() ? false : this.subrogation.getValue();
2262    }
2263
2264    /**
2265     * @param value When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.
2266     */
2267    public Coverage setSubrogation(boolean value) { 
2268        if (this.subrogation == null)
2269          this.subrogation = new BooleanType();
2270        this.subrogation.setValue(value);
2271      return this;
2272    }
2273
2274    /**
2275     * @return {@link #contract} (The policy(s) which constitute this insurance coverage.)
2276     */
2277    public List<Reference> getContract() { 
2278      if (this.contract == null)
2279        this.contract = new ArrayList<Reference>();
2280      return this.contract;
2281    }
2282
2283    /**
2284     * @return Returns a reference to <code>this</code> for easy method chaining
2285     */
2286    public Coverage setContract(List<Reference> theContract) { 
2287      this.contract = theContract;
2288      return this;
2289    }
2290
2291    public boolean hasContract() { 
2292      if (this.contract == null)
2293        return false;
2294      for (Reference item : this.contract)
2295        if (!item.isEmpty())
2296          return true;
2297      return false;
2298    }
2299
2300    public Reference addContract() { //3
2301      Reference t = new Reference();
2302      if (this.contract == null)
2303        this.contract = new ArrayList<Reference>();
2304      this.contract.add(t);
2305      return t;
2306    }
2307
2308    public Coverage addContract(Reference t) { //3
2309      if (t == null)
2310        return this;
2311      if (this.contract == null)
2312        this.contract = new ArrayList<Reference>();
2313      this.contract.add(t);
2314      return this;
2315    }
2316
2317    /**
2318     * @return The first repetition of repeating field {@link #contract}, creating it if it does not already exist {3}
2319     */
2320    public Reference getContractFirstRep() { 
2321      if (getContract().isEmpty()) {
2322        addContract();
2323      }
2324      return getContract().get(0);
2325    }
2326
2327    /**
2328     * @return {@link #insurancePlan} (The insurance plan details, benefits and costs, which constitute this insurance coverage.)
2329     */
2330    public Reference getInsurancePlan() { 
2331      if (this.insurancePlan == null)
2332        if (Configuration.errorOnAutoCreate())
2333          throw new Error("Attempt to auto-create Coverage.insurancePlan");
2334        else if (Configuration.doAutoCreate())
2335          this.insurancePlan = new Reference(); // cc
2336      return this.insurancePlan;
2337    }
2338
2339    public boolean hasInsurancePlan() { 
2340      return this.insurancePlan != null && !this.insurancePlan.isEmpty();
2341    }
2342
2343    /**
2344     * @param value {@link #insurancePlan} (The insurance plan details, benefits and costs, which constitute this insurance coverage.)
2345     */
2346    public Coverage setInsurancePlan(Reference value) { 
2347      this.insurancePlan = value;
2348      return this;
2349    }
2350
2351      protected void listChildren(List<Property> children) {
2352        super.listChildren(children);
2353        children.add(new Property("identifier", "Identifier", "The identifier of the coverage as issued by the insurer.", 0, java.lang.Integer.MAX_VALUE, identifier));
2354        children.add(new Property("status", "code", "The status of the resource instance.", 0, 1, status));
2355        children.add(new Property("kind", "code", "The nature of the coverage be it insurance, or cash payment such as self-pay.", 0, 1, kind));
2356        children.add(new Property("paymentBy", "", "Link to the paying party and optionally what specifically they will be responsible to pay.", 0, java.lang.Integer.MAX_VALUE, paymentBy));
2357        children.add(new Property("type", "CodeableConcept", "The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.", 0, 1, type));
2358        children.add(new Property("policyHolder", "Reference(Patient|RelatedPerson|Organization)", "The party who 'owns' the insurance policy.", 0, 1, policyHolder));
2359        children.add(new Property("subscriber", "Reference(Patient|RelatedPerson)", "The party who has signed-up for or 'owns' the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due.", 0, 1, subscriber));
2360        children.add(new Property("subscriberId", "Identifier", "The insurer assigned ID for the Subscriber.", 0, java.lang.Integer.MAX_VALUE, subscriberId));
2361        children.add(new Property("beneficiary", "Reference(Patient)", "The party who benefits from the insurance coverage; the patient when products and/or services are provided.", 0, 1, beneficiary));
2362        children.add(new Property("dependent", "string", "A designator for a dependent under the coverage.", 0, 1, dependent));
2363        children.add(new Property("relationship", "CodeableConcept", "The relationship of beneficiary (patient) to the subscriber.", 0, 1, relationship));
2364        children.add(new Property("period", "Period", "Time period during which the coverage is in force. A missing start date indicates the start date isn't known, a missing end date means the coverage is continuing to be in force.", 0, 1, period));
2365        children.add(new Property("insurer", "Reference(Organization)", "The program or plan underwriter, payor, insurance company.", 0, 1, insurer));
2366        children.add(new Property("class", "", "A suite of underwriter specific classifiers.", 0, java.lang.Integer.MAX_VALUE, class_));
2367        children.add(new Property("order", "positiveInt", "The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis.", 0, 1, order));
2368        children.add(new Property("network", "string", "The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.", 0, 1, network));
2369        children.add(new Property("costToBeneficiary", "", "A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been  included on the health card.", 0, java.lang.Integer.MAX_VALUE, costToBeneficiary));
2370        children.add(new Property("subrogation", "boolean", "When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.", 0, 1, subrogation));
2371        children.add(new Property("contract", "Reference(Contract)", "The policy(s) which constitute this insurance coverage.", 0, java.lang.Integer.MAX_VALUE, contract));
2372        children.add(new Property("insurancePlan", "Reference(InsurancePlan)", "The insurance plan details, benefits and costs, which constitute this insurance coverage.", 0, 1, insurancePlan));
2373      }
2374
2375      @Override
2376      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2377        switch (_hash) {
2378        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "The identifier of the coverage as issued by the insurer.", 0, java.lang.Integer.MAX_VALUE, identifier);
2379        case -892481550: /*status*/  return new Property("status", "code", "The status of the resource instance.", 0, 1, status);
2380        case 3292052: /*kind*/  return new Property("kind", "code", "The nature of the coverage be it insurance, or cash payment such as self-pay.", 0, 1, kind);
2381        case -86519555: /*paymentBy*/  return new Property("paymentBy", "", "Link to the paying party and optionally what specifically they will be responsible to pay.", 0, java.lang.Integer.MAX_VALUE, paymentBy);
2382        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.", 0, 1, type);
2383        case 2046898558: /*policyHolder*/  return new Property("policyHolder", "Reference(Patient|RelatedPerson|Organization)", "The party who 'owns' the insurance policy.", 0, 1, policyHolder);
2384        case -1219769240: /*subscriber*/  return new Property("subscriber", "Reference(Patient|RelatedPerson)", "The party who has signed-up for or 'owns' the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due.", 0, 1, subscriber);
2385        case 327834531: /*subscriberId*/  return new Property("subscriberId", "Identifier", "The insurer assigned ID for the Subscriber.", 0, java.lang.Integer.MAX_VALUE, subscriberId);
2386        case -565102875: /*beneficiary*/  return new Property("beneficiary", "Reference(Patient)", "The party who benefits from the insurance coverage; the patient when products and/or services are provided.", 0, 1, beneficiary);
2387        case -1109226753: /*dependent*/  return new Property("dependent", "string", "A designator for a dependent under the coverage.", 0, 1, dependent);
2388        case -261851592: /*relationship*/  return new Property("relationship", "CodeableConcept", "The relationship of beneficiary (patient) to the subscriber.", 0, 1, relationship);
2389        case -991726143: /*period*/  return new Property("period", "Period", "Time period during which the coverage is in force. A missing start date indicates the start date isn't known, a missing end date means the coverage is continuing to be in force.", 0, 1, period);
2390        case 1957615864: /*insurer*/  return new Property("insurer", "Reference(Organization)", "The program or plan underwriter, payor, insurance company.", 0, 1, insurer);
2391        case 94742904: /*class*/  return new Property("class", "", "A suite of underwriter specific classifiers.", 0, java.lang.Integer.MAX_VALUE, class_);
2392        case 106006350: /*order*/  return new Property("order", "positiveInt", "The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care. For example; a patient might have (0) auto insurance (1) their own health insurance and (2) spouse's health insurance. When claiming for treatments which were not the result of an auto accident then only coverages (1) and (2) above would be applicatble and would apply in the order specified in parenthesis.", 0, 1, order);
2393        case 1843485230: /*network*/  return new Property("network", "string", "The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the 'in-network' rate, otherwise 'out of network' terms and conditions apply.", 0, 1, network);
2394        case -1866474851: /*costToBeneficiary*/  return new Property("costToBeneficiary", "", "A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been  included on the health card.", 0, java.lang.Integer.MAX_VALUE, costToBeneficiary);
2395        case 837389739: /*subrogation*/  return new Property("subrogation", "boolean", "When 'subrogation=true' this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.", 0, 1, subrogation);
2396        case -566947566: /*contract*/  return new Property("contract", "Reference(Contract)", "The policy(s) which constitute this insurance coverage.", 0, java.lang.Integer.MAX_VALUE, contract);
2397        case 1992141091: /*insurancePlan*/  return new Property("insurancePlan", "Reference(InsurancePlan)", "The insurance plan details, benefits and costs, which constitute this insurance coverage.", 0, 1, insurancePlan);
2398        default: return super.getNamedProperty(_hash, _name, _checkValid);
2399        }
2400
2401      }
2402
2403      @Override
2404      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2405        switch (hash) {
2406        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2407        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<FinancialResourceStatusCodes>
2408        case 3292052: /*kind*/ return this.kind == null ? new Base[0] : new Base[] {this.kind}; // Enumeration<Kind>
2409        case -86519555: /*paymentBy*/ return this.paymentBy == null ? new Base[0] : this.paymentBy.toArray(new Base[this.paymentBy.size()]); // CoveragePaymentByComponent
2410        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
2411        case 2046898558: /*policyHolder*/ return this.policyHolder == null ? new Base[0] : new Base[] {this.policyHolder}; // Reference
2412        case -1219769240: /*subscriber*/ return this.subscriber == null ? new Base[0] : new Base[] {this.subscriber}; // Reference
2413        case 327834531: /*subscriberId*/ return this.subscriberId == null ? new Base[0] : this.subscriberId.toArray(new Base[this.subscriberId.size()]); // Identifier
2414        case -565102875: /*beneficiary*/ return this.beneficiary == null ? new Base[0] : new Base[] {this.beneficiary}; // Reference
2415        case -1109226753: /*dependent*/ return this.dependent == null ? new Base[0] : new Base[] {this.dependent}; // StringType
2416        case -261851592: /*relationship*/ return this.relationship == null ? new Base[0] : new Base[] {this.relationship}; // CodeableConcept
2417        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
2418        case 1957615864: /*insurer*/ return this.insurer == null ? new Base[0] : new Base[] {this.insurer}; // Reference
2419        case 94742904: /*class*/ return this.class_ == null ? new Base[0] : this.class_.toArray(new Base[this.class_.size()]); // ClassComponent
2420        case 106006350: /*order*/ return this.order == null ? new Base[0] : new Base[] {this.order}; // PositiveIntType
2421        case 1843485230: /*network*/ return this.network == null ? new Base[0] : new Base[] {this.network}; // StringType
2422        case -1866474851: /*costToBeneficiary*/ return this.costToBeneficiary == null ? new Base[0] : this.costToBeneficiary.toArray(new Base[this.costToBeneficiary.size()]); // CostToBeneficiaryComponent
2423        case 837389739: /*subrogation*/ return this.subrogation == null ? new Base[0] : new Base[] {this.subrogation}; // BooleanType
2424        case -566947566: /*contract*/ return this.contract == null ? new Base[0] : this.contract.toArray(new Base[this.contract.size()]); // Reference
2425        case 1992141091: /*insurancePlan*/ return this.insurancePlan == null ? new Base[0] : new Base[] {this.insurancePlan}; // Reference
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 3292052: // kind
2442          value = new KindEnumFactory().fromType(TypeConvertor.castToCode(value));
2443          this.kind = (Enumeration) value; // Enumeration<Kind>
2444          return value;
2445        case -86519555: // paymentBy
2446          this.getPaymentBy().add((CoveragePaymentByComponent) value); // CoveragePaymentByComponent
2447          return value;
2448        case 3575610: // type
2449          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2450          return value;
2451        case 2046898558: // policyHolder
2452          this.policyHolder = TypeConvertor.castToReference(value); // Reference
2453          return value;
2454        case -1219769240: // subscriber
2455          this.subscriber = TypeConvertor.castToReference(value); // Reference
2456          return value;
2457        case 327834531: // subscriberId
2458          this.getSubscriberId().add(TypeConvertor.castToIdentifier(value)); // Identifier
2459          return value;
2460        case -565102875: // beneficiary
2461          this.beneficiary = TypeConvertor.castToReference(value); // Reference
2462          return value;
2463        case -1109226753: // dependent
2464          this.dependent = TypeConvertor.castToString(value); // StringType
2465          return value;
2466        case -261851592: // relationship
2467          this.relationship = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2468          return value;
2469        case -991726143: // period
2470          this.period = TypeConvertor.castToPeriod(value); // Period
2471          return value;
2472        case 1957615864: // insurer
2473          this.insurer = TypeConvertor.castToReference(value); // Reference
2474          return value;
2475        case 94742904: // class
2476          this.getClass_().add((ClassComponent) value); // ClassComponent
2477          return value;
2478        case 106006350: // order
2479          this.order = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2480          return value;
2481        case 1843485230: // network
2482          this.network = TypeConvertor.castToString(value); // StringType
2483          return value;
2484        case -1866474851: // costToBeneficiary
2485          this.getCostToBeneficiary().add((CostToBeneficiaryComponent) value); // CostToBeneficiaryComponent
2486          return value;
2487        case 837389739: // subrogation
2488          this.subrogation = TypeConvertor.castToBoolean(value); // BooleanType
2489          return value;
2490        case -566947566: // contract
2491          this.getContract().add(TypeConvertor.castToReference(value)); // Reference
2492          return value;
2493        case 1992141091: // insurancePlan
2494          this.insurancePlan = TypeConvertor.castToReference(value); // Reference
2495          return value;
2496        default: return super.setProperty(hash, name, value);
2497        }
2498
2499      }
2500
2501      @Override
2502      public Base setProperty(String name, Base value) throws FHIRException {
2503        if (name.equals("identifier")) {
2504          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
2505        } else if (name.equals("status")) {
2506          value = new FinancialResourceStatusCodesEnumFactory().fromType(TypeConvertor.castToCode(value));
2507          this.status = (Enumeration) value; // Enumeration<FinancialResourceStatusCodes>
2508        } else if (name.equals("kind")) {
2509          value = new KindEnumFactory().fromType(TypeConvertor.castToCode(value));
2510          this.kind = (Enumeration) value; // Enumeration<Kind>
2511        } else if (name.equals("paymentBy")) {
2512          this.getPaymentBy().add((CoveragePaymentByComponent) value);
2513        } else if (name.equals("type")) {
2514          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2515        } else if (name.equals("policyHolder")) {
2516          this.policyHolder = TypeConvertor.castToReference(value); // Reference
2517        } else if (name.equals("subscriber")) {
2518          this.subscriber = TypeConvertor.castToReference(value); // Reference
2519        } else if (name.equals("subscriberId")) {
2520          this.getSubscriberId().add(TypeConvertor.castToIdentifier(value));
2521        } else if (name.equals("beneficiary")) {
2522          this.beneficiary = TypeConvertor.castToReference(value); // Reference
2523        } else if (name.equals("dependent")) {
2524          this.dependent = TypeConvertor.castToString(value); // StringType
2525        } else if (name.equals("relationship")) {
2526          this.relationship = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2527        } else if (name.equals("period")) {
2528          this.period = TypeConvertor.castToPeriod(value); // Period
2529        } else if (name.equals("insurer")) {
2530          this.insurer = TypeConvertor.castToReference(value); // Reference
2531        } else if (name.equals("class")) {
2532          this.getClass_().add((ClassComponent) value);
2533        } else if (name.equals("order")) {
2534          this.order = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2535        } else if (name.equals("network")) {
2536          this.network = TypeConvertor.castToString(value); // StringType
2537        } else if (name.equals("costToBeneficiary")) {
2538          this.getCostToBeneficiary().add((CostToBeneficiaryComponent) value);
2539        } else if (name.equals("subrogation")) {
2540          this.subrogation = TypeConvertor.castToBoolean(value); // BooleanType
2541        } else if (name.equals("contract")) {
2542          this.getContract().add(TypeConvertor.castToReference(value));
2543        } else if (name.equals("insurancePlan")) {
2544          this.insurancePlan = TypeConvertor.castToReference(value); // Reference
2545        } else
2546          return super.setProperty(name, value);
2547        return value;
2548      }
2549
2550      @Override
2551      public Base makeProperty(int hash, String name) throws FHIRException {
2552        switch (hash) {
2553        case -1618432855:  return addIdentifier(); 
2554        case -892481550:  return getStatusElement();
2555        case 3292052:  return getKindElement();
2556        case -86519555:  return addPaymentBy(); 
2557        case 3575610:  return getType();
2558        case 2046898558:  return getPolicyHolder();
2559        case -1219769240:  return getSubscriber();
2560        case 327834531:  return addSubscriberId(); 
2561        case -565102875:  return getBeneficiary();
2562        case -1109226753:  return getDependentElement();
2563        case -261851592:  return getRelationship();
2564        case -991726143:  return getPeriod();
2565        case 1957615864:  return getInsurer();
2566        case 94742904:  return addClass_(); 
2567        case 106006350:  return getOrderElement();
2568        case 1843485230:  return getNetworkElement();
2569        case -1866474851:  return addCostToBeneficiary(); 
2570        case 837389739:  return getSubrogationElement();
2571        case -566947566:  return addContract(); 
2572        case 1992141091:  return getInsurancePlan();
2573        default: return super.makeProperty(hash, name);
2574        }
2575
2576      }
2577
2578      @Override
2579      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2580        switch (hash) {
2581        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2582        case -892481550: /*status*/ return new String[] {"code"};
2583        case 3292052: /*kind*/ return new String[] {"code"};
2584        case -86519555: /*paymentBy*/ return new String[] {};
2585        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2586        case 2046898558: /*policyHolder*/ return new String[] {"Reference"};
2587        case -1219769240: /*subscriber*/ return new String[] {"Reference"};
2588        case 327834531: /*subscriberId*/ return new String[] {"Identifier"};
2589        case -565102875: /*beneficiary*/ return new String[] {"Reference"};
2590        case -1109226753: /*dependent*/ return new String[] {"string"};
2591        case -261851592: /*relationship*/ return new String[] {"CodeableConcept"};
2592        case -991726143: /*period*/ return new String[] {"Period"};
2593        case 1957615864: /*insurer*/ return new String[] {"Reference"};
2594        case 94742904: /*class*/ return new String[] {};
2595        case 106006350: /*order*/ return new String[] {"positiveInt"};
2596        case 1843485230: /*network*/ return new String[] {"string"};
2597        case -1866474851: /*costToBeneficiary*/ return new String[] {};
2598        case 837389739: /*subrogation*/ return new String[] {"boolean"};
2599        case -566947566: /*contract*/ return new String[] {"Reference"};
2600        case 1992141091: /*insurancePlan*/ return new String[] {"Reference"};
2601        default: return super.getTypesForProperty(hash, name);
2602        }
2603
2604      }
2605
2606      @Override
2607      public Base addChild(String name) throws FHIRException {
2608        if (name.equals("identifier")) {
2609          return addIdentifier();
2610        }
2611        else if (name.equals("status")) {
2612          throw new FHIRException("Cannot call addChild on a primitive type Coverage.status");
2613        }
2614        else if (name.equals("kind")) {
2615          throw new FHIRException("Cannot call addChild on a primitive type Coverage.kind");
2616        }
2617        else if (name.equals("paymentBy")) {
2618          return addPaymentBy();
2619        }
2620        else if (name.equals("type")) {
2621          this.type = new CodeableConcept();
2622          return this.type;
2623        }
2624        else if (name.equals("policyHolder")) {
2625          this.policyHolder = new Reference();
2626          return this.policyHolder;
2627        }
2628        else if (name.equals("subscriber")) {
2629          this.subscriber = new Reference();
2630          return this.subscriber;
2631        }
2632        else if (name.equals("subscriberId")) {
2633          return addSubscriberId();
2634        }
2635        else if (name.equals("beneficiary")) {
2636          this.beneficiary = new Reference();
2637          return this.beneficiary;
2638        }
2639        else if (name.equals("dependent")) {
2640          throw new FHIRException("Cannot call addChild on a primitive type Coverage.dependent");
2641        }
2642        else if (name.equals("relationship")) {
2643          this.relationship = new CodeableConcept();
2644          return this.relationship;
2645        }
2646        else if (name.equals("period")) {
2647          this.period = new Period();
2648          return this.period;
2649        }
2650        else if (name.equals("insurer")) {
2651          this.insurer = new Reference();
2652          return this.insurer;
2653        }
2654        else if (name.equals("class")) {
2655          return addClass_();
2656        }
2657        else if (name.equals("order")) {
2658          throw new FHIRException("Cannot call addChild on a primitive type Coverage.order");
2659        }
2660        else if (name.equals("network")) {
2661          throw new FHIRException("Cannot call addChild on a primitive type Coverage.network");
2662        }
2663        else if (name.equals("costToBeneficiary")) {
2664          return addCostToBeneficiary();
2665        }
2666        else if (name.equals("subrogation")) {
2667          throw new FHIRException("Cannot call addChild on a primitive type Coverage.subrogation");
2668        }
2669        else if (name.equals("contract")) {
2670          return addContract();
2671        }
2672        else if (name.equals("insurancePlan")) {
2673          this.insurancePlan = new Reference();
2674          return this.insurancePlan;
2675        }
2676        else
2677          return super.addChild(name);
2678      }
2679
2680  public String fhirType() {
2681    return "Coverage";
2682
2683  }
2684
2685      public Coverage copy() {
2686        Coverage dst = new Coverage();
2687        copyValues(dst);
2688        return dst;
2689      }
2690
2691      public void copyValues(Coverage dst) {
2692        super.copyValues(dst);
2693        if (identifier != null) {
2694          dst.identifier = new ArrayList<Identifier>();
2695          for (Identifier i : identifier)
2696            dst.identifier.add(i.copy());
2697        };
2698        dst.status = status == null ? null : status.copy();
2699        dst.kind = kind == null ? null : kind.copy();
2700        if (paymentBy != null) {
2701          dst.paymentBy = new ArrayList<CoveragePaymentByComponent>();
2702          for (CoveragePaymentByComponent i : paymentBy)
2703            dst.paymentBy.add(i.copy());
2704        };
2705        dst.type = type == null ? null : type.copy();
2706        dst.policyHolder = policyHolder == null ? null : policyHolder.copy();
2707        dst.subscriber = subscriber == null ? null : subscriber.copy();
2708        if (subscriberId != null) {
2709          dst.subscriberId = new ArrayList<Identifier>();
2710          for (Identifier i : subscriberId)
2711            dst.subscriberId.add(i.copy());
2712        };
2713        dst.beneficiary = beneficiary == null ? null : beneficiary.copy();
2714        dst.dependent = dependent == null ? null : dependent.copy();
2715        dst.relationship = relationship == null ? null : relationship.copy();
2716        dst.period = period == null ? null : period.copy();
2717        dst.insurer = insurer == null ? null : insurer.copy();
2718        if (class_ != null) {
2719          dst.class_ = new ArrayList<ClassComponent>();
2720          for (ClassComponent i : class_)
2721            dst.class_.add(i.copy());
2722        };
2723        dst.order = order == null ? null : order.copy();
2724        dst.network = network == null ? null : network.copy();
2725        if (costToBeneficiary != null) {
2726          dst.costToBeneficiary = new ArrayList<CostToBeneficiaryComponent>();
2727          for (CostToBeneficiaryComponent i : costToBeneficiary)
2728            dst.costToBeneficiary.add(i.copy());
2729        };
2730        dst.subrogation = subrogation == null ? null : subrogation.copy();
2731        if (contract != null) {
2732          dst.contract = new ArrayList<Reference>();
2733          for (Reference i : contract)
2734            dst.contract.add(i.copy());
2735        };
2736        dst.insurancePlan = insurancePlan == null ? null : insurancePlan.copy();
2737      }
2738
2739      protected Coverage typedCopy() {
2740        return copy();
2741      }
2742
2743      @Override
2744      public boolean equalsDeep(Base other_) {
2745        if (!super.equalsDeep(other_))
2746          return false;
2747        if (!(other_ instanceof Coverage))
2748          return false;
2749        Coverage o = (Coverage) other_;
2750        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(kind, o.kind, true)
2751           && compareDeep(paymentBy, o.paymentBy, true) && compareDeep(type, o.type, true) && compareDeep(policyHolder, o.policyHolder, true)
2752           && compareDeep(subscriber, o.subscriber, true) && compareDeep(subscriberId, o.subscriberId, true)
2753           && compareDeep(beneficiary, o.beneficiary, true) && compareDeep(dependent, o.dependent, true) && compareDeep(relationship, o.relationship, true)
2754           && compareDeep(period, o.period, true) && compareDeep(insurer, o.insurer, true) && compareDeep(class_, o.class_, true)
2755           && compareDeep(order, o.order, true) && compareDeep(network, o.network, true) && compareDeep(costToBeneficiary, o.costToBeneficiary, true)
2756           && compareDeep(subrogation, o.subrogation, true) && compareDeep(contract, o.contract, true) && compareDeep(insurancePlan, o.insurancePlan, true)
2757          ;
2758      }
2759
2760      @Override
2761      public boolean equalsShallow(Base other_) {
2762        if (!super.equalsShallow(other_))
2763          return false;
2764        if (!(other_ instanceof Coverage))
2765          return false;
2766        Coverage o = (Coverage) other_;
2767        return compareValues(status, o.status, true) && compareValues(kind, o.kind, true) && compareValues(dependent, o.dependent, true)
2768           && compareValues(order, o.order, true) && compareValues(network, o.network, true) && compareValues(subrogation, o.subrogation, true)
2769          ;
2770      }
2771
2772      public boolean isEmpty() {
2773        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, kind
2774          , paymentBy, type, policyHolder, subscriber, subscriberId, beneficiary, dependent
2775          , relationship, period, insurer, class_, order, network, costToBeneficiary, subrogation
2776          , contract, insurancePlan);
2777      }
2778
2779  @Override
2780  public ResourceType getResourceType() {
2781    return ResourceType.Coverage;
2782   }
2783
2784 /**
2785   * Search parameter: <b>beneficiary</b>
2786   * <p>
2787   * Description: <b>Covered party</b><br>
2788   * Type: <b>reference</b><br>
2789   * Path: <b>Coverage.beneficiary</b><br>
2790   * </p>
2791   */
2792  @SearchParamDefinition(name="beneficiary", path="Coverage.beneficiary", description="Covered party", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Patient.class } )
2793  public static final String SP_BENEFICIARY = "beneficiary";
2794 /**
2795   * <b>Fluent Client</b> search parameter constant for <b>beneficiary</b>
2796   * <p>
2797   * Description: <b>Covered party</b><br>
2798   * Type: <b>reference</b><br>
2799   * Path: <b>Coverage.beneficiary</b><br>
2800   * </p>
2801   */
2802  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BENEFICIARY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BENEFICIARY);
2803
2804/**
2805   * Constant for fluent queries to be used to add include statements. Specifies
2806   * the path value of "<b>Coverage:beneficiary</b>".
2807   */
2808  public static final ca.uhn.fhir.model.api.Include INCLUDE_BENEFICIARY = new ca.uhn.fhir.model.api.Include("Coverage:beneficiary").toLocked();
2809
2810 /**
2811   * Search parameter: <b>class-type</b>
2812   * <p>
2813   * Description: <b>Coverage class (eg. plan, group)</b><br>
2814   * Type: <b>token</b><br>
2815   * Path: <b>Coverage.class.type</b><br>
2816   * </p>
2817   */
2818  @SearchParamDefinition(name="class-type", path="Coverage.class.type", description="Coverage class (eg. plan, group)", type="token" )
2819  public static final String SP_CLASS_TYPE = "class-type";
2820 /**
2821   * <b>Fluent Client</b> search parameter constant for <b>class-type</b>
2822   * <p>
2823   * Description: <b>Coverage class (eg. plan, group)</b><br>
2824   * Type: <b>token</b><br>
2825   * Path: <b>Coverage.class.type</b><br>
2826   * </p>
2827   */
2828  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CLASS_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CLASS_TYPE);
2829
2830 /**
2831   * Search parameter: <b>class-value</b>
2832   * <p>
2833   * Description: <b>Value of the class (eg. Plan number, group number)</b><br>
2834   * Type: <b>token</b><br>
2835   * Path: <b>Coverage.class.value</b><br>
2836   * </p>
2837   */
2838  @SearchParamDefinition(name="class-value", path="Coverage.class.value", description="Value of the class (eg. Plan number, group number)", type="token" )
2839  public static final String SP_CLASS_VALUE = "class-value";
2840 /**
2841   * <b>Fluent Client</b> search parameter constant for <b>class-value</b>
2842   * <p>
2843   * Description: <b>Value of the class (eg. Plan number, group number)</b><br>
2844   * Type: <b>token</b><br>
2845   * Path: <b>Coverage.class.value</b><br>
2846   * </p>
2847   */
2848  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CLASS_VALUE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CLASS_VALUE);
2849
2850 /**
2851   * Search parameter: <b>dependent</b>
2852   * <p>
2853   * Description: <b>Dependent number</b><br>
2854   * Type: <b>string</b><br>
2855   * Path: <b>Coverage.dependent</b><br>
2856   * </p>
2857   */
2858  @SearchParamDefinition(name="dependent", path="Coverage.dependent", description="Dependent number", type="string" )
2859  public static final String SP_DEPENDENT = "dependent";
2860 /**
2861   * <b>Fluent Client</b> search parameter constant for <b>dependent</b>
2862   * <p>
2863   * Description: <b>Dependent number</b><br>
2864   * Type: <b>string</b><br>
2865   * Path: <b>Coverage.dependent</b><br>
2866   * </p>
2867   */
2868  public static final ca.uhn.fhir.rest.gclient.StringClientParam DEPENDENT = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DEPENDENT);
2869
2870 /**
2871   * Search parameter: <b>identifier</b>
2872   * <p>
2873   * Description: <b>The primary identifier of the insured and the coverage</b><br>
2874   * Type: <b>token</b><br>
2875   * Path: <b>Coverage.identifier</b><br>
2876   * </p>
2877   */
2878  @SearchParamDefinition(name="identifier", path="Coverage.identifier", description="The primary identifier of the insured and the coverage", type="token" )
2879  public static final String SP_IDENTIFIER = "identifier";
2880 /**
2881   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2882   * <p>
2883   * Description: <b>The primary identifier of the insured and the coverage</b><br>
2884   * Type: <b>token</b><br>
2885   * Path: <b>Coverage.identifier</b><br>
2886   * </p>
2887   */
2888  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2889
2890 /**
2891   * Search parameter: <b>insurer</b>
2892   * <p>
2893   * Description: <b>The identity of the insurer</b><br>
2894   * Type: <b>reference</b><br>
2895   * Path: <b>Coverage.insurer</b><br>
2896   * </p>
2897   */
2898  @SearchParamDefinition(name="insurer", path="Coverage.insurer", description="The identity of the insurer", type="reference", target={Organization.class } )
2899  public static final String SP_INSURER = "insurer";
2900 /**
2901   * <b>Fluent Client</b> search parameter constant for <b>insurer</b>
2902   * <p>
2903   * Description: <b>The identity of the insurer</b><br>
2904   * Type: <b>reference</b><br>
2905   * Path: <b>Coverage.insurer</b><br>
2906   * </p>
2907   */
2908  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INSURER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INSURER);
2909
2910/**
2911   * Constant for fluent queries to be used to add include statements. Specifies
2912   * the path value of "<b>Coverage:insurer</b>".
2913   */
2914  public static final ca.uhn.fhir.model.api.Include INCLUDE_INSURER = new ca.uhn.fhir.model.api.Include("Coverage:insurer").toLocked();
2915
2916 /**
2917   * Search parameter: <b>patient</b>
2918   * <p>
2919   * Description: <b>Retrieve coverages for a patient</b><br>
2920   * Type: <b>reference</b><br>
2921   * Path: <b>Coverage.beneficiary</b><br>
2922   * </p>
2923   */
2924  @SearchParamDefinition(name="patient", path="Coverage.beneficiary", description="Retrieve coverages for a patient", type="reference", target={Patient.class } )
2925  public static final String SP_PATIENT = "patient";
2926 /**
2927   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2928   * <p>
2929   * Description: <b>Retrieve coverages for a patient</b><br>
2930   * Type: <b>reference</b><br>
2931   * Path: <b>Coverage.beneficiary</b><br>
2932   * </p>
2933   */
2934  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2935
2936/**
2937   * Constant for fluent queries to be used to add include statements. Specifies
2938   * the path value of "<b>Coverage:patient</b>".
2939   */
2940  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Coverage:patient").toLocked();
2941
2942 /**
2943   * Search parameter: <b>paymentby-party</b>
2944   * <p>
2945   * Description: <b>Parties who will pay for services</b><br>
2946   * Type: <b>reference</b><br>
2947   * Path: <b>Coverage.paymentBy.party</b><br>
2948   * </p>
2949   */
2950  @SearchParamDefinition(name="paymentby-party", path="Coverage.paymentBy.party", description="Parties who will pay for services", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Organization.class, Patient.class, RelatedPerson.class } )
2951  public static final String SP_PAYMENTBY_PARTY = "paymentby-party";
2952 /**
2953   * <b>Fluent Client</b> search parameter constant for <b>paymentby-party</b>
2954   * <p>
2955   * Description: <b>Parties who will pay for services</b><br>
2956   * Type: <b>reference</b><br>
2957   * Path: <b>Coverage.paymentBy.party</b><br>
2958   * </p>
2959   */
2960  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PAYMENTBY_PARTY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PAYMENTBY_PARTY);
2961
2962/**
2963   * Constant for fluent queries to be used to add include statements. Specifies
2964   * the path value of "<b>Coverage:paymentby-party</b>".
2965   */
2966  public static final ca.uhn.fhir.model.api.Include INCLUDE_PAYMENTBY_PARTY = new ca.uhn.fhir.model.api.Include("Coverage:paymentby-party").toLocked();
2967
2968 /**
2969   * Search parameter: <b>policy-holder</b>
2970   * <p>
2971   * Description: <b>Reference to the policyholder</b><br>
2972   * Type: <b>reference</b><br>
2973   * Path: <b>Coverage.policyHolder</b><br>
2974   * </p>
2975   */
2976  @SearchParamDefinition(name="policy-holder", path="Coverage.policyHolder", description="Reference to the policyholder", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Organization.class, Patient.class, RelatedPerson.class } )
2977  public static final String SP_POLICY_HOLDER = "policy-holder";
2978 /**
2979   * <b>Fluent Client</b> search parameter constant for <b>policy-holder</b>
2980   * <p>
2981   * Description: <b>Reference to the policyholder</b><br>
2982   * Type: <b>reference</b><br>
2983   * Path: <b>Coverage.policyHolder</b><br>
2984   * </p>
2985   */
2986  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam POLICY_HOLDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_POLICY_HOLDER);
2987
2988/**
2989   * Constant for fluent queries to be used to add include statements. Specifies
2990   * the path value of "<b>Coverage:policy-holder</b>".
2991   */
2992  public static final ca.uhn.fhir.model.api.Include INCLUDE_POLICY_HOLDER = new ca.uhn.fhir.model.api.Include("Coverage:policy-holder").toLocked();
2993
2994 /**
2995   * Search parameter: <b>status</b>
2996   * <p>
2997   * Description: <b>The status of the Coverage</b><br>
2998   * Type: <b>token</b><br>
2999   * Path: <b>Coverage.status</b><br>
3000   * </p>
3001   */
3002  @SearchParamDefinition(name="status", path="Coverage.status", description="The status of the Coverage", type="token" )
3003  public static final String SP_STATUS = "status";
3004 /**
3005   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3006   * <p>
3007   * Description: <b>The status of the Coverage</b><br>
3008   * Type: <b>token</b><br>
3009   * Path: <b>Coverage.status</b><br>
3010   * </p>
3011   */
3012  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3013
3014 /**
3015   * Search parameter: <b>subscriber</b>
3016   * <p>
3017   * Description: <b>Reference to the subscriber</b><br>
3018   * Type: <b>reference</b><br>
3019   * Path: <b>Coverage.subscriber</b><br>
3020   * </p>
3021   */
3022  @SearchParamDefinition(name="subscriber", path="Coverage.subscriber", description="Reference to the subscriber", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Patient.class, RelatedPerson.class } )
3023  public static final String SP_SUBSCRIBER = "subscriber";
3024 /**
3025   * <b>Fluent Client</b> search parameter constant for <b>subscriber</b>
3026   * <p>
3027   * Description: <b>Reference to the subscriber</b><br>
3028   * Type: <b>reference</b><br>
3029   * Path: <b>Coverage.subscriber</b><br>
3030   * </p>
3031   */
3032  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBSCRIBER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBSCRIBER);
3033
3034/**
3035   * Constant for fluent queries to be used to add include statements. Specifies
3036   * the path value of "<b>Coverage:subscriber</b>".
3037   */
3038  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBSCRIBER = new ca.uhn.fhir.model.api.Include("Coverage:subscriber").toLocked();
3039
3040 /**
3041   * Search parameter: <b>subscriberid</b>
3042   * <p>
3043   * Description: <b>Identifier of the subscriber</b><br>
3044   * Type: <b>token</b><br>
3045   * Path: <b>Coverage.subscriberId</b><br>
3046   * </p>
3047   */
3048  @SearchParamDefinition(name="subscriberid", path="Coverage.subscriberId", description="Identifier of the subscriber", type="token" )
3049  public static final String SP_SUBSCRIBERID = "subscriberid";
3050 /**
3051   * <b>Fluent Client</b> search parameter constant for <b>subscriberid</b>
3052   * <p>
3053   * Description: <b>Identifier of the subscriber</b><br>
3054   * Type: <b>token</b><br>
3055   * Path: <b>Coverage.subscriberId</b><br>
3056   * </p>
3057   */
3058  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SUBSCRIBERID = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SUBSCRIBERID);
3059
3060 /**
3061   * Search parameter: <b>type</b>
3062   * <p>
3063   * Description: <b>The kind of coverage (health plan, auto, Workers Compensation)</b><br>
3064   * Type: <b>token</b><br>
3065   * Path: <b>Coverage.type</b><br>
3066   * </p>
3067   */
3068  @SearchParamDefinition(name="type", path="Coverage.type", description="The kind of coverage (health plan, auto, Workers Compensation)", type="token" )
3069  public static final String SP_TYPE = "type";
3070 /**
3071   * <b>Fluent Client</b> search parameter constant for <b>type</b>
3072   * <p>
3073   * Description: <b>The kind of coverage (health plan, auto, Workers Compensation)</b><br>
3074   * Type: <b>token</b><br>
3075   * Path: <b>Coverage.type</b><br>
3076   * </p>
3077   */
3078  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
3079
3080
3081}
3082