001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Tue, Dec 28, 2021 07:16+1100 for FHIR v5.0.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * Details of a Health Insurance product/plan provided by an organization.
052 */
053@ResourceDef(name="InsurancePlan", profile="http://hl7.org/fhir/StructureDefinition/InsurancePlan")
054public class InsurancePlan extends DomainResource {
055
056    @Block()
057    public static class InsurancePlanContactComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * Indicates a purpose for which the contact can be reached.
060         */
061        @Child(name = "purpose", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
062        @Description(shortDefinition="The type of contact", formalDefinition="Indicates a purpose for which the contact can be reached." )
063        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/contactentity-type")
064        protected CodeableConcept purpose;
065
066        /**
067         * A name associated with the contact.
068         */
069        @Child(name = "name", type = {HumanName.class}, order=2, min=0, max=1, modifier=false, summary=false)
070        @Description(shortDefinition="A name associated with the contact", formalDefinition="A name associated with the contact." )
071        protected HumanName name;
072
073        /**
074         * A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.
075         */
076        @Child(name = "telecom", type = {ContactPoint.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
077        @Description(shortDefinition="Contact details (telephone, email, etc.)  for a contact", formalDefinition="A contact detail (e.g. a telephone number or an email address) by which the party may be contacted." )
078        protected List<ContactPoint> telecom;
079
080        /**
081         * Visiting or postal addresses for the contact.
082         */
083        @Child(name = "address", type = {Address.class}, order=4, min=0, max=1, modifier=false, summary=false)
084        @Description(shortDefinition="Visiting or postal addresses for the contact", formalDefinition="Visiting or postal addresses for the contact." )
085        protected Address address;
086
087        private static final long serialVersionUID = 1831121305L;
088
089    /**
090     * Constructor
091     */
092      public InsurancePlanContactComponent() {
093        super();
094      }
095
096        /**
097         * @return {@link #purpose} (Indicates a purpose for which the contact can be reached.)
098         */
099        public CodeableConcept getPurpose() { 
100          if (this.purpose == null)
101            if (Configuration.errorOnAutoCreate())
102              throw new Error("Attempt to auto-create InsurancePlanContactComponent.purpose");
103            else if (Configuration.doAutoCreate())
104              this.purpose = new CodeableConcept(); // cc
105          return this.purpose;
106        }
107
108        public boolean hasPurpose() { 
109          return this.purpose != null && !this.purpose.isEmpty();
110        }
111
112        /**
113         * @param value {@link #purpose} (Indicates a purpose for which the contact can be reached.)
114         */
115        public InsurancePlanContactComponent setPurpose(CodeableConcept value) { 
116          this.purpose = value;
117          return this;
118        }
119
120        /**
121         * @return {@link #name} (A name associated with the contact.)
122         */
123        public HumanName getName() { 
124          if (this.name == null)
125            if (Configuration.errorOnAutoCreate())
126              throw new Error("Attempt to auto-create InsurancePlanContactComponent.name");
127            else if (Configuration.doAutoCreate())
128              this.name = new HumanName(); // cc
129          return this.name;
130        }
131
132        public boolean hasName() { 
133          return this.name != null && !this.name.isEmpty();
134        }
135
136        /**
137         * @param value {@link #name} (A name associated with the contact.)
138         */
139        public InsurancePlanContactComponent setName(HumanName value) { 
140          this.name = value;
141          return this;
142        }
143
144        /**
145         * @return {@link #telecom} (A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.)
146         */
147        public List<ContactPoint> getTelecom() { 
148          if (this.telecom == null)
149            this.telecom = new ArrayList<ContactPoint>();
150          return this.telecom;
151        }
152
153        /**
154         * @return Returns a reference to <code>this</code> for easy method chaining
155         */
156        public InsurancePlanContactComponent setTelecom(List<ContactPoint> theTelecom) { 
157          this.telecom = theTelecom;
158          return this;
159        }
160
161        public boolean hasTelecom() { 
162          if (this.telecom == null)
163            return false;
164          for (ContactPoint item : this.telecom)
165            if (!item.isEmpty())
166              return true;
167          return false;
168        }
169
170        public ContactPoint addTelecom() { //3
171          ContactPoint t = new ContactPoint();
172          if (this.telecom == null)
173            this.telecom = new ArrayList<ContactPoint>();
174          this.telecom.add(t);
175          return t;
176        }
177
178        public InsurancePlanContactComponent addTelecom(ContactPoint t) { //3
179          if (t == null)
180            return this;
181          if (this.telecom == null)
182            this.telecom = new ArrayList<ContactPoint>();
183          this.telecom.add(t);
184          return this;
185        }
186
187        /**
188         * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist {3}
189         */
190        public ContactPoint getTelecomFirstRep() { 
191          if (getTelecom().isEmpty()) {
192            addTelecom();
193          }
194          return getTelecom().get(0);
195        }
196
197        /**
198         * @return {@link #address} (Visiting or postal addresses for the contact.)
199         */
200        public Address getAddress() { 
201          if (this.address == null)
202            if (Configuration.errorOnAutoCreate())
203              throw new Error("Attempt to auto-create InsurancePlanContactComponent.address");
204            else if (Configuration.doAutoCreate())
205              this.address = new Address(); // cc
206          return this.address;
207        }
208
209        public boolean hasAddress() { 
210          return this.address != null && !this.address.isEmpty();
211        }
212
213        /**
214         * @param value {@link #address} (Visiting or postal addresses for the contact.)
215         */
216        public InsurancePlanContactComponent setAddress(Address value) { 
217          this.address = value;
218          return this;
219        }
220
221        protected void listChildren(List<Property> children) {
222          super.listChildren(children);
223          children.add(new Property("purpose", "CodeableConcept", "Indicates a purpose for which the contact can be reached.", 0, 1, purpose));
224          children.add(new Property("name", "HumanName", "A name associated with the contact.", 0, 1, name));
225          children.add(new Property("telecom", "ContactPoint", "A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.", 0, java.lang.Integer.MAX_VALUE, telecom));
226          children.add(new Property("address", "Address", "Visiting or postal addresses for the contact.", 0, 1, address));
227        }
228
229        @Override
230        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
231          switch (_hash) {
232          case -220463842: /*purpose*/  return new Property("purpose", "CodeableConcept", "Indicates a purpose for which the contact can be reached.", 0, 1, purpose);
233          case 3373707: /*name*/  return new Property("name", "HumanName", "A name associated with the contact.", 0, 1, name);
234          case -1429363305: /*telecom*/  return new Property("telecom", "ContactPoint", "A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.", 0, java.lang.Integer.MAX_VALUE, telecom);
235          case -1147692044: /*address*/  return new Property("address", "Address", "Visiting or postal addresses for the contact.", 0, 1, address);
236          default: return super.getNamedProperty(_hash, _name, _checkValid);
237          }
238
239        }
240
241      @Override
242      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
243        switch (hash) {
244        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : new Base[] {this.purpose}; // CodeableConcept
245        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // HumanName
246        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
247        case -1147692044: /*address*/ return this.address == null ? new Base[0] : new Base[] {this.address}; // Address
248        default: return super.getProperty(hash, name, checkValid);
249        }
250
251      }
252
253      @Override
254      public Base setProperty(int hash, String name, Base value) throws FHIRException {
255        switch (hash) {
256        case -220463842: // purpose
257          this.purpose = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
258          return value;
259        case 3373707: // name
260          this.name = TypeConvertor.castToHumanName(value); // HumanName
261          return value;
262        case -1429363305: // telecom
263          this.getTelecom().add(TypeConvertor.castToContactPoint(value)); // ContactPoint
264          return value;
265        case -1147692044: // address
266          this.address = TypeConvertor.castToAddress(value); // Address
267          return value;
268        default: return super.setProperty(hash, name, value);
269        }
270
271      }
272
273      @Override
274      public Base setProperty(String name, Base value) throws FHIRException {
275        if (name.equals("purpose")) {
276          this.purpose = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
277        } else if (name.equals("name")) {
278          this.name = TypeConvertor.castToHumanName(value); // HumanName
279        } else if (name.equals("telecom")) {
280          this.getTelecom().add(TypeConvertor.castToContactPoint(value));
281        } else if (name.equals("address")) {
282          this.address = TypeConvertor.castToAddress(value); // Address
283        } else
284          return super.setProperty(name, value);
285        return value;
286      }
287
288      @Override
289      public Base makeProperty(int hash, String name) throws FHIRException {
290        switch (hash) {
291        case -220463842:  return getPurpose();
292        case 3373707:  return getName();
293        case -1429363305:  return addTelecom(); 
294        case -1147692044:  return getAddress();
295        default: return super.makeProperty(hash, name);
296        }
297
298      }
299
300      @Override
301      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
302        switch (hash) {
303        case -220463842: /*purpose*/ return new String[] {"CodeableConcept"};
304        case 3373707: /*name*/ return new String[] {"HumanName"};
305        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
306        case -1147692044: /*address*/ return new String[] {"Address"};
307        default: return super.getTypesForProperty(hash, name);
308        }
309
310      }
311
312      @Override
313      public Base addChild(String name) throws FHIRException {
314        if (name.equals("purpose")) {
315          this.purpose = new CodeableConcept();
316          return this.purpose;
317        }
318        else if (name.equals("name")) {
319          this.name = new HumanName();
320          return this.name;
321        }
322        else if (name.equals("telecom")) {
323          return addTelecom();
324        }
325        else if (name.equals("address")) {
326          this.address = new Address();
327          return this.address;
328        }
329        else
330          return super.addChild(name);
331      }
332
333      public InsurancePlanContactComponent copy() {
334        InsurancePlanContactComponent dst = new InsurancePlanContactComponent();
335        copyValues(dst);
336        return dst;
337      }
338
339      public void copyValues(InsurancePlanContactComponent dst) {
340        super.copyValues(dst);
341        dst.purpose = purpose == null ? null : purpose.copy();
342        dst.name = name == null ? null : name.copy();
343        if (telecom != null) {
344          dst.telecom = new ArrayList<ContactPoint>();
345          for (ContactPoint i : telecom)
346            dst.telecom.add(i.copy());
347        };
348        dst.address = address == null ? null : address.copy();
349      }
350
351      @Override
352      public boolean equalsDeep(Base other_) {
353        if (!super.equalsDeep(other_))
354          return false;
355        if (!(other_ instanceof InsurancePlanContactComponent))
356          return false;
357        InsurancePlanContactComponent o = (InsurancePlanContactComponent) other_;
358        return compareDeep(purpose, o.purpose, true) && compareDeep(name, o.name, true) && compareDeep(telecom, o.telecom, true)
359           && compareDeep(address, o.address, true);
360      }
361
362      @Override
363      public boolean equalsShallow(Base other_) {
364        if (!super.equalsShallow(other_))
365          return false;
366        if (!(other_ instanceof InsurancePlanContactComponent))
367          return false;
368        InsurancePlanContactComponent o = (InsurancePlanContactComponent) other_;
369        return true;
370      }
371
372      public boolean isEmpty() {
373        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(purpose, name, telecom, address
374          );
375      }
376
377  public String fhirType() {
378    return "InsurancePlan.contact";
379
380  }
381
382  }
383
384    @Block()
385    public static class InsurancePlanCoverageComponent extends BackboneElement implements IBaseBackboneElement {
386        /**
387         * Type of coverage  (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health).
388         */
389        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
390        @Description(shortDefinition="Type of coverage", formalDefinition="Type of coverage  (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health)." )
391        protected CodeableConcept type;
392
393        /**
394         * Reference to the network that providing the type of coverage.
395         */
396        @Child(name = "network", type = {Organization.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
397        @Description(shortDefinition="What networks provide coverage", formalDefinition="Reference to the network that providing the type of coverage." )
398        protected List<Reference> network;
399
400        /**
401         * Specific benefits under this type of coverage.
402         */
403        @Child(name = "benefit", type = {}, order=3, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
404        @Description(shortDefinition="List of benefits", formalDefinition="Specific benefits under this type of coverage." )
405        protected List<CoverageBenefitComponent> benefit;
406
407        private static final long serialVersionUID = 79927205L;
408
409    /**
410     * Constructor
411     */
412      public InsurancePlanCoverageComponent() {
413        super();
414      }
415
416    /**
417     * Constructor
418     */
419      public InsurancePlanCoverageComponent(CodeableConcept type, CoverageBenefitComponent benefit) {
420        super();
421        this.setType(type);
422        this.addBenefit(benefit);
423      }
424
425        /**
426         * @return {@link #type} (Type of coverage  (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health).)
427         */
428        public CodeableConcept getType() { 
429          if (this.type == null)
430            if (Configuration.errorOnAutoCreate())
431              throw new Error("Attempt to auto-create InsurancePlanCoverageComponent.type");
432            else if (Configuration.doAutoCreate())
433              this.type = new CodeableConcept(); // cc
434          return this.type;
435        }
436
437        public boolean hasType() { 
438          return this.type != null && !this.type.isEmpty();
439        }
440
441        /**
442         * @param value {@link #type} (Type of coverage  (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health).)
443         */
444        public InsurancePlanCoverageComponent setType(CodeableConcept value) { 
445          this.type = value;
446          return this;
447        }
448
449        /**
450         * @return {@link #network} (Reference to the network that providing the type of coverage.)
451         */
452        public List<Reference> getNetwork() { 
453          if (this.network == null)
454            this.network = new ArrayList<Reference>();
455          return this.network;
456        }
457
458        /**
459         * @return Returns a reference to <code>this</code> for easy method chaining
460         */
461        public InsurancePlanCoverageComponent setNetwork(List<Reference> theNetwork) { 
462          this.network = theNetwork;
463          return this;
464        }
465
466        public boolean hasNetwork() { 
467          if (this.network == null)
468            return false;
469          for (Reference item : this.network)
470            if (!item.isEmpty())
471              return true;
472          return false;
473        }
474
475        public Reference addNetwork() { //3
476          Reference t = new Reference();
477          if (this.network == null)
478            this.network = new ArrayList<Reference>();
479          this.network.add(t);
480          return t;
481        }
482
483        public InsurancePlanCoverageComponent addNetwork(Reference t) { //3
484          if (t == null)
485            return this;
486          if (this.network == null)
487            this.network = new ArrayList<Reference>();
488          this.network.add(t);
489          return this;
490        }
491
492        /**
493         * @return The first repetition of repeating field {@link #network}, creating it if it does not already exist {3}
494         */
495        public Reference getNetworkFirstRep() { 
496          if (getNetwork().isEmpty()) {
497            addNetwork();
498          }
499          return getNetwork().get(0);
500        }
501
502        /**
503         * @return {@link #benefit} (Specific benefits under this type of coverage.)
504         */
505        public List<CoverageBenefitComponent> getBenefit() { 
506          if (this.benefit == null)
507            this.benefit = new ArrayList<CoverageBenefitComponent>();
508          return this.benefit;
509        }
510
511        /**
512         * @return Returns a reference to <code>this</code> for easy method chaining
513         */
514        public InsurancePlanCoverageComponent setBenefit(List<CoverageBenefitComponent> theBenefit) { 
515          this.benefit = theBenefit;
516          return this;
517        }
518
519        public boolean hasBenefit() { 
520          if (this.benefit == null)
521            return false;
522          for (CoverageBenefitComponent item : this.benefit)
523            if (!item.isEmpty())
524              return true;
525          return false;
526        }
527
528        public CoverageBenefitComponent addBenefit() { //3
529          CoverageBenefitComponent t = new CoverageBenefitComponent();
530          if (this.benefit == null)
531            this.benefit = new ArrayList<CoverageBenefitComponent>();
532          this.benefit.add(t);
533          return t;
534        }
535
536        public InsurancePlanCoverageComponent addBenefit(CoverageBenefitComponent t) { //3
537          if (t == null)
538            return this;
539          if (this.benefit == null)
540            this.benefit = new ArrayList<CoverageBenefitComponent>();
541          this.benefit.add(t);
542          return this;
543        }
544
545        /**
546         * @return The first repetition of repeating field {@link #benefit}, creating it if it does not already exist {3}
547         */
548        public CoverageBenefitComponent getBenefitFirstRep() { 
549          if (getBenefit().isEmpty()) {
550            addBenefit();
551          }
552          return getBenefit().get(0);
553        }
554
555        protected void listChildren(List<Property> children) {
556          super.listChildren(children);
557          children.add(new Property("type", "CodeableConcept", "Type of coverage  (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health).", 0, 1, type));
558          children.add(new Property("network", "Reference(Organization)", "Reference to the network that providing the type of coverage.", 0, java.lang.Integer.MAX_VALUE, network));
559          children.add(new Property("benefit", "", "Specific benefits under this type of coverage.", 0, java.lang.Integer.MAX_VALUE, benefit));
560        }
561
562        @Override
563        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
564          switch (_hash) {
565          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of coverage  (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health).", 0, 1, type);
566          case 1843485230: /*network*/  return new Property("network", "Reference(Organization)", "Reference to the network that providing the type of coverage.", 0, java.lang.Integer.MAX_VALUE, network);
567          case -222710633: /*benefit*/  return new Property("benefit", "", "Specific benefits under this type of coverage.", 0, java.lang.Integer.MAX_VALUE, benefit);
568          default: return super.getNamedProperty(_hash, _name, _checkValid);
569          }
570
571        }
572
573      @Override
574      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
575        switch (hash) {
576        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
577        case 1843485230: /*network*/ return this.network == null ? new Base[0] : this.network.toArray(new Base[this.network.size()]); // Reference
578        case -222710633: /*benefit*/ return this.benefit == null ? new Base[0] : this.benefit.toArray(new Base[this.benefit.size()]); // CoverageBenefitComponent
579        default: return super.getProperty(hash, name, checkValid);
580        }
581
582      }
583
584      @Override
585      public Base setProperty(int hash, String name, Base value) throws FHIRException {
586        switch (hash) {
587        case 3575610: // type
588          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
589          return value;
590        case 1843485230: // network
591          this.getNetwork().add(TypeConvertor.castToReference(value)); // Reference
592          return value;
593        case -222710633: // benefit
594          this.getBenefit().add((CoverageBenefitComponent) value); // CoverageBenefitComponent
595          return value;
596        default: return super.setProperty(hash, name, value);
597        }
598
599      }
600
601      @Override
602      public Base setProperty(String name, Base value) throws FHIRException {
603        if (name.equals("type")) {
604          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
605        } else if (name.equals("network")) {
606          this.getNetwork().add(TypeConvertor.castToReference(value));
607        } else if (name.equals("benefit")) {
608          this.getBenefit().add((CoverageBenefitComponent) value);
609        } else
610          return super.setProperty(name, value);
611        return value;
612      }
613
614      @Override
615      public Base makeProperty(int hash, String name) throws FHIRException {
616        switch (hash) {
617        case 3575610:  return getType();
618        case 1843485230:  return addNetwork(); 
619        case -222710633:  return addBenefit(); 
620        default: return super.makeProperty(hash, name);
621        }
622
623      }
624
625      @Override
626      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
627        switch (hash) {
628        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
629        case 1843485230: /*network*/ return new String[] {"Reference"};
630        case -222710633: /*benefit*/ return new String[] {};
631        default: return super.getTypesForProperty(hash, name);
632        }
633
634      }
635
636      @Override
637      public Base addChild(String name) throws FHIRException {
638        if (name.equals("type")) {
639          this.type = new CodeableConcept();
640          return this.type;
641        }
642        else if (name.equals("network")) {
643          return addNetwork();
644        }
645        else if (name.equals("benefit")) {
646          return addBenefit();
647        }
648        else
649          return super.addChild(name);
650      }
651
652      public InsurancePlanCoverageComponent copy() {
653        InsurancePlanCoverageComponent dst = new InsurancePlanCoverageComponent();
654        copyValues(dst);
655        return dst;
656      }
657
658      public void copyValues(InsurancePlanCoverageComponent dst) {
659        super.copyValues(dst);
660        dst.type = type == null ? null : type.copy();
661        if (network != null) {
662          dst.network = new ArrayList<Reference>();
663          for (Reference i : network)
664            dst.network.add(i.copy());
665        };
666        if (benefit != null) {
667          dst.benefit = new ArrayList<CoverageBenefitComponent>();
668          for (CoverageBenefitComponent i : benefit)
669            dst.benefit.add(i.copy());
670        };
671      }
672
673      @Override
674      public boolean equalsDeep(Base other_) {
675        if (!super.equalsDeep(other_))
676          return false;
677        if (!(other_ instanceof InsurancePlanCoverageComponent))
678          return false;
679        InsurancePlanCoverageComponent o = (InsurancePlanCoverageComponent) other_;
680        return compareDeep(type, o.type, true) && compareDeep(network, o.network, true) && compareDeep(benefit, o.benefit, true)
681          ;
682      }
683
684      @Override
685      public boolean equalsShallow(Base other_) {
686        if (!super.equalsShallow(other_))
687          return false;
688        if (!(other_ instanceof InsurancePlanCoverageComponent))
689          return false;
690        InsurancePlanCoverageComponent o = (InsurancePlanCoverageComponent) other_;
691        return true;
692      }
693
694      public boolean isEmpty() {
695        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, network, benefit);
696      }
697
698  public String fhirType() {
699    return "InsurancePlan.coverage";
700
701  }
702
703  }
704
705    @Block()
706    public static class CoverageBenefitComponent extends BackboneElement implements IBaseBackboneElement {
707        /**
708         * Type of benefit (primary care; speciality care; inpatient; outpatient).
709         */
710        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
711        @Description(shortDefinition="Type of benefit", formalDefinition="Type of benefit (primary care; speciality care; inpatient; outpatient)." )
712        protected CodeableConcept type;
713
714        /**
715         * The referral requirements to have access/coverage for this benefit.
716         */
717        @Child(name = "requirement", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
718        @Description(shortDefinition="Referral requirements", formalDefinition="The referral requirements to have access/coverage for this benefit." )
719        protected StringType requirement;
720
721        /**
722         * The specific limits on the benefit.
723         */
724        @Child(name = "limit", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
725        @Description(shortDefinition="Benefit limits", formalDefinition="The specific limits on the benefit." )
726        protected List<CoverageBenefitLimitComponent> limit;
727
728        private static final long serialVersionUID = -113658449L;
729
730    /**
731     * Constructor
732     */
733      public CoverageBenefitComponent() {
734        super();
735      }
736
737    /**
738     * Constructor
739     */
740      public CoverageBenefitComponent(CodeableConcept type) {
741        super();
742        this.setType(type);
743      }
744
745        /**
746         * @return {@link #type} (Type of benefit (primary care; speciality care; inpatient; outpatient).)
747         */
748        public CodeableConcept getType() { 
749          if (this.type == null)
750            if (Configuration.errorOnAutoCreate())
751              throw new Error("Attempt to auto-create CoverageBenefitComponent.type");
752            else if (Configuration.doAutoCreate())
753              this.type = new CodeableConcept(); // cc
754          return this.type;
755        }
756
757        public boolean hasType() { 
758          return this.type != null && !this.type.isEmpty();
759        }
760
761        /**
762         * @param value {@link #type} (Type of benefit (primary care; speciality care; inpatient; outpatient).)
763         */
764        public CoverageBenefitComponent setType(CodeableConcept value) { 
765          this.type = value;
766          return this;
767        }
768
769        /**
770         * @return {@link #requirement} (The referral requirements to have access/coverage for this benefit.). This is the underlying object with id, value and extensions. The accessor "getRequirement" gives direct access to the value
771         */
772        public StringType getRequirementElement() { 
773          if (this.requirement == null)
774            if (Configuration.errorOnAutoCreate())
775              throw new Error("Attempt to auto-create CoverageBenefitComponent.requirement");
776            else if (Configuration.doAutoCreate())
777              this.requirement = new StringType(); // bb
778          return this.requirement;
779        }
780
781        public boolean hasRequirementElement() { 
782          return this.requirement != null && !this.requirement.isEmpty();
783        }
784
785        public boolean hasRequirement() { 
786          return this.requirement != null && !this.requirement.isEmpty();
787        }
788
789        /**
790         * @param value {@link #requirement} (The referral requirements to have access/coverage for this benefit.). This is the underlying object with id, value and extensions. The accessor "getRequirement" gives direct access to the value
791         */
792        public CoverageBenefitComponent setRequirementElement(StringType value) { 
793          this.requirement = value;
794          return this;
795        }
796
797        /**
798         * @return The referral requirements to have access/coverage for this benefit.
799         */
800        public String getRequirement() { 
801          return this.requirement == null ? null : this.requirement.getValue();
802        }
803
804        /**
805         * @param value The referral requirements to have access/coverage for this benefit.
806         */
807        public CoverageBenefitComponent setRequirement(String value) { 
808          if (Utilities.noString(value))
809            this.requirement = null;
810          else {
811            if (this.requirement == null)
812              this.requirement = new StringType();
813            this.requirement.setValue(value);
814          }
815          return this;
816        }
817
818        /**
819         * @return {@link #limit} (The specific limits on the benefit.)
820         */
821        public List<CoverageBenefitLimitComponent> getLimit() { 
822          if (this.limit == null)
823            this.limit = new ArrayList<CoverageBenefitLimitComponent>();
824          return this.limit;
825        }
826
827        /**
828         * @return Returns a reference to <code>this</code> for easy method chaining
829         */
830        public CoverageBenefitComponent setLimit(List<CoverageBenefitLimitComponent> theLimit) { 
831          this.limit = theLimit;
832          return this;
833        }
834
835        public boolean hasLimit() { 
836          if (this.limit == null)
837            return false;
838          for (CoverageBenefitLimitComponent item : this.limit)
839            if (!item.isEmpty())
840              return true;
841          return false;
842        }
843
844        public CoverageBenefitLimitComponent addLimit() { //3
845          CoverageBenefitLimitComponent t = new CoverageBenefitLimitComponent();
846          if (this.limit == null)
847            this.limit = new ArrayList<CoverageBenefitLimitComponent>();
848          this.limit.add(t);
849          return t;
850        }
851
852        public CoverageBenefitComponent addLimit(CoverageBenefitLimitComponent t) { //3
853          if (t == null)
854            return this;
855          if (this.limit == null)
856            this.limit = new ArrayList<CoverageBenefitLimitComponent>();
857          this.limit.add(t);
858          return this;
859        }
860
861        /**
862         * @return The first repetition of repeating field {@link #limit}, creating it if it does not already exist {3}
863         */
864        public CoverageBenefitLimitComponent getLimitFirstRep() { 
865          if (getLimit().isEmpty()) {
866            addLimit();
867          }
868          return getLimit().get(0);
869        }
870
871        protected void listChildren(List<Property> children) {
872          super.listChildren(children);
873          children.add(new Property("type", "CodeableConcept", "Type of benefit (primary care; speciality care; inpatient; outpatient).", 0, 1, type));
874          children.add(new Property("requirement", "string", "The referral requirements to have access/coverage for this benefit.", 0, 1, requirement));
875          children.add(new Property("limit", "", "The specific limits on the benefit.", 0, java.lang.Integer.MAX_VALUE, limit));
876        }
877
878        @Override
879        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
880          switch (_hash) {
881          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of benefit (primary care; speciality care; inpatient; outpatient).", 0, 1, type);
882          case 363387971: /*requirement*/  return new Property("requirement", "string", "The referral requirements to have access/coverage for this benefit.", 0, 1, requirement);
883          case 102976443: /*limit*/  return new Property("limit", "", "The specific limits on the benefit.", 0, java.lang.Integer.MAX_VALUE, limit);
884          default: return super.getNamedProperty(_hash, _name, _checkValid);
885          }
886
887        }
888
889      @Override
890      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
891        switch (hash) {
892        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
893        case 363387971: /*requirement*/ return this.requirement == null ? new Base[0] : new Base[] {this.requirement}; // StringType
894        case 102976443: /*limit*/ return this.limit == null ? new Base[0] : this.limit.toArray(new Base[this.limit.size()]); // CoverageBenefitLimitComponent
895        default: return super.getProperty(hash, name, checkValid);
896        }
897
898      }
899
900      @Override
901      public Base setProperty(int hash, String name, Base value) throws FHIRException {
902        switch (hash) {
903        case 3575610: // type
904          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
905          return value;
906        case 363387971: // requirement
907          this.requirement = TypeConvertor.castToString(value); // StringType
908          return value;
909        case 102976443: // limit
910          this.getLimit().add((CoverageBenefitLimitComponent) value); // CoverageBenefitLimitComponent
911          return value;
912        default: return super.setProperty(hash, name, value);
913        }
914
915      }
916
917      @Override
918      public Base setProperty(String name, Base value) throws FHIRException {
919        if (name.equals("type")) {
920          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
921        } else if (name.equals("requirement")) {
922          this.requirement = TypeConvertor.castToString(value); // StringType
923        } else if (name.equals("limit")) {
924          this.getLimit().add((CoverageBenefitLimitComponent) value);
925        } else
926          return super.setProperty(name, value);
927        return value;
928      }
929
930      @Override
931      public Base makeProperty(int hash, String name) throws FHIRException {
932        switch (hash) {
933        case 3575610:  return getType();
934        case 363387971:  return getRequirementElement();
935        case 102976443:  return addLimit(); 
936        default: return super.makeProperty(hash, name);
937        }
938
939      }
940
941      @Override
942      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
943        switch (hash) {
944        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
945        case 363387971: /*requirement*/ return new String[] {"string"};
946        case 102976443: /*limit*/ return new String[] {};
947        default: return super.getTypesForProperty(hash, name);
948        }
949
950      }
951
952      @Override
953      public Base addChild(String name) throws FHIRException {
954        if (name.equals("type")) {
955          this.type = new CodeableConcept();
956          return this.type;
957        }
958        else if (name.equals("requirement")) {
959          throw new FHIRException("Cannot call addChild on a primitive type InsurancePlan.coverage.benefit.requirement");
960        }
961        else if (name.equals("limit")) {
962          return addLimit();
963        }
964        else
965          return super.addChild(name);
966      }
967
968      public CoverageBenefitComponent copy() {
969        CoverageBenefitComponent dst = new CoverageBenefitComponent();
970        copyValues(dst);
971        return dst;
972      }
973
974      public void copyValues(CoverageBenefitComponent dst) {
975        super.copyValues(dst);
976        dst.type = type == null ? null : type.copy();
977        dst.requirement = requirement == null ? null : requirement.copy();
978        if (limit != null) {
979          dst.limit = new ArrayList<CoverageBenefitLimitComponent>();
980          for (CoverageBenefitLimitComponent i : limit)
981            dst.limit.add(i.copy());
982        };
983      }
984
985      @Override
986      public boolean equalsDeep(Base other_) {
987        if (!super.equalsDeep(other_))
988          return false;
989        if (!(other_ instanceof CoverageBenefitComponent))
990          return false;
991        CoverageBenefitComponent o = (CoverageBenefitComponent) other_;
992        return compareDeep(type, o.type, true) && compareDeep(requirement, o.requirement, true) && compareDeep(limit, o.limit, true)
993          ;
994      }
995
996      @Override
997      public boolean equalsShallow(Base other_) {
998        if (!super.equalsShallow(other_))
999          return false;
1000        if (!(other_ instanceof CoverageBenefitComponent))
1001          return false;
1002        CoverageBenefitComponent o = (CoverageBenefitComponent) other_;
1003        return compareValues(requirement, o.requirement, true);
1004      }
1005
1006      public boolean isEmpty() {
1007        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, requirement, limit
1008          );
1009      }
1010
1011  public String fhirType() {
1012    return "InsurancePlan.coverage.benefit";
1013
1014  }
1015
1016  }
1017
1018    @Block()
1019    public static class CoverageBenefitLimitComponent extends BackboneElement implements IBaseBackboneElement {
1020        /**
1021         * The maximum amount of a service item a plan will pay for a covered benefit.  For examples. wellness visits, or eyeglasses.
1022         */
1023        @Child(name = "value", type = {Quantity.class}, order=1, min=0, max=1, modifier=false, summary=false)
1024        @Description(shortDefinition="Maximum value allowed", formalDefinition="The maximum amount of a service item a plan will pay for a covered benefit.  For examples. wellness visits, or eyeglasses." )
1025        protected Quantity value;
1026
1027        /**
1028         * The specific limit on the benefit.
1029         */
1030        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1031        @Description(shortDefinition="Benefit limit details", formalDefinition="The specific limit on the benefit." )
1032        protected CodeableConcept code;
1033
1034        private static final long serialVersionUID = -304318128L;
1035
1036    /**
1037     * Constructor
1038     */
1039      public CoverageBenefitLimitComponent() {
1040        super();
1041      }
1042
1043        /**
1044         * @return {@link #value} (The maximum amount of a service item a plan will pay for a covered benefit.  For examples. wellness visits, or eyeglasses.)
1045         */
1046        public Quantity getValue() { 
1047          if (this.value == null)
1048            if (Configuration.errorOnAutoCreate())
1049              throw new Error("Attempt to auto-create CoverageBenefitLimitComponent.value");
1050            else if (Configuration.doAutoCreate())
1051              this.value = new Quantity(); // cc
1052          return this.value;
1053        }
1054
1055        public boolean hasValue() { 
1056          return this.value != null && !this.value.isEmpty();
1057        }
1058
1059        /**
1060         * @param value {@link #value} (The maximum amount of a service item a plan will pay for a covered benefit.  For examples. wellness visits, or eyeglasses.)
1061         */
1062        public CoverageBenefitLimitComponent setValue(Quantity value) { 
1063          this.value = value;
1064          return this;
1065        }
1066
1067        /**
1068         * @return {@link #code} (The specific limit on the benefit.)
1069         */
1070        public CodeableConcept getCode() { 
1071          if (this.code == null)
1072            if (Configuration.errorOnAutoCreate())
1073              throw new Error("Attempt to auto-create CoverageBenefitLimitComponent.code");
1074            else if (Configuration.doAutoCreate())
1075              this.code = new CodeableConcept(); // cc
1076          return this.code;
1077        }
1078
1079        public boolean hasCode() { 
1080          return this.code != null && !this.code.isEmpty();
1081        }
1082
1083        /**
1084         * @param value {@link #code} (The specific limit on the benefit.)
1085         */
1086        public CoverageBenefitLimitComponent setCode(CodeableConcept value) { 
1087          this.code = value;
1088          return this;
1089        }
1090
1091        protected void listChildren(List<Property> children) {
1092          super.listChildren(children);
1093          children.add(new Property("value", "Quantity", "The maximum amount of a service item a plan will pay for a covered benefit.  For examples. wellness visits, or eyeglasses.", 0, 1, value));
1094          children.add(new Property("code", "CodeableConcept", "The specific limit on the benefit.", 0, 1, code));
1095        }
1096
1097        @Override
1098        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1099          switch (_hash) {
1100          case 111972721: /*value*/  return new Property("value", "Quantity", "The maximum amount of a service item a plan will pay for a covered benefit.  For examples. wellness visits, or eyeglasses.", 0, 1, value);
1101          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "The specific limit on the benefit.", 0, 1, code);
1102          default: return super.getNamedProperty(_hash, _name, _checkValid);
1103          }
1104
1105        }
1106
1107      @Override
1108      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1109        switch (hash) {
1110        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // Quantity
1111        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1112        default: return super.getProperty(hash, name, checkValid);
1113        }
1114
1115      }
1116
1117      @Override
1118      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1119        switch (hash) {
1120        case 111972721: // value
1121          this.value = TypeConvertor.castToQuantity(value); // Quantity
1122          return value;
1123        case 3059181: // code
1124          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1125          return value;
1126        default: return super.setProperty(hash, name, value);
1127        }
1128
1129      }
1130
1131      @Override
1132      public Base setProperty(String name, Base value) throws FHIRException {
1133        if (name.equals("value")) {
1134          this.value = TypeConvertor.castToQuantity(value); // Quantity
1135        } else if (name.equals("code")) {
1136          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1137        } else
1138          return super.setProperty(name, value);
1139        return value;
1140      }
1141
1142      @Override
1143      public Base makeProperty(int hash, String name) throws FHIRException {
1144        switch (hash) {
1145        case 111972721:  return getValue();
1146        case 3059181:  return getCode();
1147        default: return super.makeProperty(hash, name);
1148        }
1149
1150      }
1151
1152      @Override
1153      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1154        switch (hash) {
1155        case 111972721: /*value*/ return new String[] {"Quantity"};
1156        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1157        default: return super.getTypesForProperty(hash, name);
1158        }
1159
1160      }
1161
1162      @Override
1163      public Base addChild(String name) throws FHIRException {
1164        if (name.equals("value")) {
1165          this.value = new Quantity();
1166          return this.value;
1167        }
1168        else if (name.equals("code")) {
1169          this.code = new CodeableConcept();
1170          return this.code;
1171        }
1172        else
1173          return super.addChild(name);
1174      }
1175
1176      public CoverageBenefitLimitComponent copy() {
1177        CoverageBenefitLimitComponent dst = new CoverageBenefitLimitComponent();
1178        copyValues(dst);
1179        return dst;
1180      }
1181
1182      public void copyValues(CoverageBenefitLimitComponent dst) {
1183        super.copyValues(dst);
1184        dst.value = value == null ? null : value.copy();
1185        dst.code = code == null ? null : code.copy();
1186      }
1187
1188      @Override
1189      public boolean equalsDeep(Base other_) {
1190        if (!super.equalsDeep(other_))
1191          return false;
1192        if (!(other_ instanceof CoverageBenefitLimitComponent))
1193          return false;
1194        CoverageBenefitLimitComponent o = (CoverageBenefitLimitComponent) other_;
1195        return compareDeep(value, o.value, true) && compareDeep(code, o.code, true);
1196      }
1197
1198      @Override
1199      public boolean equalsShallow(Base other_) {
1200        if (!super.equalsShallow(other_))
1201          return false;
1202        if (!(other_ instanceof CoverageBenefitLimitComponent))
1203          return false;
1204        CoverageBenefitLimitComponent o = (CoverageBenefitLimitComponent) other_;
1205        return true;
1206      }
1207
1208      public boolean isEmpty() {
1209        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(value, code);
1210      }
1211
1212  public String fhirType() {
1213    return "InsurancePlan.coverage.benefit.limit";
1214
1215  }
1216
1217  }
1218
1219    @Block()
1220    public static class InsurancePlanPlanComponent extends BackboneElement implements IBaseBackboneElement {
1221        /**
1222         * Business identifiers assigned to this health insurance plan which remain constant as the resource is updated and propagates from server to server.
1223         */
1224        @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1225        @Description(shortDefinition="Business Identifier for Product", formalDefinition="Business identifiers assigned to this health insurance plan which remain constant as the resource is updated and propagates from server to server." )
1226        protected List<Identifier> identifier;
1227
1228        /**
1229         * Type of plan. For example, "Platinum" or "High Deductable".
1230         */
1231        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1232        @Description(shortDefinition="Type of plan", formalDefinition="Type of plan. For example, \"Platinum\" or \"High Deductable\"." )
1233        protected CodeableConcept type;
1234
1235        /**
1236         * The geographic region in which a health insurance plan's benefits apply.
1237         */
1238        @Child(name = "coverageArea", type = {Location.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1239        @Description(shortDefinition="Where product applies", formalDefinition="The geographic region in which a health insurance plan's benefits apply." )
1240        protected List<Reference> coverageArea;
1241
1242        /**
1243         * Reference to the network that providing the type of coverage.
1244         */
1245        @Child(name = "network", type = {Organization.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1246        @Description(shortDefinition="What networks provide coverage", formalDefinition="Reference to the network that providing the type of coverage." )
1247        protected List<Reference> network;
1248
1249        /**
1250         * Overall costs associated with the plan.
1251         */
1252        @Child(name = "generalCost", type = {}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1253        @Description(shortDefinition="Overall costs", formalDefinition="Overall costs associated with the plan." )
1254        protected List<InsurancePlanPlanGeneralCostComponent> generalCost;
1255
1256        /**
1257         * Costs associated with the coverage provided by the product.
1258         */
1259        @Child(name = "specificCost", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1260        @Description(shortDefinition="Specific costs", formalDefinition="Costs associated with the coverage provided by the product." )
1261        protected List<InsurancePlanPlanSpecificCostComponent> specificCost;
1262
1263        private static final long serialVersionUID = -782831938L;
1264
1265    /**
1266     * Constructor
1267     */
1268      public InsurancePlanPlanComponent() {
1269        super();
1270      }
1271
1272        /**
1273         * @return {@link #identifier} (Business identifiers assigned to this health insurance plan which remain constant as the resource is updated and propagates from server to server.)
1274         */
1275        public List<Identifier> getIdentifier() { 
1276          if (this.identifier == null)
1277            this.identifier = new ArrayList<Identifier>();
1278          return this.identifier;
1279        }
1280
1281        /**
1282         * @return Returns a reference to <code>this</code> for easy method chaining
1283         */
1284        public InsurancePlanPlanComponent setIdentifier(List<Identifier> theIdentifier) { 
1285          this.identifier = theIdentifier;
1286          return this;
1287        }
1288
1289        public boolean hasIdentifier() { 
1290          if (this.identifier == null)
1291            return false;
1292          for (Identifier item : this.identifier)
1293            if (!item.isEmpty())
1294              return true;
1295          return false;
1296        }
1297
1298        public Identifier addIdentifier() { //3
1299          Identifier t = new Identifier();
1300          if (this.identifier == null)
1301            this.identifier = new ArrayList<Identifier>();
1302          this.identifier.add(t);
1303          return t;
1304        }
1305
1306        public InsurancePlanPlanComponent addIdentifier(Identifier t) { //3
1307          if (t == null)
1308            return this;
1309          if (this.identifier == null)
1310            this.identifier = new ArrayList<Identifier>();
1311          this.identifier.add(t);
1312          return this;
1313        }
1314
1315        /**
1316         * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
1317         */
1318        public Identifier getIdentifierFirstRep() { 
1319          if (getIdentifier().isEmpty()) {
1320            addIdentifier();
1321          }
1322          return getIdentifier().get(0);
1323        }
1324
1325        /**
1326         * @return {@link #type} (Type of plan. For example, "Platinum" or "High Deductable".)
1327         */
1328        public CodeableConcept getType() { 
1329          if (this.type == null)
1330            if (Configuration.errorOnAutoCreate())
1331              throw new Error("Attempt to auto-create InsurancePlanPlanComponent.type");
1332            else if (Configuration.doAutoCreate())
1333              this.type = new CodeableConcept(); // cc
1334          return this.type;
1335        }
1336
1337        public boolean hasType() { 
1338          return this.type != null && !this.type.isEmpty();
1339        }
1340
1341        /**
1342         * @param value {@link #type} (Type of plan. For example, "Platinum" or "High Deductable".)
1343         */
1344        public InsurancePlanPlanComponent setType(CodeableConcept value) { 
1345          this.type = value;
1346          return this;
1347        }
1348
1349        /**
1350         * @return {@link #coverageArea} (The geographic region in which a health insurance plan's benefits apply.)
1351         */
1352        public List<Reference> getCoverageArea() { 
1353          if (this.coverageArea == null)
1354            this.coverageArea = new ArrayList<Reference>();
1355          return this.coverageArea;
1356        }
1357
1358        /**
1359         * @return Returns a reference to <code>this</code> for easy method chaining
1360         */
1361        public InsurancePlanPlanComponent setCoverageArea(List<Reference> theCoverageArea) { 
1362          this.coverageArea = theCoverageArea;
1363          return this;
1364        }
1365
1366        public boolean hasCoverageArea() { 
1367          if (this.coverageArea == null)
1368            return false;
1369          for (Reference item : this.coverageArea)
1370            if (!item.isEmpty())
1371              return true;
1372          return false;
1373        }
1374
1375        public Reference addCoverageArea() { //3
1376          Reference t = new Reference();
1377          if (this.coverageArea == null)
1378            this.coverageArea = new ArrayList<Reference>();
1379          this.coverageArea.add(t);
1380          return t;
1381        }
1382
1383        public InsurancePlanPlanComponent addCoverageArea(Reference t) { //3
1384          if (t == null)
1385            return this;
1386          if (this.coverageArea == null)
1387            this.coverageArea = new ArrayList<Reference>();
1388          this.coverageArea.add(t);
1389          return this;
1390        }
1391
1392        /**
1393         * @return The first repetition of repeating field {@link #coverageArea}, creating it if it does not already exist {3}
1394         */
1395        public Reference getCoverageAreaFirstRep() { 
1396          if (getCoverageArea().isEmpty()) {
1397            addCoverageArea();
1398          }
1399          return getCoverageArea().get(0);
1400        }
1401
1402        /**
1403         * @return {@link #network} (Reference to the network that providing the type of coverage.)
1404         */
1405        public List<Reference> getNetwork() { 
1406          if (this.network == null)
1407            this.network = new ArrayList<Reference>();
1408          return this.network;
1409        }
1410
1411        /**
1412         * @return Returns a reference to <code>this</code> for easy method chaining
1413         */
1414        public InsurancePlanPlanComponent setNetwork(List<Reference> theNetwork) { 
1415          this.network = theNetwork;
1416          return this;
1417        }
1418
1419        public boolean hasNetwork() { 
1420          if (this.network == null)
1421            return false;
1422          for (Reference item : this.network)
1423            if (!item.isEmpty())
1424              return true;
1425          return false;
1426        }
1427
1428        public Reference addNetwork() { //3
1429          Reference t = new Reference();
1430          if (this.network == null)
1431            this.network = new ArrayList<Reference>();
1432          this.network.add(t);
1433          return t;
1434        }
1435
1436        public InsurancePlanPlanComponent addNetwork(Reference t) { //3
1437          if (t == null)
1438            return this;
1439          if (this.network == null)
1440            this.network = new ArrayList<Reference>();
1441          this.network.add(t);
1442          return this;
1443        }
1444
1445        /**
1446         * @return The first repetition of repeating field {@link #network}, creating it if it does not already exist {3}
1447         */
1448        public Reference getNetworkFirstRep() { 
1449          if (getNetwork().isEmpty()) {
1450            addNetwork();
1451          }
1452          return getNetwork().get(0);
1453        }
1454
1455        /**
1456         * @return {@link #generalCost} (Overall costs associated with the plan.)
1457         */
1458        public List<InsurancePlanPlanGeneralCostComponent> getGeneralCost() { 
1459          if (this.generalCost == null)
1460            this.generalCost = new ArrayList<InsurancePlanPlanGeneralCostComponent>();
1461          return this.generalCost;
1462        }
1463
1464        /**
1465         * @return Returns a reference to <code>this</code> for easy method chaining
1466         */
1467        public InsurancePlanPlanComponent setGeneralCost(List<InsurancePlanPlanGeneralCostComponent> theGeneralCost) { 
1468          this.generalCost = theGeneralCost;
1469          return this;
1470        }
1471
1472        public boolean hasGeneralCost() { 
1473          if (this.generalCost == null)
1474            return false;
1475          for (InsurancePlanPlanGeneralCostComponent item : this.generalCost)
1476            if (!item.isEmpty())
1477              return true;
1478          return false;
1479        }
1480
1481        public InsurancePlanPlanGeneralCostComponent addGeneralCost() { //3
1482          InsurancePlanPlanGeneralCostComponent t = new InsurancePlanPlanGeneralCostComponent();
1483          if (this.generalCost == null)
1484            this.generalCost = new ArrayList<InsurancePlanPlanGeneralCostComponent>();
1485          this.generalCost.add(t);
1486          return t;
1487        }
1488
1489        public InsurancePlanPlanComponent addGeneralCost(InsurancePlanPlanGeneralCostComponent t) { //3
1490          if (t == null)
1491            return this;
1492          if (this.generalCost == null)
1493            this.generalCost = new ArrayList<InsurancePlanPlanGeneralCostComponent>();
1494          this.generalCost.add(t);
1495          return this;
1496        }
1497
1498        /**
1499         * @return The first repetition of repeating field {@link #generalCost}, creating it if it does not already exist {3}
1500         */
1501        public InsurancePlanPlanGeneralCostComponent getGeneralCostFirstRep() { 
1502          if (getGeneralCost().isEmpty()) {
1503            addGeneralCost();
1504          }
1505          return getGeneralCost().get(0);
1506        }
1507
1508        /**
1509         * @return {@link #specificCost} (Costs associated with the coverage provided by the product.)
1510         */
1511        public List<InsurancePlanPlanSpecificCostComponent> getSpecificCost() { 
1512          if (this.specificCost == null)
1513            this.specificCost = new ArrayList<InsurancePlanPlanSpecificCostComponent>();
1514          return this.specificCost;
1515        }
1516
1517        /**
1518         * @return Returns a reference to <code>this</code> for easy method chaining
1519         */
1520        public InsurancePlanPlanComponent setSpecificCost(List<InsurancePlanPlanSpecificCostComponent> theSpecificCost) { 
1521          this.specificCost = theSpecificCost;
1522          return this;
1523        }
1524
1525        public boolean hasSpecificCost() { 
1526          if (this.specificCost == null)
1527            return false;
1528          for (InsurancePlanPlanSpecificCostComponent item : this.specificCost)
1529            if (!item.isEmpty())
1530              return true;
1531          return false;
1532        }
1533
1534        public InsurancePlanPlanSpecificCostComponent addSpecificCost() { //3
1535          InsurancePlanPlanSpecificCostComponent t = new InsurancePlanPlanSpecificCostComponent();
1536          if (this.specificCost == null)
1537            this.specificCost = new ArrayList<InsurancePlanPlanSpecificCostComponent>();
1538          this.specificCost.add(t);
1539          return t;
1540        }
1541
1542        public InsurancePlanPlanComponent addSpecificCost(InsurancePlanPlanSpecificCostComponent t) { //3
1543          if (t == null)
1544            return this;
1545          if (this.specificCost == null)
1546            this.specificCost = new ArrayList<InsurancePlanPlanSpecificCostComponent>();
1547          this.specificCost.add(t);
1548          return this;
1549        }
1550
1551        /**
1552         * @return The first repetition of repeating field {@link #specificCost}, creating it if it does not already exist {3}
1553         */
1554        public InsurancePlanPlanSpecificCostComponent getSpecificCostFirstRep() { 
1555          if (getSpecificCost().isEmpty()) {
1556            addSpecificCost();
1557          }
1558          return getSpecificCost().get(0);
1559        }
1560
1561        protected void listChildren(List<Property> children) {
1562          super.listChildren(children);
1563          children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this health insurance plan which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
1564          children.add(new Property("type", "CodeableConcept", "Type of plan. For example, \"Platinum\" or \"High Deductable\".", 0, 1, type));
1565          children.add(new Property("coverageArea", "Reference(Location)", "The geographic region in which a health insurance plan's benefits apply.", 0, java.lang.Integer.MAX_VALUE, coverageArea));
1566          children.add(new Property("network", "Reference(Organization)", "Reference to the network that providing the type of coverage.", 0, java.lang.Integer.MAX_VALUE, network));
1567          children.add(new Property("generalCost", "", "Overall costs associated with the plan.", 0, java.lang.Integer.MAX_VALUE, generalCost));
1568          children.add(new Property("specificCost", "", "Costs associated with the coverage provided by the product.", 0, java.lang.Integer.MAX_VALUE, specificCost));
1569        }
1570
1571        @Override
1572        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1573          switch (_hash) {
1574          case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this health insurance plan which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
1575          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of plan. For example, \"Platinum\" or \"High Deductable\".", 0, 1, type);
1576          case -1532328299: /*coverageArea*/  return new Property("coverageArea", "Reference(Location)", "The geographic region in which a health insurance plan's benefits apply.", 0, java.lang.Integer.MAX_VALUE, coverageArea);
1577          case 1843485230: /*network*/  return new Property("network", "Reference(Organization)", "Reference to the network that providing the type of coverage.", 0, java.lang.Integer.MAX_VALUE, network);
1578          case 878344405: /*generalCost*/  return new Property("generalCost", "", "Overall costs associated with the plan.", 0, java.lang.Integer.MAX_VALUE, generalCost);
1579          case -1205656545: /*specificCost*/  return new Property("specificCost", "", "Costs associated with the coverage provided by the product.", 0, java.lang.Integer.MAX_VALUE, specificCost);
1580          default: return super.getNamedProperty(_hash, _name, _checkValid);
1581          }
1582
1583        }
1584
1585      @Override
1586      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1587        switch (hash) {
1588        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1589        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1590        case -1532328299: /*coverageArea*/ return this.coverageArea == null ? new Base[0] : this.coverageArea.toArray(new Base[this.coverageArea.size()]); // Reference
1591        case 1843485230: /*network*/ return this.network == null ? new Base[0] : this.network.toArray(new Base[this.network.size()]); // Reference
1592        case 878344405: /*generalCost*/ return this.generalCost == null ? new Base[0] : this.generalCost.toArray(new Base[this.generalCost.size()]); // InsurancePlanPlanGeneralCostComponent
1593        case -1205656545: /*specificCost*/ return this.specificCost == null ? new Base[0] : this.specificCost.toArray(new Base[this.specificCost.size()]); // InsurancePlanPlanSpecificCostComponent
1594        default: return super.getProperty(hash, name, checkValid);
1595        }
1596
1597      }
1598
1599      @Override
1600      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1601        switch (hash) {
1602        case -1618432855: // identifier
1603          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1604          return value;
1605        case 3575610: // type
1606          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1607          return value;
1608        case -1532328299: // coverageArea
1609          this.getCoverageArea().add(TypeConvertor.castToReference(value)); // Reference
1610          return value;
1611        case 1843485230: // network
1612          this.getNetwork().add(TypeConvertor.castToReference(value)); // Reference
1613          return value;
1614        case 878344405: // generalCost
1615          this.getGeneralCost().add((InsurancePlanPlanGeneralCostComponent) value); // InsurancePlanPlanGeneralCostComponent
1616          return value;
1617        case -1205656545: // specificCost
1618          this.getSpecificCost().add((InsurancePlanPlanSpecificCostComponent) value); // InsurancePlanPlanSpecificCostComponent
1619          return value;
1620        default: return super.setProperty(hash, name, value);
1621        }
1622
1623      }
1624
1625      @Override
1626      public Base setProperty(String name, Base value) throws FHIRException {
1627        if (name.equals("identifier")) {
1628          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1629        } else if (name.equals("type")) {
1630          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1631        } else if (name.equals("coverageArea")) {
1632          this.getCoverageArea().add(TypeConvertor.castToReference(value));
1633        } else if (name.equals("network")) {
1634          this.getNetwork().add(TypeConvertor.castToReference(value));
1635        } else if (name.equals("generalCost")) {
1636          this.getGeneralCost().add((InsurancePlanPlanGeneralCostComponent) value);
1637        } else if (name.equals("specificCost")) {
1638          this.getSpecificCost().add((InsurancePlanPlanSpecificCostComponent) value);
1639        } else
1640          return super.setProperty(name, value);
1641        return value;
1642      }
1643
1644      @Override
1645      public Base makeProperty(int hash, String name) throws FHIRException {
1646        switch (hash) {
1647        case -1618432855:  return addIdentifier(); 
1648        case 3575610:  return getType();
1649        case -1532328299:  return addCoverageArea(); 
1650        case 1843485230:  return addNetwork(); 
1651        case 878344405:  return addGeneralCost(); 
1652        case -1205656545:  return addSpecificCost(); 
1653        default: return super.makeProperty(hash, name);
1654        }
1655
1656      }
1657
1658      @Override
1659      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1660        switch (hash) {
1661        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1662        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1663        case -1532328299: /*coverageArea*/ return new String[] {"Reference"};
1664        case 1843485230: /*network*/ return new String[] {"Reference"};
1665        case 878344405: /*generalCost*/ return new String[] {};
1666        case -1205656545: /*specificCost*/ return new String[] {};
1667        default: return super.getTypesForProperty(hash, name);
1668        }
1669
1670      }
1671
1672      @Override
1673      public Base addChild(String name) throws FHIRException {
1674        if (name.equals("identifier")) {
1675          return addIdentifier();
1676        }
1677        else if (name.equals("type")) {
1678          this.type = new CodeableConcept();
1679          return this.type;
1680        }
1681        else if (name.equals("coverageArea")) {
1682          return addCoverageArea();
1683        }
1684        else if (name.equals("network")) {
1685          return addNetwork();
1686        }
1687        else if (name.equals("generalCost")) {
1688          return addGeneralCost();
1689        }
1690        else if (name.equals("specificCost")) {
1691          return addSpecificCost();
1692        }
1693        else
1694          return super.addChild(name);
1695      }
1696
1697      public InsurancePlanPlanComponent copy() {
1698        InsurancePlanPlanComponent dst = new InsurancePlanPlanComponent();
1699        copyValues(dst);
1700        return dst;
1701      }
1702
1703      public void copyValues(InsurancePlanPlanComponent dst) {
1704        super.copyValues(dst);
1705        if (identifier != null) {
1706          dst.identifier = new ArrayList<Identifier>();
1707          for (Identifier i : identifier)
1708            dst.identifier.add(i.copy());
1709        };
1710        dst.type = type == null ? null : type.copy();
1711        if (coverageArea != null) {
1712          dst.coverageArea = new ArrayList<Reference>();
1713          for (Reference i : coverageArea)
1714            dst.coverageArea.add(i.copy());
1715        };
1716        if (network != null) {
1717          dst.network = new ArrayList<Reference>();
1718          for (Reference i : network)
1719            dst.network.add(i.copy());
1720        };
1721        if (generalCost != null) {
1722          dst.generalCost = new ArrayList<InsurancePlanPlanGeneralCostComponent>();
1723          for (InsurancePlanPlanGeneralCostComponent i : generalCost)
1724            dst.generalCost.add(i.copy());
1725        };
1726        if (specificCost != null) {
1727          dst.specificCost = new ArrayList<InsurancePlanPlanSpecificCostComponent>();
1728          for (InsurancePlanPlanSpecificCostComponent i : specificCost)
1729            dst.specificCost.add(i.copy());
1730        };
1731      }
1732
1733      @Override
1734      public boolean equalsDeep(Base other_) {
1735        if (!super.equalsDeep(other_))
1736          return false;
1737        if (!(other_ instanceof InsurancePlanPlanComponent))
1738          return false;
1739        InsurancePlanPlanComponent o = (InsurancePlanPlanComponent) other_;
1740        return compareDeep(identifier, o.identifier, true) && compareDeep(type, o.type, true) && compareDeep(coverageArea, o.coverageArea, true)
1741           && compareDeep(network, o.network, true) && compareDeep(generalCost, o.generalCost, true) && compareDeep(specificCost, o.specificCost, true)
1742          ;
1743      }
1744
1745      @Override
1746      public boolean equalsShallow(Base other_) {
1747        if (!super.equalsShallow(other_))
1748          return false;
1749        if (!(other_ instanceof InsurancePlanPlanComponent))
1750          return false;
1751        InsurancePlanPlanComponent o = (InsurancePlanPlanComponent) other_;
1752        return true;
1753      }
1754
1755      public boolean isEmpty() {
1756        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, type, coverageArea
1757          , network, generalCost, specificCost);
1758      }
1759
1760  public String fhirType() {
1761    return "InsurancePlan.plan";
1762
1763  }
1764
1765  }
1766
1767    @Block()
1768    public static class InsurancePlanPlanGeneralCostComponent extends BackboneElement implements IBaseBackboneElement {
1769        /**
1770         * Type of cost.
1771         */
1772        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
1773        @Description(shortDefinition="Type of cost", formalDefinition="Type of cost." )
1774        protected CodeableConcept type;
1775
1776        /**
1777         * Number of participants enrolled in the plan.
1778         */
1779        @Child(name = "groupSize", type = {PositiveIntType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1780        @Description(shortDefinition="Number of enrollees", formalDefinition="Number of participants enrolled in the plan." )
1781        protected PositiveIntType groupSize;
1782
1783        /**
1784         * Value of the cost.
1785         */
1786        @Child(name = "cost", type = {Money.class}, order=3, min=0, max=1, modifier=false, summary=false)
1787        @Description(shortDefinition="Cost value", formalDefinition="Value of the cost." )
1788        protected Money cost;
1789
1790        /**
1791         * Additional information about the general costs associated with this plan.
1792         */
1793        @Child(name = "comment", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
1794        @Description(shortDefinition="Additional cost information", formalDefinition="Additional information about the general costs associated with this plan." )
1795        protected StringType comment;
1796
1797        private static final long serialVersionUID = 1563949866L;
1798
1799    /**
1800     * Constructor
1801     */
1802      public InsurancePlanPlanGeneralCostComponent() {
1803        super();
1804      }
1805
1806        /**
1807         * @return {@link #type} (Type of cost.)
1808         */
1809        public CodeableConcept getType() { 
1810          if (this.type == null)
1811            if (Configuration.errorOnAutoCreate())
1812              throw new Error("Attempt to auto-create InsurancePlanPlanGeneralCostComponent.type");
1813            else if (Configuration.doAutoCreate())
1814              this.type = new CodeableConcept(); // cc
1815          return this.type;
1816        }
1817
1818        public boolean hasType() { 
1819          return this.type != null && !this.type.isEmpty();
1820        }
1821
1822        /**
1823         * @param value {@link #type} (Type of cost.)
1824         */
1825        public InsurancePlanPlanGeneralCostComponent setType(CodeableConcept value) { 
1826          this.type = value;
1827          return this;
1828        }
1829
1830        /**
1831         * @return {@link #groupSize} (Number of participants enrolled in the plan.). This is the underlying object with id, value and extensions. The accessor "getGroupSize" gives direct access to the value
1832         */
1833        public PositiveIntType getGroupSizeElement() { 
1834          if (this.groupSize == null)
1835            if (Configuration.errorOnAutoCreate())
1836              throw new Error("Attempt to auto-create InsurancePlanPlanGeneralCostComponent.groupSize");
1837            else if (Configuration.doAutoCreate())
1838              this.groupSize = new PositiveIntType(); // bb
1839          return this.groupSize;
1840        }
1841
1842        public boolean hasGroupSizeElement() { 
1843          return this.groupSize != null && !this.groupSize.isEmpty();
1844        }
1845
1846        public boolean hasGroupSize() { 
1847          return this.groupSize != null && !this.groupSize.isEmpty();
1848        }
1849
1850        /**
1851         * @param value {@link #groupSize} (Number of participants enrolled in the plan.). This is the underlying object with id, value and extensions. The accessor "getGroupSize" gives direct access to the value
1852         */
1853        public InsurancePlanPlanGeneralCostComponent setGroupSizeElement(PositiveIntType value) { 
1854          this.groupSize = value;
1855          return this;
1856        }
1857
1858        /**
1859         * @return Number of participants enrolled in the plan.
1860         */
1861        public int getGroupSize() { 
1862          return this.groupSize == null || this.groupSize.isEmpty() ? 0 : this.groupSize.getValue();
1863        }
1864
1865        /**
1866         * @param value Number of participants enrolled in the plan.
1867         */
1868        public InsurancePlanPlanGeneralCostComponent setGroupSize(int value) { 
1869            if (this.groupSize == null)
1870              this.groupSize = new PositiveIntType();
1871            this.groupSize.setValue(value);
1872          return this;
1873        }
1874
1875        /**
1876         * @return {@link #cost} (Value of the cost.)
1877         */
1878        public Money getCost() { 
1879          if (this.cost == null)
1880            if (Configuration.errorOnAutoCreate())
1881              throw new Error("Attempt to auto-create InsurancePlanPlanGeneralCostComponent.cost");
1882            else if (Configuration.doAutoCreate())
1883              this.cost = new Money(); // cc
1884          return this.cost;
1885        }
1886
1887        public boolean hasCost() { 
1888          return this.cost != null && !this.cost.isEmpty();
1889        }
1890
1891        /**
1892         * @param value {@link #cost} (Value of the cost.)
1893         */
1894        public InsurancePlanPlanGeneralCostComponent setCost(Money value) { 
1895          this.cost = value;
1896          return this;
1897        }
1898
1899        /**
1900         * @return {@link #comment} (Additional information about the general costs associated with this plan.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1901         */
1902        public StringType getCommentElement() { 
1903          if (this.comment == null)
1904            if (Configuration.errorOnAutoCreate())
1905              throw new Error("Attempt to auto-create InsurancePlanPlanGeneralCostComponent.comment");
1906            else if (Configuration.doAutoCreate())
1907              this.comment = new StringType(); // bb
1908          return this.comment;
1909        }
1910
1911        public boolean hasCommentElement() { 
1912          return this.comment != null && !this.comment.isEmpty();
1913        }
1914
1915        public boolean hasComment() { 
1916          return this.comment != null && !this.comment.isEmpty();
1917        }
1918
1919        /**
1920         * @param value {@link #comment} (Additional information about the general costs associated with this plan.). This is the underlying object with id, value and extensions. The accessor "getComment" gives direct access to the value
1921         */
1922        public InsurancePlanPlanGeneralCostComponent setCommentElement(StringType value) { 
1923          this.comment = value;
1924          return this;
1925        }
1926
1927        /**
1928         * @return Additional information about the general costs associated with this plan.
1929         */
1930        public String getComment() { 
1931          return this.comment == null ? null : this.comment.getValue();
1932        }
1933
1934        /**
1935         * @param value Additional information about the general costs associated with this plan.
1936         */
1937        public InsurancePlanPlanGeneralCostComponent setComment(String value) { 
1938          if (Utilities.noString(value))
1939            this.comment = null;
1940          else {
1941            if (this.comment == null)
1942              this.comment = new StringType();
1943            this.comment.setValue(value);
1944          }
1945          return this;
1946        }
1947
1948        protected void listChildren(List<Property> children) {
1949          super.listChildren(children);
1950          children.add(new Property("type", "CodeableConcept", "Type of cost.", 0, 1, type));
1951          children.add(new Property("groupSize", "positiveInt", "Number of participants enrolled in the plan.", 0, 1, groupSize));
1952          children.add(new Property("cost", "Money", "Value of the cost.", 0, 1, cost));
1953          children.add(new Property("comment", "string", "Additional information about the general costs associated with this plan.", 0, 1, comment));
1954        }
1955
1956        @Override
1957        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1958          switch (_hash) {
1959          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of cost.", 0, 1, type);
1960          case -1483017440: /*groupSize*/  return new Property("groupSize", "positiveInt", "Number of participants enrolled in the plan.", 0, 1, groupSize);
1961          case 3059661: /*cost*/  return new Property("cost", "Money", "Value of the cost.", 0, 1, cost);
1962          case 950398559: /*comment*/  return new Property("comment", "string", "Additional information about the general costs associated with this plan.", 0, 1, comment);
1963          default: return super.getNamedProperty(_hash, _name, _checkValid);
1964          }
1965
1966        }
1967
1968      @Override
1969      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1970        switch (hash) {
1971        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1972        case -1483017440: /*groupSize*/ return this.groupSize == null ? new Base[0] : new Base[] {this.groupSize}; // PositiveIntType
1973        case 3059661: /*cost*/ return this.cost == null ? new Base[0] : new Base[] {this.cost}; // Money
1974        case 950398559: /*comment*/ return this.comment == null ? new Base[0] : new Base[] {this.comment}; // StringType
1975        default: return super.getProperty(hash, name, checkValid);
1976        }
1977
1978      }
1979
1980      @Override
1981      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1982        switch (hash) {
1983        case 3575610: // type
1984          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1985          return value;
1986        case -1483017440: // groupSize
1987          this.groupSize = TypeConvertor.castToPositiveInt(value); // PositiveIntType
1988          return value;
1989        case 3059661: // cost
1990          this.cost = TypeConvertor.castToMoney(value); // Money
1991          return value;
1992        case 950398559: // comment
1993          this.comment = TypeConvertor.castToString(value); // StringType
1994          return value;
1995        default: return super.setProperty(hash, name, value);
1996        }
1997
1998      }
1999
2000      @Override
2001      public Base setProperty(String name, Base value) throws FHIRException {
2002        if (name.equals("type")) {
2003          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2004        } else if (name.equals("groupSize")) {
2005          this.groupSize = TypeConvertor.castToPositiveInt(value); // PositiveIntType
2006        } else if (name.equals("cost")) {
2007          this.cost = TypeConvertor.castToMoney(value); // Money
2008        } else if (name.equals("comment")) {
2009          this.comment = TypeConvertor.castToString(value); // StringType
2010        } else
2011          return super.setProperty(name, value);
2012        return value;
2013      }
2014
2015      @Override
2016      public Base makeProperty(int hash, String name) throws FHIRException {
2017        switch (hash) {
2018        case 3575610:  return getType();
2019        case -1483017440:  return getGroupSizeElement();
2020        case 3059661:  return getCost();
2021        case 950398559:  return getCommentElement();
2022        default: return super.makeProperty(hash, name);
2023        }
2024
2025      }
2026
2027      @Override
2028      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2029        switch (hash) {
2030        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2031        case -1483017440: /*groupSize*/ return new String[] {"positiveInt"};
2032        case 3059661: /*cost*/ return new String[] {"Money"};
2033        case 950398559: /*comment*/ return new String[] {"string"};
2034        default: return super.getTypesForProperty(hash, name);
2035        }
2036
2037      }
2038
2039      @Override
2040      public Base addChild(String name) throws FHIRException {
2041        if (name.equals("type")) {
2042          this.type = new CodeableConcept();
2043          return this.type;
2044        }
2045        else if (name.equals("groupSize")) {
2046          throw new FHIRException("Cannot call addChild on a primitive type InsurancePlan.plan.generalCost.groupSize");
2047        }
2048        else if (name.equals("cost")) {
2049          this.cost = new Money();
2050          return this.cost;
2051        }
2052        else if (name.equals("comment")) {
2053          throw new FHIRException("Cannot call addChild on a primitive type InsurancePlan.plan.generalCost.comment");
2054        }
2055        else
2056          return super.addChild(name);
2057      }
2058
2059      public InsurancePlanPlanGeneralCostComponent copy() {
2060        InsurancePlanPlanGeneralCostComponent dst = new InsurancePlanPlanGeneralCostComponent();
2061        copyValues(dst);
2062        return dst;
2063      }
2064
2065      public void copyValues(InsurancePlanPlanGeneralCostComponent dst) {
2066        super.copyValues(dst);
2067        dst.type = type == null ? null : type.copy();
2068        dst.groupSize = groupSize == null ? null : groupSize.copy();
2069        dst.cost = cost == null ? null : cost.copy();
2070        dst.comment = comment == null ? null : comment.copy();
2071      }
2072
2073      @Override
2074      public boolean equalsDeep(Base other_) {
2075        if (!super.equalsDeep(other_))
2076          return false;
2077        if (!(other_ instanceof InsurancePlanPlanGeneralCostComponent))
2078          return false;
2079        InsurancePlanPlanGeneralCostComponent o = (InsurancePlanPlanGeneralCostComponent) other_;
2080        return compareDeep(type, o.type, true) && compareDeep(groupSize, o.groupSize, true) && compareDeep(cost, o.cost, true)
2081           && compareDeep(comment, o.comment, true);
2082      }
2083
2084      @Override
2085      public boolean equalsShallow(Base other_) {
2086        if (!super.equalsShallow(other_))
2087          return false;
2088        if (!(other_ instanceof InsurancePlanPlanGeneralCostComponent))
2089          return false;
2090        InsurancePlanPlanGeneralCostComponent o = (InsurancePlanPlanGeneralCostComponent) other_;
2091        return compareValues(groupSize, o.groupSize, true) && compareValues(comment, o.comment, true);
2092      }
2093
2094      public boolean isEmpty() {
2095        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, groupSize, cost, comment
2096          );
2097      }
2098
2099  public String fhirType() {
2100    return "InsurancePlan.plan.generalCost";
2101
2102  }
2103
2104  }
2105
2106    @Block()
2107    public static class InsurancePlanPlanSpecificCostComponent extends BackboneElement implements IBaseBackboneElement {
2108        /**
2109         * General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health).
2110         */
2111        @Child(name = "category", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
2112        @Description(shortDefinition="General category of benefit", formalDefinition="General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health)." )
2113        protected CodeableConcept category;
2114
2115        /**
2116         * List of the specific benefits under this category of benefit.
2117         */
2118        @Child(name = "benefit", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2119        @Description(shortDefinition="Benefits list", formalDefinition="List of the specific benefits under this category of benefit." )
2120        protected List<PlanBenefitComponent> benefit;
2121
2122        private static final long serialVersionUID = 922585525L;
2123
2124    /**
2125     * Constructor
2126     */
2127      public InsurancePlanPlanSpecificCostComponent() {
2128        super();
2129      }
2130
2131    /**
2132     * Constructor
2133     */
2134      public InsurancePlanPlanSpecificCostComponent(CodeableConcept category) {
2135        super();
2136        this.setCategory(category);
2137      }
2138
2139        /**
2140         * @return {@link #category} (General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health).)
2141         */
2142        public CodeableConcept getCategory() { 
2143          if (this.category == null)
2144            if (Configuration.errorOnAutoCreate())
2145              throw new Error("Attempt to auto-create InsurancePlanPlanSpecificCostComponent.category");
2146            else if (Configuration.doAutoCreate())
2147              this.category = new CodeableConcept(); // cc
2148          return this.category;
2149        }
2150
2151        public boolean hasCategory() { 
2152          return this.category != null && !this.category.isEmpty();
2153        }
2154
2155        /**
2156         * @param value {@link #category} (General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health).)
2157         */
2158        public InsurancePlanPlanSpecificCostComponent setCategory(CodeableConcept value) { 
2159          this.category = value;
2160          return this;
2161        }
2162
2163        /**
2164         * @return {@link #benefit} (List of the specific benefits under this category of benefit.)
2165         */
2166        public List<PlanBenefitComponent> getBenefit() { 
2167          if (this.benefit == null)
2168            this.benefit = new ArrayList<PlanBenefitComponent>();
2169          return this.benefit;
2170        }
2171
2172        /**
2173         * @return Returns a reference to <code>this</code> for easy method chaining
2174         */
2175        public InsurancePlanPlanSpecificCostComponent setBenefit(List<PlanBenefitComponent> theBenefit) { 
2176          this.benefit = theBenefit;
2177          return this;
2178        }
2179
2180        public boolean hasBenefit() { 
2181          if (this.benefit == null)
2182            return false;
2183          for (PlanBenefitComponent item : this.benefit)
2184            if (!item.isEmpty())
2185              return true;
2186          return false;
2187        }
2188
2189        public PlanBenefitComponent addBenefit() { //3
2190          PlanBenefitComponent t = new PlanBenefitComponent();
2191          if (this.benefit == null)
2192            this.benefit = new ArrayList<PlanBenefitComponent>();
2193          this.benefit.add(t);
2194          return t;
2195        }
2196
2197        public InsurancePlanPlanSpecificCostComponent addBenefit(PlanBenefitComponent t) { //3
2198          if (t == null)
2199            return this;
2200          if (this.benefit == null)
2201            this.benefit = new ArrayList<PlanBenefitComponent>();
2202          this.benefit.add(t);
2203          return this;
2204        }
2205
2206        /**
2207         * @return The first repetition of repeating field {@link #benefit}, creating it if it does not already exist {3}
2208         */
2209        public PlanBenefitComponent getBenefitFirstRep() { 
2210          if (getBenefit().isEmpty()) {
2211            addBenefit();
2212          }
2213          return getBenefit().get(0);
2214        }
2215
2216        protected void listChildren(List<Property> children) {
2217          super.listChildren(children);
2218          children.add(new Property("category", "CodeableConcept", "General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health).", 0, 1, category));
2219          children.add(new Property("benefit", "", "List of the specific benefits under this category of benefit.", 0, java.lang.Integer.MAX_VALUE, benefit));
2220        }
2221
2222        @Override
2223        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2224          switch (_hash) {
2225          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health).", 0, 1, category);
2226          case -222710633: /*benefit*/  return new Property("benefit", "", "List of the specific benefits under this category of benefit.", 0, java.lang.Integer.MAX_VALUE, benefit);
2227          default: return super.getNamedProperty(_hash, _name, _checkValid);
2228          }
2229
2230        }
2231
2232      @Override
2233      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2234        switch (hash) {
2235        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
2236        case -222710633: /*benefit*/ return this.benefit == null ? new Base[0] : this.benefit.toArray(new Base[this.benefit.size()]); // PlanBenefitComponent
2237        default: return super.getProperty(hash, name, checkValid);
2238        }
2239
2240      }
2241
2242      @Override
2243      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2244        switch (hash) {
2245        case 50511102: // category
2246          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2247          return value;
2248        case -222710633: // benefit
2249          this.getBenefit().add((PlanBenefitComponent) value); // PlanBenefitComponent
2250          return value;
2251        default: return super.setProperty(hash, name, value);
2252        }
2253
2254      }
2255
2256      @Override
2257      public Base setProperty(String name, Base value) throws FHIRException {
2258        if (name.equals("category")) {
2259          this.category = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2260        } else if (name.equals("benefit")) {
2261          this.getBenefit().add((PlanBenefitComponent) value);
2262        } else
2263          return super.setProperty(name, value);
2264        return value;
2265      }
2266
2267      @Override
2268      public Base makeProperty(int hash, String name) throws FHIRException {
2269        switch (hash) {
2270        case 50511102:  return getCategory();
2271        case -222710633:  return addBenefit(); 
2272        default: return super.makeProperty(hash, name);
2273        }
2274
2275      }
2276
2277      @Override
2278      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2279        switch (hash) {
2280        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2281        case -222710633: /*benefit*/ return new String[] {};
2282        default: return super.getTypesForProperty(hash, name);
2283        }
2284
2285      }
2286
2287      @Override
2288      public Base addChild(String name) throws FHIRException {
2289        if (name.equals("category")) {
2290          this.category = new CodeableConcept();
2291          return this.category;
2292        }
2293        else if (name.equals("benefit")) {
2294          return addBenefit();
2295        }
2296        else
2297          return super.addChild(name);
2298      }
2299
2300      public InsurancePlanPlanSpecificCostComponent copy() {
2301        InsurancePlanPlanSpecificCostComponent dst = new InsurancePlanPlanSpecificCostComponent();
2302        copyValues(dst);
2303        return dst;
2304      }
2305
2306      public void copyValues(InsurancePlanPlanSpecificCostComponent dst) {
2307        super.copyValues(dst);
2308        dst.category = category == null ? null : category.copy();
2309        if (benefit != null) {
2310          dst.benefit = new ArrayList<PlanBenefitComponent>();
2311          for (PlanBenefitComponent i : benefit)
2312            dst.benefit.add(i.copy());
2313        };
2314      }
2315
2316      @Override
2317      public boolean equalsDeep(Base other_) {
2318        if (!super.equalsDeep(other_))
2319          return false;
2320        if (!(other_ instanceof InsurancePlanPlanSpecificCostComponent))
2321          return false;
2322        InsurancePlanPlanSpecificCostComponent o = (InsurancePlanPlanSpecificCostComponent) other_;
2323        return compareDeep(category, o.category, true) && compareDeep(benefit, o.benefit, true);
2324      }
2325
2326      @Override
2327      public boolean equalsShallow(Base other_) {
2328        if (!super.equalsShallow(other_))
2329          return false;
2330        if (!(other_ instanceof InsurancePlanPlanSpecificCostComponent))
2331          return false;
2332        InsurancePlanPlanSpecificCostComponent o = (InsurancePlanPlanSpecificCostComponent) other_;
2333        return true;
2334      }
2335
2336      public boolean isEmpty() {
2337        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(category, benefit);
2338      }
2339
2340  public String fhirType() {
2341    return "InsurancePlan.plan.specificCost";
2342
2343  }
2344
2345  }
2346
2347    @Block()
2348    public static class PlanBenefitComponent extends BackboneElement implements IBaseBackboneElement {
2349        /**
2350         * Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care).
2351         */
2352        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
2353        @Description(shortDefinition="Type of specific benefit", formalDefinition="Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care)." )
2354        protected CodeableConcept type;
2355
2356        /**
2357         * List of the costs associated with a specific benefit.
2358         */
2359        @Child(name = "cost", type = {}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2360        @Description(shortDefinition="List of the costs", formalDefinition="List of the costs associated with a specific benefit." )
2361        protected List<PlanBenefitCostComponent> cost;
2362
2363        private static final long serialVersionUID = 792296200L;
2364
2365    /**
2366     * Constructor
2367     */
2368      public PlanBenefitComponent() {
2369        super();
2370      }
2371
2372    /**
2373     * Constructor
2374     */
2375      public PlanBenefitComponent(CodeableConcept type) {
2376        super();
2377        this.setType(type);
2378      }
2379
2380        /**
2381         * @return {@link #type} (Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care).)
2382         */
2383        public CodeableConcept getType() { 
2384          if (this.type == null)
2385            if (Configuration.errorOnAutoCreate())
2386              throw new Error("Attempt to auto-create PlanBenefitComponent.type");
2387            else if (Configuration.doAutoCreate())
2388              this.type = new CodeableConcept(); // cc
2389          return this.type;
2390        }
2391
2392        public boolean hasType() { 
2393          return this.type != null && !this.type.isEmpty();
2394        }
2395
2396        /**
2397         * @param value {@link #type} (Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care).)
2398         */
2399        public PlanBenefitComponent setType(CodeableConcept value) { 
2400          this.type = value;
2401          return this;
2402        }
2403
2404        /**
2405         * @return {@link #cost} (List of the costs associated with a specific benefit.)
2406         */
2407        public List<PlanBenefitCostComponent> getCost() { 
2408          if (this.cost == null)
2409            this.cost = new ArrayList<PlanBenefitCostComponent>();
2410          return this.cost;
2411        }
2412
2413        /**
2414         * @return Returns a reference to <code>this</code> for easy method chaining
2415         */
2416        public PlanBenefitComponent setCost(List<PlanBenefitCostComponent> theCost) { 
2417          this.cost = theCost;
2418          return this;
2419        }
2420
2421        public boolean hasCost() { 
2422          if (this.cost == null)
2423            return false;
2424          for (PlanBenefitCostComponent item : this.cost)
2425            if (!item.isEmpty())
2426              return true;
2427          return false;
2428        }
2429
2430        public PlanBenefitCostComponent addCost() { //3
2431          PlanBenefitCostComponent t = new PlanBenefitCostComponent();
2432          if (this.cost == null)
2433            this.cost = new ArrayList<PlanBenefitCostComponent>();
2434          this.cost.add(t);
2435          return t;
2436        }
2437
2438        public PlanBenefitComponent addCost(PlanBenefitCostComponent t) { //3
2439          if (t == null)
2440            return this;
2441          if (this.cost == null)
2442            this.cost = new ArrayList<PlanBenefitCostComponent>();
2443          this.cost.add(t);
2444          return this;
2445        }
2446
2447        /**
2448         * @return The first repetition of repeating field {@link #cost}, creating it if it does not already exist {3}
2449         */
2450        public PlanBenefitCostComponent getCostFirstRep() { 
2451          if (getCost().isEmpty()) {
2452            addCost();
2453          }
2454          return getCost().get(0);
2455        }
2456
2457        protected void listChildren(List<Property> children) {
2458          super.listChildren(children);
2459          children.add(new Property("type", "CodeableConcept", "Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care).", 0, 1, type));
2460          children.add(new Property("cost", "", "List of the costs associated with a specific benefit.", 0, java.lang.Integer.MAX_VALUE, cost));
2461        }
2462
2463        @Override
2464        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2465          switch (_hash) {
2466          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care).", 0, 1, type);
2467          case 3059661: /*cost*/  return new Property("cost", "", "List of the costs associated with a specific benefit.", 0, java.lang.Integer.MAX_VALUE, cost);
2468          default: return super.getNamedProperty(_hash, _name, _checkValid);
2469          }
2470
2471        }
2472
2473      @Override
2474      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2475        switch (hash) {
2476        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
2477        case 3059661: /*cost*/ return this.cost == null ? new Base[0] : this.cost.toArray(new Base[this.cost.size()]); // PlanBenefitCostComponent
2478        default: return super.getProperty(hash, name, checkValid);
2479        }
2480
2481      }
2482
2483      @Override
2484      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2485        switch (hash) {
2486        case 3575610: // type
2487          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2488          return value;
2489        case 3059661: // cost
2490          this.getCost().add((PlanBenefitCostComponent) value); // PlanBenefitCostComponent
2491          return value;
2492        default: return super.setProperty(hash, name, value);
2493        }
2494
2495      }
2496
2497      @Override
2498      public Base setProperty(String name, Base value) throws FHIRException {
2499        if (name.equals("type")) {
2500          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2501        } else if (name.equals("cost")) {
2502          this.getCost().add((PlanBenefitCostComponent) value);
2503        } else
2504          return super.setProperty(name, value);
2505        return value;
2506      }
2507
2508      @Override
2509      public Base makeProperty(int hash, String name) throws FHIRException {
2510        switch (hash) {
2511        case 3575610:  return getType();
2512        case 3059661:  return addCost(); 
2513        default: return super.makeProperty(hash, name);
2514        }
2515
2516      }
2517
2518      @Override
2519      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2520        switch (hash) {
2521        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2522        case 3059661: /*cost*/ return new String[] {};
2523        default: return super.getTypesForProperty(hash, name);
2524        }
2525
2526      }
2527
2528      @Override
2529      public Base addChild(String name) throws FHIRException {
2530        if (name.equals("type")) {
2531          this.type = new CodeableConcept();
2532          return this.type;
2533        }
2534        else if (name.equals("cost")) {
2535          return addCost();
2536        }
2537        else
2538          return super.addChild(name);
2539      }
2540
2541      public PlanBenefitComponent copy() {
2542        PlanBenefitComponent dst = new PlanBenefitComponent();
2543        copyValues(dst);
2544        return dst;
2545      }
2546
2547      public void copyValues(PlanBenefitComponent dst) {
2548        super.copyValues(dst);
2549        dst.type = type == null ? null : type.copy();
2550        if (cost != null) {
2551          dst.cost = new ArrayList<PlanBenefitCostComponent>();
2552          for (PlanBenefitCostComponent i : cost)
2553            dst.cost.add(i.copy());
2554        };
2555      }
2556
2557      @Override
2558      public boolean equalsDeep(Base other_) {
2559        if (!super.equalsDeep(other_))
2560          return false;
2561        if (!(other_ instanceof PlanBenefitComponent))
2562          return false;
2563        PlanBenefitComponent o = (PlanBenefitComponent) other_;
2564        return compareDeep(type, o.type, true) && compareDeep(cost, o.cost, true);
2565      }
2566
2567      @Override
2568      public boolean equalsShallow(Base other_) {
2569        if (!super.equalsShallow(other_))
2570          return false;
2571        if (!(other_ instanceof PlanBenefitComponent))
2572          return false;
2573        PlanBenefitComponent o = (PlanBenefitComponent) other_;
2574        return true;
2575      }
2576
2577      public boolean isEmpty() {
2578        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, cost);
2579      }
2580
2581  public String fhirType() {
2582    return "InsurancePlan.plan.specificCost.benefit";
2583
2584  }
2585
2586  }
2587
2588    @Block()
2589    public static class PlanBenefitCostComponent extends BackboneElement implements IBaseBackboneElement {
2590        /**
2591         * Type of cost (copay; individual cap; family cap; coinsurance; deductible).
2592         */
2593        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
2594        @Description(shortDefinition="Type of cost", formalDefinition="Type of cost (copay; individual cap; family cap; coinsurance; deductible)." )
2595        protected CodeableConcept type;
2596
2597        /**
2598         * Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other).
2599         */
2600        @Child(name = "applicability", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
2601        @Description(shortDefinition="in-network | out-of-network | other", formalDefinition="Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other)." )
2602        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/insuranceplan-applicability")
2603        protected CodeableConcept applicability;
2604
2605        /**
2606         * Additional information about the cost, such as information about funding sources (e.g. HSA, HRA, FSA, RRA).
2607         */
2608        @Child(name = "qualifiers", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2609        @Description(shortDefinition="Additional information about the cost", formalDefinition="Additional information about the cost, such as information about funding sources (e.g. HSA, HRA, FSA, RRA)." )
2610        protected List<CodeableConcept> qualifiers;
2611
2612        /**
2613         * The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance).
2614         */
2615        @Child(name = "value", type = {Quantity.class}, order=4, min=0, max=1, modifier=false, summary=false)
2616        @Description(shortDefinition="The actual cost value", formalDefinition="The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance)." )
2617        protected Quantity value;
2618
2619        private static final long serialVersionUID = -340688733L;
2620
2621    /**
2622     * Constructor
2623     */
2624      public PlanBenefitCostComponent() {
2625        super();
2626      }
2627
2628    /**
2629     * Constructor
2630     */
2631      public PlanBenefitCostComponent(CodeableConcept type) {
2632        super();
2633        this.setType(type);
2634      }
2635
2636        /**
2637         * @return {@link #type} (Type of cost (copay; individual cap; family cap; coinsurance; deductible).)
2638         */
2639        public CodeableConcept getType() { 
2640          if (this.type == null)
2641            if (Configuration.errorOnAutoCreate())
2642              throw new Error("Attempt to auto-create PlanBenefitCostComponent.type");
2643            else if (Configuration.doAutoCreate())
2644              this.type = new CodeableConcept(); // cc
2645          return this.type;
2646        }
2647
2648        public boolean hasType() { 
2649          return this.type != null && !this.type.isEmpty();
2650        }
2651
2652        /**
2653         * @param value {@link #type} (Type of cost (copay; individual cap; family cap; coinsurance; deductible).)
2654         */
2655        public PlanBenefitCostComponent setType(CodeableConcept value) { 
2656          this.type = value;
2657          return this;
2658        }
2659
2660        /**
2661         * @return {@link #applicability} (Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other).)
2662         */
2663        public CodeableConcept getApplicability() { 
2664          if (this.applicability == null)
2665            if (Configuration.errorOnAutoCreate())
2666              throw new Error("Attempt to auto-create PlanBenefitCostComponent.applicability");
2667            else if (Configuration.doAutoCreate())
2668              this.applicability = new CodeableConcept(); // cc
2669          return this.applicability;
2670        }
2671
2672        public boolean hasApplicability() { 
2673          return this.applicability != null && !this.applicability.isEmpty();
2674        }
2675
2676        /**
2677         * @param value {@link #applicability} (Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other).)
2678         */
2679        public PlanBenefitCostComponent setApplicability(CodeableConcept value) { 
2680          this.applicability = value;
2681          return this;
2682        }
2683
2684        /**
2685         * @return {@link #qualifiers} (Additional information about the cost, such as information about funding sources (e.g. HSA, HRA, FSA, RRA).)
2686         */
2687        public List<CodeableConcept> getQualifiers() { 
2688          if (this.qualifiers == null)
2689            this.qualifiers = new ArrayList<CodeableConcept>();
2690          return this.qualifiers;
2691        }
2692
2693        /**
2694         * @return Returns a reference to <code>this</code> for easy method chaining
2695         */
2696        public PlanBenefitCostComponent setQualifiers(List<CodeableConcept> theQualifiers) { 
2697          this.qualifiers = theQualifiers;
2698          return this;
2699        }
2700
2701        public boolean hasQualifiers() { 
2702          if (this.qualifiers == null)
2703            return false;
2704          for (CodeableConcept item : this.qualifiers)
2705            if (!item.isEmpty())
2706              return true;
2707          return false;
2708        }
2709
2710        public CodeableConcept addQualifiers() { //3
2711          CodeableConcept t = new CodeableConcept();
2712          if (this.qualifiers == null)
2713            this.qualifiers = new ArrayList<CodeableConcept>();
2714          this.qualifiers.add(t);
2715          return t;
2716        }
2717
2718        public PlanBenefitCostComponent addQualifiers(CodeableConcept t) { //3
2719          if (t == null)
2720            return this;
2721          if (this.qualifiers == null)
2722            this.qualifiers = new ArrayList<CodeableConcept>();
2723          this.qualifiers.add(t);
2724          return this;
2725        }
2726
2727        /**
2728         * @return The first repetition of repeating field {@link #qualifiers}, creating it if it does not already exist {3}
2729         */
2730        public CodeableConcept getQualifiersFirstRep() { 
2731          if (getQualifiers().isEmpty()) {
2732            addQualifiers();
2733          }
2734          return getQualifiers().get(0);
2735        }
2736
2737        /**
2738         * @return {@link #value} (The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance).)
2739         */
2740        public Quantity getValue() { 
2741          if (this.value == null)
2742            if (Configuration.errorOnAutoCreate())
2743              throw new Error("Attempt to auto-create PlanBenefitCostComponent.value");
2744            else if (Configuration.doAutoCreate())
2745              this.value = new Quantity(); // cc
2746          return this.value;
2747        }
2748
2749        public boolean hasValue() { 
2750          return this.value != null && !this.value.isEmpty();
2751        }
2752
2753        /**
2754         * @param value {@link #value} (The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance).)
2755         */
2756        public PlanBenefitCostComponent setValue(Quantity value) { 
2757          this.value = value;
2758          return this;
2759        }
2760
2761        protected void listChildren(List<Property> children) {
2762          super.listChildren(children);
2763          children.add(new Property("type", "CodeableConcept", "Type of cost (copay; individual cap; family cap; coinsurance; deductible).", 0, 1, type));
2764          children.add(new Property("applicability", "CodeableConcept", "Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other).", 0, 1, applicability));
2765          children.add(new Property("qualifiers", "CodeableConcept", "Additional information about the cost, such as information about funding sources (e.g. HSA, HRA, FSA, RRA).", 0, java.lang.Integer.MAX_VALUE, qualifiers));
2766          children.add(new Property("value", "Quantity", "The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance).", 0, 1, value));
2767        }
2768
2769        @Override
2770        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2771          switch (_hash) {
2772          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of cost (copay; individual cap; family cap; coinsurance; deductible).", 0, 1, type);
2773          case -1526770491: /*applicability*/  return new Property("applicability", "CodeableConcept", "Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other).", 0, 1, applicability);
2774          case -31447799: /*qualifiers*/  return new Property("qualifiers", "CodeableConcept", "Additional information about the cost, such as information about funding sources (e.g. HSA, HRA, FSA, RRA).", 0, java.lang.Integer.MAX_VALUE, qualifiers);
2775          case 111972721: /*value*/  return new Property("value", "Quantity", "The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance).", 0, 1, value);
2776          default: return super.getNamedProperty(_hash, _name, _checkValid);
2777          }
2778
2779        }
2780
2781      @Override
2782      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2783        switch (hash) {
2784        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
2785        case -1526770491: /*applicability*/ return this.applicability == null ? new Base[0] : new Base[] {this.applicability}; // CodeableConcept
2786        case -31447799: /*qualifiers*/ return this.qualifiers == null ? new Base[0] : this.qualifiers.toArray(new Base[this.qualifiers.size()]); // CodeableConcept
2787        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // Quantity
2788        default: return super.getProperty(hash, name, checkValid);
2789        }
2790
2791      }
2792
2793      @Override
2794      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2795        switch (hash) {
2796        case 3575610: // type
2797          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2798          return value;
2799        case -1526770491: // applicability
2800          this.applicability = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2801          return value;
2802        case -31447799: // qualifiers
2803          this.getQualifiers().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2804          return value;
2805        case 111972721: // value
2806          this.value = TypeConvertor.castToQuantity(value); // Quantity
2807          return value;
2808        default: return super.setProperty(hash, name, value);
2809        }
2810
2811      }
2812
2813      @Override
2814      public Base setProperty(String name, Base value) throws FHIRException {
2815        if (name.equals("type")) {
2816          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2817        } else if (name.equals("applicability")) {
2818          this.applicability = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2819        } else if (name.equals("qualifiers")) {
2820          this.getQualifiers().add(TypeConvertor.castToCodeableConcept(value));
2821        } else if (name.equals("value")) {
2822          this.value = TypeConvertor.castToQuantity(value); // Quantity
2823        } else
2824          return super.setProperty(name, value);
2825        return value;
2826      }
2827
2828      @Override
2829      public Base makeProperty(int hash, String name) throws FHIRException {
2830        switch (hash) {
2831        case 3575610:  return getType();
2832        case -1526770491:  return getApplicability();
2833        case -31447799:  return addQualifiers(); 
2834        case 111972721:  return getValue();
2835        default: return super.makeProperty(hash, name);
2836        }
2837
2838      }
2839
2840      @Override
2841      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2842        switch (hash) {
2843        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2844        case -1526770491: /*applicability*/ return new String[] {"CodeableConcept"};
2845        case -31447799: /*qualifiers*/ return new String[] {"CodeableConcept"};
2846        case 111972721: /*value*/ return new String[] {"Quantity"};
2847        default: return super.getTypesForProperty(hash, name);
2848        }
2849
2850      }
2851
2852      @Override
2853      public Base addChild(String name) throws FHIRException {
2854        if (name.equals("type")) {
2855          this.type = new CodeableConcept();
2856          return this.type;
2857        }
2858        else if (name.equals("applicability")) {
2859          this.applicability = new CodeableConcept();
2860          return this.applicability;
2861        }
2862        else if (name.equals("qualifiers")) {
2863          return addQualifiers();
2864        }
2865        else if (name.equals("value")) {
2866          this.value = new Quantity();
2867          return this.value;
2868        }
2869        else
2870          return super.addChild(name);
2871      }
2872
2873      public PlanBenefitCostComponent copy() {
2874        PlanBenefitCostComponent dst = new PlanBenefitCostComponent();
2875        copyValues(dst);
2876        return dst;
2877      }
2878
2879      public void copyValues(PlanBenefitCostComponent dst) {
2880        super.copyValues(dst);
2881        dst.type = type == null ? null : type.copy();
2882        dst.applicability = applicability == null ? null : applicability.copy();
2883        if (qualifiers != null) {
2884          dst.qualifiers = new ArrayList<CodeableConcept>();
2885          for (CodeableConcept i : qualifiers)
2886            dst.qualifiers.add(i.copy());
2887        };
2888        dst.value = value == null ? null : value.copy();
2889      }
2890
2891      @Override
2892      public boolean equalsDeep(Base other_) {
2893        if (!super.equalsDeep(other_))
2894          return false;
2895        if (!(other_ instanceof PlanBenefitCostComponent))
2896          return false;
2897        PlanBenefitCostComponent o = (PlanBenefitCostComponent) other_;
2898        return compareDeep(type, o.type, true) && compareDeep(applicability, o.applicability, true) && compareDeep(qualifiers, o.qualifiers, true)
2899           && compareDeep(value, o.value, true);
2900      }
2901
2902      @Override
2903      public boolean equalsShallow(Base other_) {
2904        if (!super.equalsShallow(other_))
2905          return false;
2906        if (!(other_ instanceof PlanBenefitCostComponent))
2907          return false;
2908        PlanBenefitCostComponent o = (PlanBenefitCostComponent) other_;
2909        return true;
2910      }
2911
2912      public boolean isEmpty() {
2913        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, applicability, qualifiers
2914          , value);
2915      }
2916
2917  public String fhirType() {
2918    return "InsurancePlan.plan.specificCost.benefit.cost";
2919
2920  }
2921
2922  }
2923
2924    /**
2925     * Business identifiers assigned to this health insurance product which remain constant as the resource is updated and propagates from server to server.
2926     */
2927    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2928    @Description(shortDefinition="Business Identifier for Product", formalDefinition="Business identifiers assigned to this health insurance product which remain constant as the resource is updated and propagates from server to server." )
2929    protected List<Identifier> identifier;
2930
2931    /**
2932     * The current state of the health insurance product.
2933     */
2934    @Child(name = "status", type = {CodeType.class}, order=1, min=0, max=1, modifier=true, summary=true)
2935    @Description(shortDefinition="draft | active | retired | unknown", formalDefinition="The current state of the health insurance product." )
2936    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/publication-status")
2937    protected Enumeration<PublicationStatus> status;
2938
2939    /**
2940     * The kind of health insurance product.
2941     */
2942    @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2943    @Description(shortDefinition="Kind of product", formalDefinition="The kind of health insurance product." )
2944    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/insuranceplan-type")
2945    protected List<CodeableConcept> type;
2946
2947    /**
2948     * Official name of the health insurance product as designated by the owner.
2949     */
2950    @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
2951    @Description(shortDefinition="Official name", formalDefinition="Official name of the health insurance product as designated by the owner." )
2952    protected StringType name;
2953
2954    /**
2955     * A list of alternate names that the product is known as, or was known as in the past.
2956     */
2957    @Child(name = "alias", type = {StringType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2958    @Description(shortDefinition="Alternate names", formalDefinition="A list of alternate names that the product is known as, or was known as in the past." )
2959    protected List<StringType> alias;
2960
2961    /**
2962     * The period of time that the health insurance product is available.
2963     */
2964    @Child(name = "period", type = {Period.class}, order=5, min=0, max=1, modifier=false, summary=false)
2965    @Description(shortDefinition="When the product is available", formalDefinition="The period of time that the health insurance product is available." )
2966    protected Period period;
2967
2968    /**
2969     * The entity that is providing  the health insurance product and underwriting the risk.  This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as 'payers'.
2970     */
2971    @Child(name = "ownedBy", type = {Organization.class}, order=6, min=0, max=1, modifier=false, summary=true)
2972    @Description(shortDefinition="Plan issuer", formalDefinition="The entity that is providing  the health insurance product and underwriting the risk.  This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as 'payers'." )
2973    protected Reference ownedBy;
2974
2975    /**
2976     * An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner.
2977     */
2978    @Child(name = "administeredBy", type = {Organization.class}, order=7, min=0, max=1, modifier=false, summary=true)
2979    @Description(shortDefinition="Product administrator", formalDefinition="An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner." )
2980    protected Reference administeredBy;
2981
2982    /**
2983     * The geographic region in which a health insurance product's benefits apply.
2984     */
2985    @Child(name = "coverageArea", type = {Location.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2986    @Description(shortDefinition="Where product applies", formalDefinition="The geographic region in which a health insurance product's benefits apply." )
2987    protected List<Reference> coverageArea;
2988
2989    /**
2990     * The contact for the health insurance product for a certain purpose.
2991     */
2992    @Child(name = "contact", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2993    @Description(shortDefinition="Contact for the product", formalDefinition="The contact for the health insurance product for a certain purpose." )
2994    protected List<InsurancePlanContactComponent> contact;
2995
2996    /**
2997     * The technical endpoints providing access to services operated for the health insurance product.
2998     */
2999    @Child(name = "endpoint", type = {Endpoint.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3000    @Description(shortDefinition="Technical endpoint", formalDefinition="The technical endpoints providing access to services operated for the health insurance product." )
3001    protected List<Reference> endpoint;
3002
3003    /**
3004     * Reference to the network included in the health insurance product.
3005     */
3006    @Child(name = "network", type = {Organization.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3007    @Description(shortDefinition="What networks are Included", formalDefinition="Reference to the network included in the health insurance product." )
3008    protected List<Reference> network;
3009
3010    /**
3011     * Details about the coverage offered by the insurance product.
3012     */
3013    @Child(name = "coverage", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3014    @Description(shortDefinition="Coverage details", formalDefinition="Details about the coverage offered by the insurance product." )
3015    protected List<InsurancePlanCoverageComponent> coverage;
3016
3017    /**
3018     * Details about an insurance plan.
3019     */
3020    @Child(name = "plan", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3021    @Description(shortDefinition="Plan details", formalDefinition="Details about an insurance plan." )
3022    protected List<InsurancePlanPlanComponent> plan;
3023
3024    private static final long serialVersionUID = -947586130L;
3025
3026  /**
3027   * Constructor
3028   */
3029    public InsurancePlan() {
3030      super();
3031    }
3032
3033    /**
3034     * @return {@link #identifier} (Business identifiers assigned to this health insurance product which remain constant as the resource is updated and propagates from server to server.)
3035     */
3036    public List<Identifier> getIdentifier() { 
3037      if (this.identifier == null)
3038        this.identifier = new ArrayList<Identifier>();
3039      return this.identifier;
3040    }
3041
3042    /**
3043     * @return Returns a reference to <code>this</code> for easy method chaining
3044     */
3045    public InsurancePlan setIdentifier(List<Identifier> theIdentifier) { 
3046      this.identifier = theIdentifier;
3047      return this;
3048    }
3049
3050    public boolean hasIdentifier() { 
3051      if (this.identifier == null)
3052        return false;
3053      for (Identifier item : this.identifier)
3054        if (!item.isEmpty())
3055          return true;
3056      return false;
3057    }
3058
3059    public Identifier addIdentifier() { //3
3060      Identifier t = new Identifier();
3061      if (this.identifier == null)
3062        this.identifier = new ArrayList<Identifier>();
3063      this.identifier.add(t);
3064      return t;
3065    }
3066
3067    public InsurancePlan addIdentifier(Identifier t) { //3
3068      if (t == null)
3069        return this;
3070      if (this.identifier == null)
3071        this.identifier = new ArrayList<Identifier>();
3072      this.identifier.add(t);
3073      return this;
3074    }
3075
3076    /**
3077     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
3078     */
3079    public Identifier getIdentifierFirstRep() { 
3080      if (getIdentifier().isEmpty()) {
3081        addIdentifier();
3082      }
3083      return getIdentifier().get(0);
3084    }
3085
3086    /**
3087     * @return {@link #status} (The current state of the health insurance product.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3088     */
3089    public Enumeration<PublicationStatus> getStatusElement() { 
3090      if (this.status == null)
3091        if (Configuration.errorOnAutoCreate())
3092          throw new Error("Attempt to auto-create InsurancePlan.status");
3093        else if (Configuration.doAutoCreate())
3094          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
3095      return this.status;
3096    }
3097
3098    public boolean hasStatusElement() { 
3099      return this.status != null && !this.status.isEmpty();
3100    }
3101
3102    public boolean hasStatus() { 
3103      return this.status != null && !this.status.isEmpty();
3104    }
3105
3106    /**
3107     * @param value {@link #status} (The current state of the health insurance product.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
3108     */
3109    public InsurancePlan setStatusElement(Enumeration<PublicationStatus> value) { 
3110      this.status = value;
3111      return this;
3112    }
3113
3114    /**
3115     * @return The current state of the health insurance product.
3116     */
3117    public PublicationStatus getStatus() { 
3118      return this.status == null ? null : this.status.getValue();
3119    }
3120
3121    /**
3122     * @param value The current state of the health insurance product.
3123     */
3124    public InsurancePlan setStatus(PublicationStatus value) { 
3125      if (value == null)
3126        this.status = null;
3127      else {
3128        if (this.status == null)
3129          this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
3130        this.status.setValue(value);
3131      }
3132      return this;
3133    }
3134
3135    /**
3136     * @return {@link #type} (The kind of health insurance product.)
3137     */
3138    public List<CodeableConcept> getType() { 
3139      if (this.type == null)
3140        this.type = new ArrayList<CodeableConcept>();
3141      return this.type;
3142    }
3143
3144    /**
3145     * @return Returns a reference to <code>this</code> for easy method chaining
3146     */
3147    public InsurancePlan setType(List<CodeableConcept> theType) { 
3148      this.type = theType;
3149      return this;
3150    }
3151
3152    public boolean hasType() { 
3153      if (this.type == null)
3154        return false;
3155      for (CodeableConcept item : this.type)
3156        if (!item.isEmpty())
3157          return true;
3158      return false;
3159    }
3160
3161    public CodeableConcept addType() { //3
3162      CodeableConcept t = new CodeableConcept();
3163      if (this.type == null)
3164        this.type = new ArrayList<CodeableConcept>();
3165      this.type.add(t);
3166      return t;
3167    }
3168
3169    public InsurancePlan addType(CodeableConcept t) { //3
3170      if (t == null)
3171        return this;
3172      if (this.type == null)
3173        this.type = new ArrayList<CodeableConcept>();
3174      this.type.add(t);
3175      return this;
3176    }
3177
3178    /**
3179     * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
3180     */
3181    public CodeableConcept getTypeFirstRep() { 
3182      if (getType().isEmpty()) {
3183        addType();
3184      }
3185      return getType().get(0);
3186    }
3187
3188    /**
3189     * @return {@link #name} (Official name of the health insurance product as designated by the owner.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
3190     */
3191    public StringType getNameElement() { 
3192      if (this.name == null)
3193        if (Configuration.errorOnAutoCreate())
3194          throw new Error("Attempt to auto-create InsurancePlan.name");
3195        else if (Configuration.doAutoCreate())
3196          this.name = new StringType(); // bb
3197      return this.name;
3198    }
3199
3200    public boolean hasNameElement() { 
3201      return this.name != null && !this.name.isEmpty();
3202    }
3203
3204    public boolean hasName() { 
3205      return this.name != null && !this.name.isEmpty();
3206    }
3207
3208    /**
3209     * @param value {@link #name} (Official name of the health insurance product as designated by the owner.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
3210     */
3211    public InsurancePlan setNameElement(StringType value) { 
3212      this.name = value;
3213      return this;
3214    }
3215
3216    /**
3217     * @return Official name of the health insurance product as designated by the owner.
3218     */
3219    public String getName() { 
3220      return this.name == null ? null : this.name.getValue();
3221    }
3222
3223    /**
3224     * @param value Official name of the health insurance product as designated by the owner.
3225     */
3226    public InsurancePlan setName(String value) { 
3227      if (Utilities.noString(value))
3228        this.name = null;
3229      else {
3230        if (this.name == null)
3231          this.name = new StringType();
3232        this.name.setValue(value);
3233      }
3234      return this;
3235    }
3236
3237    /**
3238     * @return {@link #alias} (A list of alternate names that the product is known as, or was known as in the past.)
3239     */
3240    public List<StringType> getAlias() { 
3241      if (this.alias == null)
3242        this.alias = new ArrayList<StringType>();
3243      return this.alias;
3244    }
3245
3246    /**
3247     * @return Returns a reference to <code>this</code> for easy method chaining
3248     */
3249    public InsurancePlan setAlias(List<StringType> theAlias) { 
3250      this.alias = theAlias;
3251      return this;
3252    }
3253
3254    public boolean hasAlias() { 
3255      if (this.alias == null)
3256        return false;
3257      for (StringType item : this.alias)
3258        if (!item.isEmpty())
3259          return true;
3260      return false;
3261    }
3262
3263    /**
3264     * @return {@link #alias} (A list of alternate names that the product is known as, or was known as in the past.)
3265     */
3266    public StringType addAliasElement() {//2 
3267      StringType t = new StringType();
3268      if (this.alias == null)
3269        this.alias = new ArrayList<StringType>();
3270      this.alias.add(t);
3271      return t;
3272    }
3273
3274    /**
3275     * @param value {@link #alias} (A list of alternate names that the product is known as, or was known as in the past.)
3276     */
3277    public InsurancePlan addAlias(String value) { //1
3278      StringType t = new StringType();
3279      t.setValue(value);
3280      if (this.alias == null)
3281        this.alias = new ArrayList<StringType>();
3282      this.alias.add(t);
3283      return this;
3284    }
3285
3286    /**
3287     * @param value {@link #alias} (A list of alternate names that the product is known as, or was known as in the past.)
3288     */
3289    public boolean hasAlias(String value) { 
3290      if (this.alias == null)
3291        return false;
3292      for (StringType v : this.alias)
3293        if (v.getValue().equals(value)) // string
3294          return true;
3295      return false;
3296    }
3297
3298    /**
3299     * @return {@link #period} (The period of time that the health insurance product is available.)
3300     */
3301    public Period getPeriod() { 
3302      if (this.period == null)
3303        if (Configuration.errorOnAutoCreate())
3304          throw new Error("Attempt to auto-create InsurancePlan.period");
3305        else if (Configuration.doAutoCreate())
3306          this.period = new Period(); // cc
3307      return this.period;
3308    }
3309
3310    public boolean hasPeriod() { 
3311      return this.period != null && !this.period.isEmpty();
3312    }
3313
3314    /**
3315     * @param value {@link #period} (The period of time that the health insurance product is available.)
3316     */
3317    public InsurancePlan setPeriod(Period value) { 
3318      this.period = value;
3319      return this;
3320    }
3321
3322    /**
3323     * @return {@link #ownedBy} (The entity that is providing  the health insurance product and underwriting the risk.  This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as 'payers'.)
3324     */
3325    public Reference getOwnedBy() { 
3326      if (this.ownedBy == null)
3327        if (Configuration.errorOnAutoCreate())
3328          throw new Error("Attempt to auto-create InsurancePlan.ownedBy");
3329        else if (Configuration.doAutoCreate())
3330          this.ownedBy = new Reference(); // cc
3331      return this.ownedBy;
3332    }
3333
3334    public boolean hasOwnedBy() { 
3335      return this.ownedBy != null && !this.ownedBy.isEmpty();
3336    }
3337
3338    /**
3339     * @param value {@link #ownedBy} (The entity that is providing  the health insurance product and underwriting the risk.  This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as 'payers'.)
3340     */
3341    public InsurancePlan setOwnedBy(Reference value) { 
3342      this.ownedBy = value;
3343      return this;
3344    }
3345
3346    /**
3347     * @return {@link #administeredBy} (An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner.)
3348     */
3349    public Reference getAdministeredBy() { 
3350      if (this.administeredBy == null)
3351        if (Configuration.errorOnAutoCreate())
3352          throw new Error("Attempt to auto-create InsurancePlan.administeredBy");
3353        else if (Configuration.doAutoCreate())
3354          this.administeredBy = new Reference(); // cc
3355      return this.administeredBy;
3356    }
3357
3358    public boolean hasAdministeredBy() { 
3359      return this.administeredBy != null && !this.administeredBy.isEmpty();
3360    }
3361
3362    /**
3363     * @param value {@link #administeredBy} (An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner.)
3364     */
3365    public InsurancePlan setAdministeredBy(Reference value) { 
3366      this.administeredBy = value;
3367      return this;
3368    }
3369
3370    /**
3371     * @return {@link #coverageArea} (The geographic region in which a health insurance product's benefits apply.)
3372     */
3373    public List<Reference> getCoverageArea() { 
3374      if (this.coverageArea == null)
3375        this.coverageArea = new ArrayList<Reference>();
3376      return this.coverageArea;
3377    }
3378
3379    /**
3380     * @return Returns a reference to <code>this</code> for easy method chaining
3381     */
3382    public InsurancePlan setCoverageArea(List<Reference> theCoverageArea) { 
3383      this.coverageArea = theCoverageArea;
3384      return this;
3385    }
3386
3387    public boolean hasCoverageArea() { 
3388      if (this.coverageArea == null)
3389        return false;
3390      for (Reference item : this.coverageArea)
3391        if (!item.isEmpty())
3392          return true;
3393      return false;
3394    }
3395
3396    public Reference addCoverageArea() { //3
3397      Reference t = new Reference();
3398      if (this.coverageArea == null)
3399        this.coverageArea = new ArrayList<Reference>();
3400      this.coverageArea.add(t);
3401      return t;
3402    }
3403
3404    public InsurancePlan addCoverageArea(Reference t) { //3
3405      if (t == null)
3406        return this;
3407      if (this.coverageArea == null)
3408        this.coverageArea = new ArrayList<Reference>();
3409      this.coverageArea.add(t);
3410      return this;
3411    }
3412
3413    /**
3414     * @return The first repetition of repeating field {@link #coverageArea}, creating it if it does not already exist {3}
3415     */
3416    public Reference getCoverageAreaFirstRep() { 
3417      if (getCoverageArea().isEmpty()) {
3418        addCoverageArea();
3419      }
3420      return getCoverageArea().get(0);
3421    }
3422
3423    /**
3424     * @return {@link #contact} (The contact for the health insurance product for a certain purpose.)
3425     */
3426    public List<InsurancePlanContactComponent> getContact() { 
3427      if (this.contact == null)
3428        this.contact = new ArrayList<InsurancePlanContactComponent>();
3429      return this.contact;
3430    }
3431
3432    /**
3433     * @return Returns a reference to <code>this</code> for easy method chaining
3434     */
3435    public InsurancePlan setContact(List<InsurancePlanContactComponent> theContact) { 
3436      this.contact = theContact;
3437      return this;
3438    }
3439
3440    public boolean hasContact() { 
3441      if (this.contact == null)
3442        return false;
3443      for (InsurancePlanContactComponent item : this.contact)
3444        if (!item.isEmpty())
3445          return true;
3446      return false;
3447    }
3448
3449    public InsurancePlanContactComponent addContact() { //3
3450      InsurancePlanContactComponent t = new InsurancePlanContactComponent();
3451      if (this.contact == null)
3452        this.contact = new ArrayList<InsurancePlanContactComponent>();
3453      this.contact.add(t);
3454      return t;
3455    }
3456
3457    public InsurancePlan addContact(InsurancePlanContactComponent t) { //3
3458      if (t == null)
3459        return this;
3460      if (this.contact == null)
3461        this.contact = new ArrayList<InsurancePlanContactComponent>();
3462      this.contact.add(t);
3463      return this;
3464    }
3465
3466    /**
3467     * @return The first repetition of repeating field {@link #contact}, creating it if it does not already exist {3}
3468     */
3469    public InsurancePlanContactComponent getContactFirstRep() { 
3470      if (getContact().isEmpty()) {
3471        addContact();
3472      }
3473      return getContact().get(0);
3474    }
3475
3476    /**
3477     * @return {@link #endpoint} (The technical endpoints providing access to services operated for the health insurance product.)
3478     */
3479    public List<Reference> getEndpoint() { 
3480      if (this.endpoint == null)
3481        this.endpoint = new ArrayList<Reference>();
3482      return this.endpoint;
3483    }
3484
3485    /**
3486     * @return Returns a reference to <code>this</code> for easy method chaining
3487     */
3488    public InsurancePlan setEndpoint(List<Reference> theEndpoint) { 
3489      this.endpoint = theEndpoint;
3490      return this;
3491    }
3492
3493    public boolean hasEndpoint() { 
3494      if (this.endpoint == null)
3495        return false;
3496      for (Reference item : this.endpoint)
3497        if (!item.isEmpty())
3498          return true;
3499      return false;
3500    }
3501
3502    public Reference addEndpoint() { //3
3503      Reference t = new Reference();
3504      if (this.endpoint == null)
3505        this.endpoint = new ArrayList<Reference>();
3506      this.endpoint.add(t);
3507      return t;
3508    }
3509
3510    public InsurancePlan addEndpoint(Reference t) { //3
3511      if (t == null)
3512        return this;
3513      if (this.endpoint == null)
3514        this.endpoint = new ArrayList<Reference>();
3515      this.endpoint.add(t);
3516      return this;
3517    }
3518
3519    /**
3520     * @return The first repetition of repeating field {@link #endpoint}, creating it if it does not already exist {3}
3521     */
3522    public Reference getEndpointFirstRep() { 
3523      if (getEndpoint().isEmpty()) {
3524        addEndpoint();
3525      }
3526      return getEndpoint().get(0);
3527    }
3528
3529    /**
3530     * @return {@link #network} (Reference to the network included in the health insurance product.)
3531     */
3532    public List<Reference> getNetwork() { 
3533      if (this.network == null)
3534        this.network = new ArrayList<Reference>();
3535      return this.network;
3536    }
3537
3538    /**
3539     * @return Returns a reference to <code>this</code> for easy method chaining
3540     */
3541    public InsurancePlan setNetwork(List<Reference> theNetwork) { 
3542      this.network = theNetwork;
3543      return this;
3544    }
3545
3546    public boolean hasNetwork() { 
3547      if (this.network == null)
3548        return false;
3549      for (Reference item : this.network)
3550        if (!item.isEmpty())
3551          return true;
3552      return false;
3553    }
3554
3555    public Reference addNetwork() { //3
3556      Reference t = new Reference();
3557      if (this.network == null)
3558        this.network = new ArrayList<Reference>();
3559      this.network.add(t);
3560      return t;
3561    }
3562
3563    public InsurancePlan addNetwork(Reference t) { //3
3564      if (t == null)
3565        return this;
3566      if (this.network == null)
3567        this.network = new ArrayList<Reference>();
3568      this.network.add(t);
3569      return this;
3570    }
3571
3572    /**
3573     * @return The first repetition of repeating field {@link #network}, creating it if it does not already exist {3}
3574     */
3575    public Reference getNetworkFirstRep() { 
3576      if (getNetwork().isEmpty()) {
3577        addNetwork();
3578      }
3579      return getNetwork().get(0);
3580    }
3581
3582    /**
3583     * @return {@link #coverage} (Details about the coverage offered by the insurance product.)
3584     */
3585    public List<InsurancePlanCoverageComponent> getCoverage() { 
3586      if (this.coverage == null)
3587        this.coverage = new ArrayList<InsurancePlanCoverageComponent>();
3588      return this.coverage;
3589    }
3590
3591    /**
3592     * @return Returns a reference to <code>this</code> for easy method chaining
3593     */
3594    public InsurancePlan setCoverage(List<InsurancePlanCoverageComponent> theCoverage) { 
3595      this.coverage = theCoverage;
3596      return this;
3597    }
3598
3599    public boolean hasCoverage() { 
3600      if (this.coverage == null)
3601        return false;
3602      for (InsurancePlanCoverageComponent item : this.coverage)
3603        if (!item.isEmpty())
3604          return true;
3605      return false;
3606    }
3607
3608    public InsurancePlanCoverageComponent addCoverage() { //3
3609      InsurancePlanCoverageComponent t = new InsurancePlanCoverageComponent();
3610      if (this.coverage == null)
3611        this.coverage = new ArrayList<InsurancePlanCoverageComponent>();
3612      this.coverage.add(t);
3613      return t;
3614    }
3615
3616    public InsurancePlan addCoverage(InsurancePlanCoverageComponent t) { //3
3617      if (t == null)
3618        return this;
3619      if (this.coverage == null)
3620        this.coverage = new ArrayList<InsurancePlanCoverageComponent>();
3621      this.coverage.add(t);
3622      return this;
3623    }
3624
3625    /**
3626     * @return The first repetition of repeating field {@link #coverage}, creating it if it does not already exist {3}
3627     */
3628    public InsurancePlanCoverageComponent getCoverageFirstRep() { 
3629      if (getCoverage().isEmpty()) {
3630        addCoverage();
3631      }
3632      return getCoverage().get(0);
3633    }
3634
3635    /**
3636     * @return {@link #plan} (Details about an insurance plan.)
3637     */
3638    public List<InsurancePlanPlanComponent> getPlan() { 
3639      if (this.plan == null)
3640        this.plan = new ArrayList<InsurancePlanPlanComponent>();
3641      return this.plan;
3642    }
3643
3644    /**
3645     * @return Returns a reference to <code>this</code> for easy method chaining
3646     */
3647    public InsurancePlan setPlan(List<InsurancePlanPlanComponent> thePlan) { 
3648      this.plan = thePlan;
3649      return this;
3650    }
3651
3652    public boolean hasPlan() { 
3653      if (this.plan == null)
3654        return false;
3655      for (InsurancePlanPlanComponent item : this.plan)
3656        if (!item.isEmpty())
3657          return true;
3658      return false;
3659    }
3660
3661    public InsurancePlanPlanComponent addPlan() { //3
3662      InsurancePlanPlanComponent t = new InsurancePlanPlanComponent();
3663      if (this.plan == null)
3664        this.plan = new ArrayList<InsurancePlanPlanComponent>();
3665      this.plan.add(t);
3666      return t;
3667    }
3668
3669    public InsurancePlan addPlan(InsurancePlanPlanComponent t) { //3
3670      if (t == null)
3671        return this;
3672      if (this.plan == null)
3673        this.plan = new ArrayList<InsurancePlanPlanComponent>();
3674      this.plan.add(t);
3675      return this;
3676    }
3677
3678    /**
3679     * @return The first repetition of repeating field {@link #plan}, creating it if it does not already exist {3}
3680     */
3681    public InsurancePlanPlanComponent getPlanFirstRep() { 
3682      if (getPlan().isEmpty()) {
3683        addPlan();
3684      }
3685      return getPlan().get(0);
3686    }
3687
3688      protected void listChildren(List<Property> children) {
3689        super.listChildren(children);
3690        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this health insurance product which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier));
3691        children.add(new Property("status", "code", "The current state of the health insurance product.", 0, 1, status));
3692        children.add(new Property("type", "CodeableConcept", "The kind of health insurance product.", 0, java.lang.Integer.MAX_VALUE, type));
3693        children.add(new Property("name", "string", "Official name of the health insurance product as designated by the owner.", 0, 1, name));
3694        children.add(new Property("alias", "string", "A list of alternate names that the product is known as, or was known as in the past.", 0, java.lang.Integer.MAX_VALUE, alias));
3695        children.add(new Property("period", "Period", "The period of time that the health insurance product is available.", 0, 1, period));
3696        children.add(new Property("ownedBy", "Reference(Organization)", "The entity that is providing  the health insurance product and underwriting the risk.  This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as 'payers'.", 0, 1, ownedBy));
3697        children.add(new Property("administeredBy", "Reference(Organization)", "An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner.", 0, 1, administeredBy));
3698        children.add(new Property("coverageArea", "Reference(Location)", "The geographic region in which a health insurance product's benefits apply.", 0, java.lang.Integer.MAX_VALUE, coverageArea));
3699        children.add(new Property("contact", "", "The contact for the health insurance product for a certain purpose.", 0, java.lang.Integer.MAX_VALUE, contact));
3700        children.add(new Property("endpoint", "Reference(Endpoint)", "The technical endpoints providing access to services operated for the health insurance product.", 0, java.lang.Integer.MAX_VALUE, endpoint));
3701        children.add(new Property("network", "Reference(Organization)", "Reference to the network included in the health insurance product.", 0, java.lang.Integer.MAX_VALUE, network));
3702        children.add(new Property("coverage", "", "Details about the coverage offered by the insurance product.", 0, java.lang.Integer.MAX_VALUE, coverage));
3703        children.add(new Property("plan", "", "Details about an insurance plan.", 0, java.lang.Integer.MAX_VALUE, plan));
3704      }
3705
3706      @Override
3707      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3708        switch (_hash) {
3709        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this health insurance product which remain constant as the resource is updated and propagates from server to server.", 0, java.lang.Integer.MAX_VALUE, identifier);
3710        case -892481550: /*status*/  return new Property("status", "code", "The current state of the health insurance product.", 0, 1, status);
3711        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The kind of health insurance product.", 0, java.lang.Integer.MAX_VALUE, type);
3712        case 3373707: /*name*/  return new Property("name", "string", "Official name of the health insurance product as designated by the owner.", 0, 1, name);
3713        case 92902992: /*alias*/  return new Property("alias", "string", "A list of alternate names that the product is known as, or was known as in the past.", 0, java.lang.Integer.MAX_VALUE, alias);
3714        case -991726143: /*period*/  return new Property("period", "Period", "The period of time that the health insurance product is available.", 0, 1, period);
3715        case -1054743076: /*ownedBy*/  return new Property("ownedBy", "Reference(Organization)", "The entity that is providing  the health insurance product and underwriting the risk.  This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as 'payers'.", 0, 1, ownedBy);
3716        case 898770462: /*administeredBy*/  return new Property("administeredBy", "Reference(Organization)", "An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner.", 0, 1, administeredBy);
3717        case -1532328299: /*coverageArea*/  return new Property("coverageArea", "Reference(Location)", "The geographic region in which a health insurance product's benefits apply.", 0, java.lang.Integer.MAX_VALUE, coverageArea);
3718        case 951526432: /*contact*/  return new Property("contact", "", "The contact for the health insurance product for a certain purpose.", 0, java.lang.Integer.MAX_VALUE, contact);
3719        case 1741102485: /*endpoint*/  return new Property("endpoint", "Reference(Endpoint)", "The technical endpoints providing access to services operated for the health insurance product.", 0, java.lang.Integer.MAX_VALUE, endpoint);
3720        case 1843485230: /*network*/  return new Property("network", "Reference(Organization)", "Reference to the network included in the health insurance product.", 0, java.lang.Integer.MAX_VALUE, network);
3721        case -351767064: /*coverage*/  return new Property("coverage", "", "Details about the coverage offered by the insurance product.", 0, java.lang.Integer.MAX_VALUE, coverage);
3722        case 3443497: /*plan*/  return new Property("plan", "", "Details about an insurance plan.", 0, java.lang.Integer.MAX_VALUE, plan);
3723        default: return super.getNamedProperty(_hash, _name, _checkValid);
3724        }
3725
3726      }
3727
3728      @Override
3729      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3730        switch (hash) {
3731        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3732        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PublicationStatus>
3733        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
3734        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
3735        case 92902992: /*alias*/ return this.alias == null ? new Base[0] : this.alias.toArray(new Base[this.alias.size()]); // StringType
3736        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
3737        case -1054743076: /*ownedBy*/ return this.ownedBy == null ? new Base[0] : new Base[] {this.ownedBy}; // Reference
3738        case 898770462: /*administeredBy*/ return this.administeredBy == null ? new Base[0] : new Base[] {this.administeredBy}; // Reference
3739        case -1532328299: /*coverageArea*/ return this.coverageArea == null ? new Base[0] : this.coverageArea.toArray(new Base[this.coverageArea.size()]); // Reference
3740        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // InsurancePlanContactComponent
3741        case 1741102485: /*endpoint*/ return this.endpoint == null ? new Base[0] : this.endpoint.toArray(new Base[this.endpoint.size()]); // Reference
3742        case 1843485230: /*network*/ return this.network == null ? new Base[0] : this.network.toArray(new Base[this.network.size()]); // Reference
3743        case -351767064: /*coverage*/ return this.coverage == null ? new Base[0] : this.coverage.toArray(new Base[this.coverage.size()]); // InsurancePlanCoverageComponent
3744        case 3443497: /*plan*/ return this.plan == null ? new Base[0] : this.plan.toArray(new Base[this.plan.size()]); // InsurancePlanPlanComponent
3745        default: return super.getProperty(hash, name, checkValid);
3746        }
3747
3748      }
3749
3750      @Override
3751      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3752        switch (hash) {
3753        case -1618432855: // identifier
3754          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3755          return value;
3756        case -892481550: // status
3757          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3758          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3759          return value;
3760        case 3575610: // type
3761          this.getType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3762          return value;
3763        case 3373707: // name
3764          this.name = TypeConvertor.castToString(value); // StringType
3765          return value;
3766        case 92902992: // alias
3767          this.getAlias().add(TypeConvertor.castToString(value)); // StringType
3768          return value;
3769        case -991726143: // period
3770          this.period = TypeConvertor.castToPeriod(value); // Period
3771          return value;
3772        case -1054743076: // ownedBy
3773          this.ownedBy = TypeConvertor.castToReference(value); // Reference
3774          return value;
3775        case 898770462: // administeredBy
3776          this.administeredBy = TypeConvertor.castToReference(value); // Reference
3777          return value;
3778        case -1532328299: // coverageArea
3779          this.getCoverageArea().add(TypeConvertor.castToReference(value)); // Reference
3780          return value;
3781        case 951526432: // contact
3782          this.getContact().add((InsurancePlanContactComponent) value); // InsurancePlanContactComponent
3783          return value;
3784        case 1741102485: // endpoint
3785          this.getEndpoint().add(TypeConvertor.castToReference(value)); // Reference
3786          return value;
3787        case 1843485230: // network
3788          this.getNetwork().add(TypeConvertor.castToReference(value)); // Reference
3789          return value;
3790        case -351767064: // coverage
3791          this.getCoverage().add((InsurancePlanCoverageComponent) value); // InsurancePlanCoverageComponent
3792          return value;
3793        case 3443497: // plan
3794          this.getPlan().add((InsurancePlanPlanComponent) value); // InsurancePlanPlanComponent
3795          return value;
3796        default: return super.setProperty(hash, name, value);
3797        }
3798
3799      }
3800
3801      @Override
3802      public Base setProperty(String name, Base value) throws FHIRException {
3803        if (name.equals("identifier")) {
3804          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3805        } else if (name.equals("status")) {
3806          value = new PublicationStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
3807          this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3808        } else if (name.equals("type")) {
3809          this.getType().add(TypeConvertor.castToCodeableConcept(value));
3810        } else if (name.equals("name")) {
3811          this.name = TypeConvertor.castToString(value); // StringType
3812        } else if (name.equals("alias")) {
3813          this.getAlias().add(TypeConvertor.castToString(value));
3814        } else if (name.equals("period")) {
3815          this.period = TypeConvertor.castToPeriod(value); // Period
3816        } else if (name.equals("ownedBy")) {
3817          this.ownedBy = TypeConvertor.castToReference(value); // Reference
3818        } else if (name.equals("administeredBy")) {
3819          this.administeredBy = TypeConvertor.castToReference(value); // Reference
3820        } else if (name.equals("coverageArea")) {
3821          this.getCoverageArea().add(TypeConvertor.castToReference(value));
3822        } else if (name.equals("contact")) {
3823          this.getContact().add((InsurancePlanContactComponent) value);
3824        } else if (name.equals("endpoint")) {
3825          this.getEndpoint().add(TypeConvertor.castToReference(value));
3826        } else if (name.equals("network")) {
3827          this.getNetwork().add(TypeConvertor.castToReference(value));
3828        } else if (name.equals("coverage")) {
3829          this.getCoverage().add((InsurancePlanCoverageComponent) value);
3830        } else if (name.equals("plan")) {
3831          this.getPlan().add((InsurancePlanPlanComponent) value);
3832        } else
3833          return super.setProperty(name, value);
3834        return value;
3835      }
3836
3837      @Override
3838      public Base makeProperty(int hash, String name) throws FHIRException {
3839        switch (hash) {
3840        case -1618432855:  return addIdentifier(); 
3841        case -892481550:  return getStatusElement();
3842        case 3575610:  return addType(); 
3843        case 3373707:  return getNameElement();
3844        case 92902992:  return addAliasElement();
3845        case -991726143:  return getPeriod();
3846        case -1054743076:  return getOwnedBy();
3847        case 898770462:  return getAdministeredBy();
3848        case -1532328299:  return addCoverageArea(); 
3849        case 951526432:  return addContact(); 
3850        case 1741102485:  return addEndpoint(); 
3851        case 1843485230:  return addNetwork(); 
3852        case -351767064:  return addCoverage(); 
3853        case 3443497:  return addPlan(); 
3854        default: return super.makeProperty(hash, name);
3855        }
3856
3857      }
3858
3859      @Override
3860      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3861        switch (hash) {
3862        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3863        case -892481550: /*status*/ return new String[] {"code"};
3864        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3865        case 3373707: /*name*/ return new String[] {"string"};
3866        case 92902992: /*alias*/ return new String[] {"string"};
3867        case -991726143: /*period*/ return new String[] {"Period"};
3868        case -1054743076: /*ownedBy*/ return new String[] {"Reference"};
3869        case 898770462: /*administeredBy*/ return new String[] {"Reference"};
3870        case -1532328299: /*coverageArea*/ return new String[] {"Reference"};
3871        case 951526432: /*contact*/ return new String[] {};
3872        case 1741102485: /*endpoint*/ return new String[] {"Reference"};
3873        case 1843485230: /*network*/ return new String[] {"Reference"};
3874        case -351767064: /*coverage*/ return new String[] {};
3875        case 3443497: /*plan*/ return new String[] {};
3876        default: return super.getTypesForProperty(hash, name);
3877        }
3878
3879      }
3880
3881      @Override
3882      public Base addChild(String name) throws FHIRException {
3883        if (name.equals("identifier")) {
3884          return addIdentifier();
3885        }
3886        else if (name.equals("status")) {
3887          throw new FHIRException("Cannot call addChild on a primitive type InsurancePlan.status");
3888        }
3889        else if (name.equals("type")) {
3890          return addType();
3891        }
3892        else if (name.equals("name")) {
3893          throw new FHIRException("Cannot call addChild on a primitive type InsurancePlan.name");
3894        }
3895        else if (name.equals("alias")) {
3896          throw new FHIRException("Cannot call addChild on a primitive type InsurancePlan.alias");
3897        }
3898        else if (name.equals("period")) {
3899          this.period = new Period();
3900          return this.period;
3901        }
3902        else if (name.equals("ownedBy")) {
3903          this.ownedBy = new Reference();
3904          return this.ownedBy;
3905        }
3906        else if (name.equals("administeredBy")) {
3907          this.administeredBy = new Reference();
3908          return this.administeredBy;
3909        }
3910        else if (name.equals("coverageArea")) {
3911          return addCoverageArea();
3912        }
3913        else if (name.equals("contact")) {
3914          return addContact();
3915        }
3916        else if (name.equals("endpoint")) {
3917          return addEndpoint();
3918        }
3919        else if (name.equals("network")) {
3920          return addNetwork();
3921        }
3922        else if (name.equals("coverage")) {
3923          return addCoverage();
3924        }
3925        else if (name.equals("plan")) {
3926          return addPlan();
3927        }
3928        else
3929          return super.addChild(name);
3930      }
3931
3932  public String fhirType() {
3933    return "InsurancePlan";
3934
3935  }
3936
3937      public InsurancePlan copy() {
3938        InsurancePlan dst = new InsurancePlan();
3939        copyValues(dst);
3940        return dst;
3941      }
3942
3943      public void copyValues(InsurancePlan dst) {
3944        super.copyValues(dst);
3945        if (identifier != null) {
3946          dst.identifier = new ArrayList<Identifier>();
3947          for (Identifier i : identifier)
3948            dst.identifier.add(i.copy());
3949        };
3950        dst.status = status == null ? null : status.copy();
3951        if (type != null) {
3952          dst.type = new ArrayList<CodeableConcept>();
3953          for (CodeableConcept i : type)
3954            dst.type.add(i.copy());
3955        };
3956        dst.name = name == null ? null : name.copy();
3957        if (alias != null) {
3958          dst.alias = new ArrayList<StringType>();
3959          for (StringType i : alias)
3960            dst.alias.add(i.copy());
3961        };
3962        dst.period = period == null ? null : period.copy();
3963        dst.ownedBy = ownedBy == null ? null : ownedBy.copy();
3964        dst.administeredBy = administeredBy == null ? null : administeredBy.copy();
3965        if (coverageArea != null) {
3966          dst.coverageArea = new ArrayList<Reference>();
3967          for (Reference i : coverageArea)
3968            dst.coverageArea.add(i.copy());
3969        };
3970        if (contact != null) {
3971          dst.contact = new ArrayList<InsurancePlanContactComponent>();
3972          for (InsurancePlanContactComponent i : contact)
3973            dst.contact.add(i.copy());
3974        };
3975        if (endpoint != null) {
3976          dst.endpoint = new ArrayList<Reference>();
3977          for (Reference i : endpoint)
3978            dst.endpoint.add(i.copy());
3979        };
3980        if (network != null) {
3981          dst.network = new ArrayList<Reference>();
3982          for (Reference i : network)
3983            dst.network.add(i.copy());
3984        };
3985        if (coverage != null) {
3986          dst.coverage = new ArrayList<InsurancePlanCoverageComponent>();
3987          for (InsurancePlanCoverageComponent i : coverage)
3988            dst.coverage.add(i.copy());
3989        };
3990        if (plan != null) {
3991          dst.plan = new ArrayList<InsurancePlanPlanComponent>();
3992          for (InsurancePlanPlanComponent i : plan)
3993            dst.plan.add(i.copy());
3994        };
3995      }
3996
3997      protected InsurancePlan typedCopy() {
3998        return copy();
3999      }
4000
4001      @Override
4002      public boolean equalsDeep(Base other_) {
4003        if (!super.equalsDeep(other_))
4004          return false;
4005        if (!(other_ instanceof InsurancePlan))
4006          return false;
4007        InsurancePlan o = (InsurancePlan) other_;
4008        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(type, o.type, true)
4009           && compareDeep(name, o.name, true) && compareDeep(alias, o.alias, true) && compareDeep(period, o.period, true)
4010           && compareDeep(ownedBy, o.ownedBy, true) && compareDeep(administeredBy, o.administeredBy, true)
4011           && compareDeep(coverageArea, o.coverageArea, true) && compareDeep(contact, o.contact, true) && compareDeep(endpoint, o.endpoint, true)
4012           && compareDeep(network, o.network, true) && compareDeep(coverage, o.coverage, true) && compareDeep(plan, o.plan, true)
4013          ;
4014      }
4015
4016      @Override
4017      public boolean equalsShallow(Base other_) {
4018        if (!super.equalsShallow(other_))
4019          return false;
4020        if (!(other_ instanceof InsurancePlan))
4021          return false;
4022        InsurancePlan o = (InsurancePlan) other_;
4023        return compareValues(status, o.status, true) && compareValues(name, o.name, true) && compareValues(alias, o.alias, true)
4024          ;
4025      }
4026
4027      public boolean isEmpty() {
4028        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, type
4029          , name, alias, period, ownedBy, administeredBy, coverageArea, contact, endpoint
4030          , network, coverage, plan);
4031      }
4032
4033  @Override
4034  public ResourceType getResourceType() {
4035    return ResourceType.InsurancePlan;
4036   }
4037
4038 /**
4039   * Search parameter: <b>address-city</b>
4040   * <p>
4041   * Description: <b>A city specified in an address</b><br>
4042   * Type: <b>string</b><br>
4043   * Path: <b>InsurancePlan.contact.address.city</b><br>
4044   * </p>
4045   */
4046  @SearchParamDefinition(name="address-city", path="InsurancePlan.contact.address.city", description="A city specified in an address", type="string" )
4047  public static final String SP_ADDRESS_CITY = "address-city";
4048 /**
4049   * <b>Fluent Client</b> search parameter constant for <b>address-city</b>
4050   * <p>
4051   * Description: <b>A city specified in an address</b><br>
4052   * Type: <b>string</b><br>
4053   * Path: <b>InsurancePlan.contact.address.city</b><br>
4054   * </p>
4055   */
4056  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_CITY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_CITY);
4057
4058 /**
4059   * Search parameter: <b>address-country</b>
4060   * <p>
4061   * Description: <b>A country specified in an address</b><br>
4062   * Type: <b>string</b><br>
4063   * Path: <b>InsurancePlan.contact.address.country</b><br>
4064   * </p>
4065   */
4066  @SearchParamDefinition(name="address-country", path="InsurancePlan.contact.address.country", description="A country specified in an address", type="string" )
4067  public static final String SP_ADDRESS_COUNTRY = "address-country";
4068 /**
4069   * <b>Fluent Client</b> search parameter constant for <b>address-country</b>
4070   * <p>
4071   * Description: <b>A country specified in an address</b><br>
4072   * Type: <b>string</b><br>
4073   * Path: <b>InsurancePlan.contact.address.country</b><br>
4074   * </p>
4075   */
4076  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_COUNTRY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_COUNTRY);
4077
4078 /**
4079   * Search parameter: <b>address-postalcode</b>
4080   * <p>
4081   * Description: <b>A postal code specified in an address</b><br>
4082   * Type: <b>string</b><br>
4083   * Path: <b>InsurancePlan.contact.address.postalCode</b><br>
4084   * </p>
4085   */
4086  @SearchParamDefinition(name="address-postalcode", path="InsurancePlan.contact.address.postalCode", description="A postal code specified in an address", type="string" )
4087  public static final String SP_ADDRESS_POSTALCODE = "address-postalcode";
4088 /**
4089   * <b>Fluent Client</b> search parameter constant for <b>address-postalcode</b>
4090   * <p>
4091   * Description: <b>A postal code specified in an address</b><br>
4092   * Type: <b>string</b><br>
4093   * Path: <b>InsurancePlan.contact.address.postalCode</b><br>
4094   * </p>
4095   */
4096  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_POSTALCODE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_POSTALCODE);
4097
4098 /**
4099   * Search parameter: <b>address-state</b>
4100   * <p>
4101   * Description: <b>A state specified in an address</b><br>
4102   * Type: <b>string</b><br>
4103   * Path: <b>InsurancePlan.contact.address.state</b><br>
4104   * </p>
4105   */
4106  @SearchParamDefinition(name="address-state", path="InsurancePlan.contact.address.state", description="A state specified in an address", type="string" )
4107  public static final String SP_ADDRESS_STATE = "address-state";
4108 /**
4109   * <b>Fluent Client</b> search parameter constant for <b>address-state</b>
4110   * <p>
4111   * Description: <b>A state specified in an address</b><br>
4112   * Type: <b>string</b><br>
4113   * Path: <b>InsurancePlan.contact.address.state</b><br>
4114   * </p>
4115   */
4116  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_STATE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_STATE);
4117
4118 /**
4119   * Search parameter: <b>address-use</b>
4120   * <p>
4121   * Description: <b>A use code specified in an address</b><br>
4122   * Type: <b>token</b><br>
4123   * Path: <b>InsurancePlan.contact.address.use</b><br>
4124   * </p>
4125   */
4126  @SearchParamDefinition(name="address-use", path="InsurancePlan.contact.address.use", description="A use code specified in an address", type="token" )
4127  public static final String SP_ADDRESS_USE = "address-use";
4128 /**
4129   * <b>Fluent Client</b> search parameter constant for <b>address-use</b>
4130   * <p>
4131   * Description: <b>A use code specified in an address</b><br>
4132   * Type: <b>token</b><br>
4133   * Path: <b>InsurancePlan.contact.address.use</b><br>
4134   * </p>
4135   */
4136  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDRESS_USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDRESS_USE);
4137
4138 /**
4139   * Search parameter: <b>address</b>
4140   * <p>
4141   * Description: <b>A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text</b><br>
4142   * Type: <b>string</b><br>
4143   * Path: <b>InsurancePlan.contact.address</b><br>
4144   * </p>
4145   */
4146  @SearchParamDefinition(name="address", path="InsurancePlan.contact.address", description="A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text", type="string" )
4147  public static final String SP_ADDRESS = "address";
4148 /**
4149   * <b>Fluent Client</b> search parameter constant for <b>address</b>
4150   * <p>
4151   * Description: <b>A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text</b><br>
4152   * Type: <b>string</b><br>
4153   * Path: <b>InsurancePlan.contact.address</b><br>
4154   * </p>
4155   */
4156  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS);
4157
4158 /**
4159   * Search parameter: <b>administered-by</b>
4160   * <p>
4161   * Description: <b>Product administrator</b><br>
4162   * Type: <b>reference</b><br>
4163   * Path: <b>InsurancePlan.administeredBy</b><br>
4164   * </p>
4165   */
4166  @SearchParamDefinition(name="administered-by", path="InsurancePlan.administeredBy", description="Product administrator", type="reference", target={Organization.class } )
4167  public static final String SP_ADMINISTERED_BY = "administered-by";
4168 /**
4169   * <b>Fluent Client</b> search parameter constant for <b>administered-by</b>
4170   * <p>
4171   * Description: <b>Product administrator</b><br>
4172   * Type: <b>reference</b><br>
4173   * Path: <b>InsurancePlan.administeredBy</b><br>
4174   * </p>
4175   */
4176  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ADMINISTERED_BY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ADMINISTERED_BY);
4177
4178/**
4179   * Constant for fluent queries to be used to add include statements. Specifies
4180   * the path value of "<b>InsurancePlan:administered-by</b>".
4181   */
4182  public static final ca.uhn.fhir.model.api.Include INCLUDE_ADMINISTERED_BY = new ca.uhn.fhir.model.api.Include("InsurancePlan:administered-by").toLocked();
4183
4184 /**
4185   * Search parameter: <b>endpoint</b>
4186   * <p>
4187   * Description: <b>Technical endpoint</b><br>
4188   * Type: <b>reference</b><br>
4189   * Path: <b>InsurancePlan.endpoint</b><br>
4190   * </p>
4191   */
4192  @SearchParamDefinition(name="endpoint", path="InsurancePlan.endpoint", description="Technical endpoint", type="reference", target={Endpoint.class } )
4193  public static final String SP_ENDPOINT = "endpoint";
4194 /**
4195   * <b>Fluent Client</b> search parameter constant for <b>endpoint</b>
4196   * <p>
4197   * Description: <b>Technical endpoint</b><br>
4198   * Type: <b>reference</b><br>
4199   * Path: <b>InsurancePlan.endpoint</b><br>
4200   * </p>
4201   */
4202  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENDPOINT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENDPOINT);
4203
4204/**
4205   * Constant for fluent queries to be used to add include statements. Specifies
4206   * the path value of "<b>InsurancePlan:endpoint</b>".
4207   */
4208  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENDPOINT = new ca.uhn.fhir.model.api.Include("InsurancePlan:endpoint").toLocked();
4209
4210 /**
4211   * Search parameter: <b>identifier</b>
4212   * <p>
4213   * Description: <b>Any identifier for the organization (not the accreditation issuer's identifier)</b><br>
4214   * Type: <b>token</b><br>
4215   * Path: <b>InsurancePlan.identifier</b><br>
4216   * </p>
4217   */
4218  @SearchParamDefinition(name="identifier", path="InsurancePlan.identifier", description="Any identifier for the organization (not the accreditation issuer's identifier)", type="token" )
4219  public static final String SP_IDENTIFIER = "identifier";
4220 /**
4221   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
4222   * <p>
4223   * Description: <b>Any identifier for the organization (not the accreditation issuer's identifier)</b><br>
4224   * Type: <b>token</b><br>
4225   * Path: <b>InsurancePlan.identifier</b><br>
4226   * </p>
4227   */
4228  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
4229
4230 /**
4231   * Search parameter: <b>name</b>
4232   * <p>
4233   * Description: <b>A portion of the organization's name or alias</b><br>
4234   * Type: <b>string</b><br>
4235   * Path: <b>InsurancePlan.name | InsurancePlan.alias</b><br>
4236   * </p>
4237   */
4238  @SearchParamDefinition(name="name", path="InsurancePlan.name | InsurancePlan.alias", description="A portion of the organization's name or alias", type="string" )
4239  public static final String SP_NAME = "name";
4240 /**
4241   * <b>Fluent Client</b> search parameter constant for <b>name</b>
4242   * <p>
4243   * Description: <b>A portion of the organization's name or alias</b><br>
4244   * Type: <b>string</b><br>
4245   * Path: <b>InsurancePlan.name | InsurancePlan.alias</b><br>
4246   * </p>
4247   */
4248  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
4249
4250 /**
4251   * Search parameter: <b>owned-by</b>
4252   * <p>
4253   * Description: <b>An organization of which this organization forms a part</b><br>
4254   * Type: <b>reference</b><br>
4255   * Path: <b>InsurancePlan.ownedBy</b><br>
4256   * </p>
4257   */
4258  @SearchParamDefinition(name="owned-by", path="InsurancePlan.ownedBy", description="An organization of which this organization forms a part", type="reference", target={Organization.class } )
4259  public static final String SP_OWNED_BY = "owned-by";
4260 /**
4261   * <b>Fluent Client</b> search parameter constant for <b>owned-by</b>
4262   * <p>
4263   * Description: <b>An organization of which this organization forms a part</b><br>
4264   * Type: <b>reference</b><br>
4265   * Path: <b>InsurancePlan.ownedBy</b><br>
4266   * </p>
4267   */
4268  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam OWNED_BY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_OWNED_BY);
4269
4270/**
4271   * Constant for fluent queries to be used to add include statements. Specifies
4272   * the path value of "<b>InsurancePlan:owned-by</b>".
4273   */
4274  public static final ca.uhn.fhir.model.api.Include INCLUDE_OWNED_BY = new ca.uhn.fhir.model.api.Include("InsurancePlan:owned-by").toLocked();
4275
4276 /**
4277   * Search parameter: <b>phonetic</b>
4278   * <p>
4279   * Description: <b>A portion of the organization's name using some kind of phonetic matching algorithm</b><br>
4280   * Type: <b>string</b><br>
4281   * Path: <b>InsurancePlan.name</b><br>
4282   * </p>
4283   */
4284  @SearchParamDefinition(name="phonetic", path="InsurancePlan.name", description="A portion of the organization's name using some kind of phonetic matching algorithm", type="string" )
4285  public static final String SP_PHONETIC = "phonetic";
4286 /**
4287   * <b>Fluent Client</b> search parameter constant for <b>phonetic</b>
4288   * <p>
4289   * Description: <b>A portion of the organization's name using some kind of phonetic matching algorithm</b><br>
4290   * Type: <b>string</b><br>
4291   * Path: <b>InsurancePlan.name</b><br>
4292   * </p>
4293   */
4294  public static final ca.uhn.fhir.rest.gclient.StringClientParam PHONETIC = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PHONETIC);
4295
4296 /**
4297   * Search parameter: <b>status</b>
4298   * <p>
4299   * Description: <b>Is the Organization record active</b><br>
4300   * Type: <b>token</b><br>
4301   * Path: <b>InsurancePlan.status</b><br>
4302   * </p>
4303   */
4304  @SearchParamDefinition(name="status", path="InsurancePlan.status", description="Is the Organization record active", type="token" )
4305  public static final String SP_STATUS = "status";
4306 /**
4307   * <b>Fluent Client</b> search parameter constant for <b>status</b>
4308   * <p>
4309   * Description: <b>Is the Organization record active</b><br>
4310   * Type: <b>token</b><br>
4311   * Path: <b>InsurancePlan.status</b><br>
4312   * </p>
4313   */
4314  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
4315
4316 /**
4317   * Search parameter: <b>type</b>
4318   * <p>
4319   * Description: <b>A code for the type of organization</b><br>
4320   * Type: <b>token</b><br>
4321   * Path: <b>InsurancePlan.type</b><br>
4322   * </p>
4323   */
4324  @SearchParamDefinition(name="type", path="InsurancePlan.type", description="A code for the type of organization", type="token" )
4325  public static final String SP_TYPE = "type";
4326 /**
4327   * <b>Fluent Client</b> search parameter constant for <b>type</b>
4328   * <p>
4329   * Description: <b>A code for the type of organization</b><br>
4330   * Type: <b>token</b><br>
4331   * Path: <b>InsurancePlan.type</b><br>
4332   * </p>
4333   */
4334  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
4335
4336
4337}
4338