001package org.hl7.fhir.dstu3.model;
002
003import java.math.BigDecimal;
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.exceptions.FHIRFormatError;
041import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
042import org.hl7.fhir.utilities.Utilities;
043
044import ca.uhn.fhir.model.api.annotation.Block;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.Description;
047import ca.uhn.fhir.model.api.annotation.ResourceDef;
048import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
049/**
050 * A provider issued list of services and products provided, or to be provided, to a patient which is provided to an insurer for payment recovery.
051 */
052@ResourceDef(name="Claim", profile="http://hl7.org/fhir/Profile/Claim")
053public class Claim extends DomainResource {
054
055    public enum ClaimStatus {
056        /**
057         * The instance is currently in-force.
058         */
059        ACTIVE, 
060        /**
061         * The instance is withdrawn, rescinded or reversed.
062         */
063        CANCELLED, 
064        /**
065         * A new instance the contents of which is not complete.
066         */
067        DRAFT, 
068        /**
069         * The instance was entered in error.
070         */
071        ENTEREDINERROR, 
072        /**
073         * added to help the parsers with the generic types
074         */
075        NULL;
076        public static ClaimStatus fromCode(String codeString) throws FHIRException {
077            if (codeString == null || "".equals(codeString))
078                return null;
079        if ("active".equals(codeString))
080          return ACTIVE;
081        if ("cancelled".equals(codeString))
082          return CANCELLED;
083        if ("draft".equals(codeString))
084          return DRAFT;
085        if ("entered-in-error".equals(codeString))
086          return ENTEREDINERROR;
087        if (Configuration.isAcceptInvalidEnums())
088          return null;
089        else
090          throw new FHIRException("Unknown ClaimStatus code '"+codeString+"'");
091        }
092        public String toCode() {
093          switch (this) {
094            case ACTIVE: return "active";
095            case CANCELLED: return "cancelled";
096            case DRAFT: return "draft";
097            case ENTEREDINERROR: return "entered-in-error";
098            case NULL: return null;
099            default: return "?";
100          }
101        }
102        public String getSystem() {
103          switch (this) {
104            case ACTIVE: return "http://hl7.org/fhir/fm-status";
105            case CANCELLED: return "http://hl7.org/fhir/fm-status";
106            case DRAFT: return "http://hl7.org/fhir/fm-status";
107            case ENTEREDINERROR: return "http://hl7.org/fhir/fm-status";
108            case NULL: return null;
109            default: return "?";
110          }
111        }
112        public String getDefinition() {
113          switch (this) {
114            case ACTIVE: return "The instance is currently in-force.";
115            case CANCELLED: return "The instance is withdrawn, rescinded or reversed.";
116            case DRAFT: return "A new instance the contents of which is not complete.";
117            case ENTEREDINERROR: return "The instance was entered in error.";
118            case NULL: return null;
119            default: return "?";
120          }
121        }
122        public String getDisplay() {
123          switch (this) {
124            case ACTIVE: return "Active";
125            case CANCELLED: return "Cancelled";
126            case DRAFT: return "Draft";
127            case ENTEREDINERROR: return "Entered in Error";
128            case NULL: return null;
129            default: return "?";
130          }
131        }
132    }
133
134  public static class ClaimStatusEnumFactory implements EnumFactory<ClaimStatus> {
135    public ClaimStatus fromCode(String codeString) throws IllegalArgumentException {
136      if (codeString == null || "".equals(codeString))
137            if (codeString == null || "".equals(codeString))
138                return null;
139        if ("active".equals(codeString))
140          return ClaimStatus.ACTIVE;
141        if ("cancelled".equals(codeString))
142          return ClaimStatus.CANCELLED;
143        if ("draft".equals(codeString))
144          return ClaimStatus.DRAFT;
145        if ("entered-in-error".equals(codeString))
146          return ClaimStatus.ENTEREDINERROR;
147        throw new IllegalArgumentException("Unknown ClaimStatus code '"+codeString+"'");
148        }
149        public Enumeration<ClaimStatus> fromType(PrimitiveType<?> code) throws FHIRException {
150          if (code == null)
151            return null;
152          if (code.isEmpty())
153            return new Enumeration<ClaimStatus>(this);
154          String codeString = code.asStringValue();
155          if (codeString == null || "".equals(codeString))
156            return null;
157        if ("active".equals(codeString))
158          return new Enumeration<ClaimStatus>(this, ClaimStatus.ACTIVE);
159        if ("cancelled".equals(codeString))
160          return new Enumeration<ClaimStatus>(this, ClaimStatus.CANCELLED);
161        if ("draft".equals(codeString))
162          return new Enumeration<ClaimStatus>(this, ClaimStatus.DRAFT);
163        if ("entered-in-error".equals(codeString))
164          return new Enumeration<ClaimStatus>(this, ClaimStatus.ENTEREDINERROR);
165        throw new FHIRException("Unknown ClaimStatus code '"+codeString+"'");
166        }
167    public String toCode(ClaimStatus code) {
168       if (code == ClaimStatus.NULL)
169           return null;
170       if (code == ClaimStatus.ACTIVE)
171        return "active";
172      if (code == ClaimStatus.CANCELLED)
173        return "cancelled";
174      if (code == ClaimStatus.DRAFT)
175        return "draft";
176      if (code == ClaimStatus.ENTEREDINERROR)
177        return "entered-in-error";
178      return "?";
179   }
180    public String toSystem(ClaimStatus code) {
181      return code.getSystem();
182      }
183    }
184
185    public enum Use {
186        /**
187         * The treatment is complete and this represents a Claim for the services.
188         */
189        COMPLETE, 
190        /**
191         * The treatment is proposed and this represents a Pre-authorization for the services.
192         */
193        PROPOSED, 
194        /**
195         * The treatment is proposed and this represents a Pre-determination for the services.
196         */
197        EXPLORATORY, 
198        /**
199         * A locally defined or otherwise resolved status.
200         */
201        OTHER, 
202        /**
203         * added to help the parsers with the generic types
204         */
205        NULL;
206        public static Use fromCode(String codeString) throws FHIRException {
207            if (codeString == null || "".equals(codeString))
208                return null;
209        if ("complete".equals(codeString))
210          return COMPLETE;
211        if ("proposed".equals(codeString))
212          return PROPOSED;
213        if ("exploratory".equals(codeString))
214          return EXPLORATORY;
215        if ("other".equals(codeString))
216          return OTHER;
217        if (Configuration.isAcceptInvalidEnums())
218          return null;
219        else
220          throw new FHIRException("Unknown Use code '"+codeString+"'");
221        }
222        public String toCode() {
223          switch (this) {
224            case COMPLETE: return "complete";
225            case PROPOSED: return "proposed";
226            case EXPLORATORY: return "exploratory";
227            case OTHER: return "other";
228            case NULL: return null;
229            default: return "?";
230          }
231        }
232        public String getSystem() {
233          switch (this) {
234            case COMPLETE: return "http://hl7.org/fhir/claim-use";
235            case PROPOSED: return "http://hl7.org/fhir/claim-use";
236            case EXPLORATORY: return "http://hl7.org/fhir/claim-use";
237            case OTHER: return "http://hl7.org/fhir/claim-use";
238            case NULL: return null;
239            default: return "?";
240          }
241        }
242        public String getDefinition() {
243          switch (this) {
244            case COMPLETE: return "The treatment is complete and this represents a Claim for the services.";
245            case PROPOSED: return "The treatment is proposed and this represents a Pre-authorization for the services.";
246            case EXPLORATORY: return "The treatment is proposed and this represents a Pre-determination for the services.";
247            case OTHER: return "A locally defined or otherwise resolved status.";
248            case NULL: return null;
249            default: return "?";
250          }
251        }
252        public String getDisplay() {
253          switch (this) {
254            case COMPLETE: return "Complete";
255            case PROPOSED: return "Proposed";
256            case EXPLORATORY: return "Exploratory";
257            case OTHER: return "Other";
258            case NULL: return null;
259            default: return "?";
260          }
261        }
262    }
263
264  public static class UseEnumFactory implements EnumFactory<Use> {
265    public Use fromCode(String codeString) throws IllegalArgumentException {
266      if (codeString == null || "".equals(codeString))
267            if (codeString == null || "".equals(codeString))
268                return null;
269        if ("complete".equals(codeString))
270          return Use.COMPLETE;
271        if ("proposed".equals(codeString))
272          return Use.PROPOSED;
273        if ("exploratory".equals(codeString))
274          return Use.EXPLORATORY;
275        if ("other".equals(codeString))
276          return Use.OTHER;
277        throw new IllegalArgumentException("Unknown Use code '"+codeString+"'");
278        }
279        public Enumeration<Use> fromType(PrimitiveType<?> code) throws FHIRException {
280          if (code == null)
281            return null;
282          if (code.isEmpty())
283            return new Enumeration<Use>(this);
284          String codeString = code.asStringValue();
285          if (codeString == null || "".equals(codeString))
286            return null;
287        if ("complete".equals(codeString))
288          return new Enumeration<Use>(this, Use.COMPLETE);
289        if ("proposed".equals(codeString))
290          return new Enumeration<Use>(this, Use.PROPOSED);
291        if ("exploratory".equals(codeString))
292          return new Enumeration<Use>(this, Use.EXPLORATORY);
293        if ("other".equals(codeString))
294          return new Enumeration<Use>(this, Use.OTHER);
295        throw new FHIRException("Unknown Use code '"+codeString+"'");
296        }
297    public String toCode(Use code) {
298       if (code == Use.NULL)
299           return null;
300       if (code == Use.COMPLETE)
301        return "complete";
302      if (code == Use.PROPOSED)
303        return "proposed";
304      if (code == Use.EXPLORATORY)
305        return "exploratory";
306      if (code == Use.OTHER)
307        return "other";
308      return "?";
309   }
310    public String toSystem(Use code) {
311      return code.getSystem();
312      }
313    }
314
315    @Block()
316    public static class RelatedClaimComponent extends BackboneElement implements IBaseBackboneElement {
317        /**
318         * Other claims which are related to this claim such as prior claim versions or for related services.
319         */
320        @Child(name = "claim", type = {Claim.class}, order=1, min=0, max=1, modifier=false, summary=false)
321        @Description(shortDefinition="Reference to the related claim", formalDefinition="Other claims which are related to this claim such as prior claim versions or for related services." )
322        protected Reference claim;
323
324        /**
325         * The actual object that is the target of the reference (Other claims which are related to this claim such as prior claim versions or for related services.)
326         */
327        protected Claim claimTarget;
328
329        /**
330         * For example prior or umbrella.
331         */
332        @Child(name = "relationship", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
333        @Description(shortDefinition="How the reference claim is related", formalDefinition="For example prior or umbrella." )
334        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/related-claim-relationship")
335        protected CodeableConcept relationship;
336
337        /**
338         * An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # .
339         */
340        @Child(name = "reference", type = {Identifier.class}, order=3, min=0, max=1, modifier=false, summary=false)
341        @Description(shortDefinition="Related file or case reference", formalDefinition="An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # ." )
342        protected Identifier reference;
343
344        private static final long serialVersionUID = -379338905L;
345
346    /**
347     * Constructor
348     */
349      public RelatedClaimComponent() {
350        super();
351      }
352
353        /**
354         * @return {@link #claim} (Other claims which are related to this claim such as prior claim versions or for related services.)
355         */
356        public Reference getClaim() { 
357          if (this.claim == null)
358            if (Configuration.errorOnAutoCreate())
359              throw new Error("Attempt to auto-create RelatedClaimComponent.claim");
360            else if (Configuration.doAutoCreate())
361              this.claim = new Reference(); // cc
362          return this.claim;
363        }
364
365        public boolean hasClaim() { 
366          return this.claim != null && !this.claim.isEmpty();
367        }
368
369        /**
370         * @param value {@link #claim} (Other claims which are related to this claim such as prior claim versions or for related services.)
371         */
372        public RelatedClaimComponent setClaim(Reference value)  { 
373          this.claim = value;
374          return this;
375        }
376
377        /**
378         * @return {@link #claim} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Other claims which are related to this claim such as prior claim versions or for related services.)
379         */
380        public Claim getClaimTarget() { 
381          if (this.claimTarget == null)
382            if (Configuration.errorOnAutoCreate())
383              throw new Error("Attempt to auto-create RelatedClaimComponent.claim");
384            else if (Configuration.doAutoCreate())
385              this.claimTarget = new Claim(); // aa
386          return this.claimTarget;
387        }
388
389        /**
390         * @param value {@link #claim} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Other claims which are related to this claim such as prior claim versions or for related services.)
391         */
392        public RelatedClaimComponent setClaimTarget(Claim value) { 
393          this.claimTarget = value;
394          return this;
395        }
396
397        /**
398         * @return {@link #relationship} (For example prior or umbrella.)
399         */
400        public CodeableConcept getRelationship() { 
401          if (this.relationship == null)
402            if (Configuration.errorOnAutoCreate())
403              throw new Error("Attempt to auto-create RelatedClaimComponent.relationship");
404            else if (Configuration.doAutoCreate())
405              this.relationship = new CodeableConcept(); // cc
406          return this.relationship;
407        }
408
409        public boolean hasRelationship() { 
410          return this.relationship != null && !this.relationship.isEmpty();
411        }
412
413        /**
414         * @param value {@link #relationship} (For example prior or umbrella.)
415         */
416        public RelatedClaimComponent setRelationship(CodeableConcept value)  { 
417          this.relationship = value;
418          return this;
419        }
420
421        /**
422         * @return {@link #reference} (An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # .)
423         */
424        public Identifier getReference() { 
425          if (this.reference == null)
426            if (Configuration.errorOnAutoCreate())
427              throw new Error("Attempt to auto-create RelatedClaimComponent.reference");
428            else if (Configuration.doAutoCreate())
429              this.reference = new Identifier(); // cc
430          return this.reference;
431        }
432
433        public boolean hasReference() { 
434          return this.reference != null && !this.reference.isEmpty();
435        }
436
437        /**
438         * @param value {@link #reference} (An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # .)
439         */
440        public RelatedClaimComponent setReference(Identifier value)  { 
441          this.reference = value;
442          return this;
443        }
444
445        protected void listChildren(List<Property> children) {
446          super.listChildren(children);
447          children.add(new Property("claim", "Reference(Claim)", "Other claims which are related to this claim such as prior claim versions or for related services.", 0, 1, claim));
448          children.add(new Property("relationship", "CodeableConcept", "For example prior or umbrella.", 0, 1, relationship));
449          children.add(new Property("reference", "Identifier", "An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # .", 0, 1, reference));
450        }
451
452        @Override
453        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
454          switch (_hash) {
455          case 94742588: /*claim*/  return new Property("claim", "Reference(Claim)", "Other claims which are related to this claim such as prior claim versions or for related services.", 0, 1, claim);
456          case -261851592: /*relationship*/  return new Property("relationship", "CodeableConcept", "For example prior or umbrella.", 0, 1, relationship);
457          case -925155509: /*reference*/  return new Property("reference", "Identifier", "An alternate organizational reference to the case or file to which this particular claim pertains - eg Property/Casualy insurer claim # or Workers Compensation case # .", 0, 1, reference);
458          default: return super.getNamedProperty(_hash, _name, _checkValid);
459          }
460
461        }
462
463      @Override
464      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
465        switch (hash) {
466        case 94742588: /*claim*/ return this.claim == null ? new Base[0] : new Base[] {this.claim}; // Reference
467        case -261851592: /*relationship*/ return this.relationship == null ? new Base[0] : new Base[] {this.relationship}; // CodeableConcept
468        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Identifier
469        default: return super.getProperty(hash, name, checkValid);
470        }
471
472      }
473
474      @Override
475      public Base setProperty(int hash, String name, Base value) throws FHIRException {
476        switch (hash) {
477        case 94742588: // claim
478          this.claim = castToReference(value); // Reference
479          return value;
480        case -261851592: // relationship
481          this.relationship = castToCodeableConcept(value); // CodeableConcept
482          return value;
483        case -925155509: // reference
484          this.reference = castToIdentifier(value); // Identifier
485          return value;
486        default: return super.setProperty(hash, name, value);
487        }
488
489      }
490
491      @Override
492      public Base setProperty(String name, Base value) throws FHIRException {
493        if (name.equals("claim")) {
494          this.claim = castToReference(value); // Reference
495        } else if (name.equals("relationship")) {
496          this.relationship = castToCodeableConcept(value); // CodeableConcept
497        } else if (name.equals("reference")) {
498          this.reference = castToIdentifier(value); // Identifier
499        } else
500          return super.setProperty(name, value);
501        return value;
502      }
503
504      @Override
505      public Base makeProperty(int hash, String name) throws FHIRException {
506        switch (hash) {
507        case 94742588:  return getClaim(); 
508        case -261851592:  return getRelationship(); 
509        case -925155509:  return getReference(); 
510        default: return super.makeProperty(hash, name);
511        }
512
513      }
514
515      @Override
516      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
517        switch (hash) {
518        case 94742588: /*claim*/ return new String[] {"Reference"};
519        case -261851592: /*relationship*/ return new String[] {"CodeableConcept"};
520        case -925155509: /*reference*/ return new String[] {"Identifier"};
521        default: return super.getTypesForProperty(hash, name);
522        }
523
524      }
525
526      @Override
527      public Base addChild(String name) throws FHIRException {
528        if (name.equals("claim")) {
529          this.claim = new Reference();
530          return this.claim;
531        }
532        else if (name.equals("relationship")) {
533          this.relationship = new CodeableConcept();
534          return this.relationship;
535        }
536        else if (name.equals("reference")) {
537          this.reference = new Identifier();
538          return this.reference;
539        }
540        else
541          return super.addChild(name);
542      }
543
544      public RelatedClaimComponent copy() {
545        RelatedClaimComponent dst = new RelatedClaimComponent();
546        copyValues(dst);
547        dst.claim = claim == null ? null : claim.copy();
548        dst.relationship = relationship == null ? null : relationship.copy();
549        dst.reference = reference == null ? null : reference.copy();
550        return dst;
551      }
552
553      @Override
554      public boolean equalsDeep(Base other_) {
555        if (!super.equalsDeep(other_))
556          return false;
557        if (!(other_ instanceof RelatedClaimComponent))
558          return false;
559        RelatedClaimComponent o = (RelatedClaimComponent) other_;
560        return compareDeep(claim, o.claim, true) && compareDeep(relationship, o.relationship, true) && compareDeep(reference, o.reference, true)
561          ;
562      }
563
564      @Override
565      public boolean equalsShallow(Base other_) {
566        if (!super.equalsShallow(other_))
567          return false;
568        if (!(other_ instanceof RelatedClaimComponent))
569          return false;
570        RelatedClaimComponent o = (RelatedClaimComponent) other_;
571        return true;
572      }
573
574      public boolean isEmpty() {
575        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(claim, relationship, reference
576          );
577      }
578
579  public String fhirType() {
580    return "Claim.related";
581
582  }
583
584  }
585
586    @Block()
587    public static class PayeeComponent extends BackboneElement implements IBaseBackboneElement {
588        /**
589         * Type of Party to be reimbursed: Subscriber, provider, other.
590         */
591        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
592        @Description(shortDefinition="Type of party: Subscriber, Provider, other", formalDefinition="Type of Party to be reimbursed: Subscriber, provider, other." )
593        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/payeetype")
594        protected CodeableConcept type;
595
596        /**
597         * organization | patient | practitioner | relatedperson.
598         */
599        @Child(name = "resourceType", type = {Coding.class}, order=2, min=0, max=1, modifier=false, summary=false)
600        @Description(shortDefinition="organization | patient | practitioner | relatedperson", formalDefinition="organization | patient | practitioner | relatedperson." )
601        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-payee-resource-type")
602        protected Coding resourceType;
603
604        /**
605         * Party to be reimbursed: Subscriber, provider, other.
606         */
607        @Child(name = "party", type = {Practitioner.class, Organization.class, Patient.class, RelatedPerson.class}, order=3, min=0, max=1, modifier=false, summary=false)
608        @Description(shortDefinition="Party to receive the payable", formalDefinition="Party to be reimbursed: Subscriber, provider, other." )
609        protected Reference party;
610
611        /**
612         * The actual object that is the target of the reference (Party to be reimbursed: Subscriber, provider, other.)
613         */
614        protected Resource partyTarget;
615
616        private static final long serialVersionUID = -1395150769L;
617
618    /**
619     * Constructor
620     */
621      public PayeeComponent() {
622        super();
623      }
624
625    /**
626     * Constructor
627     */
628      public PayeeComponent(CodeableConcept type) {
629        super();
630        this.type = type;
631      }
632
633        /**
634         * @return {@link #type} (Type of Party to be reimbursed: Subscriber, provider, other.)
635         */
636        public CodeableConcept getType() { 
637          if (this.type == null)
638            if (Configuration.errorOnAutoCreate())
639              throw new Error("Attempt to auto-create PayeeComponent.type");
640            else if (Configuration.doAutoCreate())
641              this.type = new CodeableConcept(); // cc
642          return this.type;
643        }
644
645        public boolean hasType() { 
646          return this.type != null && !this.type.isEmpty();
647        }
648
649        /**
650         * @param value {@link #type} (Type of Party to be reimbursed: Subscriber, provider, other.)
651         */
652        public PayeeComponent setType(CodeableConcept value)  { 
653          this.type = value;
654          return this;
655        }
656
657        /**
658         * @return {@link #resourceType} (organization | patient | practitioner | relatedperson.)
659         */
660        public Coding getResourceType() { 
661          if (this.resourceType == null)
662            if (Configuration.errorOnAutoCreate())
663              throw new Error("Attempt to auto-create PayeeComponent.resourceType");
664            else if (Configuration.doAutoCreate())
665              this.resourceType = new Coding(); // cc
666          return this.resourceType;
667        }
668
669        public boolean hasResourceType() { 
670          return this.resourceType != null && !this.resourceType.isEmpty();
671        }
672
673        /**
674         * @param value {@link #resourceType} (organization | patient | practitioner | relatedperson.)
675         */
676        public PayeeComponent setResourceType(Coding value)  { 
677          this.resourceType = value;
678          return this;
679        }
680
681        /**
682         * @return {@link #party} (Party to be reimbursed: Subscriber, provider, other.)
683         */
684        public Reference getParty() { 
685          if (this.party == null)
686            if (Configuration.errorOnAutoCreate())
687              throw new Error("Attempt to auto-create PayeeComponent.party");
688            else if (Configuration.doAutoCreate())
689              this.party = new Reference(); // cc
690          return this.party;
691        }
692
693        public boolean hasParty() { 
694          return this.party != null && !this.party.isEmpty();
695        }
696
697        /**
698         * @param value {@link #party} (Party to be reimbursed: Subscriber, provider, other.)
699         */
700        public PayeeComponent setParty(Reference value)  { 
701          this.party = value;
702          return this;
703        }
704
705        /**
706         * @return {@link #party} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Party to be reimbursed: Subscriber, provider, other.)
707         */
708        public Resource getPartyTarget() { 
709          return this.partyTarget;
710        }
711
712        /**
713         * @param value {@link #party} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Party to be reimbursed: Subscriber, provider, other.)
714         */
715        public PayeeComponent setPartyTarget(Resource value) { 
716          this.partyTarget = value;
717          return this;
718        }
719
720        protected void listChildren(List<Property> children) {
721          super.listChildren(children);
722          children.add(new Property("type", "CodeableConcept", "Type of Party to be reimbursed: Subscriber, provider, other.", 0, 1, type));
723          children.add(new Property("resourceType", "Coding", "organization | patient | practitioner | relatedperson.", 0, 1, resourceType));
724          children.add(new Property("party", "Reference(Practitioner|Organization|Patient|RelatedPerson)", "Party to be reimbursed: Subscriber, provider, other.", 0, 1, party));
725        }
726
727        @Override
728        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
729          switch (_hash) {
730          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of Party to be reimbursed: Subscriber, provider, other.", 0, 1, type);
731          case -384364440: /*resourceType*/  return new Property("resourceType", "Coding", "organization | patient | practitioner | relatedperson.", 0, 1, resourceType);
732          case 106437350: /*party*/  return new Property("party", "Reference(Practitioner|Organization|Patient|RelatedPerson)", "Party to be reimbursed: Subscriber, provider, other.", 0, 1, party);
733          default: return super.getNamedProperty(_hash, _name, _checkValid);
734          }
735
736        }
737
738      @Override
739      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
740        switch (hash) {
741        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
742        case -384364440: /*resourceType*/ return this.resourceType == null ? new Base[0] : new Base[] {this.resourceType}; // Coding
743        case 106437350: /*party*/ return this.party == null ? new Base[0] : new Base[] {this.party}; // Reference
744        default: return super.getProperty(hash, name, checkValid);
745        }
746
747      }
748
749      @Override
750      public Base setProperty(int hash, String name, Base value) throws FHIRException {
751        switch (hash) {
752        case 3575610: // type
753          this.type = castToCodeableConcept(value); // CodeableConcept
754          return value;
755        case -384364440: // resourceType
756          this.resourceType = castToCoding(value); // Coding
757          return value;
758        case 106437350: // party
759          this.party = castToReference(value); // Reference
760          return value;
761        default: return super.setProperty(hash, name, value);
762        }
763
764      }
765
766      @Override
767      public Base setProperty(String name, Base value) throws FHIRException {
768        if (name.equals("type")) {
769          this.type = castToCodeableConcept(value); // CodeableConcept
770        } else if (name.equals("resourceType")) {
771          this.resourceType = castToCoding(value); // Coding
772        } else if (name.equals("party")) {
773          this.party = castToReference(value); // Reference
774        } else
775          return super.setProperty(name, value);
776        return value;
777      }
778
779      @Override
780      public Base makeProperty(int hash, String name) throws FHIRException {
781        switch (hash) {
782        case 3575610:  return getType(); 
783        case -384364440:  return getResourceType(); 
784        case 106437350:  return getParty(); 
785        default: return super.makeProperty(hash, name);
786        }
787
788      }
789
790      @Override
791      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
792        switch (hash) {
793        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
794        case -384364440: /*resourceType*/ return new String[] {"Coding"};
795        case 106437350: /*party*/ return new String[] {"Reference"};
796        default: return super.getTypesForProperty(hash, name);
797        }
798
799      }
800
801      @Override
802      public Base addChild(String name) throws FHIRException {
803        if (name.equals("type")) {
804          this.type = new CodeableConcept();
805          return this.type;
806        }
807        else if (name.equals("resourceType")) {
808          this.resourceType = new Coding();
809          return this.resourceType;
810        }
811        else if (name.equals("party")) {
812          this.party = new Reference();
813          return this.party;
814        }
815        else
816          return super.addChild(name);
817      }
818
819      public PayeeComponent copy() {
820        PayeeComponent dst = new PayeeComponent();
821        copyValues(dst);
822        dst.type = type == null ? null : type.copy();
823        dst.resourceType = resourceType == null ? null : resourceType.copy();
824        dst.party = party == null ? null : party.copy();
825        return dst;
826      }
827
828      @Override
829      public boolean equalsDeep(Base other_) {
830        if (!super.equalsDeep(other_))
831          return false;
832        if (!(other_ instanceof PayeeComponent))
833          return false;
834        PayeeComponent o = (PayeeComponent) other_;
835        return compareDeep(type, o.type, true) && compareDeep(resourceType, o.resourceType, true) && compareDeep(party, o.party, true)
836          ;
837      }
838
839      @Override
840      public boolean equalsShallow(Base other_) {
841        if (!super.equalsShallow(other_))
842          return false;
843        if (!(other_ instanceof PayeeComponent))
844          return false;
845        PayeeComponent o = (PayeeComponent) other_;
846        return true;
847      }
848
849      public boolean isEmpty() {
850        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, resourceType, party
851          );
852      }
853
854  public String fhirType() {
855    return "Claim.payee";
856
857  }
858
859  }
860
861    @Block()
862    public static class CareTeamComponent extends BackboneElement implements IBaseBackboneElement {
863        /**
864         * Sequence of the careTeam which serves to order and provide a link.
865         */
866        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
867        @Description(shortDefinition="Number to covey order of careTeam", formalDefinition="Sequence of the careTeam which serves to order and provide a link." )
868        protected PositiveIntType sequence;
869
870        /**
871         * Member of the team who provided the overall service.
872         */
873        @Child(name = "provider", type = {Practitioner.class, Organization.class}, order=2, min=1, max=1, modifier=false, summary=false)
874        @Description(shortDefinition="Provider individual or organization", formalDefinition="Member of the team who provided the overall service." )
875        protected Reference provider;
876
877        /**
878         * The actual object that is the target of the reference (Member of the team who provided the overall service.)
879         */
880        protected Resource providerTarget;
881
882        /**
883         * The party who is billing and responsible for the claimed good or service rendered to the patient.
884         */
885        @Child(name = "responsible", type = {BooleanType.class}, order=3, min=0, max=1, modifier=false, summary=false)
886        @Description(shortDefinition="Billing provider", formalDefinition="The party who is billing and responsible for the claimed good or service rendered to the patient." )
887        protected BooleanType responsible;
888
889        /**
890         * The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team.
891         */
892        @Child(name = "role", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
893        @Description(shortDefinition="Role on the team", formalDefinition="The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team." )
894        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-careteamrole")
895        protected CodeableConcept role;
896
897        /**
898         * The qualification which is applicable for this service.
899         */
900        @Child(name = "qualification", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=false)
901        @Description(shortDefinition="Type, classification or Specialization", formalDefinition="The qualification which is applicable for this service." )
902        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/provider-qualification")
903        protected CodeableConcept qualification;
904
905        private static final long serialVersionUID = 1758966968L;
906
907    /**
908     * Constructor
909     */
910      public CareTeamComponent() {
911        super();
912      }
913
914    /**
915     * Constructor
916     */
917      public CareTeamComponent(PositiveIntType sequence, Reference provider) {
918        super();
919        this.sequence = sequence;
920        this.provider = provider;
921      }
922
923        /**
924         * @return {@link #sequence} (Sequence of the careTeam which serves to order and provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
925         */
926        public PositiveIntType getSequenceElement() { 
927          if (this.sequence == null)
928            if (Configuration.errorOnAutoCreate())
929              throw new Error("Attempt to auto-create CareTeamComponent.sequence");
930            else if (Configuration.doAutoCreate())
931              this.sequence = new PositiveIntType(); // bb
932          return this.sequence;
933        }
934
935        public boolean hasSequenceElement() { 
936          return this.sequence != null && !this.sequence.isEmpty();
937        }
938
939        public boolean hasSequence() { 
940          return this.sequence != null && !this.sequence.isEmpty();
941        }
942
943        /**
944         * @param value {@link #sequence} (Sequence of the careTeam which serves to order and provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
945         */
946        public CareTeamComponent setSequenceElement(PositiveIntType value) { 
947          this.sequence = value;
948          return this;
949        }
950
951        /**
952         * @return Sequence of the careTeam which serves to order and provide a link.
953         */
954        public int getSequence() { 
955          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
956        }
957
958        /**
959         * @param value Sequence of the careTeam which serves to order and provide a link.
960         */
961        public CareTeamComponent setSequence(int value) { 
962            if (this.sequence == null)
963              this.sequence = new PositiveIntType();
964            this.sequence.setValue(value);
965          return this;
966        }
967
968        /**
969         * @return {@link #provider} (Member of the team who provided the overall service.)
970         */
971        public Reference getProvider() { 
972          if (this.provider == null)
973            if (Configuration.errorOnAutoCreate())
974              throw new Error("Attempt to auto-create CareTeamComponent.provider");
975            else if (Configuration.doAutoCreate())
976              this.provider = new Reference(); // cc
977          return this.provider;
978        }
979
980        public boolean hasProvider() { 
981          return this.provider != null && !this.provider.isEmpty();
982        }
983
984        /**
985         * @param value {@link #provider} (Member of the team who provided the overall service.)
986         */
987        public CareTeamComponent setProvider(Reference value)  { 
988          this.provider = value;
989          return this;
990        }
991
992        /**
993         * @return {@link #provider} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Member of the team who provided the overall service.)
994         */
995        public Resource getProviderTarget() { 
996          return this.providerTarget;
997        }
998
999        /**
1000         * @param value {@link #provider} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Member of the team who provided the overall service.)
1001         */
1002        public CareTeamComponent setProviderTarget(Resource value) { 
1003          this.providerTarget = value;
1004          return this;
1005        }
1006
1007        /**
1008         * @return {@link #responsible} (The party who is billing and responsible for the claimed good or service rendered to the patient.). This is the underlying object with id, value and extensions. The accessor "getResponsible" gives direct access to the value
1009         */
1010        public BooleanType getResponsibleElement() { 
1011          if (this.responsible == null)
1012            if (Configuration.errorOnAutoCreate())
1013              throw new Error("Attempt to auto-create CareTeamComponent.responsible");
1014            else if (Configuration.doAutoCreate())
1015              this.responsible = new BooleanType(); // bb
1016          return this.responsible;
1017        }
1018
1019        public boolean hasResponsibleElement() { 
1020          return this.responsible != null && !this.responsible.isEmpty();
1021        }
1022
1023        public boolean hasResponsible() { 
1024          return this.responsible != null && !this.responsible.isEmpty();
1025        }
1026
1027        /**
1028         * @param value {@link #responsible} (The party who is billing and responsible for the claimed good or service rendered to the patient.). This is the underlying object with id, value and extensions. The accessor "getResponsible" gives direct access to the value
1029         */
1030        public CareTeamComponent setResponsibleElement(BooleanType value) { 
1031          this.responsible = value;
1032          return this;
1033        }
1034
1035        /**
1036         * @return The party who is billing and responsible for the claimed good or service rendered to the patient.
1037         */
1038        public boolean getResponsible() { 
1039          return this.responsible == null || this.responsible.isEmpty() ? false : this.responsible.getValue();
1040        }
1041
1042        /**
1043         * @param value The party who is billing and responsible for the claimed good or service rendered to the patient.
1044         */
1045        public CareTeamComponent setResponsible(boolean value) { 
1046            if (this.responsible == null)
1047              this.responsible = new BooleanType();
1048            this.responsible.setValue(value);
1049          return this;
1050        }
1051
1052        /**
1053         * @return {@link #role} (The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team.)
1054         */
1055        public CodeableConcept getRole() { 
1056          if (this.role == null)
1057            if (Configuration.errorOnAutoCreate())
1058              throw new Error("Attempt to auto-create CareTeamComponent.role");
1059            else if (Configuration.doAutoCreate())
1060              this.role = new CodeableConcept(); // cc
1061          return this.role;
1062        }
1063
1064        public boolean hasRole() { 
1065          return this.role != null && !this.role.isEmpty();
1066        }
1067
1068        /**
1069         * @param value {@link #role} (The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team.)
1070         */
1071        public CareTeamComponent setRole(CodeableConcept value)  { 
1072          this.role = value;
1073          return this;
1074        }
1075
1076        /**
1077         * @return {@link #qualification} (The qualification which is applicable for this service.)
1078         */
1079        public CodeableConcept getQualification() { 
1080          if (this.qualification == null)
1081            if (Configuration.errorOnAutoCreate())
1082              throw new Error("Attempt to auto-create CareTeamComponent.qualification");
1083            else if (Configuration.doAutoCreate())
1084              this.qualification = new CodeableConcept(); // cc
1085          return this.qualification;
1086        }
1087
1088        public boolean hasQualification() { 
1089          return this.qualification != null && !this.qualification.isEmpty();
1090        }
1091
1092        /**
1093         * @param value {@link #qualification} (The qualification which is applicable for this service.)
1094         */
1095        public CareTeamComponent setQualification(CodeableConcept value)  { 
1096          this.qualification = value;
1097          return this;
1098        }
1099
1100        protected void listChildren(List<Property> children) {
1101          super.listChildren(children);
1102          children.add(new Property("sequence", "positiveInt", "Sequence of the careTeam which serves to order and provide a link.", 0, 1, sequence));
1103          children.add(new Property("provider", "Reference(Practitioner|Organization)", "Member of the team who provided the overall service.", 0, 1, provider));
1104          children.add(new Property("responsible", "boolean", "The party who is billing and responsible for the claimed good or service rendered to the patient.", 0, 1, responsible));
1105          children.add(new Property("role", "CodeableConcept", "The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team.", 0, 1, role));
1106          children.add(new Property("qualification", "CodeableConcept", "The qualification which is applicable for this service.", 0, 1, qualification));
1107        }
1108
1109        @Override
1110        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1111          switch (_hash) {
1112          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "Sequence of the careTeam which serves to order and provide a link.", 0, 1, sequence);
1113          case -987494927: /*provider*/  return new Property("provider", "Reference(Practitioner|Organization)", "Member of the team who provided the overall service.", 0, 1, provider);
1114          case 1847674614: /*responsible*/  return new Property("responsible", "boolean", "The party who is billing and responsible for the claimed good or service rendered to the patient.", 0, 1, responsible);
1115          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "The lead, assisting or supervising practitioner and their discipline if a multidisiplinary team.", 0, 1, role);
1116          case -631333393: /*qualification*/  return new Property("qualification", "CodeableConcept", "The qualification which is applicable for this service.", 0, 1, qualification);
1117          default: return super.getNamedProperty(_hash, _name, _checkValid);
1118          }
1119
1120        }
1121
1122      @Override
1123      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1124        switch (hash) {
1125        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
1126        case -987494927: /*provider*/ return this.provider == null ? new Base[0] : new Base[] {this.provider}; // Reference
1127        case 1847674614: /*responsible*/ return this.responsible == null ? new Base[0] : new Base[] {this.responsible}; // BooleanType
1128        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
1129        case -631333393: /*qualification*/ return this.qualification == null ? new Base[0] : new Base[] {this.qualification}; // CodeableConcept
1130        default: return super.getProperty(hash, name, checkValid);
1131        }
1132
1133      }
1134
1135      @Override
1136      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1137        switch (hash) {
1138        case 1349547969: // sequence
1139          this.sequence = castToPositiveInt(value); // PositiveIntType
1140          return value;
1141        case -987494927: // provider
1142          this.provider = castToReference(value); // Reference
1143          return value;
1144        case 1847674614: // responsible
1145          this.responsible = castToBoolean(value); // BooleanType
1146          return value;
1147        case 3506294: // role
1148          this.role = castToCodeableConcept(value); // CodeableConcept
1149          return value;
1150        case -631333393: // qualification
1151          this.qualification = castToCodeableConcept(value); // CodeableConcept
1152          return value;
1153        default: return super.setProperty(hash, name, value);
1154        }
1155
1156      }
1157
1158      @Override
1159      public Base setProperty(String name, Base value) throws FHIRException {
1160        if (name.equals("sequence")) {
1161          this.sequence = castToPositiveInt(value); // PositiveIntType
1162        } else if (name.equals("provider")) {
1163          this.provider = castToReference(value); // Reference
1164        } else if (name.equals("responsible")) {
1165          this.responsible = castToBoolean(value); // BooleanType
1166        } else if (name.equals("role")) {
1167          this.role = castToCodeableConcept(value); // CodeableConcept
1168        } else if (name.equals("qualification")) {
1169          this.qualification = castToCodeableConcept(value); // CodeableConcept
1170        } else
1171          return super.setProperty(name, value);
1172        return value;
1173      }
1174
1175      @Override
1176      public Base makeProperty(int hash, String name) throws FHIRException {
1177        switch (hash) {
1178        case 1349547969:  return getSequenceElement();
1179        case -987494927:  return getProvider(); 
1180        case 1847674614:  return getResponsibleElement();
1181        case 3506294:  return getRole(); 
1182        case -631333393:  return getQualification(); 
1183        default: return super.makeProperty(hash, name);
1184        }
1185
1186      }
1187
1188      @Override
1189      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1190        switch (hash) {
1191        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
1192        case -987494927: /*provider*/ return new String[] {"Reference"};
1193        case 1847674614: /*responsible*/ return new String[] {"boolean"};
1194        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
1195        case -631333393: /*qualification*/ return new String[] {"CodeableConcept"};
1196        default: return super.getTypesForProperty(hash, name);
1197        }
1198
1199      }
1200
1201      @Override
1202      public Base addChild(String name) throws FHIRException {
1203        if (name.equals("sequence")) {
1204          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
1205        }
1206        else if (name.equals("provider")) {
1207          this.provider = new Reference();
1208          return this.provider;
1209        }
1210        else if (name.equals("responsible")) {
1211          throw new FHIRException("Cannot call addChild on a singleton property Claim.responsible");
1212        }
1213        else if (name.equals("role")) {
1214          this.role = new CodeableConcept();
1215          return this.role;
1216        }
1217        else if (name.equals("qualification")) {
1218          this.qualification = new CodeableConcept();
1219          return this.qualification;
1220        }
1221        else
1222          return super.addChild(name);
1223      }
1224
1225      public CareTeamComponent copy() {
1226        CareTeamComponent dst = new CareTeamComponent();
1227        copyValues(dst);
1228        dst.sequence = sequence == null ? null : sequence.copy();
1229        dst.provider = provider == null ? null : provider.copy();
1230        dst.responsible = responsible == null ? null : responsible.copy();
1231        dst.role = role == null ? null : role.copy();
1232        dst.qualification = qualification == null ? null : qualification.copy();
1233        return dst;
1234      }
1235
1236      @Override
1237      public boolean equalsDeep(Base other_) {
1238        if (!super.equalsDeep(other_))
1239          return false;
1240        if (!(other_ instanceof CareTeamComponent))
1241          return false;
1242        CareTeamComponent o = (CareTeamComponent) other_;
1243        return compareDeep(sequence, o.sequence, true) && compareDeep(provider, o.provider, true) && compareDeep(responsible, o.responsible, true)
1244           && compareDeep(role, o.role, true) && compareDeep(qualification, o.qualification, true);
1245      }
1246
1247      @Override
1248      public boolean equalsShallow(Base other_) {
1249        if (!super.equalsShallow(other_))
1250          return false;
1251        if (!(other_ instanceof CareTeamComponent))
1252          return false;
1253        CareTeamComponent o = (CareTeamComponent) other_;
1254        return compareValues(sequence, o.sequence, true) && compareValues(responsible, o.responsible, true)
1255          ;
1256      }
1257
1258      public boolean isEmpty() {
1259        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, provider, responsible
1260          , role, qualification);
1261      }
1262
1263  public String fhirType() {
1264    return "Claim.careTeam";
1265
1266  }
1267
1268  }
1269
1270    @Block()
1271    public static class SpecialConditionComponent extends BackboneElement implements IBaseBackboneElement {
1272        /**
1273         * Sequence of the information element which serves to provide a link.
1274         */
1275        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1276        @Description(shortDefinition="Information instance identifier", formalDefinition="Sequence of the information element which serves to provide a link." )
1277        protected PositiveIntType sequence;
1278
1279        /**
1280         * The general class of the information supplied: information; exception; accident, employment; onset, etc.
1281         */
1282        @Child(name = "category", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=false)
1283        @Description(shortDefinition="General class of information", formalDefinition="The general class of the information supplied: information; exception; accident, employment; onset, etc." )
1284        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-informationcategory")
1285        protected CodeableConcept category;
1286
1287        /**
1288         * System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication.
1289         */
1290        @Child(name = "code", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
1291        @Description(shortDefinition="Type of information", formalDefinition="System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication." )
1292        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-exception")
1293        protected CodeableConcept code;
1294
1295        /**
1296         * The date when or period to which this information refers.
1297         */
1298        @Child(name = "timing", type = {DateType.class, Period.class}, order=4, min=0, max=1, modifier=false, summary=false)
1299        @Description(shortDefinition="When it occurred", formalDefinition="The date when or period to which this information refers." )
1300        protected Type timing;
1301
1302        /**
1303         * Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.
1304         */
1305        @Child(name = "value", type = {StringType.class, Quantity.class, Attachment.class, Reference.class}, order=5, min=0, max=1, modifier=false, summary=false)
1306        @Description(shortDefinition="Additional Data or supporting information", formalDefinition="Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data." )
1307        protected Type value;
1308
1309        /**
1310         * For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content.
1311         */
1312        @Child(name = "reason", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=false)
1313        @Description(shortDefinition="Reason associated with the information", formalDefinition="For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content." )
1314        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/missing-tooth-reason")
1315        protected CodeableConcept reason;
1316
1317        private static final long serialVersionUID = -518630232L;
1318
1319    /**
1320     * Constructor
1321     */
1322      public SpecialConditionComponent() {
1323        super();
1324      }
1325
1326    /**
1327     * Constructor
1328     */
1329      public SpecialConditionComponent(PositiveIntType sequence, CodeableConcept category) {
1330        super();
1331        this.sequence = sequence;
1332        this.category = category;
1333      }
1334
1335        /**
1336         * @return {@link #sequence} (Sequence of the information element which serves to provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
1337         */
1338        public PositiveIntType getSequenceElement() { 
1339          if (this.sequence == null)
1340            if (Configuration.errorOnAutoCreate())
1341              throw new Error("Attempt to auto-create SpecialConditionComponent.sequence");
1342            else if (Configuration.doAutoCreate())
1343              this.sequence = new PositiveIntType(); // bb
1344          return this.sequence;
1345        }
1346
1347        public boolean hasSequenceElement() { 
1348          return this.sequence != null && !this.sequence.isEmpty();
1349        }
1350
1351        public boolean hasSequence() { 
1352          return this.sequence != null && !this.sequence.isEmpty();
1353        }
1354
1355        /**
1356         * @param value {@link #sequence} (Sequence of the information element which serves to provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
1357         */
1358        public SpecialConditionComponent setSequenceElement(PositiveIntType value) { 
1359          this.sequence = value;
1360          return this;
1361        }
1362
1363        /**
1364         * @return Sequence of the information element which serves to provide a link.
1365         */
1366        public int getSequence() { 
1367          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
1368        }
1369
1370        /**
1371         * @param value Sequence of the information element which serves to provide a link.
1372         */
1373        public SpecialConditionComponent setSequence(int value) { 
1374            if (this.sequence == null)
1375              this.sequence = new PositiveIntType();
1376            this.sequence.setValue(value);
1377          return this;
1378        }
1379
1380        /**
1381         * @return {@link #category} (The general class of the information supplied: information; exception; accident, employment; onset, etc.)
1382         */
1383        public CodeableConcept getCategory() { 
1384          if (this.category == null)
1385            if (Configuration.errorOnAutoCreate())
1386              throw new Error("Attempt to auto-create SpecialConditionComponent.category");
1387            else if (Configuration.doAutoCreate())
1388              this.category = new CodeableConcept(); // cc
1389          return this.category;
1390        }
1391
1392        public boolean hasCategory() { 
1393          return this.category != null && !this.category.isEmpty();
1394        }
1395
1396        /**
1397         * @param value {@link #category} (The general class of the information supplied: information; exception; accident, employment; onset, etc.)
1398         */
1399        public SpecialConditionComponent setCategory(CodeableConcept value)  { 
1400          this.category = value;
1401          return this;
1402        }
1403
1404        /**
1405         * @return {@link #code} (System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication.)
1406         */
1407        public CodeableConcept getCode() { 
1408          if (this.code == null)
1409            if (Configuration.errorOnAutoCreate())
1410              throw new Error("Attempt to auto-create SpecialConditionComponent.code");
1411            else if (Configuration.doAutoCreate())
1412              this.code = new CodeableConcept(); // cc
1413          return this.code;
1414        }
1415
1416        public boolean hasCode() { 
1417          return this.code != null && !this.code.isEmpty();
1418        }
1419
1420        /**
1421         * @param value {@link #code} (System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication.)
1422         */
1423        public SpecialConditionComponent setCode(CodeableConcept value)  { 
1424          this.code = value;
1425          return this;
1426        }
1427
1428        /**
1429         * @return {@link #timing} (The date when or period to which this information refers.)
1430         */
1431        public Type getTiming() { 
1432          return this.timing;
1433        }
1434
1435        /**
1436         * @return {@link #timing} (The date when or period to which this information refers.)
1437         */
1438        public DateType getTimingDateType() throws FHIRException { 
1439          if (this.timing == null)
1440            return null;
1441          if (!(this.timing instanceof DateType))
1442            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.timing.getClass().getName()+" was encountered");
1443          return (DateType) this.timing;
1444        }
1445
1446        public boolean hasTimingDateType() { 
1447          return this != null && this.timing instanceof DateType;
1448        }
1449
1450        /**
1451         * @return {@link #timing} (The date when or period to which this information refers.)
1452         */
1453        public Period getTimingPeriod() throws FHIRException { 
1454          if (this.timing == null)
1455            return null;
1456          if (!(this.timing instanceof Period))
1457            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.timing.getClass().getName()+" was encountered");
1458          return (Period) this.timing;
1459        }
1460
1461        public boolean hasTimingPeriod() { 
1462          return this != null && this.timing instanceof Period;
1463        }
1464
1465        public boolean hasTiming() { 
1466          return this.timing != null && !this.timing.isEmpty();
1467        }
1468
1469        /**
1470         * @param value {@link #timing} (The date when or period to which this information refers.)
1471         */
1472        public SpecialConditionComponent setTiming(Type value) throws FHIRFormatError { 
1473          if (value != null && !(value instanceof DateType || value instanceof Period))
1474            throw new FHIRFormatError("Not the right type for Claim.information.timing[x]: "+value.fhirType());
1475          this.timing = value;
1476          return this;
1477        }
1478
1479        /**
1480         * @return {@link #value} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
1481         */
1482        public Type getValue() { 
1483          return this.value;
1484        }
1485
1486        /**
1487         * @return {@link #value} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
1488         */
1489        public StringType getValueStringType() throws FHIRException { 
1490          if (this.value == null)
1491            return null;
1492          if (!(this.value instanceof StringType))
1493            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
1494          return (StringType) this.value;
1495        }
1496
1497        public boolean hasValueStringType() { 
1498          return this != null && this.value instanceof StringType;
1499        }
1500
1501        /**
1502         * @return {@link #value} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
1503         */
1504        public Quantity getValueQuantity() throws FHIRException { 
1505          if (this.value == null)
1506            return null;
1507          if (!(this.value instanceof Quantity))
1508            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
1509          return (Quantity) this.value;
1510        }
1511
1512        public boolean hasValueQuantity() { 
1513          return this != null && this.value instanceof Quantity;
1514        }
1515
1516        /**
1517         * @return {@link #value} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
1518         */
1519        public Attachment getValueAttachment() throws FHIRException { 
1520          if (this.value == null)
1521            return null;
1522          if (!(this.value instanceof Attachment))
1523            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.value.getClass().getName()+" was encountered");
1524          return (Attachment) this.value;
1525        }
1526
1527        public boolean hasValueAttachment() { 
1528          return this != null && this.value instanceof Attachment;
1529        }
1530
1531        /**
1532         * @return {@link #value} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
1533         */
1534        public Reference getValueReference() throws FHIRException { 
1535          if (this.value == null)
1536            return null;
1537          if (!(this.value instanceof Reference))
1538            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.value.getClass().getName()+" was encountered");
1539          return (Reference) this.value;
1540        }
1541
1542        public boolean hasValueReference() { 
1543          return this != null && this.value instanceof Reference;
1544        }
1545
1546        public boolean hasValue() { 
1547          return this.value != null && !this.value.isEmpty();
1548        }
1549
1550        /**
1551         * @param value {@link #value} (Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.)
1552         */
1553        public SpecialConditionComponent setValue(Type value) throws FHIRFormatError { 
1554          if (value != null && !(value instanceof StringType || value instanceof Quantity || value instanceof Attachment || value instanceof Reference))
1555            throw new FHIRFormatError("Not the right type for Claim.information.value[x]: "+value.fhirType());
1556          this.value = value;
1557          return this;
1558        }
1559
1560        /**
1561         * @return {@link #reason} (For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content.)
1562         */
1563        public CodeableConcept getReason() { 
1564          if (this.reason == null)
1565            if (Configuration.errorOnAutoCreate())
1566              throw new Error("Attempt to auto-create SpecialConditionComponent.reason");
1567            else if (Configuration.doAutoCreate())
1568              this.reason = new CodeableConcept(); // cc
1569          return this.reason;
1570        }
1571
1572        public boolean hasReason() { 
1573          return this.reason != null && !this.reason.isEmpty();
1574        }
1575
1576        /**
1577         * @param value {@link #reason} (For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content.)
1578         */
1579        public SpecialConditionComponent setReason(CodeableConcept value)  { 
1580          this.reason = value;
1581          return this;
1582        }
1583
1584        protected void listChildren(List<Property> children) {
1585          super.listChildren(children);
1586          children.add(new Property("sequence", "positiveInt", "Sequence of the information element which serves to provide a link.", 0, 1, sequence));
1587          children.add(new Property("category", "CodeableConcept", "The general class of the information supplied: information; exception; accident, employment; onset, etc.", 0, 1, category));
1588          children.add(new Property("code", "CodeableConcept", "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication.", 0, 1, code));
1589          children.add(new Property("timing[x]", "date|Period", "The date when or period to which this information refers.", 0, 1, timing));
1590          children.add(new Property("value[x]", "string|Quantity|Attachment|Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, value));
1591          children.add(new Property("reason", "CodeableConcept", "For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content.", 0, 1, reason));
1592        }
1593
1594        @Override
1595        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1596          switch (_hash) {
1597          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "Sequence of the information element which serves to provide a link.", 0, 1, sequence);
1598          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "The general class of the information supplied: information; exception; accident, employment; onset, etc.", 0, 1, category);
1599          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient  for which care is sought which may influence the adjudication.", 0, 1, code);
1600          case 164632566: /*timing[x]*/  return new Property("timing[x]", "date|Period", "The date when or period to which this information refers.", 0, 1, timing);
1601          case -873664438: /*timing*/  return new Property("timing[x]", "date|Period", "The date when or period to which this information refers.", 0, 1, timing);
1602          case 807935768: /*timingDate*/  return new Property("timing[x]", "date|Period", "The date when or period to which this information refers.", 0, 1, timing);
1603          case -615615829: /*timingPeriod*/  return new Property("timing[x]", "date|Period", "The date when or period to which this information refers.", 0, 1, timing);
1604          case -1410166417: /*value[x]*/  return new Property("value[x]", "string|Quantity|Attachment|Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, value);
1605          case 111972721: /*value*/  return new Property("value[x]", "string|Quantity|Attachment|Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, value);
1606          case -1424603934: /*valueString*/  return new Property("value[x]", "string|Quantity|Attachment|Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, value);
1607          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "string|Quantity|Attachment|Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, value);
1608          case -475566732: /*valueAttachment*/  return new Property("value[x]", "string|Quantity|Attachment|Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, value);
1609          case 1755241690: /*valueReference*/  return new Property("value[x]", "string|Quantity|Attachment|Reference(Any)", "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", 0, 1, value);
1610          case -934964668: /*reason*/  return new Property("reason", "CodeableConcept", "For example, provides the reason for: the additional stay, or missing tooth or any other situation where a reason code is required in addition to the content.", 0, 1, reason);
1611          default: return super.getNamedProperty(_hash, _name, _checkValid);
1612          }
1613
1614        }
1615
1616      @Override
1617      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1618        switch (hash) {
1619        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
1620        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
1621        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1622        case -873664438: /*timing*/ return this.timing == null ? new Base[0] : new Base[] {this.timing}; // Type
1623        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // Type
1624        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : new Base[] {this.reason}; // CodeableConcept
1625        default: return super.getProperty(hash, name, checkValid);
1626        }
1627
1628      }
1629
1630      @Override
1631      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1632        switch (hash) {
1633        case 1349547969: // sequence
1634          this.sequence = castToPositiveInt(value); // PositiveIntType
1635          return value;
1636        case 50511102: // category
1637          this.category = castToCodeableConcept(value); // CodeableConcept
1638          return value;
1639        case 3059181: // code
1640          this.code = castToCodeableConcept(value); // CodeableConcept
1641          return value;
1642        case -873664438: // timing
1643          this.timing = castToType(value); // Type
1644          return value;
1645        case 111972721: // value
1646          this.value = castToType(value); // Type
1647          return value;
1648        case -934964668: // reason
1649          this.reason = castToCodeableConcept(value); // CodeableConcept
1650          return value;
1651        default: return super.setProperty(hash, name, value);
1652        }
1653
1654      }
1655
1656      @Override
1657      public Base setProperty(String name, Base value) throws FHIRException {
1658        if (name.equals("sequence")) {
1659          this.sequence = castToPositiveInt(value); // PositiveIntType
1660        } else if (name.equals("category")) {
1661          this.category = castToCodeableConcept(value); // CodeableConcept
1662        } else if (name.equals("code")) {
1663          this.code = castToCodeableConcept(value); // CodeableConcept
1664        } else if (name.equals("timing[x]")) {
1665          this.timing = castToType(value); // Type
1666        } else if (name.equals("value[x]")) {
1667          this.value = castToType(value); // Type
1668        } else if (name.equals("reason")) {
1669          this.reason = castToCodeableConcept(value); // CodeableConcept
1670        } else
1671          return super.setProperty(name, value);
1672        return value;
1673      }
1674
1675      @Override
1676      public Base makeProperty(int hash, String name) throws FHIRException {
1677        switch (hash) {
1678        case 1349547969:  return getSequenceElement();
1679        case 50511102:  return getCategory(); 
1680        case 3059181:  return getCode(); 
1681        case 164632566:  return getTiming(); 
1682        case -873664438:  return getTiming(); 
1683        case -1410166417:  return getValue(); 
1684        case 111972721:  return getValue(); 
1685        case -934964668:  return getReason(); 
1686        default: return super.makeProperty(hash, name);
1687        }
1688
1689      }
1690
1691      @Override
1692      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1693        switch (hash) {
1694        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
1695        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1696        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1697        case -873664438: /*timing*/ return new String[] {"date", "Period"};
1698        case 111972721: /*value*/ return new String[] {"string", "Quantity", "Attachment", "Reference"};
1699        case -934964668: /*reason*/ return new String[] {"CodeableConcept"};
1700        default: return super.getTypesForProperty(hash, name);
1701        }
1702
1703      }
1704
1705      @Override
1706      public Base addChild(String name) throws FHIRException {
1707        if (name.equals("sequence")) {
1708          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
1709        }
1710        else if (name.equals("category")) {
1711          this.category = new CodeableConcept();
1712          return this.category;
1713        }
1714        else if (name.equals("code")) {
1715          this.code = new CodeableConcept();
1716          return this.code;
1717        }
1718        else if (name.equals("timingDate")) {
1719          this.timing = new DateType();
1720          return this.timing;
1721        }
1722        else if (name.equals("timingPeriod")) {
1723          this.timing = new Period();
1724          return this.timing;
1725        }
1726        else if (name.equals("valueString")) {
1727          this.value = new StringType();
1728          return this.value;
1729        }
1730        else if (name.equals("valueQuantity")) {
1731          this.value = new Quantity();
1732          return this.value;
1733        }
1734        else if (name.equals("valueAttachment")) {
1735          this.value = new Attachment();
1736          return this.value;
1737        }
1738        else if (name.equals("valueReference")) {
1739          this.value = new Reference();
1740          return this.value;
1741        }
1742        else if (name.equals("reason")) {
1743          this.reason = new CodeableConcept();
1744          return this.reason;
1745        }
1746        else
1747          return super.addChild(name);
1748      }
1749
1750      public SpecialConditionComponent copy() {
1751        SpecialConditionComponent dst = new SpecialConditionComponent();
1752        copyValues(dst);
1753        dst.sequence = sequence == null ? null : sequence.copy();
1754        dst.category = category == null ? null : category.copy();
1755        dst.code = code == null ? null : code.copy();
1756        dst.timing = timing == null ? null : timing.copy();
1757        dst.value = value == null ? null : value.copy();
1758        dst.reason = reason == null ? null : reason.copy();
1759        return dst;
1760      }
1761
1762      @Override
1763      public boolean equalsDeep(Base other_) {
1764        if (!super.equalsDeep(other_))
1765          return false;
1766        if (!(other_ instanceof SpecialConditionComponent))
1767          return false;
1768        SpecialConditionComponent o = (SpecialConditionComponent) other_;
1769        return compareDeep(sequence, o.sequence, true) && compareDeep(category, o.category, true) && compareDeep(code, o.code, true)
1770           && compareDeep(timing, o.timing, true) && compareDeep(value, o.value, true) && compareDeep(reason, o.reason, true)
1771          ;
1772      }
1773
1774      @Override
1775      public boolean equalsShallow(Base other_) {
1776        if (!super.equalsShallow(other_))
1777          return false;
1778        if (!(other_ instanceof SpecialConditionComponent))
1779          return false;
1780        SpecialConditionComponent o = (SpecialConditionComponent) other_;
1781        return compareValues(sequence, o.sequence, true);
1782      }
1783
1784      public boolean isEmpty() {
1785        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, category, code
1786          , timing, value, reason);
1787      }
1788
1789  public String fhirType() {
1790    return "Claim.information";
1791
1792  }
1793
1794  }
1795
1796    @Block()
1797    public static class DiagnosisComponent extends BackboneElement implements IBaseBackboneElement {
1798        /**
1799         * Sequence of diagnosis which serves to provide a link.
1800         */
1801        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1802        @Description(shortDefinition="Number to covey order of diagnosis", formalDefinition="Sequence of diagnosis which serves to provide a link." )
1803        protected PositiveIntType sequence;
1804
1805        /**
1806         * The diagnosis.
1807         */
1808        @Child(name = "diagnosis", type = {CodeableConcept.class, Condition.class}, order=2, min=1, max=1, modifier=false, summary=false)
1809        @Description(shortDefinition="Patient's diagnosis", formalDefinition="The diagnosis." )
1810        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/icd-10")
1811        protected Type diagnosis;
1812
1813        /**
1814         * The type of the Diagnosis, for example: admitting, primary, secondary, discharge.
1815         */
1816        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1817        @Description(shortDefinition="Timing or nature of the diagnosis", formalDefinition="The type of the Diagnosis, for example: admitting, primary, secondary, discharge." )
1818        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-diagnosistype")
1819        protected List<CodeableConcept> type;
1820
1821        /**
1822         * The package billing code, for example DRG, based on the assigned grouping code system.
1823         */
1824        @Child(name = "packageCode", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
1825        @Description(shortDefinition="Package billing code", formalDefinition="The package billing code, for example DRG, based on the assigned grouping code system." )
1826        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-diagnosisrelatedgroup")
1827        protected CodeableConcept packageCode;
1828
1829        private static final long serialVersionUID = -350960873L;
1830
1831    /**
1832     * Constructor
1833     */
1834      public DiagnosisComponent() {
1835        super();
1836      }
1837
1838    /**
1839     * Constructor
1840     */
1841      public DiagnosisComponent(PositiveIntType sequence, Type diagnosis) {
1842        super();
1843        this.sequence = sequence;
1844        this.diagnosis = diagnosis;
1845      }
1846
1847        /**
1848         * @return {@link #sequence} (Sequence of diagnosis which serves to provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
1849         */
1850        public PositiveIntType getSequenceElement() { 
1851          if (this.sequence == null)
1852            if (Configuration.errorOnAutoCreate())
1853              throw new Error("Attempt to auto-create DiagnosisComponent.sequence");
1854            else if (Configuration.doAutoCreate())
1855              this.sequence = new PositiveIntType(); // bb
1856          return this.sequence;
1857        }
1858
1859        public boolean hasSequenceElement() { 
1860          return this.sequence != null && !this.sequence.isEmpty();
1861        }
1862
1863        public boolean hasSequence() { 
1864          return this.sequence != null && !this.sequence.isEmpty();
1865        }
1866
1867        /**
1868         * @param value {@link #sequence} (Sequence of diagnosis which serves to provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
1869         */
1870        public DiagnosisComponent setSequenceElement(PositiveIntType value) { 
1871          this.sequence = value;
1872          return this;
1873        }
1874
1875        /**
1876         * @return Sequence of diagnosis which serves to provide a link.
1877         */
1878        public int getSequence() { 
1879          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
1880        }
1881
1882        /**
1883         * @param value Sequence of diagnosis which serves to provide a link.
1884         */
1885        public DiagnosisComponent setSequence(int value) { 
1886            if (this.sequence == null)
1887              this.sequence = new PositiveIntType();
1888            this.sequence.setValue(value);
1889          return this;
1890        }
1891
1892        /**
1893         * @return {@link #diagnosis} (The diagnosis.)
1894         */
1895        public Type getDiagnosis() { 
1896          return this.diagnosis;
1897        }
1898
1899        /**
1900         * @return {@link #diagnosis} (The diagnosis.)
1901         */
1902        public CodeableConcept getDiagnosisCodeableConcept() throws FHIRException { 
1903          if (this.diagnosis == null)
1904            return null;
1905          if (!(this.diagnosis instanceof CodeableConcept))
1906            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.diagnosis.getClass().getName()+" was encountered");
1907          return (CodeableConcept) this.diagnosis;
1908        }
1909
1910        public boolean hasDiagnosisCodeableConcept() { 
1911          return this != null && this.diagnosis instanceof CodeableConcept;
1912        }
1913
1914        /**
1915         * @return {@link #diagnosis} (The diagnosis.)
1916         */
1917        public Reference getDiagnosisReference() throws FHIRException { 
1918          if (this.diagnosis == null)
1919            return null;
1920          if (!(this.diagnosis instanceof Reference))
1921            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.diagnosis.getClass().getName()+" was encountered");
1922          return (Reference) this.diagnosis;
1923        }
1924
1925        public boolean hasDiagnosisReference() { 
1926          return this != null && this.diagnosis instanceof Reference;
1927        }
1928
1929        public boolean hasDiagnosis() { 
1930          return this.diagnosis != null && !this.diagnosis.isEmpty();
1931        }
1932
1933        /**
1934         * @param value {@link #diagnosis} (The diagnosis.)
1935         */
1936        public DiagnosisComponent setDiagnosis(Type value) throws FHIRFormatError { 
1937          if (value != null && !(value instanceof CodeableConcept || value instanceof Reference))
1938            throw new FHIRFormatError("Not the right type for Claim.diagnosis.diagnosis[x]: "+value.fhirType());
1939          this.diagnosis = value;
1940          return this;
1941        }
1942
1943        /**
1944         * @return {@link #type} (The type of the Diagnosis, for example: admitting, primary, secondary, discharge.)
1945         */
1946        public List<CodeableConcept> getType() { 
1947          if (this.type == null)
1948            this.type = new ArrayList<CodeableConcept>();
1949          return this.type;
1950        }
1951
1952        /**
1953         * @return Returns a reference to <code>this</code> for easy method chaining
1954         */
1955        public DiagnosisComponent setType(List<CodeableConcept> theType) { 
1956          this.type = theType;
1957          return this;
1958        }
1959
1960        public boolean hasType() { 
1961          if (this.type == null)
1962            return false;
1963          for (CodeableConcept item : this.type)
1964            if (!item.isEmpty())
1965              return true;
1966          return false;
1967        }
1968
1969        public CodeableConcept addType() { //3
1970          CodeableConcept t = new CodeableConcept();
1971          if (this.type == null)
1972            this.type = new ArrayList<CodeableConcept>();
1973          this.type.add(t);
1974          return t;
1975        }
1976
1977        public DiagnosisComponent addType(CodeableConcept t) { //3
1978          if (t == null)
1979            return this;
1980          if (this.type == null)
1981            this.type = new ArrayList<CodeableConcept>();
1982          this.type.add(t);
1983          return this;
1984        }
1985
1986        /**
1987         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist
1988         */
1989        public CodeableConcept getTypeFirstRep() { 
1990          if (getType().isEmpty()) {
1991            addType();
1992          }
1993          return getType().get(0);
1994        }
1995
1996        /**
1997         * @return {@link #packageCode} (The package billing code, for example DRG, based on the assigned grouping code system.)
1998         */
1999        public CodeableConcept getPackageCode() { 
2000          if (this.packageCode == null)
2001            if (Configuration.errorOnAutoCreate())
2002              throw new Error("Attempt to auto-create DiagnosisComponent.packageCode");
2003            else if (Configuration.doAutoCreate())
2004              this.packageCode = new CodeableConcept(); // cc
2005          return this.packageCode;
2006        }
2007
2008        public boolean hasPackageCode() { 
2009          return this.packageCode != null && !this.packageCode.isEmpty();
2010        }
2011
2012        /**
2013         * @param value {@link #packageCode} (The package billing code, for example DRG, based on the assigned grouping code system.)
2014         */
2015        public DiagnosisComponent setPackageCode(CodeableConcept value)  { 
2016          this.packageCode = value;
2017          return this;
2018        }
2019
2020        protected void listChildren(List<Property> children) {
2021          super.listChildren(children);
2022          children.add(new Property("sequence", "positiveInt", "Sequence of diagnosis which serves to provide a link.", 0, 1, sequence));
2023          children.add(new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The diagnosis.", 0, 1, diagnosis));
2024          children.add(new Property("type", "CodeableConcept", "The type of the Diagnosis, for example: admitting, primary, secondary, discharge.", 0, java.lang.Integer.MAX_VALUE, type));
2025          children.add(new Property("packageCode", "CodeableConcept", "The package billing code, for example DRG, based on the assigned grouping code system.", 0, 1, packageCode));
2026        }
2027
2028        @Override
2029        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2030          switch (_hash) {
2031          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "Sequence of diagnosis which serves to provide a link.", 0, 1, sequence);
2032          case -1487009809: /*diagnosis[x]*/  return new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The diagnosis.", 0, 1, diagnosis);
2033          case 1196993265: /*diagnosis*/  return new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The diagnosis.", 0, 1, diagnosis);
2034          case 277781616: /*diagnosisCodeableConcept*/  return new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The diagnosis.", 0, 1, diagnosis);
2035          case 2050454362: /*diagnosisReference*/  return new Property("diagnosis[x]", "CodeableConcept|Reference(Condition)", "The diagnosis.", 0, 1, diagnosis);
2036          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The type of the Diagnosis, for example: admitting, primary, secondary, discharge.", 0, java.lang.Integer.MAX_VALUE, type);
2037          case 908444499: /*packageCode*/  return new Property("packageCode", "CodeableConcept", "The package billing code, for example DRG, based on the assigned grouping code system.", 0, 1, packageCode);
2038          default: return super.getNamedProperty(_hash, _name, _checkValid);
2039          }
2040
2041        }
2042
2043      @Override
2044      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2045        switch (hash) {
2046        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
2047        case 1196993265: /*diagnosis*/ return this.diagnosis == null ? new Base[0] : new Base[] {this.diagnosis}; // Type
2048        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
2049        case 908444499: /*packageCode*/ return this.packageCode == null ? new Base[0] : new Base[] {this.packageCode}; // CodeableConcept
2050        default: return super.getProperty(hash, name, checkValid);
2051        }
2052
2053      }
2054
2055      @Override
2056      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2057        switch (hash) {
2058        case 1349547969: // sequence
2059          this.sequence = castToPositiveInt(value); // PositiveIntType
2060          return value;
2061        case 1196993265: // diagnosis
2062          this.diagnosis = castToType(value); // Type
2063          return value;
2064        case 3575610: // type
2065          this.getType().add(castToCodeableConcept(value)); // CodeableConcept
2066          return value;
2067        case 908444499: // packageCode
2068          this.packageCode = castToCodeableConcept(value); // CodeableConcept
2069          return value;
2070        default: return super.setProperty(hash, name, value);
2071        }
2072
2073      }
2074
2075      @Override
2076      public Base setProperty(String name, Base value) throws FHIRException {
2077        if (name.equals("sequence")) {
2078          this.sequence = castToPositiveInt(value); // PositiveIntType
2079        } else if (name.equals("diagnosis[x]")) {
2080          this.diagnosis = castToType(value); // Type
2081        } else if (name.equals("type")) {
2082          this.getType().add(castToCodeableConcept(value));
2083        } else if (name.equals("packageCode")) {
2084          this.packageCode = castToCodeableConcept(value); // CodeableConcept
2085        } else
2086          return super.setProperty(name, value);
2087        return value;
2088      }
2089
2090      @Override
2091      public Base makeProperty(int hash, String name) throws FHIRException {
2092        switch (hash) {
2093        case 1349547969:  return getSequenceElement();
2094        case -1487009809:  return getDiagnosis(); 
2095        case 1196993265:  return getDiagnosis(); 
2096        case 3575610:  return addType(); 
2097        case 908444499:  return getPackageCode(); 
2098        default: return super.makeProperty(hash, name);
2099        }
2100
2101      }
2102
2103      @Override
2104      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2105        switch (hash) {
2106        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
2107        case 1196993265: /*diagnosis*/ return new String[] {"CodeableConcept", "Reference"};
2108        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2109        case 908444499: /*packageCode*/ return new String[] {"CodeableConcept"};
2110        default: return super.getTypesForProperty(hash, name);
2111        }
2112
2113      }
2114
2115      @Override
2116      public Base addChild(String name) throws FHIRException {
2117        if (name.equals("sequence")) {
2118          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
2119        }
2120        else if (name.equals("diagnosisCodeableConcept")) {
2121          this.diagnosis = new CodeableConcept();
2122          return this.diagnosis;
2123        }
2124        else if (name.equals("diagnosisReference")) {
2125          this.diagnosis = new Reference();
2126          return this.diagnosis;
2127        }
2128        else if (name.equals("type")) {
2129          return addType();
2130        }
2131        else if (name.equals("packageCode")) {
2132          this.packageCode = new CodeableConcept();
2133          return this.packageCode;
2134        }
2135        else
2136          return super.addChild(name);
2137      }
2138
2139      public DiagnosisComponent copy() {
2140        DiagnosisComponent dst = new DiagnosisComponent();
2141        copyValues(dst);
2142        dst.sequence = sequence == null ? null : sequence.copy();
2143        dst.diagnosis = diagnosis == null ? null : diagnosis.copy();
2144        if (type != null) {
2145          dst.type = new ArrayList<CodeableConcept>();
2146          for (CodeableConcept i : type)
2147            dst.type.add(i.copy());
2148        };
2149        dst.packageCode = packageCode == null ? null : packageCode.copy();
2150        return dst;
2151      }
2152
2153      @Override
2154      public boolean equalsDeep(Base other_) {
2155        if (!super.equalsDeep(other_))
2156          return false;
2157        if (!(other_ instanceof DiagnosisComponent))
2158          return false;
2159        DiagnosisComponent o = (DiagnosisComponent) other_;
2160        return compareDeep(sequence, o.sequence, true) && compareDeep(diagnosis, o.diagnosis, true) && compareDeep(type, o.type, true)
2161           && compareDeep(packageCode, o.packageCode, true);
2162      }
2163
2164      @Override
2165      public boolean equalsShallow(Base other_) {
2166        if (!super.equalsShallow(other_))
2167          return false;
2168        if (!(other_ instanceof DiagnosisComponent))
2169          return false;
2170        DiagnosisComponent o = (DiagnosisComponent) other_;
2171        return compareValues(sequence, o.sequence, true);
2172      }
2173
2174      public boolean isEmpty() {
2175        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, diagnosis, type
2176          , packageCode);
2177      }
2178
2179  public String fhirType() {
2180    return "Claim.diagnosis";
2181
2182  }
2183
2184  }
2185
2186    @Block()
2187    public static class ProcedureComponent extends BackboneElement implements IBaseBackboneElement {
2188        /**
2189         * Sequence of procedures which serves to order and provide a link.
2190         */
2191        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2192        @Description(shortDefinition="Procedure sequence for reference", formalDefinition="Sequence of procedures which serves to order and provide a link." )
2193        protected PositiveIntType sequence;
2194
2195        /**
2196         * Date and optionally time the procedure was performed .
2197         */
2198        @Child(name = "date", type = {DateTimeType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2199        @Description(shortDefinition="When the procedure was performed", formalDefinition="Date and optionally time the procedure was performed ." )
2200        protected DateTimeType date;
2201
2202        /**
2203         * The procedure code.
2204         */
2205        @Child(name = "procedure", type = {CodeableConcept.class, Procedure.class}, order=3, min=1, max=1, modifier=false, summary=false)
2206        @Description(shortDefinition="Patient's list of procedures performed", formalDefinition="The procedure code." )
2207        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/icd-10-procedures")
2208        protected Type procedure;
2209
2210        private static final long serialVersionUID = 864307347L;
2211
2212    /**
2213     * Constructor
2214     */
2215      public ProcedureComponent() {
2216        super();
2217      }
2218
2219    /**
2220     * Constructor
2221     */
2222      public ProcedureComponent(PositiveIntType sequence, Type procedure) {
2223        super();
2224        this.sequence = sequence;
2225        this.procedure = procedure;
2226      }
2227
2228        /**
2229         * @return {@link #sequence} (Sequence of procedures which serves to order and provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
2230         */
2231        public PositiveIntType getSequenceElement() { 
2232          if (this.sequence == null)
2233            if (Configuration.errorOnAutoCreate())
2234              throw new Error("Attempt to auto-create ProcedureComponent.sequence");
2235            else if (Configuration.doAutoCreate())
2236              this.sequence = new PositiveIntType(); // bb
2237          return this.sequence;
2238        }
2239
2240        public boolean hasSequenceElement() { 
2241          return this.sequence != null && !this.sequence.isEmpty();
2242        }
2243
2244        public boolean hasSequence() { 
2245          return this.sequence != null && !this.sequence.isEmpty();
2246        }
2247
2248        /**
2249         * @param value {@link #sequence} (Sequence of procedures which serves to order and provide a link.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
2250         */
2251        public ProcedureComponent setSequenceElement(PositiveIntType value) { 
2252          this.sequence = value;
2253          return this;
2254        }
2255
2256        /**
2257         * @return Sequence of procedures which serves to order and provide a link.
2258         */
2259        public int getSequence() { 
2260          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
2261        }
2262
2263        /**
2264         * @param value Sequence of procedures which serves to order and provide a link.
2265         */
2266        public ProcedureComponent setSequence(int value) { 
2267            if (this.sequence == null)
2268              this.sequence = new PositiveIntType();
2269            this.sequence.setValue(value);
2270          return this;
2271        }
2272
2273        /**
2274         * @return {@link #date} (Date and optionally time the procedure was performed .). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2275         */
2276        public DateTimeType getDateElement() { 
2277          if (this.date == null)
2278            if (Configuration.errorOnAutoCreate())
2279              throw new Error("Attempt to auto-create ProcedureComponent.date");
2280            else if (Configuration.doAutoCreate())
2281              this.date = new DateTimeType(); // bb
2282          return this.date;
2283        }
2284
2285        public boolean hasDateElement() { 
2286          return this.date != null && !this.date.isEmpty();
2287        }
2288
2289        public boolean hasDate() { 
2290          return this.date != null && !this.date.isEmpty();
2291        }
2292
2293        /**
2294         * @param value {@link #date} (Date and optionally time the procedure was performed .). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2295         */
2296        public ProcedureComponent setDateElement(DateTimeType value) { 
2297          this.date = value;
2298          return this;
2299        }
2300
2301        /**
2302         * @return Date and optionally time the procedure was performed .
2303         */
2304        public Date getDate() { 
2305          return this.date == null ? null : this.date.getValue();
2306        }
2307
2308        /**
2309         * @param value Date and optionally time the procedure was performed .
2310         */
2311        public ProcedureComponent setDate(Date value) { 
2312          if (value == null)
2313            this.date = null;
2314          else {
2315            if (this.date == null)
2316              this.date = new DateTimeType();
2317            this.date.setValue(value);
2318          }
2319          return this;
2320        }
2321
2322        /**
2323         * @return {@link #procedure} (The procedure code.)
2324         */
2325        public Type getProcedure() { 
2326          return this.procedure;
2327        }
2328
2329        /**
2330         * @return {@link #procedure} (The procedure code.)
2331         */
2332        public CodeableConcept getProcedureCodeableConcept() throws FHIRException { 
2333          if (this.procedure == null)
2334            return null;
2335          if (!(this.procedure instanceof CodeableConcept))
2336            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.procedure.getClass().getName()+" was encountered");
2337          return (CodeableConcept) this.procedure;
2338        }
2339
2340        public boolean hasProcedureCodeableConcept() { 
2341          return this != null && this.procedure instanceof CodeableConcept;
2342        }
2343
2344        /**
2345         * @return {@link #procedure} (The procedure code.)
2346         */
2347        public Reference getProcedureReference() throws FHIRException { 
2348          if (this.procedure == null)
2349            return null;
2350          if (!(this.procedure instanceof Reference))
2351            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.procedure.getClass().getName()+" was encountered");
2352          return (Reference) this.procedure;
2353        }
2354
2355        public boolean hasProcedureReference() { 
2356          return this != null && this.procedure instanceof Reference;
2357        }
2358
2359        public boolean hasProcedure() { 
2360          return this.procedure != null && !this.procedure.isEmpty();
2361        }
2362
2363        /**
2364         * @param value {@link #procedure} (The procedure code.)
2365         */
2366        public ProcedureComponent setProcedure(Type value) throws FHIRFormatError { 
2367          if (value != null && !(value instanceof CodeableConcept || value instanceof Reference))
2368            throw new FHIRFormatError("Not the right type for Claim.procedure.procedure[x]: "+value.fhirType());
2369          this.procedure = value;
2370          return this;
2371        }
2372
2373        protected void listChildren(List<Property> children) {
2374          super.listChildren(children);
2375          children.add(new Property("sequence", "positiveInt", "Sequence of procedures which serves to order and provide a link.", 0, 1, sequence));
2376          children.add(new Property("date", "dateTime", "Date and optionally time the procedure was performed .", 0, 1, date));
2377          children.add(new Property("procedure[x]", "CodeableConcept|Reference(Procedure)", "The procedure code.", 0, 1, procedure));
2378        }
2379
2380        @Override
2381        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2382          switch (_hash) {
2383          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "Sequence of procedures which serves to order and provide a link.", 0, 1, sequence);
2384          case 3076014: /*date*/  return new Property("date", "dateTime", "Date and optionally time the procedure was performed .", 0, 1, date);
2385          case 1640074445: /*procedure[x]*/  return new Property("procedure[x]", "CodeableConcept|Reference(Procedure)", "The procedure code.", 0, 1, procedure);
2386          case -1095204141: /*procedure*/  return new Property("procedure[x]", "CodeableConcept|Reference(Procedure)", "The procedure code.", 0, 1, procedure);
2387          case -1284783026: /*procedureCodeableConcept*/  return new Property("procedure[x]", "CodeableConcept|Reference(Procedure)", "The procedure code.", 0, 1, procedure);
2388          case 881809848: /*procedureReference*/  return new Property("procedure[x]", "CodeableConcept|Reference(Procedure)", "The procedure code.", 0, 1, procedure);
2389          default: return super.getNamedProperty(_hash, _name, _checkValid);
2390          }
2391
2392        }
2393
2394      @Override
2395      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2396        switch (hash) {
2397        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
2398        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2399        case -1095204141: /*procedure*/ return this.procedure == null ? new Base[0] : new Base[] {this.procedure}; // Type
2400        default: return super.getProperty(hash, name, checkValid);
2401        }
2402
2403      }
2404
2405      @Override
2406      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2407        switch (hash) {
2408        case 1349547969: // sequence
2409          this.sequence = castToPositiveInt(value); // PositiveIntType
2410          return value;
2411        case 3076014: // date
2412          this.date = castToDateTime(value); // DateTimeType
2413          return value;
2414        case -1095204141: // procedure
2415          this.procedure = castToType(value); // Type
2416          return value;
2417        default: return super.setProperty(hash, name, value);
2418        }
2419
2420      }
2421
2422      @Override
2423      public Base setProperty(String name, Base value) throws FHIRException {
2424        if (name.equals("sequence")) {
2425          this.sequence = castToPositiveInt(value); // PositiveIntType
2426        } else if (name.equals("date")) {
2427          this.date = castToDateTime(value); // DateTimeType
2428        } else if (name.equals("procedure[x]")) {
2429          this.procedure = castToType(value); // Type
2430        } else
2431          return super.setProperty(name, value);
2432        return value;
2433      }
2434
2435      @Override
2436      public Base makeProperty(int hash, String name) throws FHIRException {
2437        switch (hash) {
2438        case 1349547969:  return getSequenceElement();
2439        case 3076014:  return getDateElement();
2440        case 1640074445:  return getProcedure(); 
2441        case -1095204141:  return getProcedure(); 
2442        default: return super.makeProperty(hash, name);
2443        }
2444
2445      }
2446
2447      @Override
2448      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2449        switch (hash) {
2450        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
2451        case 3076014: /*date*/ return new String[] {"dateTime"};
2452        case -1095204141: /*procedure*/ return new String[] {"CodeableConcept", "Reference"};
2453        default: return super.getTypesForProperty(hash, name);
2454        }
2455
2456      }
2457
2458      @Override
2459      public Base addChild(String name) throws FHIRException {
2460        if (name.equals("sequence")) {
2461          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
2462        }
2463        else if (name.equals("date")) {
2464          throw new FHIRException("Cannot call addChild on a singleton property Claim.date");
2465        }
2466        else if (name.equals("procedureCodeableConcept")) {
2467          this.procedure = new CodeableConcept();
2468          return this.procedure;
2469        }
2470        else if (name.equals("procedureReference")) {
2471          this.procedure = new Reference();
2472          return this.procedure;
2473        }
2474        else
2475          return super.addChild(name);
2476      }
2477
2478      public ProcedureComponent copy() {
2479        ProcedureComponent dst = new ProcedureComponent();
2480        copyValues(dst);
2481        dst.sequence = sequence == null ? null : sequence.copy();
2482        dst.date = date == null ? null : date.copy();
2483        dst.procedure = procedure == null ? null : procedure.copy();
2484        return dst;
2485      }
2486
2487      @Override
2488      public boolean equalsDeep(Base other_) {
2489        if (!super.equalsDeep(other_))
2490          return false;
2491        if (!(other_ instanceof ProcedureComponent))
2492          return false;
2493        ProcedureComponent o = (ProcedureComponent) other_;
2494        return compareDeep(sequence, o.sequence, true) && compareDeep(date, o.date, true) && compareDeep(procedure, o.procedure, true)
2495          ;
2496      }
2497
2498      @Override
2499      public boolean equalsShallow(Base other_) {
2500        if (!super.equalsShallow(other_))
2501          return false;
2502        if (!(other_ instanceof ProcedureComponent))
2503          return false;
2504        ProcedureComponent o = (ProcedureComponent) other_;
2505        return compareValues(sequence, o.sequence, true) && compareValues(date, o.date, true);
2506      }
2507
2508      public boolean isEmpty() {
2509        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, date, procedure
2510          );
2511      }
2512
2513  public String fhirType() {
2514    return "Claim.procedure";
2515
2516  }
2517
2518  }
2519
2520    @Block()
2521    public static class InsuranceComponent extends BackboneElement implements IBaseBackboneElement {
2522        /**
2523         * Sequence of coverage which serves to provide a link and convey coordination of benefit order.
2524         */
2525        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2526        @Description(shortDefinition="Service instance identifier", formalDefinition="Sequence of coverage which serves to provide a link and convey coordination of benefit order." )
2527        protected PositiveIntType sequence;
2528
2529        /**
2530         * A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.
2531         */
2532        @Child(name = "focal", type = {BooleanType.class}, order=2, min=1, max=1, modifier=false, summary=false)
2533        @Description(shortDefinition="Is the focal Coverage", formalDefinition="A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated." )
2534        protected BooleanType focal;
2535
2536        /**
2537         * Reference to the program or plan identification, underwriter or payor.
2538         */
2539        @Child(name = "coverage", type = {Coverage.class}, order=3, min=1, max=1, modifier=false, summary=false)
2540        @Description(shortDefinition="Insurance information", formalDefinition="Reference to the program or plan identification, underwriter or payor." )
2541        protected Reference coverage;
2542
2543        /**
2544         * The actual object that is the target of the reference (Reference to the program or plan identification, underwriter or payor.)
2545         */
2546        protected Coverage coverageTarget;
2547
2548        /**
2549         * The contract number of a business agreement which describes the terms and conditions.
2550         */
2551        @Child(name = "businessArrangement", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
2552        @Description(shortDefinition="Business agreement", formalDefinition="The contract number of a business agreement which describes the terms and conditions." )
2553        protected StringType businessArrangement;
2554
2555        /**
2556         * A list of references from the Insurer to which these services pertain.
2557         */
2558        @Child(name = "preAuthRef", type = {StringType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2559        @Description(shortDefinition="Pre-Authorization/Determination Reference", formalDefinition="A list of references from the Insurer to which these services pertain." )
2560        protected List<StringType> preAuthRef;
2561
2562        /**
2563         * The Coverages adjudication details.
2564         */
2565        @Child(name = "claimResponse", type = {ClaimResponse.class}, order=6, min=0, max=1, modifier=false, summary=false)
2566        @Description(shortDefinition="Adjudication results", formalDefinition="The Coverages adjudication details." )
2567        protected Reference claimResponse;
2568
2569        /**
2570         * The actual object that is the target of the reference (The Coverages adjudication details.)
2571         */
2572        protected ClaimResponse claimResponseTarget;
2573
2574        private static final long serialVersionUID = -1216535489L;
2575
2576    /**
2577     * Constructor
2578     */
2579      public InsuranceComponent() {
2580        super();
2581      }
2582
2583    /**
2584     * Constructor
2585     */
2586      public InsuranceComponent(PositiveIntType sequence, BooleanType focal, Reference coverage) {
2587        super();
2588        this.sequence = sequence;
2589        this.focal = focal;
2590        this.coverage = coverage;
2591      }
2592
2593        /**
2594         * @return {@link #sequence} (Sequence of coverage which serves to provide a link and convey coordination of benefit order.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
2595         */
2596        public PositiveIntType getSequenceElement() { 
2597          if (this.sequence == null)
2598            if (Configuration.errorOnAutoCreate())
2599              throw new Error("Attempt to auto-create InsuranceComponent.sequence");
2600            else if (Configuration.doAutoCreate())
2601              this.sequence = new PositiveIntType(); // bb
2602          return this.sequence;
2603        }
2604
2605        public boolean hasSequenceElement() { 
2606          return this.sequence != null && !this.sequence.isEmpty();
2607        }
2608
2609        public boolean hasSequence() { 
2610          return this.sequence != null && !this.sequence.isEmpty();
2611        }
2612
2613        /**
2614         * @param value {@link #sequence} (Sequence of coverage which serves to provide a link and convey coordination of benefit order.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
2615         */
2616        public InsuranceComponent setSequenceElement(PositiveIntType value) { 
2617          this.sequence = value;
2618          return this;
2619        }
2620
2621        /**
2622         * @return Sequence of coverage which serves to provide a link and convey coordination of benefit order.
2623         */
2624        public int getSequence() { 
2625          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
2626        }
2627
2628        /**
2629         * @param value Sequence of coverage which serves to provide a link and convey coordination of benefit order.
2630         */
2631        public InsuranceComponent setSequence(int value) { 
2632            if (this.sequence == null)
2633              this.sequence = new PositiveIntType();
2634            this.sequence.setValue(value);
2635          return this;
2636        }
2637
2638        /**
2639         * @return {@link #focal} (A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.). This is the underlying object with id, value and extensions. The accessor "getFocal" gives direct access to the value
2640         */
2641        public BooleanType getFocalElement() { 
2642          if (this.focal == null)
2643            if (Configuration.errorOnAutoCreate())
2644              throw new Error("Attempt to auto-create InsuranceComponent.focal");
2645            else if (Configuration.doAutoCreate())
2646              this.focal = new BooleanType(); // bb
2647          return this.focal;
2648        }
2649
2650        public boolean hasFocalElement() { 
2651          return this.focal != null && !this.focal.isEmpty();
2652        }
2653
2654        public boolean hasFocal() { 
2655          return this.focal != null && !this.focal.isEmpty();
2656        }
2657
2658        /**
2659         * @param value {@link #focal} (A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.). This is the underlying object with id, value and extensions. The accessor "getFocal" gives direct access to the value
2660         */
2661        public InsuranceComponent setFocalElement(BooleanType value) { 
2662          this.focal = value;
2663          return this;
2664        }
2665
2666        /**
2667         * @return A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.
2668         */
2669        public boolean getFocal() { 
2670          return this.focal == null || this.focal.isEmpty() ? false : this.focal.getValue();
2671        }
2672
2673        /**
2674         * @param value A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.
2675         */
2676        public InsuranceComponent setFocal(boolean value) { 
2677            if (this.focal == null)
2678              this.focal = new BooleanType();
2679            this.focal.setValue(value);
2680          return this;
2681        }
2682
2683        /**
2684         * @return {@link #coverage} (Reference to the program or plan identification, underwriter or payor.)
2685         */
2686        public Reference getCoverage() { 
2687          if (this.coverage == null)
2688            if (Configuration.errorOnAutoCreate())
2689              throw new Error("Attempt to auto-create InsuranceComponent.coverage");
2690            else if (Configuration.doAutoCreate())
2691              this.coverage = new Reference(); // cc
2692          return this.coverage;
2693        }
2694
2695        public boolean hasCoverage() { 
2696          return this.coverage != null && !this.coverage.isEmpty();
2697        }
2698
2699        /**
2700         * @param value {@link #coverage} (Reference to the program or plan identification, underwriter or payor.)
2701         */
2702        public InsuranceComponent setCoverage(Reference value)  { 
2703          this.coverage = value;
2704          return this;
2705        }
2706
2707        /**
2708         * @return {@link #coverage} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Reference to the program or plan identification, underwriter or payor.)
2709         */
2710        public Coverage getCoverageTarget() { 
2711          if (this.coverageTarget == null)
2712            if (Configuration.errorOnAutoCreate())
2713              throw new Error("Attempt to auto-create InsuranceComponent.coverage");
2714            else if (Configuration.doAutoCreate())
2715              this.coverageTarget = new Coverage(); // aa
2716          return this.coverageTarget;
2717        }
2718
2719        /**
2720         * @param value {@link #coverage} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Reference to the program or plan identification, underwriter or payor.)
2721         */
2722        public InsuranceComponent setCoverageTarget(Coverage value) { 
2723          this.coverageTarget = value;
2724          return this;
2725        }
2726
2727        /**
2728         * @return {@link #businessArrangement} (The contract number of a business agreement which describes the terms and conditions.). This is the underlying object with id, value and extensions. The accessor "getBusinessArrangement" gives direct access to the value
2729         */
2730        public StringType getBusinessArrangementElement() { 
2731          if (this.businessArrangement == null)
2732            if (Configuration.errorOnAutoCreate())
2733              throw new Error("Attempt to auto-create InsuranceComponent.businessArrangement");
2734            else if (Configuration.doAutoCreate())
2735              this.businessArrangement = new StringType(); // bb
2736          return this.businessArrangement;
2737        }
2738
2739        public boolean hasBusinessArrangementElement() { 
2740          return this.businessArrangement != null && !this.businessArrangement.isEmpty();
2741        }
2742
2743        public boolean hasBusinessArrangement() { 
2744          return this.businessArrangement != null && !this.businessArrangement.isEmpty();
2745        }
2746
2747        /**
2748         * @param value {@link #businessArrangement} (The contract number of a business agreement which describes the terms and conditions.). This is the underlying object with id, value and extensions. The accessor "getBusinessArrangement" gives direct access to the value
2749         */
2750        public InsuranceComponent setBusinessArrangementElement(StringType value) { 
2751          this.businessArrangement = value;
2752          return this;
2753        }
2754
2755        /**
2756         * @return The contract number of a business agreement which describes the terms and conditions.
2757         */
2758        public String getBusinessArrangement() { 
2759          return this.businessArrangement == null ? null : this.businessArrangement.getValue();
2760        }
2761
2762        /**
2763         * @param value The contract number of a business agreement which describes the terms and conditions.
2764         */
2765        public InsuranceComponent setBusinessArrangement(String value) { 
2766          if (Utilities.noString(value))
2767            this.businessArrangement = null;
2768          else {
2769            if (this.businessArrangement == null)
2770              this.businessArrangement = new StringType();
2771            this.businessArrangement.setValue(value);
2772          }
2773          return this;
2774        }
2775
2776        /**
2777         * @return {@link #preAuthRef} (A list of references from the Insurer to which these services pertain.)
2778         */
2779        public List<StringType> getPreAuthRef() { 
2780          if (this.preAuthRef == null)
2781            this.preAuthRef = new ArrayList<StringType>();
2782          return this.preAuthRef;
2783        }
2784
2785        /**
2786         * @return Returns a reference to <code>this</code> for easy method chaining
2787         */
2788        public InsuranceComponent setPreAuthRef(List<StringType> thePreAuthRef) { 
2789          this.preAuthRef = thePreAuthRef;
2790          return this;
2791        }
2792
2793        public boolean hasPreAuthRef() { 
2794          if (this.preAuthRef == null)
2795            return false;
2796          for (StringType item : this.preAuthRef)
2797            if (!item.isEmpty())
2798              return true;
2799          return false;
2800        }
2801
2802        /**
2803         * @return {@link #preAuthRef} (A list of references from the Insurer to which these services pertain.)
2804         */
2805        public StringType addPreAuthRefElement() {//2 
2806          StringType t = new StringType();
2807          if (this.preAuthRef == null)
2808            this.preAuthRef = new ArrayList<StringType>();
2809          this.preAuthRef.add(t);
2810          return t;
2811        }
2812
2813        /**
2814         * @param value {@link #preAuthRef} (A list of references from the Insurer to which these services pertain.)
2815         */
2816        public InsuranceComponent addPreAuthRef(String value) { //1
2817          StringType t = new StringType();
2818          t.setValue(value);
2819          if (this.preAuthRef == null)
2820            this.preAuthRef = new ArrayList<StringType>();
2821          this.preAuthRef.add(t);
2822          return this;
2823        }
2824
2825        /**
2826         * @param value {@link #preAuthRef} (A list of references from the Insurer to which these services pertain.)
2827         */
2828        public boolean hasPreAuthRef(String value) { 
2829          if (this.preAuthRef == null)
2830            return false;
2831          for (StringType v : this.preAuthRef)
2832            if (v.getValue().equals(value)) // string
2833              return true;
2834          return false;
2835        }
2836
2837        /**
2838         * @return {@link #claimResponse} (The Coverages adjudication details.)
2839         */
2840        public Reference getClaimResponse() { 
2841          if (this.claimResponse == null)
2842            if (Configuration.errorOnAutoCreate())
2843              throw new Error("Attempt to auto-create InsuranceComponent.claimResponse");
2844            else if (Configuration.doAutoCreate())
2845              this.claimResponse = new Reference(); // cc
2846          return this.claimResponse;
2847        }
2848
2849        public boolean hasClaimResponse() { 
2850          return this.claimResponse != null && !this.claimResponse.isEmpty();
2851        }
2852
2853        /**
2854         * @param value {@link #claimResponse} (The Coverages adjudication details.)
2855         */
2856        public InsuranceComponent setClaimResponse(Reference value)  { 
2857          this.claimResponse = value;
2858          return this;
2859        }
2860
2861        /**
2862         * @return {@link #claimResponse} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The Coverages adjudication details.)
2863         */
2864        public ClaimResponse getClaimResponseTarget() { 
2865          if (this.claimResponseTarget == null)
2866            if (Configuration.errorOnAutoCreate())
2867              throw new Error("Attempt to auto-create InsuranceComponent.claimResponse");
2868            else if (Configuration.doAutoCreate())
2869              this.claimResponseTarget = new ClaimResponse(); // aa
2870          return this.claimResponseTarget;
2871        }
2872
2873        /**
2874         * @param value {@link #claimResponse} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The Coverages adjudication details.)
2875         */
2876        public InsuranceComponent setClaimResponseTarget(ClaimResponse value) { 
2877          this.claimResponseTarget = value;
2878          return this;
2879        }
2880
2881        protected void listChildren(List<Property> children) {
2882          super.listChildren(children);
2883          children.add(new Property("sequence", "positiveInt", "Sequence of coverage which serves to provide a link and convey coordination of benefit order.", 0, 1, sequence));
2884          children.add(new Property("focal", "boolean", "A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.", 0, 1, focal));
2885          children.add(new Property("coverage", "Reference(Coverage)", "Reference to the program or plan identification, underwriter or payor.", 0, 1, coverage));
2886          children.add(new Property("businessArrangement", "string", "The contract number of a business agreement which describes the terms and conditions.", 0, 1, businessArrangement));
2887          children.add(new Property("preAuthRef", "string", "A list of references from the Insurer to which these services pertain.", 0, java.lang.Integer.MAX_VALUE, preAuthRef));
2888          children.add(new Property("claimResponse", "Reference(ClaimResponse)", "The Coverages adjudication details.", 0, 1, claimResponse));
2889        }
2890
2891        @Override
2892        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2893          switch (_hash) {
2894          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "Sequence of coverage which serves to provide a link and convey coordination of benefit order.", 0, 1, sequence);
2895          case 97604197: /*focal*/  return new Property("focal", "boolean", "A flag to indicate that this Coverage is the focus for adjudication. The Coverage against which the claim is to be adjudicated.", 0, 1, focal);
2896          case -351767064: /*coverage*/  return new Property("coverage", "Reference(Coverage)", "Reference to the program or plan identification, underwriter or payor.", 0, 1, coverage);
2897          case 259920682: /*businessArrangement*/  return new Property("businessArrangement", "string", "The contract number of a business agreement which describes the terms and conditions.", 0, 1, businessArrangement);
2898          case 522246568: /*preAuthRef*/  return new Property("preAuthRef", "string", "A list of references from the Insurer to which these services pertain.", 0, java.lang.Integer.MAX_VALUE, preAuthRef);
2899          case 689513629: /*claimResponse*/  return new Property("claimResponse", "Reference(ClaimResponse)", "The Coverages adjudication details.", 0, 1, claimResponse);
2900          default: return super.getNamedProperty(_hash, _name, _checkValid);
2901          }
2902
2903        }
2904
2905      @Override
2906      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2907        switch (hash) {
2908        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
2909        case 97604197: /*focal*/ return this.focal == null ? new Base[0] : new Base[] {this.focal}; // BooleanType
2910        case -351767064: /*coverage*/ return this.coverage == null ? new Base[0] : new Base[] {this.coverage}; // Reference
2911        case 259920682: /*businessArrangement*/ return this.businessArrangement == null ? new Base[0] : new Base[] {this.businessArrangement}; // StringType
2912        case 522246568: /*preAuthRef*/ return this.preAuthRef == null ? new Base[0] : this.preAuthRef.toArray(new Base[this.preAuthRef.size()]); // StringType
2913        case 689513629: /*claimResponse*/ return this.claimResponse == null ? new Base[0] : new Base[] {this.claimResponse}; // Reference
2914        default: return super.getProperty(hash, name, checkValid);
2915        }
2916
2917      }
2918
2919      @Override
2920      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2921        switch (hash) {
2922        case 1349547969: // sequence
2923          this.sequence = castToPositiveInt(value); // PositiveIntType
2924          return value;
2925        case 97604197: // focal
2926          this.focal = castToBoolean(value); // BooleanType
2927          return value;
2928        case -351767064: // coverage
2929          this.coverage = castToReference(value); // Reference
2930          return value;
2931        case 259920682: // businessArrangement
2932          this.businessArrangement = castToString(value); // StringType
2933          return value;
2934        case 522246568: // preAuthRef
2935          this.getPreAuthRef().add(castToString(value)); // StringType
2936          return value;
2937        case 689513629: // claimResponse
2938          this.claimResponse = castToReference(value); // Reference
2939          return value;
2940        default: return super.setProperty(hash, name, value);
2941        }
2942
2943      }
2944
2945      @Override
2946      public Base setProperty(String name, Base value) throws FHIRException {
2947        if (name.equals("sequence")) {
2948          this.sequence = castToPositiveInt(value); // PositiveIntType
2949        } else if (name.equals("focal")) {
2950          this.focal = castToBoolean(value); // BooleanType
2951        } else if (name.equals("coverage")) {
2952          this.coverage = castToReference(value); // Reference
2953        } else if (name.equals("businessArrangement")) {
2954          this.businessArrangement = castToString(value); // StringType
2955        } else if (name.equals("preAuthRef")) {
2956          this.getPreAuthRef().add(castToString(value));
2957        } else if (name.equals("claimResponse")) {
2958          this.claimResponse = castToReference(value); // Reference
2959        } else
2960          return super.setProperty(name, value);
2961        return value;
2962      }
2963
2964      @Override
2965      public Base makeProperty(int hash, String name) throws FHIRException {
2966        switch (hash) {
2967        case 1349547969:  return getSequenceElement();
2968        case 97604197:  return getFocalElement();
2969        case -351767064:  return getCoverage(); 
2970        case 259920682:  return getBusinessArrangementElement();
2971        case 522246568:  return addPreAuthRefElement();
2972        case 689513629:  return getClaimResponse(); 
2973        default: return super.makeProperty(hash, name);
2974        }
2975
2976      }
2977
2978      @Override
2979      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2980        switch (hash) {
2981        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
2982        case 97604197: /*focal*/ return new String[] {"boolean"};
2983        case -351767064: /*coverage*/ return new String[] {"Reference"};
2984        case 259920682: /*businessArrangement*/ return new String[] {"string"};
2985        case 522246568: /*preAuthRef*/ return new String[] {"string"};
2986        case 689513629: /*claimResponse*/ return new String[] {"Reference"};
2987        default: return super.getTypesForProperty(hash, name);
2988        }
2989
2990      }
2991
2992      @Override
2993      public Base addChild(String name) throws FHIRException {
2994        if (name.equals("sequence")) {
2995          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
2996        }
2997        else if (name.equals("focal")) {
2998          throw new FHIRException("Cannot call addChild on a singleton property Claim.focal");
2999        }
3000        else if (name.equals("coverage")) {
3001          this.coverage = new Reference();
3002          return this.coverage;
3003        }
3004        else if (name.equals("businessArrangement")) {
3005          throw new FHIRException("Cannot call addChild on a singleton property Claim.businessArrangement");
3006        }
3007        else if (name.equals("preAuthRef")) {
3008          throw new FHIRException("Cannot call addChild on a singleton property Claim.preAuthRef");
3009        }
3010        else if (name.equals("claimResponse")) {
3011          this.claimResponse = new Reference();
3012          return this.claimResponse;
3013        }
3014        else
3015          return super.addChild(name);
3016      }
3017
3018      public InsuranceComponent copy() {
3019        InsuranceComponent dst = new InsuranceComponent();
3020        copyValues(dst);
3021        dst.sequence = sequence == null ? null : sequence.copy();
3022        dst.focal = focal == null ? null : focal.copy();
3023        dst.coverage = coverage == null ? null : coverage.copy();
3024        dst.businessArrangement = businessArrangement == null ? null : businessArrangement.copy();
3025        if (preAuthRef != null) {
3026          dst.preAuthRef = new ArrayList<StringType>();
3027          for (StringType i : preAuthRef)
3028            dst.preAuthRef.add(i.copy());
3029        };
3030        dst.claimResponse = claimResponse == null ? null : claimResponse.copy();
3031        return dst;
3032      }
3033
3034      @Override
3035      public boolean equalsDeep(Base other_) {
3036        if (!super.equalsDeep(other_))
3037          return false;
3038        if (!(other_ instanceof InsuranceComponent))
3039          return false;
3040        InsuranceComponent o = (InsuranceComponent) other_;
3041        return compareDeep(sequence, o.sequence, true) && compareDeep(focal, o.focal, true) && compareDeep(coverage, o.coverage, true)
3042           && compareDeep(businessArrangement, o.businessArrangement, true) && compareDeep(preAuthRef, o.preAuthRef, true)
3043           && compareDeep(claimResponse, o.claimResponse, true);
3044      }
3045
3046      @Override
3047      public boolean equalsShallow(Base other_) {
3048        if (!super.equalsShallow(other_))
3049          return false;
3050        if (!(other_ instanceof InsuranceComponent))
3051          return false;
3052        InsuranceComponent o = (InsuranceComponent) other_;
3053        return compareValues(sequence, o.sequence, true) && compareValues(focal, o.focal, true) && compareValues(businessArrangement, o.businessArrangement, true)
3054           && compareValues(preAuthRef, o.preAuthRef, true);
3055      }
3056
3057      public boolean isEmpty() {
3058        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, focal, coverage
3059          , businessArrangement, preAuthRef, claimResponse);
3060      }
3061
3062  public String fhirType() {
3063    return "Claim.insurance";
3064
3065  }
3066
3067  }
3068
3069    @Block()
3070    public static class AccidentComponent extends BackboneElement implements IBaseBackboneElement {
3071        /**
3072         * Date of an accident which these services are addressing.
3073         */
3074        @Child(name = "date", type = {DateType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3075        @Description(shortDefinition="When the accident occurred\nsee information codes\nsee information codes", formalDefinition="Date of an accident which these services are addressing." )
3076        protected DateType date;
3077
3078        /**
3079         * Type of accident: work, auto, etc.
3080         */
3081        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
3082        @Description(shortDefinition="The nature of the accident", formalDefinition="Type of accident: work, auto, etc." )
3083        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/v3-ActIncidentCode")
3084        protected CodeableConcept type;
3085
3086        /**
3087         * Accident Place.
3088         */
3089        @Child(name = "location", type = {Address.class, Location.class}, order=3, min=0, max=1, modifier=false, summary=false)
3090        @Description(shortDefinition="Accident Place", formalDefinition="Accident Place." )
3091        protected Type location;
3092
3093        private static final long serialVersionUID = 622904984L;
3094
3095    /**
3096     * Constructor
3097     */
3098      public AccidentComponent() {
3099        super();
3100      }
3101
3102    /**
3103     * Constructor
3104     */
3105      public AccidentComponent(DateType date) {
3106        super();
3107        this.date = date;
3108      }
3109
3110        /**
3111         * @return {@link #date} (Date of an accident which these services are addressing.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3112         */
3113        public DateType getDateElement() { 
3114          if (this.date == null)
3115            if (Configuration.errorOnAutoCreate())
3116              throw new Error("Attempt to auto-create AccidentComponent.date");
3117            else if (Configuration.doAutoCreate())
3118              this.date = new DateType(); // bb
3119          return this.date;
3120        }
3121
3122        public boolean hasDateElement() { 
3123          return this.date != null && !this.date.isEmpty();
3124        }
3125
3126        public boolean hasDate() { 
3127          return this.date != null && !this.date.isEmpty();
3128        }
3129
3130        /**
3131         * @param value {@link #date} (Date of an accident which these services are addressing.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
3132         */
3133        public AccidentComponent setDateElement(DateType value) { 
3134          this.date = value;
3135          return this;
3136        }
3137
3138        /**
3139         * @return Date of an accident which these services are addressing.
3140         */
3141        public Date getDate() { 
3142          return this.date == null ? null : this.date.getValue();
3143        }
3144
3145        /**
3146         * @param value Date of an accident which these services are addressing.
3147         */
3148        public AccidentComponent setDate(Date value) { 
3149            if (this.date == null)
3150              this.date = new DateType();
3151            this.date.setValue(value);
3152          return this;
3153        }
3154
3155        /**
3156         * @return {@link #type} (Type of accident: work, auto, etc.)
3157         */
3158        public CodeableConcept getType() { 
3159          if (this.type == null)
3160            if (Configuration.errorOnAutoCreate())
3161              throw new Error("Attempt to auto-create AccidentComponent.type");
3162            else if (Configuration.doAutoCreate())
3163              this.type = new CodeableConcept(); // cc
3164          return this.type;
3165        }
3166
3167        public boolean hasType() { 
3168          return this.type != null && !this.type.isEmpty();
3169        }
3170
3171        /**
3172         * @param value {@link #type} (Type of accident: work, auto, etc.)
3173         */
3174        public AccidentComponent setType(CodeableConcept value)  { 
3175          this.type = value;
3176          return this;
3177        }
3178
3179        /**
3180         * @return {@link #location} (Accident Place.)
3181         */
3182        public Type getLocation() { 
3183          return this.location;
3184        }
3185
3186        /**
3187         * @return {@link #location} (Accident Place.)
3188         */
3189        public Address getLocationAddress() throws FHIRException { 
3190          if (this.location == null)
3191            return null;
3192          if (!(this.location instanceof Address))
3193            throw new FHIRException("Type mismatch: the type Address was expected, but "+this.location.getClass().getName()+" was encountered");
3194          return (Address) this.location;
3195        }
3196
3197        public boolean hasLocationAddress() { 
3198          return this != null && this.location instanceof Address;
3199        }
3200
3201        /**
3202         * @return {@link #location} (Accident Place.)
3203         */
3204        public Reference getLocationReference() throws FHIRException { 
3205          if (this.location == null)
3206            return null;
3207          if (!(this.location instanceof Reference))
3208            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.location.getClass().getName()+" was encountered");
3209          return (Reference) this.location;
3210        }
3211
3212        public boolean hasLocationReference() { 
3213          return this != null && this.location instanceof Reference;
3214        }
3215
3216        public boolean hasLocation() { 
3217          return this.location != null && !this.location.isEmpty();
3218        }
3219
3220        /**
3221         * @param value {@link #location} (Accident Place.)
3222         */
3223        public AccidentComponent setLocation(Type value) throws FHIRFormatError { 
3224          if (value != null && !(value instanceof Address || value instanceof Reference))
3225            throw new FHIRFormatError("Not the right type for Claim.accident.location[x]: "+value.fhirType());
3226          this.location = value;
3227          return this;
3228        }
3229
3230        protected void listChildren(List<Property> children) {
3231          super.listChildren(children);
3232          children.add(new Property("date", "date", "Date of an accident which these services are addressing.", 0, 1, date));
3233          children.add(new Property("type", "CodeableConcept", "Type of accident: work, auto, etc.", 0, 1, type));
3234          children.add(new Property("location[x]", "Address|Reference(Location)", "Accident Place.", 0, 1, location));
3235        }
3236
3237        @Override
3238        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3239          switch (_hash) {
3240          case 3076014: /*date*/  return new Property("date", "date", "Date of an accident which these services are addressing.", 0, 1, date);
3241          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of accident: work, auto, etc.", 0, 1, type);
3242          case 552316075: /*location[x]*/  return new Property("location[x]", "Address|Reference(Location)", "Accident Place.", 0, 1, location);
3243          case 1901043637: /*location*/  return new Property("location[x]", "Address|Reference(Location)", "Accident Place.", 0, 1, location);
3244          case -1280020865: /*locationAddress*/  return new Property("location[x]", "Address|Reference(Location)", "Accident Place.", 0, 1, location);
3245          case 755866390: /*locationReference*/  return new Property("location[x]", "Address|Reference(Location)", "Accident Place.", 0, 1, location);
3246          default: return super.getNamedProperty(_hash, _name, _checkValid);
3247          }
3248
3249        }
3250
3251      @Override
3252      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3253        switch (hash) {
3254        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateType
3255        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
3256        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Type
3257        default: return super.getProperty(hash, name, checkValid);
3258        }
3259
3260      }
3261
3262      @Override
3263      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3264        switch (hash) {
3265        case 3076014: // date
3266          this.date = castToDate(value); // DateType
3267          return value;
3268        case 3575610: // type
3269          this.type = castToCodeableConcept(value); // CodeableConcept
3270          return value;
3271        case 1901043637: // location
3272          this.location = castToType(value); // Type
3273          return value;
3274        default: return super.setProperty(hash, name, value);
3275        }
3276
3277      }
3278
3279      @Override
3280      public Base setProperty(String name, Base value) throws FHIRException {
3281        if (name.equals("date")) {
3282          this.date = castToDate(value); // DateType
3283        } else if (name.equals("type")) {
3284          this.type = castToCodeableConcept(value); // CodeableConcept
3285        } else if (name.equals("location[x]")) {
3286          this.location = castToType(value); // Type
3287        } else
3288          return super.setProperty(name, value);
3289        return value;
3290      }
3291
3292      @Override
3293      public Base makeProperty(int hash, String name) throws FHIRException {
3294        switch (hash) {
3295        case 3076014:  return getDateElement();
3296        case 3575610:  return getType(); 
3297        case 552316075:  return getLocation(); 
3298        case 1901043637:  return getLocation(); 
3299        default: return super.makeProperty(hash, name);
3300        }
3301
3302      }
3303
3304      @Override
3305      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3306        switch (hash) {
3307        case 3076014: /*date*/ return new String[] {"date"};
3308        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
3309        case 1901043637: /*location*/ return new String[] {"Address", "Reference"};
3310        default: return super.getTypesForProperty(hash, name);
3311        }
3312
3313      }
3314
3315      @Override
3316      public Base addChild(String name) throws FHIRException {
3317        if (name.equals("date")) {
3318          throw new FHIRException("Cannot call addChild on a singleton property Claim.date");
3319        }
3320        else if (name.equals("type")) {
3321          this.type = new CodeableConcept();
3322          return this.type;
3323        }
3324        else if (name.equals("locationAddress")) {
3325          this.location = new Address();
3326          return this.location;
3327        }
3328        else if (name.equals("locationReference")) {
3329          this.location = new Reference();
3330          return this.location;
3331        }
3332        else
3333          return super.addChild(name);
3334      }
3335
3336      public AccidentComponent copy() {
3337        AccidentComponent dst = new AccidentComponent();
3338        copyValues(dst);
3339        dst.date = date == null ? null : date.copy();
3340        dst.type = type == null ? null : type.copy();
3341        dst.location = location == null ? null : location.copy();
3342        return dst;
3343      }
3344
3345      @Override
3346      public boolean equalsDeep(Base other_) {
3347        if (!super.equalsDeep(other_))
3348          return false;
3349        if (!(other_ instanceof AccidentComponent))
3350          return false;
3351        AccidentComponent o = (AccidentComponent) other_;
3352        return compareDeep(date, o.date, true) && compareDeep(type, o.type, true) && compareDeep(location, o.location, true)
3353          ;
3354      }
3355
3356      @Override
3357      public boolean equalsShallow(Base other_) {
3358        if (!super.equalsShallow(other_))
3359          return false;
3360        if (!(other_ instanceof AccidentComponent))
3361          return false;
3362        AccidentComponent o = (AccidentComponent) other_;
3363        return compareValues(date, o.date, true);
3364      }
3365
3366      public boolean isEmpty() {
3367        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(date, type, location);
3368      }
3369
3370  public String fhirType() {
3371    return "Claim.accident";
3372
3373  }
3374
3375  }
3376
3377    @Block()
3378    public static class ItemComponent extends BackboneElement implements IBaseBackboneElement {
3379        /**
3380         * A service line number.
3381         */
3382        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3383        @Description(shortDefinition="Service instance", formalDefinition="A service line number." )
3384        protected PositiveIntType sequence;
3385
3386        /**
3387         * CareTeam applicable for this service or product line.
3388         */
3389        @Child(name = "careTeamLinkId", type = {PositiveIntType.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3390        @Description(shortDefinition="Applicable careTeam members", formalDefinition="CareTeam applicable for this service or product line." )
3391        protected List<PositiveIntType> careTeamLinkId;
3392
3393        /**
3394         * Diagnosis applicable for this service or product line.
3395         */
3396        @Child(name = "diagnosisLinkId", type = {PositiveIntType.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3397        @Description(shortDefinition="Applicable diagnoses", formalDefinition="Diagnosis applicable for this service or product line." )
3398        protected List<PositiveIntType> diagnosisLinkId;
3399
3400        /**
3401         * Procedures applicable for this service or product line.
3402         */
3403        @Child(name = "procedureLinkId", type = {PositiveIntType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3404        @Description(shortDefinition="Applicable procedures", formalDefinition="Procedures applicable for this service or product line." )
3405        protected List<PositiveIntType> procedureLinkId;
3406
3407        /**
3408         * Exceptions, special conditions and supporting information pplicable for this service or product line.
3409         */
3410        @Child(name = "informationLinkId", type = {PositiveIntType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3411        @Description(shortDefinition="Applicable exception and supporting information", formalDefinition="Exceptions, special conditions and supporting information pplicable for this service or product line." )
3412        protected List<PositiveIntType> informationLinkId;
3413
3414        /**
3415         * The type of reveneu or cost center providing the product and/or service.
3416         */
3417        @Child(name = "revenue", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=false)
3418        @Description(shortDefinition="Revenue or cost center code", formalDefinition="The type of reveneu or cost center providing the product and/or service." )
3419        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-revenue-center")
3420        protected CodeableConcept revenue;
3421
3422        /**
3423         * Health Care Service Type Codes  to identify the classification of service or benefits.
3424         */
3425        @Child(name = "category", type = {CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=false)
3426        @Description(shortDefinition="Type of service or product", formalDefinition="Health Care Service Type Codes  to identify the classification of service or benefits." )
3427        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-subcategory")
3428        protected CodeableConcept category;
3429
3430        /**
3431         * If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,RXNorm,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.
3432         */
3433        @Child(name = "service", type = {CodeableConcept.class}, order=8, min=0, max=1, modifier=false, summary=false)
3434        @Description(shortDefinition="Billing Code", formalDefinition="If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,RXNorm,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'." )
3435        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-uscls")
3436        protected CodeableConcept service;
3437
3438        /**
3439         * Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
3440         */
3441        @Child(name = "modifier", type = {CodeableConcept.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3442        @Description(shortDefinition="Service/Product billing modifiers", formalDefinition="Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours." )
3443        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-modifiers")
3444        protected List<CodeableConcept> modifier;
3445
3446        /**
3447         * For programs which require reason codes for the inclusion or covering of this billed item under the program or sub-program.
3448         */
3449        @Child(name = "programCode", type = {CodeableConcept.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3450        @Description(shortDefinition="Program specific reason for item inclusion", formalDefinition="For programs which require reason codes for the inclusion or covering of this billed item under the program or sub-program." )
3451        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-program-code")
3452        protected List<CodeableConcept> programCode;
3453
3454        /**
3455         * The date or dates when the enclosed suite of services were performed or completed.
3456         */
3457        @Child(name = "serviced", type = {DateType.class, Period.class}, order=11, min=0, max=1, modifier=false, summary=false)
3458        @Description(shortDefinition="Date or dates of Service", formalDefinition="The date or dates when the enclosed suite of services were performed or completed." )
3459        protected Type serviced;
3460
3461        /**
3462         * Where the service was provided.
3463         */
3464        @Child(name = "location", type = {CodeableConcept.class, Address.class, Location.class}, order=12, min=0, max=1, modifier=false, summary=false)
3465        @Description(shortDefinition="Place of service", formalDefinition="Where the service was provided." )
3466        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-place")
3467        protected Type location;
3468
3469        /**
3470         * The number of repetitions of a service or product.
3471         */
3472        @Child(name = "quantity", type = {SimpleQuantity.class}, order=13, min=0, max=1, modifier=false, summary=false)
3473        @Description(shortDefinition="Count of Products or Services", formalDefinition="The number of repetitions of a service or product." )
3474        protected SimpleQuantity quantity;
3475
3476        /**
3477         * If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.
3478         */
3479        @Child(name = "unitPrice", type = {Money.class}, order=14, min=0, max=1, modifier=false, summary=false)
3480        @Description(shortDefinition="Fee, charge or cost per point", formalDefinition="If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group." )
3481        protected Money unitPrice;
3482
3483        /**
3484         * A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
3485         */
3486        @Child(name = "factor", type = {DecimalType.class}, order=15, min=0, max=1, modifier=false, summary=false)
3487        @Description(shortDefinition="Price scaling factor", formalDefinition="A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount." )
3488        protected DecimalType factor;
3489
3490        /**
3491         * The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
3492         */
3493        @Child(name = "net", type = {Money.class}, order=16, min=0, max=1, modifier=false, summary=false)
3494        @Description(shortDefinition="Total item cost", formalDefinition="The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied." )
3495        protected Money net;
3496
3497        /**
3498         * List of Unique Device Identifiers associated with this line item.
3499         */
3500        @Child(name = "udi", type = {Device.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3501        @Description(shortDefinition="Unique Device Identifier", formalDefinition="List of Unique Device Identifiers associated with this line item." )
3502        protected List<Reference> udi;
3503        /**
3504         * The actual objects that are the target of the reference (List of Unique Device Identifiers associated with this line item.)
3505         */
3506        protected List<Device> udiTarget;
3507
3508
3509        /**
3510         * Physical service site on the patient (limb, tooth, etc).
3511         */
3512        @Child(name = "bodySite", type = {CodeableConcept.class}, order=18, min=0, max=1, modifier=false, summary=false)
3513        @Description(shortDefinition="Service Location", formalDefinition="Physical service site on the patient (limb, tooth, etc)." )
3514        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/tooth")
3515        protected CodeableConcept bodySite;
3516
3517        /**
3518         * A region or surface of the site, eg. limb region or tooth surface(s).
3519         */
3520        @Child(name = "subSite", type = {CodeableConcept.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3521        @Description(shortDefinition="Service Sub-location", formalDefinition="A region or surface of the site, eg. limb region or tooth surface(s)." )
3522        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/surface")
3523        protected List<CodeableConcept> subSite;
3524
3525        /**
3526         * A billed item may include goods or services provided in multiple encounters.
3527         */
3528        @Child(name = "encounter", type = {Encounter.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3529        @Description(shortDefinition="Encounters related to this billed item", formalDefinition="A billed item may include goods or services provided in multiple encounters." )
3530        protected List<Reference> encounter;
3531        /**
3532         * The actual objects that are the target of the reference (A billed item may include goods or services provided in multiple encounters.)
3533         */
3534        protected List<Encounter> encounterTarget;
3535
3536
3537        /**
3538         * Second tier of goods and services.
3539         */
3540        @Child(name = "detail", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
3541        @Description(shortDefinition="Additional items", formalDefinition="Second tier of goods and services." )
3542        protected List<DetailComponent> detail;
3543
3544        private static final long serialVersionUID = 784765825L;
3545
3546    /**
3547     * Constructor
3548     */
3549      public ItemComponent() {
3550        super();
3551      }
3552
3553    /**
3554     * Constructor
3555     */
3556      public ItemComponent(PositiveIntType sequence) {
3557        super();
3558        this.sequence = sequence;
3559      }
3560
3561        /**
3562         * @return {@link #sequence} (A service line number.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
3563         */
3564        public PositiveIntType getSequenceElement() { 
3565          if (this.sequence == null)
3566            if (Configuration.errorOnAutoCreate())
3567              throw new Error("Attempt to auto-create ItemComponent.sequence");
3568            else if (Configuration.doAutoCreate())
3569              this.sequence = new PositiveIntType(); // bb
3570          return this.sequence;
3571        }
3572
3573        public boolean hasSequenceElement() { 
3574          return this.sequence != null && !this.sequence.isEmpty();
3575        }
3576
3577        public boolean hasSequence() { 
3578          return this.sequence != null && !this.sequence.isEmpty();
3579        }
3580
3581        /**
3582         * @param value {@link #sequence} (A service line number.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
3583         */
3584        public ItemComponent setSequenceElement(PositiveIntType value) { 
3585          this.sequence = value;
3586          return this;
3587        }
3588
3589        /**
3590         * @return A service line number.
3591         */
3592        public int getSequence() { 
3593          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
3594        }
3595
3596        /**
3597         * @param value A service line number.
3598         */
3599        public ItemComponent setSequence(int value) { 
3600            if (this.sequence == null)
3601              this.sequence = new PositiveIntType();
3602            this.sequence.setValue(value);
3603          return this;
3604        }
3605
3606        /**
3607         * @return {@link #careTeamLinkId} (CareTeam applicable for this service or product line.)
3608         */
3609        public List<PositiveIntType> getCareTeamLinkId() { 
3610          if (this.careTeamLinkId == null)
3611            this.careTeamLinkId = new ArrayList<PositiveIntType>();
3612          return this.careTeamLinkId;
3613        }
3614
3615        /**
3616         * @return Returns a reference to <code>this</code> for easy method chaining
3617         */
3618        public ItemComponent setCareTeamLinkId(List<PositiveIntType> theCareTeamLinkId) { 
3619          this.careTeamLinkId = theCareTeamLinkId;
3620          return this;
3621        }
3622
3623        public boolean hasCareTeamLinkId() { 
3624          if (this.careTeamLinkId == null)
3625            return false;
3626          for (PositiveIntType item : this.careTeamLinkId)
3627            if (!item.isEmpty())
3628              return true;
3629          return false;
3630        }
3631
3632        /**
3633         * @return {@link #careTeamLinkId} (CareTeam applicable for this service or product line.)
3634         */
3635        public PositiveIntType addCareTeamLinkIdElement() {//2 
3636          PositiveIntType t = new PositiveIntType();
3637          if (this.careTeamLinkId == null)
3638            this.careTeamLinkId = new ArrayList<PositiveIntType>();
3639          this.careTeamLinkId.add(t);
3640          return t;
3641        }
3642
3643        /**
3644         * @param value {@link #careTeamLinkId} (CareTeam applicable for this service or product line.)
3645         */
3646        public ItemComponent addCareTeamLinkId(int value) { //1
3647          PositiveIntType t = new PositiveIntType();
3648          t.setValue(value);
3649          if (this.careTeamLinkId == null)
3650            this.careTeamLinkId = new ArrayList<PositiveIntType>();
3651          this.careTeamLinkId.add(t);
3652          return this;
3653        }
3654
3655        /**
3656         * @param value {@link #careTeamLinkId} (CareTeam applicable for this service or product line.)
3657         */
3658        public boolean hasCareTeamLinkId(int value) { 
3659          if (this.careTeamLinkId == null)
3660            return false;
3661          for (PositiveIntType v : this.careTeamLinkId)
3662            if (v.getValue().equals(value)) // positiveInt
3663              return true;
3664          return false;
3665        }
3666
3667        /**
3668         * @return {@link #diagnosisLinkId} (Diagnosis applicable for this service or product line.)
3669         */
3670        public List<PositiveIntType> getDiagnosisLinkId() { 
3671          if (this.diagnosisLinkId == null)
3672            this.diagnosisLinkId = new ArrayList<PositiveIntType>();
3673          return this.diagnosisLinkId;
3674        }
3675
3676        /**
3677         * @return Returns a reference to <code>this</code> for easy method chaining
3678         */
3679        public ItemComponent setDiagnosisLinkId(List<PositiveIntType> theDiagnosisLinkId) { 
3680          this.diagnosisLinkId = theDiagnosisLinkId;
3681          return this;
3682        }
3683
3684        public boolean hasDiagnosisLinkId() { 
3685          if (this.diagnosisLinkId == null)
3686            return false;
3687          for (PositiveIntType item : this.diagnosisLinkId)
3688            if (!item.isEmpty())
3689              return true;
3690          return false;
3691        }
3692
3693        /**
3694         * @return {@link #diagnosisLinkId} (Diagnosis applicable for this service or product line.)
3695         */
3696        public PositiveIntType addDiagnosisLinkIdElement() {//2 
3697          PositiveIntType t = new PositiveIntType();
3698          if (this.diagnosisLinkId == null)
3699            this.diagnosisLinkId = new ArrayList<PositiveIntType>();
3700          this.diagnosisLinkId.add(t);
3701          return t;
3702        }
3703
3704        /**
3705         * @param value {@link #diagnosisLinkId} (Diagnosis applicable for this service or product line.)
3706         */
3707        public ItemComponent addDiagnosisLinkId(int value) { //1
3708          PositiveIntType t = new PositiveIntType();
3709          t.setValue(value);
3710          if (this.diagnosisLinkId == null)
3711            this.diagnosisLinkId = new ArrayList<PositiveIntType>();
3712          this.diagnosisLinkId.add(t);
3713          return this;
3714        }
3715
3716        /**
3717         * @param value {@link #diagnosisLinkId} (Diagnosis applicable for this service or product line.)
3718         */
3719        public boolean hasDiagnosisLinkId(int value) { 
3720          if (this.diagnosisLinkId == null)
3721            return false;
3722          for (PositiveIntType v : this.diagnosisLinkId)
3723            if (v.getValue().equals(value)) // positiveInt
3724              return true;
3725          return false;
3726        }
3727
3728        /**
3729         * @return {@link #procedureLinkId} (Procedures applicable for this service or product line.)
3730         */
3731        public List<PositiveIntType> getProcedureLinkId() { 
3732          if (this.procedureLinkId == null)
3733            this.procedureLinkId = new ArrayList<PositiveIntType>();
3734          return this.procedureLinkId;
3735        }
3736
3737        /**
3738         * @return Returns a reference to <code>this</code> for easy method chaining
3739         */
3740        public ItemComponent setProcedureLinkId(List<PositiveIntType> theProcedureLinkId) { 
3741          this.procedureLinkId = theProcedureLinkId;
3742          return this;
3743        }
3744
3745        public boolean hasProcedureLinkId() { 
3746          if (this.procedureLinkId == null)
3747            return false;
3748          for (PositiveIntType item : this.procedureLinkId)
3749            if (!item.isEmpty())
3750              return true;
3751          return false;
3752        }
3753
3754        /**
3755         * @return {@link #procedureLinkId} (Procedures applicable for this service or product line.)
3756         */
3757        public PositiveIntType addProcedureLinkIdElement() {//2 
3758          PositiveIntType t = new PositiveIntType();
3759          if (this.procedureLinkId == null)
3760            this.procedureLinkId = new ArrayList<PositiveIntType>();
3761          this.procedureLinkId.add(t);
3762          return t;
3763        }
3764
3765        /**
3766         * @param value {@link #procedureLinkId} (Procedures applicable for this service or product line.)
3767         */
3768        public ItemComponent addProcedureLinkId(int value) { //1
3769          PositiveIntType t = new PositiveIntType();
3770          t.setValue(value);
3771          if (this.procedureLinkId == null)
3772            this.procedureLinkId = new ArrayList<PositiveIntType>();
3773          this.procedureLinkId.add(t);
3774          return this;
3775        }
3776
3777        /**
3778         * @param value {@link #procedureLinkId} (Procedures applicable for this service or product line.)
3779         */
3780        public boolean hasProcedureLinkId(int value) { 
3781          if (this.procedureLinkId == null)
3782            return false;
3783          for (PositiveIntType v : this.procedureLinkId)
3784            if (v.getValue().equals(value)) // positiveInt
3785              return true;
3786          return false;
3787        }
3788
3789        /**
3790         * @return {@link #informationLinkId} (Exceptions, special conditions and supporting information pplicable for this service or product line.)
3791         */
3792        public List<PositiveIntType> getInformationLinkId() { 
3793          if (this.informationLinkId == null)
3794            this.informationLinkId = new ArrayList<PositiveIntType>();
3795          return this.informationLinkId;
3796        }
3797
3798        /**
3799         * @return Returns a reference to <code>this</code> for easy method chaining
3800         */
3801        public ItemComponent setInformationLinkId(List<PositiveIntType> theInformationLinkId) { 
3802          this.informationLinkId = theInformationLinkId;
3803          return this;
3804        }
3805
3806        public boolean hasInformationLinkId() { 
3807          if (this.informationLinkId == null)
3808            return false;
3809          for (PositiveIntType item : this.informationLinkId)
3810            if (!item.isEmpty())
3811              return true;
3812          return false;
3813        }
3814
3815        /**
3816         * @return {@link #informationLinkId} (Exceptions, special conditions and supporting information pplicable for this service or product line.)
3817         */
3818        public PositiveIntType addInformationLinkIdElement() {//2 
3819          PositiveIntType t = new PositiveIntType();
3820          if (this.informationLinkId == null)
3821            this.informationLinkId = new ArrayList<PositiveIntType>();
3822          this.informationLinkId.add(t);
3823          return t;
3824        }
3825
3826        /**
3827         * @param value {@link #informationLinkId} (Exceptions, special conditions and supporting information pplicable for this service or product line.)
3828         */
3829        public ItemComponent addInformationLinkId(int value) { //1
3830          PositiveIntType t = new PositiveIntType();
3831          t.setValue(value);
3832          if (this.informationLinkId == null)
3833            this.informationLinkId = new ArrayList<PositiveIntType>();
3834          this.informationLinkId.add(t);
3835          return this;
3836        }
3837
3838        /**
3839         * @param value {@link #informationLinkId} (Exceptions, special conditions and supporting information pplicable for this service or product line.)
3840         */
3841        public boolean hasInformationLinkId(int value) { 
3842          if (this.informationLinkId == null)
3843            return false;
3844          for (PositiveIntType v : this.informationLinkId)
3845            if (v.getValue().equals(value)) // positiveInt
3846              return true;
3847          return false;
3848        }
3849
3850        /**
3851         * @return {@link #revenue} (The type of reveneu or cost center providing the product and/or service.)
3852         */
3853        public CodeableConcept getRevenue() { 
3854          if (this.revenue == null)
3855            if (Configuration.errorOnAutoCreate())
3856              throw new Error("Attempt to auto-create ItemComponent.revenue");
3857            else if (Configuration.doAutoCreate())
3858              this.revenue = new CodeableConcept(); // cc
3859          return this.revenue;
3860        }
3861
3862        public boolean hasRevenue() { 
3863          return this.revenue != null && !this.revenue.isEmpty();
3864        }
3865
3866        /**
3867         * @param value {@link #revenue} (The type of reveneu or cost center providing the product and/or service.)
3868         */
3869        public ItemComponent setRevenue(CodeableConcept value)  { 
3870          this.revenue = value;
3871          return this;
3872        }
3873
3874        /**
3875         * @return {@link #category} (Health Care Service Type Codes  to identify the classification of service or benefits.)
3876         */
3877        public CodeableConcept getCategory() { 
3878          if (this.category == null)
3879            if (Configuration.errorOnAutoCreate())
3880              throw new Error("Attempt to auto-create ItemComponent.category");
3881            else if (Configuration.doAutoCreate())
3882              this.category = new CodeableConcept(); // cc
3883          return this.category;
3884        }
3885
3886        public boolean hasCategory() { 
3887          return this.category != null && !this.category.isEmpty();
3888        }
3889
3890        /**
3891         * @param value {@link #category} (Health Care Service Type Codes  to identify the classification of service or benefits.)
3892         */
3893        public ItemComponent setCategory(CodeableConcept value)  { 
3894          this.category = value;
3895          return this;
3896        }
3897
3898        /**
3899         * @return {@link #service} (If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,RXNorm,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.)
3900         */
3901        public CodeableConcept getService() { 
3902          if (this.service == null)
3903            if (Configuration.errorOnAutoCreate())
3904              throw new Error("Attempt to auto-create ItemComponent.service");
3905            else if (Configuration.doAutoCreate())
3906              this.service = new CodeableConcept(); // cc
3907          return this.service;
3908        }
3909
3910        public boolean hasService() { 
3911          return this.service != null && !this.service.isEmpty();
3912        }
3913
3914        /**
3915         * @param value {@link #service} (If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,RXNorm,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.)
3916         */
3917        public ItemComponent setService(CodeableConcept value)  { 
3918          this.service = value;
3919          return this;
3920        }
3921
3922        /**
3923         * @return {@link #modifier} (Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.)
3924         */
3925        public List<CodeableConcept> getModifier() { 
3926          if (this.modifier == null)
3927            this.modifier = new ArrayList<CodeableConcept>();
3928          return this.modifier;
3929        }
3930
3931        /**
3932         * @return Returns a reference to <code>this</code> for easy method chaining
3933         */
3934        public ItemComponent setModifier(List<CodeableConcept> theModifier) { 
3935          this.modifier = theModifier;
3936          return this;
3937        }
3938
3939        public boolean hasModifier() { 
3940          if (this.modifier == null)
3941            return false;
3942          for (CodeableConcept item : this.modifier)
3943            if (!item.isEmpty())
3944              return true;
3945          return false;
3946        }
3947
3948        public CodeableConcept addModifier() { //3
3949          CodeableConcept t = new CodeableConcept();
3950          if (this.modifier == null)
3951            this.modifier = new ArrayList<CodeableConcept>();
3952          this.modifier.add(t);
3953          return t;
3954        }
3955
3956        public ItemComponent addModifier(CodeableConcept t) { //3
3957          if (t == null)
3958            return this;
3959          if (this.modifier == null)
3960            this.modifier = new ArrayList<CodeableConcept>();
3961          this.modifier.add(t);
3962          return this;
3963        }
3964
3965        /**
3966         * @return The first repetition of repeating field {@link #modifier}, creating it if it does not already exist
3967         */
3968        public CodeableConcept getModifierFirstRep() { 
3969          if (getModifier().isEmpty()) {
3970            addModifier();
3971          }
3972          return getModifier().get(0);
3973        }
3974
3975        /**
3976         * @return {@link #programCode} (For programs which require reason codes for the inclusion or covering of this billed item under the program or sub-program.)
3977         */
3978        public List<CodeableConcept> getProgramCode() { 
3979          if (this.programCode == null)
3980            this.programCode = new ArrayList<CodeableConcept>();
3981          return this.programCode;
3982        }
3983
3984        /**
3985         * @return Returns a reference to <code>this</code> for easy method chaining
3986         */
3987        public ItemComponent setProgramCode(List<CodeableConcept> theProgramCode) { 
3988          this.programCode = theProgramCode;
3989          return this;
3990        }
3991
3992        public boolean hasProgramCode() { 
3993          if (this.programCode == null)
3994            return false;
3995          for (CodeableConcept item : this.programCode)
3996            if (!item.isEmpty())
3997              return true;
3998          return false;
3999        }
4000
4001        public CodeableConcept addProgramCode() { //3
4002          CodeableConcept t = new CodeableConcept();
4003          if (this.programCode == null)
4004            this.programCode = new ArrayList<CodeableConcept>();
4005          this.programCode.add(t);
4006          return t;
4007        }
4008
4009        public ItemComponent addProgramCode(CodeableConcept t) { //3
4010          if (t == null)
4011            return this;
4012          if (this.programCode == null)
4013            this.programCode = new ArrayList<CodeableConcept>();
4014          this.programCode.add(t);
4015          return this;
4016        }
4017
4018        /**
4019         * @return The first repetition of repeating field {@link #programCode}, creating it if it does not already exist
4020         */
4021        public CodeableConcept getProgramCodeFirstRep() { 
4022          if (getProgramCode().isEmpty()) {
4023            addProgramCode();
4024          }
4025          return getProgramCode().get(0);
4026        }
4027
4028        /**
4029         * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
4030         */
4031        public Type getServiced() { 
4032          return this.serviced;
4033        }
4034
4035        /**
4036         * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
4037         */
4038        public DateType getServicedDateType() throws FHIRException { 
4039          if (this.serviced == null)
4040            return null;
4041          if (!(this.serviced instanceof DateType))
4042            throw new FHIRException("Type mismatch: the type DateType was expected, but "+this.serviced.getClass().getName()+" was encountered");
4043          return (DateType) this.serviced;
4044        }
4045
4046        public boolean hasServicedDateType() { 
4047          return this != null && this.serviced instanceof DateType;
4048        }
4049
4050        /**
4051         * @return {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
4052         */
4053        public Period getServicedPeriod() throws FHIRException { 
4054          if (this.serviced == null)
4055            return null;
4056          if (!(this.serviced instanceof Period))
4057            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.serviced.getClass().getName()+" was encountered");
4058          return (Period) this.serviced;
4059        }
4060
4061        public boolean hasServicedPeriod() { 
4062          return this != null && this.serviced instanceof Period;
4063        }
4064
4065        public boolean hasServiced() { 
4066          return this.serviced != null && !this.serviced.isEmpty();
4067        }
4068
4069        /**
4070         * @param value {@link #serviced} (The date or dates when the enclosed suite of services were performed or completed.)
4071         */
4072        public ItemComponent setServiced(Type value) throws FHIRFormatError { 
4073          if (value != null && !(value instanceof DateType || value instanceof Period))
4074            throw new FHIRFormatError("Not the right type for Claim.item.serviced[x]: "+value.fhirType());
4075          this.serviced = value;
4076          return this;
4077        }
4078
4079        /**
4080         * @return {@link #location} (Where the service was provided.)
4081         */
4082        public Type getLocation() { 
4083          return this.location;
4084        }
4085
4086        /**
4087         * @return {@link #location} (Where the service was provided.)
4088         */
4089        public CodeableConcept getLocationCodeableConcept() throws FHIRException { 
4090          if (this.location == null)
4091            return null;
4092          if (!(this.location instanceof CodeableConcept))
4093            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.location.getClass().getName()+" was encountered");
4094          return (CodeableConcept) this.location;
4095        }
4096
4097        public boolean hasLocationCodeableConcept() { 
4098          return this != null && this.location instanceof CodeableConcept;
4099        }
4100
4101        /**
4102         * @return {@link #location} (Where the service was provided.)
4103         */
4104        public Address getLocationAddress() throws FHIRException { 
4105          if (this.location == null)
4106            return null;
4107          if (!(this.location instanceof Address))
4108            throw new FHIRException("Type mismatch: the type Address was expected, but "+this.location.getClass().getName()+" was encountered");
4109          return (Address) this.location;
4110        }
4111
4112        public boolean hasLocationAddress() { 
4113          return this != null && this.location instanceof Address;
4114        }
4115
4116        /**
4117         * @return {@link #location} (Where the service was provided.)
4118         */
4119        public Reference getLocationReference() throws FHIRException { 
4120          if (this.location == null)
4121            return null;
4122          if (!(this.location instanceof Reference))
4123            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.location.getClass().getName()+" was encountered");
4124          return (Reference) this.location;
4125        }
4126
4127        public boolean hasLocationReference() { 
4128          return this != null && this.location instanceof Reference;
4129        }
4130
4131        public boolean hasLocation() { 
4132          return this.location != null && !this.location.isEmpty();
4133        }
4134
4135        /**
4136         * @param value {@link #location} (Where the service was provided.)
4137         */
4138        public ItemComponent setLocation(Type value) throws FHIRFormatError { 
4139          if (value != null && !(value instanceof CodeableConcept || value instanceof Address || value instanceof Reference))
4140            throw new FHIRFormatError("Not the right type for Claim.item.location[x]: "+value.fhirType());
4141          this.location = value;
4142          return this;
4143        }
4144
4145        /**
4146         * @return {@link #quantity} (The number of repetitions of a service or product.)
4147         */
4148        public SimpleQuantity getQuantity() { 
4149          if (this.quantity == null)
4150            if (Configuration.errorOnAutoCreate())
4151              throw new Error("Attempt to auto-create ItemComponent.quantity");
4152            else if (Configuration.doAutoCreate())
4153              this.quantity = new SimpleQuantity(); // cc
4154          return this.quantity;
4155        }
4156
4157        public boolean hasQuantity() { 
4158          return this.quantity != null && !this.quantity.isEmpty();
4159        }
4160
4161        /**
4162         * @param value {@link #quantity} (The number of repetitions of a service or product.)
4163         */
4164        public ItemComponent setQuantity(SimpleQuantity value)  { 
4165          this.quantity = value;
4166          return this;
4167        }
4168
4169        /**
4170         * @return {@link #unitPrice} (If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.)
4171         */
4172        public Money getUnitPrice() { 
4173          if (this.unitPrice == null)
4174            if (Configuration.errorOnAutoCreate())
4175              throw new Error("Attempt to auto-create ItemComponent.unitPrice");
4176            else if (Configuration.doAutoCreate())
4177              this.unitPrice = new Money(); // cc
4178          return this.unitPrice;
4179        }
4180
4181        public boolean hasUnitPrice() { 
4182          return this.unitPrice != null && !this.unitPrice.isEmpty();
4183        }
4184
4185        /**
4186         * @param value {@link #unitPrice} (If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.)
4187         */
4188        public ItemComponent setUnitPrice(Money value)  { 
4189          this.unitPrice = value;
4190          return this;
4191        }
4192
4193        /**
4194         * @return {@link #factor} (A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
4195         */
4196        public DecimalType getFactorElement() { 
4197          if (this.factor == null)
4198            if (Configuration.errorOnAutoCreate())
4199              throw new Error("Attempt to auto-create ItemComponent.factor");
4200            else if (Configuration.doAutoCreate())
4201              this.factor = new DecimalType(); // bb
4202          return this.factor;
4203        }
4204
4205        public boolean hasFactorElement() { 
4206          return this.factor != null && !this.factor.isEmpty();
4207        }
4208
4209        public boolean hasFactor() { 
4210          return this.factor != null && !this.factor.isEmpty();
4211        }
4212
4213        /**
4214         * @param value {@link #factor} (A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
4215         */
4216        public ItemComponent setFactorElement(DecimalType value) { 
4217          this.factor = value;
4218          return this;
4219        }
4220
4221        /**
4222         * @return A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
4223         */
4224        public BigDecimal getFactor() { 
4225          return this.factor == null ? null : this.factor.getValue();
4226        }
4227
4228        /**
4229         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
4230         */
4231        public ItemComponent setFactor(BigDecimal value) { 
4232          if (value == null)
4233            this.factor = null;
4234          else {
4235            if (this.factor == null)
4236              this.factor = new DecimalType();
4237            this.factor.setValue(value);
4238          }
4239          return this;
4240        }
4241
4242        /**
4243         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
4244         */
4245        public ItemComponent setFactor(long value) { 
4246              this.factor = new DecimalType();
4247            this.factor.setValue(value);
4248          return this;
4249        }
4250
4251        /**
4252         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
4253         */
4254        public ItemComponent setFactor(double value) { 
4255              this.factor = new DecimalType();
4256            this.factor.setValue(value);
4257          return this;
4258        }
4259
4260        /**
4261         * @return {@link #net} (The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.)
4262         */
4263        public Money getNet() { 
4264          if (this.net == null)
4265            if (Configuration.errorOnAutoCreate())
4266              throw new Error("Attempt to auto-create ItemComponent.net");
4267            else if (Configuration.doAutoCreate())
4268              this.net = new Money(); // cc
4269          return this.net;
4270        }
4271
4272        public boolean hasNet() { 
4273          return this.net != null && !this.net.isEmpty();
4274        }
4275
4276        /**
4277         * @param value {@link #net} (The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.)
4278         */
4279        public ItemComponent setNet(Money value)  { 
4280          this.net = value;
4281          return this;
4282        }
4283
4284        /**
4285         * @return {@link #udi} (List of Unique Device Identifiers associated with this line item.)
4286         */
4287        public List<Reference> getUdi() { 
4288          if (this.udi == null)
4289            this.udi = new ArrayList<Reference>();
4290          return this.udi;
4291        }
4292
4293        /**
4294         * @return Returns a reference to <code>this</code> for easy method chaining
4295         */
4296        public ItemComponent setUdi(List<Reference> theUdi) { 
4297          this.udi = theUdi;
4298          return this;
4299        }
4300
4301        public boolean hasUdi() { 
4302          if (this.udi == null)
4303            return false;
4304          for (Reference item : this.udi)
4305            if (!item.isEmpty())
4306              return true;
4307          return false;
4308        }
4309
4310        public Reference addUdi() { //3
4311          Reference t = new Reference();
4312          if (this.udi == null)
4313            this.udi = new ArrayList<Reference>();
4314          this.udi.add(t);
4315          return t;
4316        }
4317
4318        public ItemComponent addUdi(Reference t) { //3
4319          if (t == null)
4320            return this;
4321          if (this.udi == null)
4322            this.udi = new ArrayList<Reference>();
4323          this.udi.add(t);
4324          return this;
4325        }
4326
4327        /**
4328         * @return The first repetition of repeating field {@link #udi}, creating it if it does not already exist
4329         */
4330        public Reference getUdiFirstRep() { 
4331          if (getUdi().isEmpty()) {
4332            addUdi();
4333          }
4334          return getUdi().get(0);
4335        }
4336
4337        /**
4338         * @deprecated Use Reference#setResource(IBaseResource) instead
4339         */
4340        @Deprecated
4341        public List<Device> getUdiTarget() { 
4342          if (this.udiTarget == null)
4343            this.udiTarget = new ArrayList<Device>();
4344          return this.udiTarget;
4345        }
4346
4347        /**
4348         * @deprecated Use Reference#setResource(IBaseResource) instead
4349         */
4350        @Deprecated
4351        public Device addUdiTarget() { 
4352          Device r = new Device();
4353          if (this.udiTarget == null)
4354            this.udiTarget = new ArrayList<Device>();
4355          this.udiTarget.add(r);
4356          return r;
4357        }
4358
4359        /**
4360         * @return {@link #bodySite} (Physical service site on the patient (limb, tooth, etc).)
4361         */
4362        public CodeableConcept getBodySite() { 
4363          if (this.bodySite == null)
4364            if (Configuration.errorOnAutoCreate())
4365              throw new Error("Attempt to auto-create ItemComponent.bodySite");
4366            else if (Configuration.doAutoCreate())
4367              this.bodySite = new CodeableConcept(); // cc
4368          return this.bodySite;
4369        }
4370
4371        public boolean hasBodySite() { 
4372          return this.bodySite != null && !this.bodySite.isEmpty();
4373        }
4374
4375        /**
4376         * @param value {@link #bodySite} (Physical service site on the patient (limb, tooth, etc).)
4377         */
4378        public ItemComponent setBodySite(CodeableConcept value)  { 
4379          this.bodySite = value;
4380          return this;
4381        }
4382
4383        /**
4384         * @return {@link #subSite} (A region or surface of the site, eg. limb region or tooth surface(s).)
4385         */
4386        public List<CodeableConcept> getSubSite() { 
4387          if (this.subSite == null)
4388            this.subSite = new ArrayList<CodeableConcept>();
4389          return this.subSite;
4390        }
4391
4392        /**
4393         * @return Returns a reference to <code>this</code> for easy method chaining
4394         */
4395        public ItemComponent setSubSite(List<CodeableConcept> theSubSite) { 
4396          this.subSite = theSubSite;
4397          return this;
4398        }
4399
4400        public boolean hasSubSite() { 
4401          if (this.subSite == null)
4402            return false;
4403          for (CodeableConcept item : this.subSite)
4404            if (!item.isEmpty())
4405              return true;
4406          return false;
4407        }
4408
4409        public CodeableConcept addSubSite() { //3
4410          CodeableConcept t = new CodeableConcept();
4411          if (this.subSite == null)
4412            this.subSite = new ArrayList<CodeableConcept>();
4413          this.subSite.add(t);
4414          return t;
4415        }
4416
4417        public ItemComponent addSubSite(CodeableConcept t) { //3
4418          if (t == null)
4419            return this;
4420          if (this.subSite == null)
4421            this.subSite = new ArrayList<CodeableConcept>();
4422          this.subSite.add(t);
4423          return this;
4424        }
4425
4426        /**
4427         * @return The first repetition of repeating field {@link #subSite}, creating it if it does not already exist
4428         */
4429        public CodeableConcept getSubSiteFirstRep() { 
4430          if (getSubSite().isEmpty()) {
4431            addSubSite();
4432          }
4433          return getSubSite().get(0);
4434        }
4435
4436        /**
4437         * @return {@link #encounter} (A billed item may include goods or services provided in multiple encounters.)
4438         */
4439        public List<Reference> getEncounter() { 
4440          if (this.encounter == null)
4441            this.encounter = new ArrayList<Reference>();
4442          return this.encounter;
4443        }
4444
4445        /**
4446         * @return Returns a reference to <code>this</code> for easy method chaining
4447         */
4448        public ItemComponent setEncounter(List<Reference> theEncounter) { 
4449          this.encounter = theEncounter;
4450          return this;
4451        }
4452
4453        public boolean hasEncounter() { 
4454          if (this.encounter == null)
4455            return false;
4456          for (Reference item : this.encounter)
4457            if (!item.isEmpty())
4458              return true;
4459          return false;
4460        }
4461
4462        public Reference addEncounter() { //3
4463          Reference t = new Reference();
4464          if (this.encounter == null)
4465            this.encounter = new ArrayList<Reference>();
4466          this.encounter.add(t);
4467          return t;
4468        }
4469
4470        public ItemComponent addEncounter(Reference t) { //3
4471          if (t == null)
4472            return this;
4473          if (this.encounter == null)
4474            this.encounter = new ArrayList<Reference>();
4475          this.encounter.add(t);
4476          return this;
4477        }
4478
4479        /**
4480         * @return The first repetition of repeating field {@link #encounter}, creating it if it does not already exist
4481         */
4482        public Reference getEncounterFirstRep() { 
4483          if (getEncounter().isEmpty()) {
4484            addEncounter();
4485          }
4486          return getEncounter().get(0);
4487        }
4488
4489        /**
4490         * @deprecated Use Reference#setResource(IBaseResource) instead
4491         */
4492        @Deprecated
4493        public List<Encounter> getEncounterTarget() { 
4494          if (this.encounterTarget == null)
4495            this.encounterTarget = new ArrayList<Encounter>();
4496          return this.encounterTarget;
4497        }
4498
4499        /**
4500         * @deprecated Use Reference#setResource(IBaseResource) instead
4501         */
4502        @Deprecated
4503        public Encounter addEncounterTarget() { 
4504          Encounter r = new Encounter();
4505          if (this.encounterTarget == null)
4506            this.encounterTarget = new ArrayList<Encounter>();
4507          this.encounterTarget.add(r);
4508          return r;
4509        }
4510
4511        /**
4512         * @return {@link #detail} (Second tier of goods and services.)
4513         */
4514        public List<DetailComponent> getDetail() { 
4515          if (this.detail == null)
4516            this.detail = new ArrayList<DetailComponent>();
4517          return this.detail;
4518        }
4519
4520        /**
4521         * @return Returns a reference to <code>this</code> for easy method chaining
4522         */
4523        public ItemComponent setDetail(List<DetailComponent> theDetail) { 
4524          this.detail = theDetail;
4525          return this;
4526        }
4527
4528        public boolean hasDetail() { 
4529          if (this.detail == null)
4530            return false;
4531          for (DetailComponent item : this.detail)
4532            if (!item.isEmpty())
4533              return true;
4534          return false;
4535        }
4536
4537        public DetailComponent addDetail() { //3
4538          DetailComponent t = new DetailComponent();
4539          if (this.detail == null)
4540            this.detail = new ArrayList<DetailComponent>();
4541          this.detail.add(t);
4542          return t;
4543        }
4544
4545        public ItemComponent addDetail(DetailComponent t) { //3
4546          if (t == null)
4547            return this;
4548          if (this.detail == null)
4549            this.detail = new ArrayList<DetailComponent>();
4550          this.detail.add(t);
4551          return this;
4552        }
4553
4554        /**
4555         * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist
4556         */
4557        public DetailComponent getDetailFirstRep() { 
4558          if (getDetail().isEmpty()) {
4559            addDetail();
4560          }
4561          return getDetail().get(0);
4562        }
4563
4564        protected void listChildren(List<Property> children) {
4565          super.listChildren(children);
4566          children.add(new Property("sequence", "positiveInt", "A service line number.", 0, 1, sequence));
4567          children.add(new Property("careTeamLinkId", "positiveInt", "CareTeam applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, careTeamLinkId));
4568          children.add(new Property("diagnosisLinkId", "positiveInt", "Diagnosis applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, diagnosisLinkId));
4569          children.add(new Property("procedureLinkId", "positiveInt", "Procedures applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, procedureLinkId));
4570          children.add(new Property("informationLinkId", "positiveInt", "Exceptions, special conditions and supporting information pplicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, informationLinkId));
4571          children.add(new Property("revenue", "CodeableConcept", "The type of reveneu or cost center providing the product and/or service.", 0, 1, revenue));
4572          children.add(new Property("category", "CodeableConcept", "Health Care Service Type Codes  to identify the classification of service or benefits.", 0, 1, category));
4573          children.add(new Property("service", "CodeableConcept", "If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,RXNorm,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.", 0, 1, service));
4574          children.add(new Property("modifier", "CodeableConcept", "Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.", 0, java.lang.Integer.MAX_VALUE, modifier));
4575          children.add(new Property("programCode", "CodeableConcept", "For programs which require reason codes for the inclusion or covering of this billed item under the program or sub-program.", 0, java.lang.Integer.MAX_VALUE, programCode));
4576          children.add(new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced));
4577          children.add(new Property("location[x]", "CodeableConcept|Address|Reference(Location)", "Where the service was provided.", 0, 1, location));
4578          children.add(new Property("quantity", "SimpleQuantity", "The number of repetitions of a service or product.", 0, 1, quantity));
4579          children.add(new Property("unitPrice", "Money", "If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.", 0, 1, unitPrice));
4580          children.add(new Property("factor", "decimal", "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", 0, 1, factor));
4581          children.add(new Property("net", "Money", "The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.", 0, 1, net));
4582          children.add(new Property("udi", "Reference(Device)", "List of Unique Device Identifiers associated with this line item.", 0, java.lang.Integer.MAX_VALUE, udi));
4583          children.add(new Property("bodySite", "CodeableConcept", "Physical service site on the patient (limb, tooth, etc).", 0, 1, bodySite));
4584          children.add(new Property("subSite", "CodeableConcept", "A region or surface of the site, eg. limb region or tooth surface(s).", 0, java.lang.Integer.MAX_VALUE, subSite));
4585          children.add(new Property("encounter", "Reference(Encounter)", "A billed item may include goods or services provided in multiple encounters.", 0, java.lang.Integer.MAX_VALUE, encounter));
4586          children.add(new Property("detail", "", "Second tier of goods and services.", 0, java.lang.Integer.MAX_VALUE, detail));
4587        }
4588
4589        @Override
4590        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4591          switch (_hash) {
4592          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "A service line number.", 0, 1, sequence);
4593          case -186757789: /*careTeamLinkId*/  return new Property("careTeamLinkId", "positiveInt", "CareTeam applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, careTeamLinkId);
4594          case -1659207418: /*diagnosisLinkId*/  return new Property("diagnosisLinkId", "positiveInt", "Diagnosis applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, diagnosisLinkId);
4595          case -532846744: /*procedureLinkId*/  return new Property("procedureLinkId", "positiveInt", "Procedures applicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, procedureLinkId);
4596          case 1965585153: /*informationLinkId*/  return new Property("informationLinkId", "positiveInt", "Exceptions, special conditions and supporting information pplicable for this service or product line.", 0, java.lang.Integer.MAX_VALUE, informationLinkId);
4597          case 1099842588: /*revenue*/  return new Property("revenue", "CodeableConcept", "The type of reveneu or cost center providing the product and/or service.", 0, 1, revenue);
4598          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Health Care Service Type Codes  to identify the classification of service or benefits.", 0, 1, category);
4599          case 1984153269: /*service*/  return new Property("service", "CodeableConcept", "If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,RXNorm,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.", 0, 1, service);
4600          case -615513385: /*modifier*/  return new Property("modifier", "CodeableConcept", "Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.", 0, java.lang.Integer.MAX_VALUE, modifier);
4601          case 1010065041: /*programCode*/  return new Property("programCode", "CodeableConcept", "For programs which require reason codes for the inclusion or covering of this billed item under the program or sub-program.", 0, java.lang.Integer.MAX_VALUE, programCode);
4602          case -1927922223: /*serviced[x]*/  return new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
4603          case 1379209295: /*serviced*/  return new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
4604          case 363246749: /*servicedDate*/  return new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
4605          case 1534966512: /*servicedPeriod*/  return new Property("serviced[x]", "date|Period", "The date or dates when the enclosed suite of services were performed or completed.", 0, 1, serviced);
4606          case 552316075: /*location[x]*/  return new Property("location[x]", "CodeableConcept|Address|Reference(Location)", "Where the service was provided.", 0, 1, location);
4607          case 1901043637: /*location*/  return new Property("location[x]", "CodeableConcept|Address|Reference(Location)", "Where the service was provided.", 0, 1, location);
4608          case -1224800468: /*locationCodeableConcept*/  return new Property("location[x]", "CodeableConcept|Address|Reference(Location)", "Where the service was provided.", 0, 1, location);
4609          case -1280020865: /*locationAddress*/  return new Property("location[x]", "CodeableConcept|Address|Reference(Location)", "Where the service was provided.", 0, 1, location);
4610          case 755866390: /*locationReference*/  return new Property("location[x]", "CodeableConcept|Address|Reference(Location)", "Where the service was provided.", 0, 1, location);
4611          case -1285004149: /*quantity*/  return new Property("quantity", "SimpleQuantity", "The number of repetitions of a service or product.", 0, 1, quantity);
4612          case -486196699: /*unitPrice*/  return new Property("unitPrice", "Money", "If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.", 0, 1, unitPrice);
4613          case -1282148017: /*factor*/  return new Property("factor", "decimal", "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", 0, 1, factor);
4614          case 108957: /*net*/  return new Property("net", "Money", "The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.", 0, 1, net);
4615          case 115642: /*udi*/  return new Property("udi", "Reference(Device)", "List of Unique Device Identifiers associated with this line item.", 0, java.lang.Integer.MAX_VALUE, udi);
4616          case 1702620169: /*bodySite*/  return new Property("bodySite", "CodeableConcept", "Physical service site on the patient (limb, tooth, etc).", 0, 1, bodySite);
4617          case -1868566105: /*subSite*/  return new Property("subSite", "CodeableConcept", "A region or surface of the site, eg. limb region or tooth surface(s).", 0, java.lang.Integer.MAX_VALUE, subSite);
4618          case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "A billed item may include goods or services provided in multiple encounters.", 0, java.lang.Integer.MAX_VALUE, encounter);
4619          case -1335224239: /*detail*/  return new Property("detail", "", "Second tier of goods and services.", 0, java.lang.Integer.MAX_VALUE, detail);
4620          default: return super.getNamedProperty(_hash, _name, _checkValid);
4621          }
4622
4623        }
4624
4625      @Override
4626      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4627        switch (hash) {
4628        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
4629        case -186757789: /*careTeamLinkId*/ return this.careTeamLinkId == null ? new Base[0] : this.careTeamLinkId.toArray(new Base[this.careTeamLinkId.size()]); // PositiveIntType
4630        case -1659207418: /*diagnosisLinkId*/ return this.diagnosisLinkId == null ? new Base[0] : this.diagnosisLinkId.toArray(new Base[this.diagnosisLinkId.size()]); // PositiveIntType
4631        case -532846744: /*procedureLinkId*/ return this.procedureLinkId == null ? new Base[0] : this.procedureLinkId.toArray(new Base[this.procedureLinkId.size()]); // PositiveIntType
4632        case 1965585153: /*informationLinkId*/ return this.informationLinkId == null ? new Base[0] : this.informationLinkId.toArray(new Base[this.informationLinkId.size()]); // PositiveIntType
4633        case 1099842588: /*revenue*/ return this.revenue == null ? new Base[0] : new Base[] {this.revenue}; // CodeableConcept
4634        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
4635        case 1984153269: /*service*/ return this.service == null ? new Base[0] : new Base[] {this.service}; // CodeableConcept
4636        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : this.modifier.toArray(new Base[this.modifier.size()]); // CodeableConcept
4637        case 1010065041: /*programCode*/ return this.programCode == null ? new Base[0] : this.programCode.toArray(new Base[this.programCode.size()]); // CodeableConcept
4638        case 1379209295: /*serviced*/ return this.serviced == null ? new Base[0] : new Base[] {this.serviced}; // Type
4639        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Type
4640        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // SimpleQuantity
4641        case -486196699: /*unitPrice*/ return this.unitPrice == null ? new Base[0] : new Base[] {this.unitPrice}; // Money
4642        case -1282148017: /*factor*/ return this.factor == null ? new Base[0] : new Base[] {this.factor}; // DecimalType
4643        case 108957: /*net*/ return this.net == null ? new Base[0] : new Base[] {this.net}; // Money
4644        case 115642: /*udi*/ return this.udi == null ? new Base[0] : this.udi.toArray(new Base[this.udi.size()]); // Reference
4645        case 1702620169: /*bodySite*/ return this.bodySite == null ? new Base[0] : new Base[] {this.bodySite}; // CodeableConcept
4646        case -1868566105: /*subSite*/ return this.subSite == null ? new Base[0] : this.subSite.toArray(new Base[this.subSite.size()]); // CodeableConcept
4647        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : this.encounter.toArray(new Base[this.encounter.size()]); // Reference
4648        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // DetailComponent
4649        default: return super.getProperty(hash, name, checkValid);
4650        }
4651
4652      }
4653
4654      @Override
4655      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4656        switch (hash) {
4657        case 1349547969: // sequence
4658          this.sequence = castToPositiveInt(value); // PositiveIntType
4659          return value;
4660        case -186757789: // careTeamLinkId
4661          this.getCareTeamLinkId().add(castToPositiveInt(value)); // PositiveIntType
4662          return value;
4663        case -1659207418: // diagnosisLinkId
4664          this.getDiagnosisLinkId().add(castToPositiveInt(value)); // PositiveIntType
4665          return value;
4666        case -532846744: // procedureLinkId
4667          this.getProcedureLinkId().add(castToPositiveInt(value)); // PositiveIntType
4668          return value;
4669        case 1965585153: // informationLinkId
4670          this.getInformationLinkId().add(castToPositiveInt(value)); // PositiveIntType
4671          return value;
4672        case 1099842588: // revenue
4673          this.revenue = castToCodeableConcept(value); // CodeableConcept
4674          return value;
4675        case 50511102: // category
4676          this.category = castToCodeableConcept(value); // CodeableConcept
4677          return value;
4678        case 1984153269: // service
4679          this.service = castToCodeableConcept(value); // CodeableConcept
4680          return value;
4681        case -615513385: // modifier
4682          this.getModifier().add(castToCodeableConcept(value)); // CodeableConcept
4683          return value;
4684        case 1010065041: // programCode
4685          this.getProgramCode().add(castToCodeableConcept(value)); // CodeableConcept
4686          return value;
4687        case 1379209295: // serviced
4688          this.serviced = castToType(value); // Type
4689          return value;
4690        case 1901043637: // location
4691          this.location = castToType(value); // Type
4692          return value;
4693        case -1285004149: // quantity
4694          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
4695          return value;
4696        case -486196699: // unitPrice
4697          this.unitPrice = castToMoney(value); // Money
4698          return value;
4699        case -1282148017: // factor
4700          this.factor = castToDecimal(value); // DecimalType
4701          return value;
4702        case 108957: // net
4703          this.net = castToMoney(value); // Money
4704          return value;
4705        case 115642: // udi
4706          this.getUdi().add(castToReference(value)); // Reference
4707          return value;
4708        case 1702620169: // bodySite
4709          this.bodySite = castToCodeableConcept(value); // CodeableConcept
4710          return value;
4711        case -1868566105: // subSite
4712          this.getSubSite().add(castToCodeableConcept(value)); // CodeableConcept
4713          return value;
4714        case 1524132147: // encounter
4715          this.getEncounter().add(castToReference(value)); // Reference
4716          return value;
4717        case -1335224239: // detail
4718          this.getDetail().add((DetailComponent) value); // DetailComponent
4719          return value;
4720        default: return super.setProperty(hash, name, value);
4721        }
4722
4723      }
4724
4725      @Override
4726      public Base setProperty(String name, Base value) throws FHIRException {
4727        if (name.equals("sequence")) {
4728          this.sequence = castToPositiveInt(value); // PositiveIntType
4729        } else if (name.equals("careTeamLinkId")) {
4730          this.getCareTeamLinkId().add(castToPositiveInt(value));
4731        } else if (name.equals("diagnosisLinkId")) {
4732          this.getDiagnosisLinkId().add(castToPositiveInt(value));
4733        } else if (name.equals("procedureLinkId")) {
4734          this.getProcedureLinkId().add(castToPositiveInt(value));
4735        } else if (name.equals("informationLinkId")) {
4736          this.getInformationLinkId().add(castToPositiveInt(value));
4737        } else if (name.equals("revenue")) {
4738          this.revenue = castToCodeableConcept(value); // CodeableConcept
4739        } else if (name.equals("category")) {
4740          this.category = castToCodeableConcept(value); // CodeableConcept
4741        } else if (name.equals("service")) {
4742          this.service = castToCodeableConcept(value); // CodeableConcept
4743        } else if (name.equals("modifier")) {
4744          this.getModifier().add(castToCodeableConcept(value));
4745        } else if (name.equals("programCode")) {
4746          this.getProgramCode().add(castToCodeableConcept(value));
4747        } else if (name.equals("serviced[x]")) {
4748          this.serviced = castToType(value); // Type
4749        } else if (name.equals("location[x]")) {
4750          this.location = castToType(value); // Type
4751        } else if (name.equals("quantity")) {
4752          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
4753        } else if (name.equals("unitPrice")) {
4754          this.unitPrice = castToMoney(value); // Money
4755        } else if (name.equals("factor")) {
4756          this.factor = castToDecimal(value); // DecimalType
4757        } else if (name.equals("net")) {
4758          this.net = castToMoney(value); // Money
4759        } else if (name.equals("udi")) {
4760          this.getUdi().add(castToReference(value));
4761        } else if (name.equals("bodySite")) {
4762          this.bodySite = castToCodeableConcept(value); // CodeableConcept
4763        } else if (name.equals("subSite")) {
4764          this.getSubSite().add(castToCodeableConcept(value));
4765        } else if (name.equals("encounter")) {
4766          this.getEncounter().add(castToReference(value));
4767        } else if (name.equals("detail")) {
4768          this.getDetail().add((DetailComponent) value);
4769        } else
4770          return super.setProperty(name, value);
4771        return value;
4772      }
4773
4774      @Override
4775      public Base makeProperty(int hash, String name) throws FHIRException {
4776        switch (hash) {
4777        case 1349547969:  return getSequenceElement();
4778        case -186757789:  return addCareTeamLinkIdElement();
4779        case -1659207418:  return addDiagnosisLinkIdElement();
4780        case -532846744:  return addProcedureLinkIdElement();
4781        case 1965585153:  return addInformationLinkIdElement();
4782        case 1099842588:  return getRevenue(); 
4783        case 50511102:  return getCategory(); 
4784        case 1984153269:  return getService(); 
4785        case -615513385:  return addModifier(); 
4786        case 1010065041:  return addProgramCode(); 
4787        case -1927922223:  return getServiced(); 
4788        case 1379209295:  return getServiced(); 
4789        case 552316075:  return getLocation(); 
4790        case 1901043637:  return getLocation(); 
4791        case -1285004149:  return getQuantity(); 
4792        case -486196699:  return getUnitPrice(); 
4793        case -1282148017:  return getFactorElement();
4794        case 108957:  return getNet(); 
4795        case 115642:  return addUdi(); 
4796        case 1702620169:  return getBodySite(); 
4797        case -1868566105:  return addSubSite(); 
4798        case 1524132147:  return addEncounter(); 
4799        case -1335224239:  return addDetail(); 
4800        default: return super.makeProperty(hash, name);
4801        }
4802
4803      }
4804
4805      @Override
4806      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4807        switch (hash) {
4808        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
4809        case -186757789: /*careTeamLinkId*/ return new String[] {"positiveInt"};
4810        case -1659207418: /*diagnosisLinkId*/ return new String[] {"positiveInt"};
4811        case -532846744: /*procedureLinkId*/ return new String[] {"positiveInt"};
4812        case 1965585153: /*informationLinkId*/ return new String[] {"positiveInt"};
4813        case 1099842588: /*revenue*/ return new String[] {"CodeableConcept"};
4814        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
4815        case 1984153269: /*service*/ return new String[] {"CodeableConcept"};
4816        case -615513385: /*modifier*/ return new String[] {"CodeableConcept"};
4817        case 1010065041: /*programCode*/ return new String[] {"CodeableConcept"};
4818        case 1379209295: /*serviced*/ return new String[] {"date", "Period"};
4819        case 1901043637: /*location*/ return new String[] {"CodeableConcept", "Address", "Reference"};
4820        case -1285004149: /*quantity*/ return new String[] {"SimpleQuantity"};
4821        case -486196699: /*unitPrice*/ return new String[] {"Money"};
4822        case -1282148017: /*factor*/ return new String[] {"decimal"};
4823        case 108957: /*net*/ return new String[] {"Money"};
4824        case 115642: /*udi*/ return new String[] {"Reference"};
4825        case 1702620169: /*bodySite*/ return new String[] {"CodeableConcept"};
4826        case -1868566105: /*subSite*/ return new String[] {"CodeableConcept"};
4827        case 1524132147: /*encounter*/ return new String[] {"Reference"};
4828        case -1335224239: /*detail*/ return new String[] {};
4829        default: return super.getTypesForProperty(hash, name);
4830        }
4831
4832      }
4833
4834      @Override
4835      public Base addChild(String name) throws FHIRException {
4836        if (name.equals("sequence")) {
4837          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
4838        }
4839        else if (name.equals("careTeamLinkId")) {
4840          throw new FHIRException("Cannot call addChild on a singleton property Claim.careTeamLinkId");
4841        }
4842        else if (name.equals("diagnosisLinkId")) {
4843          throw new FHIRException("Cannot call addChild on a singleton property Claim.diagnosisLinkId");
4844        }
4845        else if (name.equals("procedureLinkId")) {
4846          throw new FHIRException("Cannot call addChild on a singleton property Claim.procedureLinkId");
4847        }
4848        else if (name.equals("informationLinkId")) {
4849          throw new FHIRException("Cannot call addChild on a singleton property Claim.informationLinkId");
4850        }
4851        else if (name.equals("revenue")) {
4852          this.revenue = new CodeableConcept();
4853          return this.revenue;
4854        }
4855        else if (name.equals("category")) {
4856          this.category = new CodeableConcept();
4857          return this.category;
4858        }
4859        else if (name.equals("service")) {
4860          this.service = new CodeableConcept();
4861          return this.service;
4862        }
4863        else if (name.equals("modifier")) {
4864          return addModifier();
4865        }
4866        else if (name.equals("programCode")) {
4867          return addProgramCode();
4868        }
4869        else if (name.equals("servicedDate")) {
4870          this.serviced = new DateType();
4871          return this.serviced;
4872        }
4873        else if (name.equals("servicedPeriod")) {
4874          this.serviced = new Period();
4875          return this.serviced;
4876        }
4877        else if (name.equals("locationCodeableConcept")) {
4878          this.location = new CodeableConcept();
4879          return this.location;
4880        }
4881        else if (name.equals("locationAddress")) {
4882          this.location = new Address();
4883          return this.location;
4884        }
4885        else if (name.equals("locationReference")) {
4886          this.location = new Reference();
4887          return this.location;
4888        }
4889        else if (name.equals("quantity")) {
4890          this.quantity = new SimpleQuantity();
4891          return this.quantity;
4892        }
4893        else if (name.equals("unitPrice")) {
4894          this.unitPrice = new Money();
4895          return this.unitPrice;
4896        }
4897        else if (name.equals("factor")) {
4898          throw new FHIRException("Cannot call addChild on a singleton property Claim.factor");
4899        }
4900        else if (name.equals("net")) {
4901          this.net = new Money();
4902          return this.net;
4903        }
4904        else if (name.equals("udi")) {
4905          return addUdi();
4906        }
4907        else if (name.equals("bodySite")) {
4908          this.bodySite = new CodeableConcept();
4909          return this.bodySite;
4910        }
4911        else if (name.equals("subSite")) {
4912          return addSubSite();
4913        }
4914        else if (name.equals("encounter")) {
4915          return addEncounter();
4916        }
4917        else if (name.equals("detail")) {
4918          return addDetail();
4919        }
4920        else
4921          return super.addChild(name);
4922      }
4923
4924      public ItemComponent copy() {
4925        ItemComponent dst = new ItemComponent();
4926        copyValues(dst);
4927        dst.sequence = sequence == null ? null : sequence.copy();
4928        if (careTeamLinkId != null) {
4929          dst.careTeamLinkId = new ArrayList<PositiveIntType>();
4930          for (PositiveIntType i : careTeamLinkId)
4931            dst.careTeamLinkId.add(i.copy());
4932        };
4933        if (diagnosisLinkId != null) {
4934          dst.diagnosisLinkId = new ArrayList<PositiveIntType>();
4935          for (PositiveIntType i : diagnosisLinkId)
4936            dst.diagnosisLinkId.add(i.copy());
4937        };
4938        if (procedureLinkId != null) {
4939          dst.procedureLinkId = new ArrayList<PositiveIntType>();
4940          for (PositiveIntType i : procedureLinkId)
4941            dst.procedureLinkId.add(i.copy());
4942        };
4943        if (informationLinkId != null) {
4944          dst.informationLinkId = new ArrayList<PositiveIntType>();
4945          for (PositiveIntType i : informationLinkId)
4946            dst.informationLinkId.add(i.copy());
4947        };
4948        dst.revenue = revenue == null ? null : revenue.copy();
4949        dst.category = category == null ? null : category.copy();
4950        dst.service = service == null ? null : service.copy();
4951        if (modifier != null) {
4952          dst.modifier = new ArrayList<CodeableConcept>();
4953          for (CodeableConcept i : modifier)
4954            dst.modifier.add(i.copy());
4955        };
4956        if (programCode != null) {
4957          dst.programCode = new ArrayList<CodeableConcept>();
4958          for (CodeableConcept i : programCode)
4959            dst.programCode.add(i.copy());
4960        };
4961        dst.serviced = serviced == null ? null : serviced.copy();
4962        dst.location = location == null ? null : location.copy();
4963        dst.quantity = quantity == null ? null : quantity.copy();
4964        dst.unitPrice = unitPrice == null ? null : unitPrice.copy();
4965        dst.factor = factor == null ? null : factor.copy();
4966        dst.net = net == null ? null : net.copy();
4967        if (udi != null) {
4968          dst.udi = new ArrayList<Reference>();
4969          for (Reference i : udi)
4970            dst.udi.add(i.copy());
4971        };
4972        dst.bodySite = bodySite == null ? null : bodySite.copy();
4973        if (subSite != null) {
4974          dst.subSite = new ArrayList<CodeableConcept>();
4975          for (CodeableConcept i : subSite)
4976            dst.subSite.add(i.copy());
4977        };
4978        if (encounter != null) {
4979          dst.encounter = new ArrayList<Reference>();
4980          for (Reference i : encounter)
4981            dst.encounter.add(i.copy());
4982        };
4983        if (detail != null) {
4984          dst.detail = new ArrayList<DetailComponent>();
4985          for (DetailComponent i : detail)
4986            dst.detail.add(i.copy());
4987        };
4988        return dst;
4989      }
4990
4991      @Override
4992      public boolean equalsDeep(Base other_) {
4993        if (!super.equalsDeep(other_))
4994          return false;
4995        if (!(other_ instanceof ItemComponent))
4996          return false;
4997        ItemComponent o = (ItemComponent) other_;
4998        return compareDeep(sequence, o.sequence, true) && compareDeep(careTeamLinkId, o.careTeamLinkId, true)
4999           && compareDeep(diagnosisLinkId, o.diagnosisLinkId, true) && compareDeep(procedureLinkId, o.procedureLinkId, true)
5000           && compareDeep(informationLinkId, o.informationLinkId, true) && compareDeep(revenue, o.revenue, true)
5001           && compareDeep(category, o.category, true) && compareDeep(service, o.service, true) && compareDeep(modifier, o.modifier, true)
5002           && compareDeep(programCode, o.programCode, true) && compareDeep(serviced, o.serviced, true) && compareDeep(location, o.location, true)
5003           && compareDeep(quantity, o.quantity, true) && compareDeep(unitPrice, o.unitPrice, true) && compareDeep(factor, o.factor, true)
5004           && compareDeep(net, o.net, true) && compareDeep(udi, o.udi, true) && compareDeep(bodySite, o.bodySite, true)
5005           && compareDeep(subSite, o.subSite, true) && compareDeep(encounter, o.encounter, true) && compareDeep(detail, o.detail, true)
5006          ;
5007      }
5008
5009      @Override
5010      public boolean equalsShallow(Base other_) {
5011        if (!super.equalsShallow(other_))
5012          return false;
5013        if (!(other_ instanceof ItemComponent))
5014          return false;
5015        ItemComponent o = (ItemComponent) other_;
5016        return compareValues(sequence, o.sequence, true) && compareValues(careTeamLinkId, o.careTeamLinkId, true)
5017           && compareValues(diagnosisLinkId, o.diagnosisLinkId, true) && compareValues(procedureLinkId, o.procedureLinkId, true)
5018           && compareValues(informationLinkId, o.informationLinkId, true) && compareValues(factor, o.factor, true)
5019          ;
5020      }
5021
5022      public boolean isEmpty() {
5023        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, careTeamLinkId, diagnosisLinkId
5024          , procedureLinkId, informationLinkId, revenue, category, service, modifier, programCode
5025          , serviced, location, quantity, unitPrice, factor, net, udi, bodySite, subSite
5026          , encounter, detail);
5027      }
5028
5029  public String fhirType() {
5030    return "Claim.item";
5031
5032  }
5033
5034  }
5035
5036    @Block()
5037    public static class DetailComponent extends BackboneElement implements IBaseBackboneElement {
5038        /**
5039         * A service line number.
5040         */
5041        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
5042        @Description(shortDefinition="Service instance", formalDefinition="A service line number." )
5043        protected PositiveIntType sequence;
5044
5045        /**
5046         * The type of reveneu or cost center providing the product and/or service.
5047         */
5048        @Child(name = "revenue", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
5049        @Description(shortDefinition="Revenue or cost center code", formalDefinition="The type of reveneu or cost center providing the product and/or service." )
5050        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-revenue-center")
5051        protected CodeableConcept revenue;
5052
5053        /**
5054         * Health Care Service Type Codes  to identify the classification of service or benefits.
5055         */
5056        @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
5057        @Description(shortDefinition="Type of service or product", formalDefinition="Health Care Service Type Codes  to identify the classification of service or benefits." )
5058        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-subcategory")
5059        protected CodeableConcept category;
5060
5061        /**
5062         * If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.
5063         */
5064        @Child(name = "service", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
5065        @Description(shortDefinition="Billing Code", formalDefinition="If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'." )
5066        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-uscls")
5067        protected CodeableConcept service;
5068
5069        /**
5070         * Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
5071         */
5072        @Child(name = "modifier", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5073        @Description(shortDefinition="Service/Product billing modifiers", formalDefinition="Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours." )
5074        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-modifiers")
5075        protected List<CodeableConcept> modifier;
5076
5077        /**
5078         * For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.
5079         */
5080        @Child(name = "programCode", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5081        @Description(shortDefinition="Program specific reason for item inclusion", formalDefinition="For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program." )
5082        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-program-code")
5083        protected List<CodeableConcept> programCode;
5084
5085        /**
5086         * The number of repetitions of a service or product.
5087         */
5088        @Child(name = "quantity", type = {SimpleQuantity.class}, order=7, min=0, max=1, modifier=false, summary=false)
5089        @Description(shortDefinition="Count of Products or Services", formalDefinition="The number of repetitions of a service or product." )
5090        protected SimpleQuantity quantity;
5091
5092        /**
5093         * If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.
5094         */
5095        @Child(name = "unitPrice", type = {Money.class}, order=8, min=0, max=1, modifier=false, summary=false)
5096        @Description(shortDefinition="Fee, charge or cost per point", formalDefinition="If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group." )
5097        protected Money unitPrice;
5098
5099        /**
5100         * A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
5101         */
5102        @Child(name = "factor", type = {DecimalType.class}, order=9, min=0, max=1, modifier=false, summary=false)
5103        @Description(shortDefinition="Price scaling factor", formalDefinition="A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount." )
5104        protected DecimalType factor;
5105
5106        /**
5107         * The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
5108         */
5109        @Child(name = "net", type = {Money.class}, order=10, min=0, max=1, modifier=false, summary=false)
5110        @Description(shortDefinition="Total additional item cost", formalDefinition="The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied." )
5111        protected Money net;
5112
5113        /**
5114         * List of Unique Device Identifiers associated with this line item.
5115         */
5116        @Child(name = "udi", type = {Device.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5117        @Description(shortDefinition="Unique Device Identifier", formalDefinition="List of Unique Device Identifiers associated with this line item." )
5118        protected List<Reference> udi;
5119        /**
5120         * The actual objects that are the target of the reference (List of Unique Device Identifiers associated with this line item.)
5121         */
5122        protected List<Device> udiTarget;
5123
5124
5125        /**
5126         * Third tier of goods and services.
5127         */
5128        @Child(name = "subDetail", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5129        @Description(shortDefinition="Additional items", formalDefinition="Third tier of goods and services." )
5130        protected List<SubDetailComponent> subDetail;
5131
5132        private static final long serialVersionUID = 718584656L;
5133
5134    /**
5135     * Constructor
5136     */
5137      public DetailComponent() {
5138        super();
5139      }
5140
5141    /**
5142     * Constructor
5143     */
5144      public DetailComponent(PositiveIntType sequence) {
5145        super();
5146        this.sequence = sequence;
5147      }
5148
5149        /**
5150         * @return {@link #sequence} (A service line number.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
5151         */
5152        public PositiveIntType getSequenceElement() { 
5153          if (this.sequence == null)
5154            if (Configuration.errorOnAutoCreate())
5155              throw new Error("Attempt to auto-create DetailComponent.sequence");
5156            else if (Configuration.doAutoCreate())
5157              this.sequence = new PositiveIntType(); // bb
5158          return this.sequence;
5159        }
5160
5161        public boolean hasSequenceElement() { 
5162          return this.sequence != null && !this.sequence.isEmpty();
5163        }
5164
5165        public boolean hasSequence() { 
5166          return this.sequence != null && !this.sequence.isEmpty();
5167        }
5168
5169        /**
5170         * @param value {@link #sequence} (A service line number.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
5171         */
5172        public DetailComponent setSequenceElement(PositiveIntType value) { 
5173          this.sequence = value;
5174          return this;
5175        }
5176
5177        /**
5178         * @return A service line number.
5179         */
5180        public int getSequence() { 
5181          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
5182        }
5183
5184        /**
5185         * @param value A service line number.
5186         */
5187        public DetailComponent setSequence(int value) { 
5188            if (this.sequence == null)
5189              this.sequence = new PositiveIntType();
5190            this.sequence.setValue(value);
5191          return this;
5192        }
5193
5194        /**
5195         * @return {@link #revenue} (The type of reveneu or cost center providing the product and/or service.)
5196         */
5197        public CodeableConcept getRevenue() { 
5198          if (this.revenue == null)
5199            if (Configuration.errorOnAutoCreate())
5200              throw new Error("Attempt to auto-create DetailComponent.revenue");
5201            else if (Configuration.doAutoCreate())
5202              this.revenue = new CodeableConcept(); // cc
5203          return this.revenue;
5204        }
5205
5206        public boolean hasRevenue() { 
5207          return this.revenue != null && !this.revenue.isEmpty();
5208        }
5209
5210        /**
5211         * @param value {@link #revenue} (The type of reveneu or cost center providing the product and/or service.)
5212         */
5213        public DetailComponent setRevenue(CodeableConcept value)  { 
5214          this.revenue = value;
5215          return this;
5216        }
5217
5218        /**
5219         * @return {@link #category} (Health Care Service Type Codes  to identify the classification of service or benefits.)
5220         */
5221        public CodeableConcept getCategory() { 
5222          if (this.category == null)
5223            if (Configuration.errorOnAutoCreate())
5224              throw new Error("Attempt to auto-create DetailComponent.category");
5225            else if (Configuration.doAutoCreate())
5226              this.category = new CodeableConcept(); // cc
5227          return this.category;
5228        }
5229
5230        public boolean hasCategory() { 
5231          return this.category != null && !this.category.isEmpty();
5232        }
5233
5234        /**
5235         * @param value {@link #category} (Health Care Service Type Codes  to identify the classification of service or benefits.)
5236         */
5237        public DetailComponent setCategory(CodeableConcept value)  { 
5238          this.category = value;
5239          return this;
5240        }
5241
5242        /**
5243         * @return {@link #service} (If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.)
5244         */
5245        public CodeableConcept getService() { 
5246          if (this.service == null)
5247            if (Configuration.errorOnAutoCreate())
5248              throw new Error("Attempt to auto-create DetailComponent.service");
5249            else if (Configuration.doAutoCreate())
5250              this.service = new CodeableConcept(); // cc
5251          return this.service;
5252        }
5253
5254        public boolean hasService() { 
5255          return this.service != null && !this.service.isEmpty();
5256        }
5257
5258        /**
5259         * @param value {@link #service} (If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.)
5260         */
5261        public DetailComponent setService(CodeableConcept value)  { 
5262          this.service = value;
5263          return this;
5264        }
5265
5266        /**
5267         * @return {@link #modifier} (Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.)
5268         */
5269        public List<CodeableConcept> getModifier() { 
5270          if (this.modifier == null)
5271            this.modifier = new ArrayList<CodeableConcept>();
5272          return this.modifier;
5273        }
5274
5275        /**
5276         * @return Returns a reference to <code>this</code> for easy method chaining
5277         */
5278        public DetailComponent setModifier(List<CodeableConcept> theModifier) { 
5279          this.modifier = theModifier;
5280          return this;
5281        }
5282
5283        public boolean hasModifier() { 
5284          if (this.modifier == null)
5285            return false;
5286          for (CodeableConcept item : this.modifier)
5287            if (!item.isEmpty())
5288              return true;
5289          return false;
5290        }
5291
5292        public CodeableConcept addModifier() { //3
5293          CodeableConcept t = new CodeableConcept();
5294          if (this.modifier == null)
5295            this.modifier = new ArrayList<CodeableConcept>();
5296          this.modifier.add(t);
5297          return t;
5298        }
5299
5300        public DetailComponent addModifier(CodeableConcept t) { //3
5301          if (t == null)
5302            return this;
5303          if (this.modifier == null)
5304            this.modifier = new ArrayList<CodeableConcept>();
5305          this.modifier.add(t);
5306          return this;
5307        }
5308
5309        /**
5310         * @return The first repetition of repeating field {@link #modifier}, creating it if it does not already exist
5311         */
5312        public CodeableConcept getModifierFirstRep() { 
5313          if (getModifier().isEmpty()) {
5314            addModifier();
5315          }
5316          return getModifier().get(0);
5317        }
5318
5319        /**
5320         * @return {@link #programCode} (For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.)
5321         */
5322        public List<CodeableConcept> getProgramCode() { 
5323          if (this.programCode == null)
5324            this.programCode = new ArrayList<CodeableConcept>();
5325          return this.programCode;
5326        }
5327
5328        /**
5329         * @return Returns a reference to <code>this</code> for easy method chaining
5330         */
5331        public DetailComponent setProgramCode(List<CodeableConcept> theProgramCode) { 
5332          this.programCode = theProgramCode;
5333          return this;
5334        }
5335
5336        public boolean hasProgramCode() { 
5337          if (this.programCode == null)
5338            return false;
5339          for (CodeableConcept item : this.programCode)
5340            if (!item.isEmpty())
5341              return true;
5342          return false;
5343        }
5344
5345        public CodeableConcept addProgramCode() { //3
5346          CodeableConcept t = new CodeableConcept();
5347          if (this.programCode == null)
5348            this.programCode = new ArrayList<CodeableConcept>();
5349          this.programCode.add(t);
5350          return t;
5351        }
5352
5353        public DetailComponent addProgramCode(CodeableConcept t) { //3
5354          if (t == null)
5355            return this;
5356          if (this.programCode == null)
5357            this.programCode = new ArrayList<CodeableConcept>();
5358          this.programCode.add(t);
5359          return this;
5360        }
5361
5362        /**
5363         * @return The first repetition of repeating field {@link #programCode}, creating it if it does not already exist
5364         */
5365        public CodeableConcept getProgramCodeFirstRep() { 
5366          if (getProgramCode().isEmpty()) {
5367            addProgramCode();
5368          }
5369          return getProgramCode().get(0);
5370        }
5371
5372        /**
5373         * @return {@link #quantity} (The number of repetitions of a service or product.)
5374         */
5375        public SimpleQuantity getQuantity() { 
5376          if (this.quantity == null)
5377            if (Configuration.errorOnAutoCreate())
5378              throw new Error("Attempt to auto-create DetailComponent.quantity");
5379            else if (Configuration.doAutoCreate())
5380              this.quantity = new SimpleQuantity(); // cc
5381          return this.quantity;
5382        }
5383
5384        public boolean hasQuantity() { 
5385          return this.quantity != null && !this.quantity.isEmpty();
5386        }
5387
5388        /**
5389         * @param value {@link #quantity} (The number of repetitions of a service or product.)
5390         */
5391        public DetailComponent setQuantity(SimpleQuantity value)  { 
5392          this.quantity = value;
5393          return this;
5394        }
5395
5396        /**
5397         * @return {@link #unitPrice} (If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.)
5398         */
5399        public Money getUnitPrice() { 
5400          if (this.unitPrice == null)
5401            if (Configuration.errorOnAutoCreate())
5402              throw new Error("Attempt to auto-create DetailComponent.unitPrice");
5403            else if (Configuration.doAutoCreate())
5404              this.unitPrice = new Money(); // cc
5405          return this.unitPrice;
5406        }
5407
5408        public boolean hasUnitPrice() { 
5409          return this.unitPrice != null && !this.unitPrice.isEmpty();
5410        }
5411
5412        /**
5413         * @param value {@link #unitPrice} (If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.)
5414         */
5415        public DetailComponent setUnitPrice(Money value)  { 
5416          this.unitPrice = value;
5417          return this;
5418        }
5419
5420        /**
5421         * @return {@link #factor} (A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
5422         */
5423        public DecimalType getFactorElement() { 
5424          if (this.factor == null)
5425            if (Configuration.errorOnAutoCreate())
5426              throw new Error("Attempt to auto-create DetailComponent.factor");
5427            else if (Configuration.doAutoCreate())
5428              this.factor = new DecimalType(); // bb
5429          return this.factor;
5430        }
5431
5432        public boolean hasFactorElement() { 
5433          return this.factor != null && !this.factor.isEmpty();
5434        }
5435
5436        public boolean hasFactor() { 
5437          return this.factor != null && !this.factor.isEmpty();
5438        }
5439
5440        /**
5441         * @param value {@link #factor} (A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
5442         */
5443        public DetailComponent setFactorElement(DecimalType value) { 
5444          this.factor = value;
5445          return this;
5446        }
5447
5448        /**
5449         * @return A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
5450         */
5451        public BigDecimal getFactor() { 
5452          return this.factor == null ? null : this.factor.getValue();
5453        }
5454
5455        /**
5456         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
5457         */
5458        public DetailComponent setFactor(BigDecimal value) { 
5459          if (value == null)
5460            this.factor = null;
5461          else {
5462            if (this.factor == null)
5463              this.factor = new DecimalType();
5464            this.factor.setValue(value);
5465          }
5466          return this;
5467        }
5468
5469        /**
5470         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
5471         */
5472        public DetailComponent setFactor(long value) { 
5473              this.factor = new DecimalType();
5474            this.factor.setValue(value);
5475          return this;
5476        }
5477
5478        /**
5479         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
5480         */
5481        public DetailComponent setFactor(double value) { 
5482              this.factor = new DecimalType();
5483            this.factor.setValue(value);
5484          return this;
5485        }
5486
5487        /**
5488         * @return {@link #net} (The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.)
5489         */
5490        public Money getNet() { 
5491          if (this.net == null)
5492            if (Configuration.errorOnAutoCreate())
5493              throw new Error("Attempt to auto-create DetailComponent.net");
5494            else if (Configuration.doAutoCreate())
5495              this.net = new Money(); // cc
5496          return this.net;
5497        }
5498
5499        public boolean hasNet() { 
5500          return this.net != null && !this.net.isEmpty();
5501        }
5502
5503        /**
5504         * @param value {@link #net} (The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.)
5505         */
5506        public DetailComponent setNet(Money value)  { 
5507          this.net = value;
5508          return this;
5509        }
5510
5511        /**
5512         * @return {@link #udi} (List of Unique Device Identifiers associated with this line item.)
5513         */
5514        public List<Reference> getUdi() { 
5515          if (this.udi == null)
5516            this.udi = new ArrayList<Reference>();
5517          return this.udi;
5518        }
5519
5520        /**
5521         * @return Returns a reference to <code>this</code> for easy method chaining
5522         */
5523        public DetailComponent setUdi(List<Reference> theUdi) { 
5524          this.udi = theUdi;
5525          return this;
5526        }
5527
5528        public boolean hasUdi() { 
5529          if (this.udi == null)
5530            return false;
5531          for (Reference item : this.udi)
5532            if (!item.isEmpty())
5533              return true;
5534          return false;
5535        }
5536
5537        public Reference addUdi() { //3
5538          Reference t = new Reference();
5539          if (this.udi == null)
5540            this.udi = new ArrayList<Reference>();
5541          this.udi.add(t);
5542          return t;
5543        }
5544
5545        public DetailComponent addUdi(Reference t) { //3
5546          if (t == null)
5547            return this;
5548          if (this.udi == null)
5549            this.udi = new ArrayList<Reference>();
5550          this.udi.add(t);
5551          return this;
5552        }
5553
5554        /**
5555         * @return The first repetition of repeating field {@link #udi}, creating it if it does not already exist
5556         */
5557        public Reference getUdiFirstRep() { 
5558          if (getUdi().isEmpty()) {
5559            addUdi();
5560          }
5561          return getUdi().get(0);
5562        }
5563
5564        /**
5565         * @deprecated Use Reference#setResource(IBaseResource) instead
5566         */
5567        @Deprecated
5568        public List<Device> getUdiTarget() { 
5569          if (this.udiTarget == null)
5570            this.udiTarget = new ArrayList<Device>();
5571          return this.udiTarget;
5572        }
5573
5574        /**
5575         * @deprecated Use Reference#setResource(IBaseResource) instead
5576         */
5577        @Deprecated
5578        public Device addUdiTarget() { 
5579          Device r = new Device();
5580          if (this.udiTarget == null)
5581            this.udiTarget = new ArrayList<Device>();
5582          this.udiTarget.add(r);
5583          return r;
5584        }
5585
5586        /**
5587         * @return {@link #subDetail} (Third tier of goods and services.)
5588         */
5589        public List<SubDetailComponent> getSubDetail() { 
5590          if (this.subDetail == null)
5591            this.subDetail = new ArrayList<SubDetailComponent>();
5592          return this.subDetail;
5593        }
5594
5595        /**
5596         * @return Returns a reference to <code>this</code> for easy method chaining
5597         */
5598        public DetailComponent setSubDetail(List<SubDetailComponent> theSubDetail) { 
5599          this.subDetail = theSubDetail;
5600          return this;
5601        }
5602
5603        public boolean hasSubDetail() { 
5604          if (this.subDetail == null)
5605            return false;
5606          for (SubDetailComponent item : this.subDetail)
5607            if (!item.isEmpty())
5608              return true;
5609          return false;
5610        }
5611
5612        public SubDetailComponent addSubDetail() { //3
5613          SubDetailComponent t = new SubDetailComponent();
5614          if (this.subDetail == null)
5615            this.subDetail = new ArrayList<SubDetailComponent>();
5616          this.subDetail.add(t);
5617          return t;
5618        }
5619
5620        public DetailComponent addSubDetail(SubDetailComponent t) { //3
5621          if (t == null)
5622            return this;
5623          if (this.subDetail == null)
5624            this.subDetail = new ArrayList<SubDetailComponent>();
5625          this.subDetail.add(t);
5626          return this;
5627        }
5628
5629        /**
5630         * @return The first repetition of repeating field {@link #subDetail}, creating it if it does not already exist
5631         */
5632        public SubDetailComponent getSubDetailFirstRep() { 
5633          if (getSubDetail().isEmpty()) {
5634            addSubDetail();
5635          }
5636          return getSubDetail().get(0);
5637        }
5638
5639        protected void listChildren(List<Property> children) {
5640          super.listChildren(children);
5641          children.add(new Property("sequence", "positiveInt", "A service line number.", 0, 1, sequence));
5642          children.add(new Property("revenue", "CodeableConcept", "The type of reveneu or cost center providing the product and/or service.", 0, 1, revenue));
5643          children.add(new Property("category", "CodeableConcept", "Health Care Service Type Codes  to identify the classification of service or benefits.", 0, 1, category));
5644          children.add(new Property("service", "CodeableConcept", "If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.", 0, 1, service));
5645          children.add(new Property("modifier", "CodeableConcept", "Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.", 0, java.lang.Integer.MAX_VALUE, modifier));
5646          children.add(new Property("programCode", "CodeableConcept", "For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.", 0, java.lang.Integer.MAX_VALUE, programCode));
5647          children.add(new Property("quantity", "SimpleQuantity", "The number of repetitions of a service or product.", 0, 1, quantity));
5648          children.add(new Property("unitPrice", "Money", "If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.", 0, 1, unitPrice));
5649          children.add(new Property("factor", "decimal", "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", 0, 1, factor));
5650          children.add(new Property("net", "Money", "The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.", 0, 1, net));
5651          children.add(new Property("udi", "Reference(Device)", "List of Unique Device Identifiers associated with this line item.", 0, java.lang.Integer.MAX_VALUE, udi));
5652          children.add(new Property("subDetail", "", "Third tier of goods and services.", 0, java.lang.Integer.MAX_VALUE, subDetail));
5653        }
5654
5655        @Override
5656        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
5657          switch (_hash) {
5658          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "A service line number.", 0, 1, sequence);
5659          case 1099842588: /*revenue*/  return new Property("revenue", "CodeableConcept", "The type of reveneu or cost center providing the product and/or service.", 0, 1, revenue);
5660          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Health Care Service Type Codes  to identify the classification of service or benefits.", 0, 1, category);
5661          case 1984153269: /*service*/  return new Property("service", "CodeableConcept", "If this is an actual service or product line, ie. not a Group, then use code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI). If a grouping item then use a group code to indicate the type of thing being grouped eg. 'glasses' or 'compound'.", 0, 1, service);
5662          case -615513385: /*modifier*/  return new Property("modifier", "CodeableConcept", "Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.", 0, java.lang.Integer.MAX_VALUE, modifier);
5663          case 1010065041: /*programCode*/  return new Property("programCode", "CodeableConcept", "For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.", 0, java.lang.Integer.MAX_VALUE, programCode);
5664          case -1285004149: /*quantity*/  return new Property("quantity", "SimpleQuantity", "The number of repetitions of a service or product.", 0, 1, quantity);
5665          case -486196699: /*unitPrice*/  return new Property("unitPrice", "Money", "If the item is a node then this is the fee for the product or service, otherwise this is the total of the fees for the children of the group.", 0, 1, unitPrice);
5666          case -1282148017: /*factor*/  return new Property("factor", "decimal", "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", 0, 1, factor);
5667          case 108957: /*net*/  return new Property("net", "Money", "The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.", 0, 1, net);
5668          case 115642: /*udi*/  return new Property("udi", "Reference(Device)", "List of Unique Device Identifiers associated with this line item.", 0, java.lang.Integer.MAX_VALUE, udi);
5669          case -828829007: /*subDetail*/  return new Property("subDetail", "", "Third tier of goods and services.", 0, java.lang.Integer.MAX_VALUE, subDetail);
5670          default: return super.getNamedProperty(_hash, _name, _checkValid);
5671          }
5672
5673        }
5674
5675      @Override
5676      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
5677        switch (hash) {
5678        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
5679        case 1099842588: /*revenue*/ return this.revenue == null ? new Base[0] : new Base[] {this.revenue}; // CodeableConcept
5680        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
5681        case 1984153269: /*service*/ return this.service == null ? new Base[0] : new Base[] {this.service}; // CodeableConcept
5682        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : this.modifier.toArray(new Base[this.modifier.size()]); // CodeableConcept
5683        case 1010065041: /*programCode*/ return this.programCode == null ? new Base[0] : this.programCode.toArray(new Base[this.programCode.size()]); // CodeableConcept
5684        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // SimpleQuantity
5685        case -486196699: /*unitPrice*/ return this.unitPrice == null ? new Base[0] : new Base[] {this.unitPrice}; // Money
5686        case -1282148017: /*factor*/ return this.factor == null ? new Base[0] : new Base[] {this.factor}; // DecimalType
5687        case 108957: /*net*/ return this.net == null ? new Base[0] : new Base[] {this.net}; // Money
5688        case 115642: /*udi*/ return this.udi == null ? new Base[0] : this.udi.toArray(new Base[this.udi.size()]); // Reference
5689        case -828829007: /*subDetail*/ return this.subDetail == null ? new Base[0] : this.subDetail.toArray(new Base[this.subDetail.size()]); // SubDetailComponent
5690        default: return super.getProperty(hash, name, checkValid);
5691        }
5692
5693      }
5694
5695      @Override
5696      public Base setProperty(int hash, String name, Base value) throws FHIRException {
5697        switch (hash) {
5698        case 1349547969: // sequence
5699          this.sequence = castToPositiveInt(value); // PositiveIntType
5700          return value;
5701        case 1099842588: // revenue
5702          this.revenue = castToCodeableConcept(value); // CodeableConcept
5703          return value;
5704        case 50511102: // category
5705          this.category = castToCodeableConcept(value); // CodeableConcept
5706          return value;
5707        case 1984153269: // service
5708          this.service = castToCodeableConcept(value); // CodeableConcept
5709          return value;
5710        case -615513385: // modifier
5711          this.getModifier().add(castToCodeableConcept(value)); // CodeableConcept
5712          return value;
5713        case 1010065041: // programCode
5714          this.getProgramCode().add(castToCodeableConcept(value)); // CodeableConcept
5715          return value;
5716        case -1285004149: // quantity
5717          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
5718          return value;
5719        case -486196699: // unitPrice
5720          this.unitPrice = castToMoney(value); // Money
5721          return value;
5722        case -1282148017: // factor
5723          this.factor = castToDecimal(value); // DecimalType
5724          return value;
5725        case 108957: // net
5726          this.net = castToMoney(value); // Money
5727          return value;
5728        case 115642: // udi
5729          this.getUdi().add(castToReference(value)); // Reference
5730          return value;
5731        case -828829007: // subDetail
5732          this.getSubDetail().add((SubDetailComponent) value); // SubDetailComponent
5733          return value;
5734        default: return super.setProperty(hash, name, value);
5735        }
5736
5737      }
5738
5739      @Override
5740      public Base setProperty(String name, Base value) throws FHIRException {
5741        if (name.equals("sequence")) {
5742          this.sequence = castToPositiveInt(value); // PositiveIntType
5743        } else if (name.equals("revenue")) {
5744          this.revenue = castToCodeableConcept(value); // CodeableConcept
5745        } else if (name.equals("category")) {
5746          this.category = castToCodeableConcept(value); // CodeableConcept
5747        } else if (name.equals("service")) {
5748          this.service = castToCodeableConcept(value); // CodeableConcept
5749        } else if (name.equals("modifier")) {
5750          this.getModifier().add(castToCodeableConcept(value));
5751        } else if (name.equals("programCode")) {
5752          this.getProgramCode().add(castToCodeableConcept(value));
5753        } else if (name.equals("quantity")) {
5754          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
5755        } else if (name.equals("unitPrice")) {
5756          this.unitPrice = castToMoney(value); // Money
5757        } else if (name.equals("factor")) {
5758          this.factor = castToDecimal(value); // DecimalType
5759        } else if (name.equals("net")) {
5760          this.net = castToMoney(value); // Money
5761        } else if (name.equals("udi")) {
5762          this.getUdi().add(castToReference(value));
5763        } else if (name.equals("subDetail")) {
5764          this.getSubDetail().add((SubDetailComponent) value);
5765        } else
5766          return super.setProperty(name, value);
5767        return value;
5768      }
5769
5770      @Override
5771      public Base makeProperty(int hash, String name) throws FHIRException {
5772        switch (hash) {
5773        case 1349547969:  return getSequenceElement();
5774        case 1099842588:  return getRevenue(); 
5775        case 50511102:  return getCategory(); 
5776        case 1984153269:  return getService(); 
5777        case -615513385:  return addModifier(); 
5778        case 1010065041:  return addProgramCode(); 
5779        case -1285004149:  return getQuantity(); 
5780        case -486196699:  return getUnitPrice(); 
5781        case -1282148017:  return getFactorElement();
5782        case 108957:  return getNet(); 
5783        case 115642:  return addUdi(); 
5784        case -828829007:  return addSubDetail(); 
5785        default: return super.makeProperty(hash, name);
5786        }
5787
5788      }
5789
5790      @Override
5791      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
5792        switch (hash) {
5793        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
5794        case 1099842588: /*revenue*/ return new String[] {"CodeableConcept"};
5795        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
5796        case 1984153269: /*service*/ return new String[] {"CodeableConcept"};
5797        case -615513385: /*modifier*/ return new String[] {"CodeableConcept"};
5798        case 1010065041: /*programCode*/ return new String[] {"CodeableConcept"};
5799        case -1285004149: /*quantity*/ return new String[] {"SimpleQuantity"};
5800        case -486196699: /*unitPrice*/ return new String[] {"Money"};
5801        case -1282148017: /*factor*/ return new String[] {"decimal"};
5802        case 108957: /*net*/ return new String[] {"Money"};
5803        case 115642: /*udi*/ return new String[] {"Reference"};
5804        case -828829007: /*subDetail*/ return new String[] {};
5805        default: return super.getTypesForProperty(hash, name);
5806        }
5807
5808      }
5809
5810      @Override
5811      public Base addChild(String name) throws FHIRException {
5812        if (name.equals("sequence")) {
5813          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
5814        }
5815        else if (name.equals("revenue")) {
5816          this.revenue = new CodeableConcept();
5817          return this.revenue;
5818        }
5819        else if (name.equals("category")) {
5820          this.category = new CodeableConcept();
5821          return this.category;
5822        }
5823        else if (name.equals("service")) {
5824          this.service = new CodeableConcept();
5825          return this.service;
5826        }
5827        else if (name.equals("modifier")) {
5828          return addModifier();
5829        }
5830        else if (name.equals("programCode")) {
5831          return addProgramCode();
5832        }
5833        else if (name.equals("quantity")) {
5834          this.quantity = new SimpleQuantity();
5835          return this.quantity;
5836        }
5837        else if (name.equals("unitPrice")) {
5838          this.unitPrice = new Money();
5839          return this.unitPrice;
5840        }
5841        else if (name.equals("factor")) {
5842          throw new FHIRException("Cannot call addChild on a singleton property Claim.factor");
5843        }
5844        else if (name.equals("net")) {
5845          this.net = new Money();
5846          return this.net;
5847        }
5848        else if (name.equals("udi")) {
5849          return addUdi();
5850        }
5851        else if (name.equals("subDetail")) {
5852          return addSubDetail();
5853        }
5854        else
5855          return super.addChild(name);
5856      }
5857
5858      public DetailComponent copy() {
5859        DetailComponent dst = new DetailComponent();
5860        copyValues(dst);
5861        dst.sequence = sequence == null ? null : sequence.copy();
5862        dst.revenue = revenue == null ? null : revenue.copy();
5863        dst.category = category == null ? null : category.copy();
5864        dst.service = service == null ? null : service.copy();
5865        if (modifier != null) {
5866          dst.modifier = new ArrayList<CodeableConcept>();
5867          for (CodeableConcept i : modifier)
5868            dst.modifier.add(i.copy());
5869        };
5870        if (programCode != null) {
5871          dst.programCode = new ArrayList<CodeableConcept>();
5872          for (CodeableConcept i : programCode)
5873            dst.programCode.add(i.copy());
5874        };
5875        dst.quantity = quantity == null ? null : quantity.copy();
5876        dst.unitPrice = unitPrice == null ? null : unitPrice.copy();
5877        dst.factor = factor == null ? null : factor.copy();
5878        dst.net = net == null ? null : net.copy();
5879        if (udi != null) {
5880          dst.udi = new ArrayList<Reference>();
5881          for (Reference i : udi)
5882            dst.udi.add(i.copy());
5883        };
5884        if (subDetail != null) {
5885          dst.subDetail = new ArrayList<SubDetailComponent>();
5886          for (SubDetailComponent i : subDetail)
5887            dst.subDetail.add(i.copy());
5888        };
5889        return dst;
5890      }
5891
5892      @Override
5893      public boolean equalsDeep(Base other_) {
5894        if (!super.equalsDeep(other_))
5895          return false;
5896        if (!(other_ instanceof DetailComponent))
5897          return false;
5898        DetailComponent o = (DetailComponent) other_;
5899        return compareDeep(sequence, o.sequence, true) && compareDeep(revenue, o.revenue, true) && compareDeep(category, o.category, true)
5900           && compareDeep(service, o.service, true) && compareDeep(modifier, o.modifier, true) && compareDeep(programCode, o.programCode, true)
5901           && compareDeep(quantity, o.quantity, true) && compareDeep(unitPrice, o.unitPrice, true) && compareDeep(factor, o.factor, true)
5902           && compareDeep(net, o.net, true) && compareDeep(udi, o.udi, true) && compareDeep(subDetail, o.subDetail, true)
5903          ;
5904      }
5905
5906      @Override
5907      public boolean equalsShallow(Base other_) {
5908        if (!super.equalsShallow(other_))
5909          return false;
5910        if (!(other_ instanceof DetailComponent))
5911          return false;
5912        DetailComponent o = (DetailComponent) other_;
5913        return compareValues(sequence, o.sequence, true) && compareValues(factor, o.factor, true);
5914      }
5915
5916      public boolean isEmpty() {
5917        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, revenue, category
5918          , service, modifier, programCode, quantity, unitPrice, factor, net, udi, subDetail
5919          );
5920      }
5921
5922  public String fhirType() {
5923    return "Claim.item.detail";
5924
5925  }
5926
5927  }
5928
5929    @Block()
5930    public static class SubDetailComponent extends BackboneElement implements IBaseBackboneElement {
5931        /**
5932         * A service line number.
5933         */
5934        @Child(name = "sequence", type = {PositiveIntType.class}, order=1, min=1, max=1, modifier=false, summary=false)
5935        @Description(shortDefinition="Service instance", formalDefinition="A service line number." )
5936        protected PositiveIntType sequence;
5937
5938        /**
5939         * The type of reveneu or cost center providing the product and/or service.
5940         */
5941        @Child(name = "revenue", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
5942        @Description(shortDefinition="Revenue or cost center code", formalDefinition="The type of reveneu or cost center providing the product and/or service." )
5943        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-revenue-center")
5944        protected CodeableConcept revenue;
5945
5946        /**
5947         * Health Care Service Type Codes  to identify the classification of service or benefits.
5948         */
5949        @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
5950        @Description(shortDefinition="Type of service or product", formalDefinition="Health Care Service Type Codes  to identify the classification of service or benefits." )
5951        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/benefit-subcategory")
5952        protected CodeableConcept category;
5953
5954        /**
5955         * A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).
5956         */
5957        @Child(name = "service", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
5958        @Description(shortDefinition="Billing Code", formalDefinition="A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI)." )
5959        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/service-uscls")
5960        protected CodeableConcept service;
5961
5962        /**
5963         * Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.
5964         */
5965        @Child(name = "modifier", type = {CodeableConcept.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5966        @Description(shortDefinition="Service/Product billing modifiers", formalDefinition="Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours." )
5967        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-modifiers")
5968        protected List<CodeableConcept> modifier;
5969
5970        /**
5971         * For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.
5972         */
5973        @Child(name = "programCode", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5974        @Description(shortDefinition="Program specific reason for item inclusion", formalDefinition="For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program." )
5975        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/ex-program-code")
5976        protected List<CodeableConcept> programCode;
5977
5978        /**
5979         * The number of repetitions of a service or product.
5980         */
5981        @Child(name = "quantity", type = {SimpleQuantity.class}, order=7, min=0, max=1, modifier=false, summary=false)
5982        @Description(shortDefinition="Count of Products or Services", formalDefinition="The number of repetitions of a service or product." )
5983        protected SimpleQuantity quantity;
5984
5985        /**
5986         * The fee for an addittional service or product or charge.
5987         */
5988        @Child(name = "unitPrice", type = {Money.class}, order=8, min=0, max=1, modifier=false, summary=false)
5989        @Description(shortDefinition="Fee, charge or cost per point", formalDefinition="The fee for an addittional service or product or charge." )
5990        protected Money unitPrice;
5991
5992        /**
5993         * A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
5994         */
5995        @Child(name = "factor", type = {DecimalType.class}, order=9, min=0, max=1, modifier=false, summary=false)
5996        @Description(shortDefinition="Price scaling factor", formalDefinition="A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount." )
5997        protected DecimalType factor;
5998
5999        /**
6000         * The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.
6001         */
6002        @Child(name = "net", type = {Money.class}, order=10, min=0, max=1, modifier=false, summary=false)
6003        @Description(shortDefinition="Net additional item cost", formalDefinition="The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied." )
6004        protected Money net;
6005
6006        /**
6007         * List of Unique Device Identifiers associated with this line item.
6008         */
6009        @Child(name = "udi", type = {Device.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6010        @Description(shortDefinition="Unique Device Identifier", formalDefinition="List of Unique Device Identifiers associated with this line item." )
6011        protected List<Reference> udi;
6012        /**
6013         * The actual objects that are the target of the reference (List of Unique Device Identifiers associated with this line item.)
6014         */
6015        protected List<Device> udiTarget;
6016
6017
6018        private static final long serialVersionUID = -1210367567L;
6019
6020    /**
6021     * Constructor
6022     */
6023      public SubDetailComponent() {
6024        super();
6025      }
6026
6027    /**
6028     * Constructor
6029     */
6030      public SubDetailComponent(PositiveIntType sequence) {
6031        super();
6032        this.sequence = sequence;
6033      }
6034
6035        /**
6036         * @return {@link #sequence} (A service line number.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
6037         */
6038        public PositiveIntType getSequenceElement() { 
6039          if (this.sequence == null)
6040            if (Configuration.errorOnAutoCreate())
6041              throw new Error("Attempt to auto-create SubDetailComponent.sequence");
6042            else if (Configuration.doAutoCreate())
6043              this.sequence = new PositiveIntType(); // bb
6044          return this.sequence;
6045        }
6046
6047        public boolean hasSequenceElement() { 
6048          return this.sequence != null && !this.sequence.isEmpty();
6049        }
6050
6051        public boolean hasSequence() { 
6052          return this.sequence != null && !this.sequence.isEmpty();
6053        }
6054
6055        /**
6056         * @param value {@link #sequence} (A service line number.). This is the underlying object with id, value and extensions. The accessor "getSequence" gives direct access to the value
6057         */
6058        public SubDetailComponent setSequenceElement(PositiveIntType value) { 
6059          this.sequence = value;
6060          return this;
6061        }
6062
6063        /**
6064         * @return A service line number.
6065         */
6066        public int getSequence() { 
6067          return this.sequence == null || this.sequence.isEmpty() ? 0 : this.sequence.getValue();
6068        }
6069
6070        /**
6071         * @param value A service line number.
6072         */
6073        public SubDetailComponent setSequence(int value) { 
6074            if (this.sequence == null)
6075              this.sequence = new PositiveIntType();
6076            this.sequence.setValue(value);
6077          return this;
6078        }
6079
6080        /**
6081         * @return {@link #revenue} (The type of reveneu or cost center providing the product and/or service.)
6082         */
6083        public CodeableConcept getRevenue() { 
6084          if (this.revenue == null)
6085            if (Configuration.errorOnAutoCreate())
6086              throw new Error("Attempt to auto-create SubDetailComponent.revenue");
6087            else if (Configuration.doAutoCreate())
6088              this.revenue = new CodeableConcept(); // cc
6089          return this.revenue;
6090        }
6091
6092        public boolean hasRevenue() { 
6093          return this.revenue != null && !this.revenue.isEmpty();
6094        }
6095
6096        /**
6097         * @param value {@link #revenue} (The type of reveneu or cost center providing the product and/or service.)
6098         */
6099        public SubDetailComponent setRevenue(CodeableConcept value)  { 
6100          this.revenue = value;
6101          return this;
6102        }
6103
6104        /**
6105         * @return {@link #category} (Health Care Service Type Codes  to identify the classification of service or benefits.)
6106         */
6107        public CodeableConcept getCategory() { 
6108          if (this.category == null)
6109            if (Configuration.errorOnAutoCreate())
6110              throw new Error("Attempt to auto-create SubDetailComponent.category");
6111            else if (Configuration.doAutoCreate())
6112              this.category = new CodeableConcept(); // cc
6113          return this.category;
6114        }
6115
6116        public boolean hasCategory() { 
6117          return this.category != null && !this.category.isEmpty();
6118        }
6119
6120        /**
6121         * @param value {@link #category} (Health Care Service Type Codes  to identify the classification of service or benefits.)
6122         */
6123        public SubDetailComponent setCategory(CodeableConcept value)  { 
6124          this.category = value;
6125          return this;
6126        }
6127
6128        /**
6129         * @return {@link #service} (A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).)
6130         */
6131        public CodeableConcept getService() { 
6132          if (this.service == null)
6133            if (Configuration.errorOnAutoCreate())
6134              throw new Error("Attempt to auto-create SubDetailComponent.service");
6135            else if (Configuration.doAutoCreate())
6136              this.service = new CodeableConcept(); // cc
6137          return this.service;
6138        }
6139
6140        public boolean hasService() { 
6141          return this.service != null && !this.service.isEmpty();
6142        }
6143
6144        /**
6145         * @param value {@link #service} (A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).)
6146         */
6147        public SubDetailComponent setService(CodeableConcept value)  { 
6148          this.service = value;
6149          return this;
6150        }
6151
6152        /**
6153         * @return {@link #modifier} (Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.)
6154         */
6155        public List<CodeableConcept> getModifier() { 
6156          if (this.modifier == null)
6157            this.modifier = new ArrayList<CodeableConcept>();
6158          return this.modifier;
6159        }
6160
6161        /**
6162         * @return Returns a reference to <code>this</code> for easy method chaining
6163         */
6164        public SubDetailComponent setModifier(List<CodeableConcept> theModifier) { 
6165          this.modifier = theModifier;
6166          return this;
6167        }
6168
6169        public boolean hasModifier() { 
6170          if (this.modifier == null)
6171            return false;
6172          for (CodeableConcept item : this.modifier)
6173            if (!item.isEmpty())
6174              return true;
6175          return false;
6176        }
6177
6178        public CodeableConcept addModifier() { //3
6179          CodeableConcept t = new CodeableConcept();
6180          if (this.modifier == null)
6181            this.modifier = new ArrayList<CodeableConcept>();
6182          this.modifier.add(t);
6183          return t;
6184        }
6185
6186        public SubDetailComponent addModifier(CodeableConcept t) { //3
6187          if (t == null)
6188            return this;
6189          if (this.modifier == null)
6190            this.modifier = new ArrayList<CodeableConcept>();
6191          this.modifier.add(t);
6192          return this;
6193        }
6194
6195        /**
6196         * @return The first repetition of repeating field {@link #modifier}, creating it if it does not already exist
6197         */
6198        public CodeableConcept getModifierFirstRep() { 
6199          if (getModifier().isEmpty()) {
6200            addModifier();
6201          }
6202          return getModifier().get(0);
6203        }
6204
6205        /**
6206         * @return {@link #programCode} (For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.)
6207         */
6208        public List<CodeableConcept> getProgramCode() { 
6209          if (this.programCode == null)
6210            this.programCode = new ArrayList<CodeableConcept>();
6211          return this.programCode;
6212        }
6213
6214        /**
6215         * @return Returns a reference to <code>this</code> for easy method chaining
6216         */
6217        public SubDetailComponent setProgramCode(List<CodeableConcept> theProgramCode) { 
6218          this.programCode = theProgramCode;
6219          return this;
6220        }
6221
6222        public boolean hasProgramCode() { 
6223          if (this.programCode == null)
6224            return false;
6225          for (CodeableConcept item : this.programCode)
6226            if (!item.isEmpty())
6227              return true;
6228          return false;
6229        }
6230
6231        public CodeableConcept addProgramCode() { //3
6232          CodeableConcept t = new CodeableConcept();
6233          if (this.programCode == null)
6234            this.programCode = new ArrayList<CodeableConcept>();
6235          this.programCode.add(t);
6236          return t;
6237        }
6238
6239        public SubDetailComponent addProgramCode(CodeableConcept t) { //3
6240          if (t == null)
6241            return this;
6242          if (this.programCode == null)
6243            this.programCode = new ArrayList<CodeableConcept>();
6244          this.programCode.add(t);
6245          return this;
6246        }
6247
6248        /**
6249         * @return The first repetition of repeating field {@link #programCode}, creating it if it does not already exist
6250         */
6251        public CodeableConcept getProgramCodeFirstRep() { 
6252          if (getProgramCode().isEmpty()) {
6253            addProgramCode();
6254          }
6255          return getProgramCode().get(0);
6256        }
6257
6258        /**
6259         * @return {@link #quantity} (The number of repetitions of a service or product.)
6260         */
6261        public SimpleQuantity getQuantity() { 
6262          if (this.quantity == null)
6263            if (Configuration.errorOnAutoCreate())
6264              throw new Error("Attempt to auto-create SubDetailComponent.quantity");
6265            else if (Configuration.doAutoCreate())
6266              this.quantity = new SimpleQuantity(); // cc
6267          return this.quantity;
6268        }
6269
6270        public boolean hasQuantity() { 
6271          return this.quantity != null && !this.quantity.isEmpty();
6272        }
6273
6274        /**
6275         * @param value {@link #quantity} (The number of repetitions of a service or product.)
6276         */
6277        public SubDetailComponent setQuantity(SimpleQuantity value)  { 
6278          this.quantity = value;
6279          return this;
6280        }
6281
6282        /**
6283         * @return {@link #unitPrice} (The fee for an addittional service or product or charge.)
6284         */
6285        public Money getUnitPrice() { 
6286          if (this.unitPrice == null)
6287            if (Configuration.errorOnAutoCreate())
6288              throw new Error("Attempt to auto-create SubDetailComponent.unitPrice");
6289            else if (Configuration.doAutoCreate())
6290              this.unitPrice = new Money(); // cc
6291          return this.unitPrice;
6292        }
6293
6294        public boolean hasUnitPrice() { 
6295          return this.unitPrice != null && !this.unitPrice.isEmpty();
6296        }
6297
6298        /**
6299         * @param value {@link #unitPrice} (The fee for an addittional service or product or charge.)
6300         */
6301        public SubDetailComponent setUnitPrice(Money value)  { 
6302          this.unitPrice = value;
6303          return this;
6304        }
6305
6306        /**
6307         * @return {@link #factor} (A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
6308         */
6309        public DecimalType getFactorElement() { 
6310          if (this.factor == null)
6311            if (Configuration.errorOnAutoCreate())
6312              throw new Error("Attempt to auto-create SubDetailComponent.factor");
6313            else if (Configuration.doAutoCreate())
6314              this.factor = new DecimalType(); // bb
6315          return this.factor;
6316        }
6317
6318        public boolean hasFactorElement() { 
6319          return this.factor != null && !this.factor.isEmpty();
6320        }
6321
6322        public boolean hasFactor() { 
6323          return this.factor != null && !this.factor.isEmpty();
6324        }
6325
6326        /**
6327         * @param value {@link #factor} (A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.). This is the underlying object with id, value and extensions. The accessor "getFactor" gives direct access to the value
6328         */
6329        public SubDetailComponent setFactorElement(DecimalType value) { 
6330          this.factor = value;
6331          return this;
6332        }
6333
6334        /**
6335         * @return A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
6336         */
6337        public BigDecimal getFactor() { 
6338          return this.factor == null ? null : this.factor.getValue();
6339        }
6340
6341        /**
6342         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
6343         */
6344        public SubDetailComponent setFactor(BigDecimal value) { 
6345          if (value == null)
6346            this.factor = null;
6347          else {
6348            if (this.factor == null)
6349              this.factor = new DecimalType();
6350            this.factor.setValue(value);
6351          }
6352          return this;
6353        }
6354
6355        /**
6356         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
6357         */
6358        public SubDetailComponent setFactor(long value) { 
6359              this.factor = new DecimalType();
6360            this.factor.setValue(value);
6361          return this;
6362        }
6363
6364        /**
6365         * @param value A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.
6366         */
6367        public SubDetailComponent setFactor(double value) { 
6368              this.factor = new DecimalType();
6369            this.factor.setValue(value);
6370          return this;
6371        }
6372
6373        /**
6374         * @return {@link #net} (The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.)
6375         */
6376        public Money getNet() { 
6377          if (this.net == null)
6378            if (Configuration.errorOnAutoCreate())
6379              throw new Error("Attempt to auto-create SubDetailComponent.net");
6380            else if (Configuration.doAutoCreate())
6381              this.net = new Money(); // cc
6382          return this.net;
6383        }
6384
6385        public boolean hasNet() { 
6386          return this.net != null && !this.net.isEmpty();
6387        }
6388
6389        /**
6390         * @param value {@link #net} (The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.)
6391         */
6392        public SubDetailComponent setNet(Money value)  { 
6393          this.net = value;
6394          return this;
6395        }
6396
6397        /**
6398         * @return {@link #udi} (List of Unique Device Identifiers associated with this line item.)
6399         */
6400        public List<Reference> getUdi() { 
6401          if (this.udi == null)
6402            this.udi = new ArrayList<Reference>();
6403          return this.udi;
6404        }
6405
6406        /**
6407         * @return Returns a reference to <code>this</code> for easy method chaining
6408         */
6409        public SubDetailComponent setUdi(List<Reference> theUdi) { 
6410          this.udi = theUdi;
6411          return this;
6412        }
6413
6414        public boolean hasUdi() { 
6415          if (this.udi == null)
6416            return false;
6417          for (Reference item : this.udi)
6418            if (!item.isEmpty())
6419              return true;
6420          return false;
6421        }
6422
6423        public Reference addUdi() { //3
6424          Reference t = new Reference();
6425          if (this.udi == null)
6426            this.udi = new ArrayList<Reference>();
6427          this.udi.add(t);
6428          return t;
6429        }
6430
6431        public SubDetailComponent addUdi(Reference t) { //3
6432          if (t == null)
6433            return this;
6434          if (this.udi == null)
6435            this.udi = new ArrayList<Reference>();
6436          this.udi.add(t);
6437          return this;
6438        }
6439
6440        /**
6441         * @return The first repetition of repeating field {@link #udi}, creating it if it does not already exist
6442         */
6443        public Reference getUdiFirstRep() { 
6444          if (getUdi().isEmpty()) {
6445            addUdi();
6446          }
6447          return getUdi().get(0);
6448        }
6449
6450        /**
6451         * @deprecated Use Reference#setResource(IBaseResource) instead
6452         */
6453        @Deprecated
6454        public List<Device> getUdiTarget() { 
6455          if (this.udiTarget == null)
6456            this.udiTarget = new ArrayList<Device>();
6457          return this.udiTarget;
6458        }
6459
6460        /**
6461         * @deprecated Use Reference#setResource(IBaseResource) instead
6462         */
6463        @Deprecated
6464        public Device addUdiTarget() { 
6465          Device r = new Device();
6466          if (this.udiTarget == null)
6467            this.udiTarget = new ArrayList<Device>();
6468          this.udiTarget.add(r);
6469          return r;
6470        }
6471
6472        protected void listChildren(List<Property> children) {
6473          super.listChildren(children);
6474          children.add(new Property("sequence", "positiveInt", "A service line number.", 0, 1, sequence));
6475          children.add(new Property("revenue", "CodeableConcept", "The type of reveneu or cost center providing the product and/or service.", 0, 1, revenue));
6476          children.add(new Property("category", "CodeableConcept", "Health Care Service Type Codes  to identify the classification of service or benefits.", 0, 1, category));
6477          children.add(new Property("service", "CodeableConcept", "A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).", 0, 1, service));
6478          children.add(new Property("modifier", "CodeableConcept", "Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.", 0, java.lang.Integer.MAX_VALUE, modifier));
6479          children.add(new Property("programCode", "CodeableConcept", "For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.", 0, java.lang.Integer.MAX_VALUE, programCode));
6480          children.add(new Property("quantity", "SimpleQuantity", "The number of repetitions of a service or product.", 0, 1, quantity));
6481          children.add(new Property("unitPrice", "Money", "The fee for an addittional service or product or charge.", 0, 1, unitPrice));
6482          children.add(new Property("factor", "decimal", "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", 0, 1, factor));
6483          children.add(new Property("net", "Money", "The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.", 0, 1, net));
6484          children.add(new Property("udi", "Reference(Device)", "List of Unique Device Identifiers associated with this line item.", 0, java.lang.Integer.MAX_VALUE, udi));
6485        }
6486
6487        @Override
6488        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6489          switch (_hash) {
6490          case 1349547969: /*sequence*/  return new Property("sequence", "positiveInt", "A service line number.", 0, 1, sequence);
6491          case 1099842588: /*revenue*/  return new Property("revenue", "CodeableConcept", "The type of reveneu or cost center providing the product and/or service.", 0, 1, revenue);
6492          case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Health Care Service Type Codes  to identify the classification of service or benefits.", 0, 1, category);
6493          case 1984153269: /*service*/  return new Property("service", "CodeableConcept", "A code to indicate the Professional Service or Product supplied (eg. CTP, HCPCS,USCLS,ICD10, NCPDP,DIN,ACHI,CCI).", 0, 1, service);
6494          case -615513385: /*modifier*/  return new Property("modifier", "CodeableConcept", "Item typification or modifiers codes, eg for Oral whether the treatment is cosmetic or associated with TMJ, or for medical whether the treatment was outside the clinic or out of office hours.", 0, java.lang.Integer.MAX_VALUE, modifier);
6495          case 1010065041: /*programCode*/  return new Property("programCode", "CodeableConcept", "For programs which require reson codes for the inclusion, covering, of this billed item under the program or sub-program.", 0, java.lang.Integer.MAX_VALUE, programCode);
6496          case -1285004149: /*quantity*/  return new Property("quantity", "SimpleQuantity", "The number of repetitions of a service or product.", 0, 1, quantity);
6497          case -486196699: /*unitPrice*/  return new Property("unitPrice", "Money", "The fee for an addittional service or product or charge.", 0, 1, unitPrice);
6498          case -1282148017: /*factor*/  return new Property("factor", "decimal", "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", 0, 1, factor);
6499          case 108957: /*net*/  return new Property("net", "Money", "The quantity times the unit price for an addittional service or product or charge. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number  * points = net Amount. Quantity, factor and points are assumed to be 1 if not supplied.", 0, 1, net);
6500          case 115642: /*udi*/  return new Property("udi", "Reference(Device)", "List of Unique Device Identifiers associated with this line item.", 0, java.lang.Integer.MAX_VALUE, udi);
6501          default: return super.getNamedProperty(_hash, _name, _checkValid);
6502          }
6503
6504        }
6505
6506      @Override
6507      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6508        switch (hash) {
6509        case 1349547969: /*sequence*/ return this.sequence == null ? new Base[0] : new Base[] {this.sequence}; // PositiveIntType
6510        case 1099842588: /*revenue*/ return this.revenue == null ? new Base[0] : new Base[] {this.revenue}; // CodeableConcept
6511        case 50511102: /*category*/ return this.category == null ? new Base[0] : new Base[] {this.category}; // CodeableConcept
6512        case 1984153269: /*service*/ return this.service == null ? new Base[0] : new Base[] {this.service}; // CodeableConcept
6513        case -615513385: /*modifier*/ return this.modifier == null ? new Base[0] : this.modifier.toArray(new Base[this.modifier.size()]); // CodeableConcept
6514        case 1010065041: /*programCode*/ return this.programCode == null ? new Base[0] : this.programCode.toArray(new Base[this.programCode.size()]); // CodeableConcept
6515        case -1285004149: /*quantity*/ return this.quantity == null ? new Base[0] : new Base[] {this.quantity}; // SimpleQuantity
6516        case -486196699: /*unitPrice*/ return this.unitPrice == null ? new Base[0] : new Base[] {this.unitPrice}; // Money
6517        case -1282148017: /*factor*/ return this.factor == null ? new Base[0] : new Base[] {this.factor}; // DecimalType
6518        case 108957: /*net*/ return this.net == null ? new Base[0] : new Base[] {this.net}; // Money
6519        case 115642: /*udi*/ return this.udi == null ? new Base[0] : this.udi.toArray(new Base[this.udi.size()]); // Reference
6520        default: return super.getProperty(hash, name, checkValid);
6521        }
6522
6523      }
6524
6525      @Override
6526      public Base setProperty(int hash, String name, Base value) throws FHIRException {
6527        switch (hash) {
6528        case 1349547969: // sequence
6529          this.sequence = castToPositiveInt(value); // PositiveIntType
6530          return value;
6531        case 1099842588: // revenue
6532          this.revenue = castToCodeableConcept(value); // CodeableConcept
6533          return value;
6534        case 50511102: // category
6535          this.category = castToCodeableConcept(value); // CodeableConcept
6536          return value;
6537        case 1984153269: // service
6538          this.service = castToCodeableConcept(value); // CodeableConcept
6539          return value;
6540        case -615513385: // modifier
6541          this.getModifier().add(castToCodeableConcept(value)); // CodeableConcept
6542          return value;
6543        case 1010065041: // programCode
6544          this.getProgramCode().add(castToCodeableConcept(value)); // CodeableConcept
6545          return value;
6546        case -1285004149: // quantity
6547          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
6548          return value;
6549        case -486196699: // unitPrice
6550          this.unitPrice = castToMoney(value); // Money
6551          return value;
6552        case -1282148017: // factor
6553          this.factor = castToDecimal(value); // DecimalType
6554          return value;
6555        case 108957: // net
6556          this.net = castToMoney(value); // Money
6557          return value;
6558        case 115642: // udi
6559          this.getUdi().add(castToReference(value)); // Reference
6560          return value;
6561        default: return super.setProperty(hash, name, value);
6562        }
6563
6564      }
6565
6566      @Override
6567      public Base setProperty(String name, Base value) throws FHIRException {
6568        if (name.equals("sequence")) {
6569          this.sequence = castToPositiveInt(value); // PositiveIntType
6570        } else if (name.equals("revenue")) {
6571          this.revenue = castToCodeableConcept(value); // CodeableConcept
6572        } else if (name.equals("category")) {
6573          this.category = castToCodeableConcept(value); // CodeableConcept
6574        } else if (name.equals("service")) {
6575          this.service = castToCodeableConcept(value); // CodeableConcept
6576        } else if (name.equals("modifier")) {
6577          this.getModifier().add(castToCodeableConcept(value));
6578        } else if (name.equals("programCode")) {
6579          this.getProgramCode().add(castToCodeableConcept(value));
6580        } else if (name.equals("quantity")) {
6581          this.quantity = castToSimpleQuantity(value); // SimpleQuantity
6582        } else if (name.equals("unitPrice")) {
6583          this.unitPrice = castToMoney(value); // Money
6584        } else if (name.equals("factor")) {
6585          this.factor = castToDecimal(value); // DecimalType
6586        } else if (name.equals("net")) {
6587          this.net = castToMoney(value); // Money
6588        } else if (name.equals("udi")) {
6589          this.getUdi().add(castToReference(value));
6590        } else
6591          return super.setProperty(name, value);
6592        return value;
6593      }
6594
6595      @Override
6596      public Base makeProperty(int hash, String name) throws FHIRException {
6597        switch (hash) {
6598        case 1349547969:  return getSequenceElement();
6599        case 1099842588:  return getRevenue(); 
6600        case 50511102:  return getCategory(); 
6601        case 1984153269:  return getService(); 
6602        case -615513385:  return addModifier(); 
6603        case 1010065041:  return addProgramCode(); 
6604        case -1285004149:  return getQuantity(); 
6605        case -486196699:  return getUnitPrice(); 
6606        case -1282148017:  return getFactorElement();
6607        case 108957:  return getNet(); 
6608        case 115642:  return addUdi(); 
6609        default: return super.makeProperty(hash, name);
6610        }
6611
6612      }
6613
6614      @Override
6615      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6616        switch (hash) {
6617        case 1349547969: /*sequence*/ return new String[] {"positiveInt"};
6618        case 1099842588: /*revenue*/ return new String[] {"CodeableConcept"};
6619        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
6620        case 1984153269: /*service*/ return new String[] {"CodeableConcept"};
6621        case -615513385: /*modifier*/ return new String[] {"CodeableConcept"};
6622        case 1010065041: /*programCode*/ return new String[] {"CodeableConcept"};
6623        case -1285004149: /*quantity*/ return new String[] {"SimpleQuantity"};
6624        case -486196699: /*unitPrice*/ return new String[] {"Money"};
6625        case -1282148017: /*factor*/ return new String[] {"decimal"};
6626        case 108957: /*net*/ return new String[] {"Money"};
6627        case 115642: /*udi*/ return new String[] {"Reference"};
6628        default: return super.getTypesForProperty(hash, name);
6629        }
6630
6631      }
6632
6633      @Override
6634      public Base addChild(String name) throws FHIRException {
6635        if (name.equals("sequence")) {
6636          throw new FHIRException("Cannot call addChild on a singleton property Claim.sequence");
6637        }
6638        else if (name.equals("revenue")) {
6639          this.revenue = new CodeableConcept();
6640          return this.revenue;
6641        }
6642        else if (name.equals("category")) {
6643          this.category = new CodeableConcept();
6644          return this.category;
6645        }
6646        else if (name.equals("service")) {
6647          this.service = new CodeableConcept();
6648          return this.service;
6649        }
6650        else if (name.equals("modifier")) {
6651          return addModifier();
6652        }
6653        else if (name.equals("programCode")) {
6654          return addProgramCode();
6655        }
6656        else if (name.equals("quantity")) {
6657          this.quantity = new SimpleQuantity();
6658          return this.quantity;
6659        }
6660        else if (name.equals("unitPrice")) {
6661          this.unitPrice = new Money();
6662          return this.unitPrice;
6663        }
6664        else if (name.equals("factor")) {
6665          throw new FHIRException("Cannot call addChild on a singleton property Claim.factor");
6666        }
6667        else if (name.equals("net")) {
6668          this.net = new Money();
6669          return this.net;
6670        }
6671        else if (name.equals("udi")) {
6672          return addUdi();
6673        }
6674        else
6675          return super.addChild(name);
6676      }
6677
6678      public SubDetailComponent copy() {
6679        SubDetailComponent dst = new SubDetailComponent();
6680        copyValues(dst);
6681        dst.sequence = sequence == null ? null : sequence.copy();
6682        dst.revenue = revenue == null ? null : revenue.copy();
6683        dst.category = category == null ? null : category.copy();
6684        dst.service = service == null ? null : service.copy();
6685        if (modifier != null) {
6686          dst.modifier = new ArrayList<CodeableConcept>();
6687          for (CodeableConcept i : modifier)
6688            dst.modifier.add(i.copy());
6689        };
6690        if (programCode != null) {
6691          dst.programCode = new ArrayList<CodeableConcept>();
6692          for (CodeableConcept i : programCode)
6693            dst.programCode.add(i.copy());
6694        };
6695        dst.quantity = quantity == null ? null : quantity.copy();
6696        dst.unitPrice = unitPrice == null ? null : unitPrice.copy();
6697        dst.factor = factor == null ? null : factor.copy();
6698        dst.net = net == null ? null : net.copy();
6699        if (udi != null) {
6700          dst.udi = new ArrayList<Reference>();
6701          for (Reference i : udi)
6702            dst.udi.add(i.copy());
6703        };
6704        return dst;
6705      }
6706
6707      @Override
6708      public boolean equalsDeep(Base other_) {
6709        if (!super.equalsDeep(other_))
6710          return false;
6711        if (!(other_ instanceof SubDetailComponent))
6712          return false;
6713        SubDetailComponent o = (SubDetailComponent) other_;
6714        return compareDeep(sequence, o.sequence, true) && compareDeep(revenue, o.revenue, true) && compareDeep(category, o.category, true)
6715           && compareDeep(service, o.service, true) && compareDeep(modifier, o.modifier, true) && compareDeep(programCode, o.programCode, true)
6716           && compareDeep(quantity, o.quantity, true) && compareDeep(unitPrice, o.unitPrice, true) && compareDeep(factor, o.factor, true)
6717           && compareDeep(net, o.net, true) && compareDeep(udi, o.udi, true);
6718      }
6719
6720      @Override
6721      public boolean equalsShallow(Base other_) {
6722        if (!super.equalsShallow(other_))
6723          return false;
6724        if (!(other_ instanceof SubDetailComponent))
6725          return false;
6726        SubDetailComponent o = (SubDetailComponent) other_;
6727        return compareValues(sequence, o.sequence, true) && compareValues(factor, o.factor, true);
6728      }
6729
6730      public boolean isEmpty() {
6731        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(sequence, revenue, category
6732          , service, modifier, programCode, quantity, unitPrice, factor, net, udi);
6733      }
6734
6735  public String fhirType() {
6736    return "Claim.item.detail.subDetail";
6737
6738  }
6739
6740  }
6741
6742    /**
6743     * The business identifier for the instance: claim number, pre-determination or pre-authorization number.
6744     */
6745    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6746    @Description(shortDefinition="Claim number", formalDefinition="The business identifier for the instance: claim number, pre-determination or pre-authorization number." )
6747    protected List<Identifier> identifier;
6748
6749    /**
6750     * The status of the resource instance.
6751     */
6752    @Child(name = "status", type = {CodeType.class}, order=1, min=0, max=1, modifier=true, summary=true)
6753    @Description(shortDefinition="active | cancelled | draft | entered-in-error", formalDefinition="The status of the resource instance." )
6754    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fm-status")
6755    protected Enumeration<ClaimStatus> status;
6756
6757    /**
6758     * The category of claim, eg, oral, pharmacy, vision, insitutional, professional.
6759     */
6760    @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
6761    @Description(shortDefinition="Type or discipline", formalDefinition="The category of claim, eg, oral, pharmacy, vision, insitutional, professional." )
6762    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-type")
6763    protected CodeableConcept type;
6764
6765    /**
6766     * A finer grained suite of claim subtype codes which may convey Inpatient vs Outpatient and/or a specialty service. In the US the BillType.
6767     */
6768    @Child(name = "subType", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6769    @Description(shortDefinition="Finer grained claim type information", formalDefinition="A finer grained suite of claim subtype codes which may convey Inpatient vs Outpatient and/or a specialty service. In the US the BillType." )
6770    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-subtype")
6771    protected List<CodeableConcept> subType;
6772
6773    /**
6774     * Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).
6775     */
6776    @Child(name = "use", type = {CodeType.class}, order=4, min=0, max=1, modifier=false, summary=false)
6777    @Description(shortDefinition="complete | proposed | exploratory | other", formalDefinition="Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination)." )
6778    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/claim-use")
6779    protected Enumeration<Use> use;
6780
6781    /**
6782     * Patient Resource.
6783     */
6784    @Child(name = "patient", type = {Patient.class}, order=5, min=0, max=1, modifier=false, summary=false)
6785    @Description(shortDefinition="The subject of the Products and Services", formalDefinition="Patient Resource." )
6786    protected Reference patient;
6787
6788    /**
6789     * The actual object that is the target of the reference (Patient Resource.)
6790     */
6791    protected Patient patientTarget;
6792
6793    /**
6794     * The billable period for which charges are being submitted.
6795     */
6796    @Child(name = "billablePeriod", type = {Period.class}, order=6, min=0, max=1, modifier=false, summary=false)
6797    @Description(shortDefinition="Period for charge submission", formalDefinition="The billable period for which charges are being submitted." )
6798    protected Period billablePeriod;
6799
6800    /**
6801     * The date when the enclosed suite of services were performed or completed.
6802     */
6803    @Child(name = "created", type = {DateTimeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
6804    @Description(shortDefinition="Creation date", formalDefinition="The date when the enclosed suite of services were performed or completed." )
6805    protected DateTimeType created;
6806
6807    /**
6808     * Person who created the invoice/claim/pre-determination or pre-authorization.
6809     */
6810    @Child(name = "enterer", type = {Practitioner.class}, order=8, min=0, max=1, modifier=false, summary=false)
6811    @Description(shortDefinition="Author", formalDefinition="Person who created the invoice/claim/pre-determination or pre-authorization." )
6812    protected Reference enterer;
6813
6814    /**
6815     * The actual object that is the target of the reference (Person who created the invoice/claim/pre-determination or pre-authorization.)
6816     */
6817    protected Practitioner entererTarget;
6818
6819    /**
6820     * The Insurer who is target of the request.
6821     */
6822    @Child(name = "insurer", type = {Organization.class}, order=9, min=0, max=1, modifier=false, summary=false)
6823    @Description(shortDefinition="Target", formalDefinition="The Insurer who is target of the request." )
6824    protected Reference insurer;
6825
6826    /**
6827     * The actual object that is the target of the reference (The Insurer who is target of the request.)
6828     */
6829    protected Organization insurerTarget;
6830
6831    /**
6832     * The provider which is responsible for the bill, claim pre-determination, pre-authorization.
6833     */
6834    @Child(name = "provider", type = {Practitioner.class}, order=10, min=0, max=1, modifier=false, summary=false)
6835    @Description(shortDefinition="Responsible provider", formalDefinition="The provider which is responsible for the bill, claim pre-determination, pre-authorization." )
6836    protected Reference provider;
6837
6838    /**
6839     * The actual object that is the target of the reference (The provider which is responsible for the bill, claim pre-determination, pre-authorization.)
6840     */
6841    protected Practitioner providerTarget;
6842
6843    /**
6844     * The organization which is responsible for the bill, claim pre-determination, pre-authorization.
6845     */
6846    @Child(name = "organization", type = {Organization.class}, order=11, min=0, max=1, modifier=false, summary=false)
6847    @Description(shortDefinition="Responsible organization", formalDefinition="The organization which is responsible for the bill, claim pre-determination, pre-authorization." )
6848    protected Reference organization;
6849
6850    /**
6851     * The actual object that is the target of the reference (The organization which is responsible for the bill, claim pre-determination, pre-authorization.)
6852     */
6853    protected Organization organizationTarget;
6854
6855    /**
6856     * Immediate (STAT), best effort (NORMAL), deferred (DEFER).
6857     */
6858    @Child(name = "priority", type = {CodeableConcept.class}, order=12, min=0, max=1, modifier=false, summary=false)
6859    @Description(shortDefinition="Desired processing priority", formalDefinition="Immediate (STAT), best effort (NORMAL), deferred (DEFER)." )
6860    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/process-priority")
6861    protected CodeableConcept priority;
6862
6863    /**
6864     * In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.
6865     */
6866    @Child(name = "fundsReserve", type = {CodeableConcept.class}, order=13, min=0, max=1, modifier=false, summary=false)
6867    @Description(shortDefinition="Funds requested to be reserved", formalDefinition="In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested." )
6868    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fundsreserve")
6869    protected CodeableConcept fundsReserve;
6870
6871    /**
6872     * Other claims which are related to this claim such as prior claim versions or for related services.
6873     */
6874    @Child(name = "related", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6875    @Description(shortDefinition="Related Claims which may be revelant to processing this claimn", formalDefinition="Other claims which are related to this claim such as prior claim versions or for related services." )
6876    protected List<RelatedClaimComponent> related;
6877
6878    /**
6879     * Prescription to support the dispensing of Pharmacy or Vision products.
6880     */
6881    @Child(name = "prescription", type = {MedicationRequest.class, VisionPrescription.class}, order=15, min=0, max=1, modifier=false, summary=false)
6882    @Description(shortDefinition="Prescription authorizing services or products", formalDefinition="Prescription to support the dispensing of Pharmacy or Vision products." )
6883    protected Reference prescription;
6884
6885    /**
6886     * The actual object that is the target of the reference (Prescription to support the dispensing of Pharmacy or Vision products.)
6887     */
6888    protected Resource prescriptionTarget;
6889
6890    /**
6891     * Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.
6892     */
6893    @Child(name = "originalPrescription", type = {MedicationRequest.class}, order=16, min=0, max=1, modifier=false, summary=false)
6894    @Description(shortDefinition="Original prescription if superceded by fulfiller", formalDefinition="Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'." )
6895    protected Reference originalPrescription;
6896
6897    /**
6898     * The actual object that is the target of the reference (Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.)
6899     */
6900    protected MedicationRequest originalPrescriptionTarget;
6901
6902    /**
6903     * The party to be reimbursed for the services.
6904     */
6905    @Child(name = "payee", type = {}, order=17, min=0, max=1, modifier=false, summary=false)
6906    @Description(shortDefinition="Party to be paid any benefits payable", formalDefinition="The party to be reimbursed for the services." )
6907    protected PayeeComponent payee;
6908
6909    /**
6910     * The referral resource which lists the date, practitioner, reason and other supporting information.
6911     */
6912    @Child(name = "referral", type = {ReferralRequest.class}, order=18, min=0, max=1, modifier=false, summary=false)
6913    @Description(shortDefinition="Treatment Referral", formalDefinition="The referral resource which lists the date, practitioner, reason and other supporting information." )
6914    protected Reference referral;
6915
6916    /**
6917     * The actual object that is the target of the reference (The referral resource which lists the date, practitioner, reason and other supporting information.)
6918     */
6919    protected ReferralRequest referralTarget;
6920
6921    /**
6922     * Facility where the services were provided.
6923     */
6924    @Child(name = "facility", type = {Location.class}, order=19, min=0, max=1, modifier=false, summary=false)
6925    @Description(shortDefinition="Servicing Facility", formalDefinition="Facility where the services were provided." )
6926    protected Reference facility;
6927
6928    /**
6929     * The actual object that is the target of the reference (Facility where the services were provided.)
6930     */
6931    protected Location facilityTarget;
6932
6933    /**
6934     * The members of the team who provided the overall service as well as their role and whether responsible and qualifications.
6935     */
6936    @Child(name = "careTeam", type = {}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6937    @Description(shortDefinition="Members of the care team", formalDefinition="The members of the team who provided the overall service as well as their role and whether responsible and qualifications." )
6938    protected List<CareTeamComponent> careTeam;
6939
6940    /**
6941     * Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues. Often there are mutiple jurisdiction specific valuesets which are required.
6942     */
6943    @Child(name = "information", type = {}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6944    @Description(shortDefinition="Exceptions, special considerations, the condition, situation, prior or concurrent issues", formalDefinition="Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues. Often there are mutiple jurisdiction specific valuesets which are required." )
6945    protected List<SpecialConditionComponent> information;
6946
6947    /**
6948     * List of patient diagnosis for which care is sought.
6949     */
6950    @Child(name = "diagnosis", type = {}, order=22, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6951    @Description(shortDefinition="List of Diagnosis", formalDefinition="List of patient diagnosis for which care is sought." )
6952    protected List<DiagnosisComponent> diagnosis;
6953
6954    /**
6955     * Ordered list of patient procedures performed to support the adjudication.
6956     */
6957    @Child(name = "procedure", type = {}, order=23, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6958    @Description(shortDefinition="Procedures performed", formalDefinition="Ordered list of patient procedures performed to support the adjudication." )
6959    protected List<ProcedureComponent> procedure;
6960
6961    /**
6962     * Financial instrument by which payment information for health care.
6963     */
6964    @Child(name = "insurance", type = {}, order=24, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6965    @Description(shortDefinition="Insurance or medical plan", formalDefinition="Financial instrument by which payment information for health care." )
6966    protected List<InsuranceComponent> insurance;
6967
6968    /**
6969     * An accident which resulted in the need for healthcare services.
6970     */
6971    @Child(name = "accident", type = {}, order=25, min=0, max=1, modifier=false, summary=false)
6972    @Description(shortDefinition="Details about an accident", formalDefinition="An accident which resulted in the need for healthcare services." )
6973    protected AccidentComponent accident;
6974
6975    /**
6976     * The start and optional end dates of when the patient was precluded from working due to the treatable condition(s).
6977     */
6978    @Child(name = "employmentImpacted", type = {Period.class}, order=26, min=0, max=1, modifier=false, summary=false)
6979    @Description(shortDefinition="Period unable to work", formalDefinition="The start and optional end dates of when the patient was precluded from working due to the treatable condition(s)." )
6980    protected Period employmentImpacted;
6981
6982    /**
6983     * The start and optional end dates of when the patient was confined to a treatment center.
6984     */
6985    @Child(name = "hospitalization", type = {Period.class}, order=27, min=0, max=1, modifier=false, summary=false)
6986    @Description(shortDefinition="Period in hospital", formalDefinition="The start and optional end dates of when the patient was confined to a treatment center." )
6987    protected Period hospitalization;
6988
6989    /**
6990     * First tier of goods and services.
6991     */
6992    @Child(name = "item", type = {}, order=28, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6993    @Description(shortDefinition="Goods and Services", formalDefinition="First tier of goods and services." )
6994    protected List<ItemComponent> item;
6995
6996    /**
6997     * The total value of the claim.
6998     */
6999    @Child(name = "total", type = {Money.class}, order=29, min=0, max=1, modifier=false, summary=false)
7000    @Description(shortDefinition="Total claim cost", formalDefinition="The total value of the claim." )
7001    protected Money total;
7002
7003    private static final long serialVersionUID = 1731171342L;
7004
7005  /**
7006   * Constructor
7007   */
7008    public Claim() {
7009      super();
7010    }
7011
7012    /**
7013     * @return {@link #identifier} (The business identifier for the instance: claim number, pre-determination or pre-authorization number.)
7014     */
7015    public List<Identifier> getIdentifier() { 
7016      if (this.identifier == null)
7017        this.identifier = new ArrayList<Identifier>();
7018      return this.identifier;
7019    }
7020
7021    /**
7022     * @return Returns a reference to <code>this</code> for easy method chaining
7023     */
7024    public Claim setIdentifier(List<Identifier> theIdentifier) { 
7025      this.identifier = theIdentifier;
7026      return this;
7027    }
7028
7029    public boolean hasIdentifier() { 
7030      if (this.identifier == null)
7031        return false;
7032      for (Identifier item : this.identifier)
7033        if (!item.isEmpty())
7034          return true;
7035      return false;
7036    }
7037
7038    public Identifier addIdentifier() { //3
7039      Identifier t = new Identifier();
7040      if (this.identifier == null)
7041        this.identifier = new ArrayList<Identifier>();
7042      this.identifier.add(t);
7043      return t;
7044    }
7045
7046    public Claim addIdentifier(Identifier t) { //3
7047      if (t == null)
7048        return this;
7049      if (this.identifier == null)
7050        this.identifier = new ArrayList<Identifier>();
7051      this.identifier.add(t);
7052      return this;
7053    }
7054
7055    /**
7056     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
7057     */
7058    public Identifier getIdentifierFirstRep() { 
7059      if (getIdentifier().isEmpty()) {
7060        addIdentifier();
7061      }
7062      return getIdentifier().get(0);
7063    }
7064
7065    /**
7066     * @return {@link #status} (The status of the resource instance.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
7067     */
7068    public Enumeration<ClaimStatus> getStatusElement() { 
7069      if (this.status == null)
7070        if (Configuration.errorOnAutoCreate())
7071          throw new Error("Attempt to auto-create Claim.status");
7072        else if (Configuration.doAutoCreate())
7073          this.status = new Enumeration<ClaimStatus>(new ClaimStatusEnumFactory()); // bb
7074      return this.status;
7075    }
7076
7077    public boolean hasStatusElement() { 
7078      return this.status != null && !this.status.isEmpty();
7079    }
7080
7081    public boolean hasStatus() { 
7082      return this.status != null && !this.status.isEmpty();
7083    }
7084
7085    /**
7086     * @param value {@link #status} (The status of the resource instance.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
7087     */
7088    public Claim setStatusElement(Enumeration<ClaimStatus> value) { 
7089      this.status = value;
7090      return this;
7091    }
7092
7093    /**
7094     * @return The status of the resource instance.
7095     */
7096    public ClaimStatus getStatus() { 
7097      return this.status == null ? null : this.status.getValue();
7098    }
7099
7100    /**
7101     * @param value The status of the resource instance.
7102     */
7103    public Claim setStatus(ClaimStatus value) { 
7104      if (value == null)
7105        this.status = null;
7106      else {
7107        if (this.status == null)
7108          this.status = new Enumeration<ClaimStatus>(new ClaimStatusEnumFactory());
7109        this.status.setValue(value);
7110      }
7111      return this;
7112    }
7113
7114    /**
7115     * @return {@link #type} (The category of claim, eg, oral, pharmacy, vision, insitutional, professional.)
7116     */
7117    public CodeableConcept getType() { 
7118      if (this.type == null)
7119        if (Configuration.errorOnAutoCreate())
7120          throw new Error("Attempt to auto-create Claim.type");
7121        else if (Configuration.doAutoCreate())
7122          this.type = new CodeableConcept(); // cc
7123      return this.type;
7124    }
7125
7126    public boolean hasType() { 
7127      return this.type != null && !this.type.isEmpty();
7128    }
7129
7130    /**
7131     * @param value {@link #type} (The category of claim, eg, oral, pharmacy, vision, insitutional, professional.)
7132     */
7133    public Claim setType(CodeableConcept value)  { 
7134      this.type = value;
7135      return this;
7136    }
7137
7138    /**
7139     * @return {@link #subType} (A finer grained suite of claim subtype codes which may convey Inpatient vs Outpatient and/or a specialty service. In the US the BillType.)
7140     */
7141    public List<CodeableConcept> getSubType() { 
7142      if (this.subType == null)
7143        this.subType = new ArrayList<CodeableConcept>();
7144      return this.subType;
7145    }
7146
7147    /**
7148     * @return Returns a reference to <code>this</code> for easy method chaining
7149     */
7150    public Claim setSubType(List<CodeableConcept> theSubType) { 
7151      this.subType = theSubType;
7152      return this;
7153    }
7154
7155    public boolean hasSubType() { 
7156      if (this.subType == null)
7157        return false;
7158      for (CodeableConcept item : this.subType)
7159        if (!item.isEmpty())
7160          return true;
7161      return false;
7162    }
7163
7164    public CodeableConcept addSubType() { //3
7165      CodeableConcept t = new CodeableConcept();
7166      if (this.subType == null)
7167        this.subType = new ArrayList<CodeableConcept>();
7168      this.subType.add(t);
7169      return t;
7170    }
7171
7172    public Claim addSubType(CodeableConcept t) { //3
7173      if (t == null)
7174        return this;
7175      if (this.subType == null)
7176        this.subType = new ArrayList<CodeableConcept>();
7177      this.subType.add(t);
7178      return this;
7179    }
7180
7181    /**
7182     * @return The first repetition of repeating field {@link #subType}, creating it if it does not already exist
7183     */
7184    public CodeableConcept getSubTypeFirstRep() { 
7185      if (getSubType().isEmpty()) {
7186        addSubType();
7187      }
7188      return getSubType().get(0);
7189    }
7190
7191    /**
7192     * @return {@link #use} (Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
7193     */
7194    public Enumeration<Use> getUseElement() { 
7195      if (this.use == null)
7196        if (Configuration.errorOnAutoCreate())
7197          throw new Error("Attempt to auto-create Claim.use");
7198        else if (Configuration.doAutoCreate())
7199          this.use = new Enumeration<Use>(new UseEnumFactory()); // bb
7200      return this.use;
7201    }
7202
7203    public boolean hasUseElement() { 
7204      return this.use != null && !this.use.isEmpty();
7205    }
7206
7207    public boolean hasUse() { 
7208      return this.use != null && !this.use.isEmpty();
7209    }
7210
7211    /**
7212     * @param value {@link #use} (Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).). This is the underlying object with id, value and extensions. The accessor "getUse" gives direct access to the value
7213     */
7214    public Claim setUseElement(Enumeration<Use> value) { 
7215      this.use = value;
7216      return this;
7217    }
7218
7219    /**
7220     * @return Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).
7221     */
7222    public Use getUse() { 
7223      return this.use == null ? null : this.use.getValue();
7224    }
7225
7226    /**
7227     * @param value Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).
7228     */
7229    public Claim setUse(Use value) { 
7230      if (value == null)
7231        this.use = null;
7232      else {
7233        if (this.use == null)
7234          this.use = new Enumeration<Use>(new UseEnumFactory());
7235        this.use.setValue(value);
7236      }
7237      return this;
7238    }
7239
7240    /**
7241     * @return {@link #patient} (Patient Resource.)
7242     */
7243    public Reference getPatient() { 
7244      if (this.patient == null)
7245        if (Configuration.errorOnAutoCreate())
7246          throw new Error("Attempt to auto-create Claim.patient");
7247        else if (Configuration.doAutoCreate())
7248          this.patient = new Reference(); // cc
7249      return this.patient;
7250    }
7251
7252    public boolean hasPatient() { 
7253      return this.patient != null && !this.patient.isEmpty();
7254    }
7255
7256    /**
7257     * @param value {@link #patient} (Patient Resource.)
7258     */
7259    public Claim setPatient(Reference value)  { 
7260      this.patient = value;
7261      return this;
7262    }
7263
7264    /**
7265     * @return {@link #patient} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Patient Resource.)
7266     */
7267    public Patient getPatientTarget() { 
7268      if (this.patientTarget == null)
7269        if (Configuration.errorOnAutoCreate())
7270          throw new Error("Attempt to auto-create Claim.patient");
7271        else if (Configuration.doAutoCreate())
7272          this.patientTarget = new Patient(); // aa
7273      return this.patientTarget;
7274    }
7275
7276    /**
7277     * @param value {@link #patient} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Patient Resource.)
7278     */
7279    public Claim setPatientTarget(Patient value) { 
7280      this.patientTarget = value;
7281      return this;
7282    }
7283
7284    /**
7285     * @return {@link #billablePeriod} (The billable period for which charges are being submitted.)
7286     */
7287    public Period getBillablePeriod() { 
7288      if (this.billablePeriod == null)
7289        if (Configuration.errorOnAutoCreate())
7290          throw new Error("Attempt to auto-create Claim.billablePeriod");
7291        else if (Configuration.doAutoCreate())
7292          this.billablePeriod = new Period(); // cc
7293      return this.billablePeriod;
7294    }
7295
7296    public boolean hasBillablePeriod() { 
7297      return this.billablePeriod != null && !this.billablePeriod.isEmpty();
7298    }
7299
7300    /**
7301     * @param value {@link #billablePeriod} (The billable period for which charges are being submitted.)
7302     */
7303    public Claim setBillablePeriod(Period value)  { 
7304      this.billablePeriod = value;
7305      return this;
7306    }
7307
7308    /**
7309     * @return {@link #created} (The date when the enclosed suite of services were performed or completed.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
7310     */
7311    public DateTimeType getCreatedElement() { 
7312      if (this.created == null)
7313        if (Configuration.errorOnAutoCreate())
7314          throw new Error("Attempt to auto-create Claim.created");
7315        else if (Configuration.doAutoCreate())
7316          this.created = new DateTimeType(); // bb
7317      return this.created;
7318    }
7319
7320    public boolean hasCreatedElement() { 
7321      return this.created != null && !this.created.isEmpty();
7322    }
7323
7324    public boolean hasCreated() { 
7325      return this.created != null && !this.created.isEmpty();
7326    }
7327
7328    /**
7329     * @param value {@link #created} (The date when the enclosed suite of services were performed or completed.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
7330     */
7331    public Claim setCreatedElement(DateTimeType value) { 
7332      this.created = value;
7333      return this;
7334    }
7335
7336    /**
7337     * @return The date when the enclosed suite of services were performed or completed.
7338     */
7339    public Date getCreated() { 
7340      return this.created == null ? null : this.created.getValue();
7341    }
7342
7343    /**
7344     * @param value The date when the enclosed suite of services were performed or completed.
7345     */
7346    public Claim setCreated(Date value) { 
7347      if (value == null)
7348        this.created = null;
7349      else {
7350        if (this.created == null)
7351          this.created = new DateTimeType();
7352        this.created.setValue(value);
7353      }
7354      return this;
7355    }
7356
7357    /**
7358     * @return {@link #enterer} (Person who created the invoice/claim/pre-determination or pre-authorization.)
7359     */
7360    public Reference getEnterer() { 
7361      if (this.enterer == null)
7362        if (Configuration.errorOnAutoCreate())
7363          throw new Error("Attempt to auto-create Claim.enterer");
7364        else if (Configuration.doAutoCreate())
7365          this.enterer = new Reference(); // cc
7366      return this.enterer;
7367    }
7368
7369    public boolean hasEnterer() { 
7370      return this.enterer != null && !this.enterer.isEmpty();
7371    }
7372
7373    /**
7374     * @param value {@link #enterer} (Person who created the invoice/claim/pre-determination or pre-authorization.)
7375     */
7376    public Claim setEnterer(Reference value)  { 
7377      this.enterer = value;
7378      return this;
7379    }
7380
7381    /**
7382     * @return {@link #enterer} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Person who created the invoice/claim/pre-determination or pre-authorization.)
7383     */
7384    public Practitioner getEntererTarget() { 
7385      if (this.entererTarget == null)
7386        if (Configuration.errorOnAutoCreate())
7387          throw new Error("Attempt to auto-create Claim.enterer");
7388        else if (Configuration.doAutoCreate())
7389          this.entererTarget = new Practitioner(); // aa
7390      return this.entererTarget;
7391    }
7392
7393    /**
7394     * @param value {@link #enterer} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Person who created the invoice/claim/pre-determination or pre-authorization.)
7395     */
7396    public Claim setEntererTarget(Practitioner value) { 
7397      this.entererTarget = value;
7398      return this;
7399    }
7400
7401    /**
7402     * @return {@link #insurer} (The Insurer who is target of the request.)
7403     */
7404    public Reference getInsurer() { 
7405      if (this.insurer == null)
7406        if (Configuration.errorOnAutoCreate())
7407          throw new Error("Attempt to auto-create Claim.insurer");
7408        else if (Configuration.doAutoCreate())
7409          this.insurer = new Reference(); // cc
7410      return this.insurer;
7411    }
7412
7413    public boolean hasInsurer() { 
7414      return this.insurer != null && !this.insurer.isEmpty();
7415    }
7416
7417    /**
7418     * @param value {@link #insurer} (The Insurer who is target of the request.)
7419     */
7420    public Claim setInsurer(Reference value)  { 
7421      this.insurer = value;
7422      return this;
7423    }
7424
7425    /**
7426     * @return {@link #insurer} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The Insurer who is target of the request.)
7427     */
7428    public Organization getInsurerTarget() { 
7429      if (this.insurerTarget == null)
7430        if (Configuration.errorOnAutoCreate())
7431          throw new Error("Attempt to auto-create Claim.insurer");
7432        else if (Configuration.doAutoCreate())
7433          this.insurerTarget = new Organization(); // aa
7434      return this.insurerTarget;
7435    }
7436
7437    /**
7438     * @param value {@link #insurer} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The Insurer who is target of the request.)
7439     */
7440    public Claim setInsurerTarget(Organization value) { 
7441      this.insurerTarget = value;
7442      return this;
7443    }
7444
7445    /**
7446     * @return {@link #provider} (The provider which is responsible for the bill, claim pre-determination, pre-authorization.)
7447     */
7448    public Reference getProvider() { 
7449      if (this.provider == null)
7450        if (Configuration.errorOnAutoCreate())
7451          throw new Error("Attempt to auto-create Claim.provider");
7452        else if (Configuration.doAutoCreate())
7453          this.provider = new Reference(); // cc
7454      return this.provider;
7455    }
7456
7457    public boolean hasProvider() { 
7458      return this.provider != null && !this.provider.isEmpty();
7459    }
7460
7461    /**
7462     * @param value {@link #provider} (The provider which is responsible for the bill, claim pre-determination, pre-authorization.)
7463     */
7464    public Claim setProvider(Reference value)  { 
7465      this.provider = value;
7466      return this;
7467    }
7468
7469    /**
7470     * @return {@link #provider} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The provider which is responsible for the bill, claim pre-determination, pre-authorization.)
7471     */
7472    public Practitioner getProviderTarget() { 
7473      if (this.providerTarget == null)
7474        if (Configuration.errorOnAutoCreate())
7475          throw new Error("Attempt to auto-create Claim.provider");
7476        else if (Configuration.doAutoCreate())
7477          this.providerTarget = new Practitioner(); // aa
7478      return this.providerTarget;
7479    }
7480
7481    /**
7482     * @param value {@link #provider} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The provider which is responsible for the bill, claim pre-determination, pre-authorization.)
7483     */
7484    public Claim setProviderTarget(Practitioner value) { 
7485      this.providerTarget = value;
7486      return this;
7487    }
7488
7489    /**
7490     * @return {@link #organization} (The organization which is responsible for the bill, claim pre-determination, pre-authorization.)
7491     */
7492    public Reference getOrganization() { 
7493      if (this.organization == null)
7494        if (Configuration.errorOnAutoCreate())
7495          throw new Error("Attempt to auto-create Claim.organization");
7496        else if (Configuration.doAutoCreate())
7497          this.organization = new Reference(); // cc
7498      return this.organization;
7499    }
7500
7501    public boolean hasOrganization() { 
7502      return this.organization != null && !this.organization.isEmpty();
7503    }
7504
7505    /**
7506     * @param value {@link #organization} (The organization which is responsible for the bill, claim pre-determination, pre-authorization.)
7507     */
7508    public Claim setOrganization(Reference value)  { 
7509      this.organization = value;
7510      return this;
7511    }
7512
7513    /**
7514     * @return {@link #organization} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The organization which is responsible for the bill, claim pre-determination, pre-authorization.)
7515     */
7516    public Organization getOrganizationTarget() { 
7517      if (this.organizationTarget == null)
7518        if (Configuration.errorOnAutoCreate())
7519          throw new Error("Attempt to auto-create Claim.organization");
7520        else if (Configuration.doAutoCreate())
7521          this.organizationTarget = new Organization(); // aa
7522      return this.organizationTarget;
7523    }
7524
7525    /**
7526     * @param value {@link #organization} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The organization which is responsible for the bill, claim pre-determination, pre-authorization.)
7527     */
7528    public Claim setOrganizationTarget(Organization value) { 
7529      this.organizationTarget = value;
7530      return this;
7531    }
7532
7533    /**
7534     * @return {@link #priority} (Immediate (STAT), best effort (NORMAL), deferred (DEFER).)
7535     */
7536    public CodeableConcept getPriority() { 
7537      if (this.priority == null)
7538        if (Configuration.errorOnAutoCreate())
7539          throw new Error("Attempt to auto-create Claim.priority");
7540        else if (Configuration.doAutoCreate())
7541          this.priority = new CodeableConcept(); // cc
7542      return this.priority;
7543    }
7544
7545    public boolean hasPriority() { 
7546      return this.priority != null && !this.priority.isEmpty();
7547    }
7548
7549    /**
7550     * @param value {@link #priority} (Immediate (STAT), best effort (NORMAL), deferred (DEFER).)
7551     */
7552    public Claim setPriority(CodeableConcept value)  { 
7553      this.priority = value;
7554      return this;
7555    }
7556
7557    /**
7558     * @return {@link #fundsReserve} (In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.)
7559     */
7560    public CodeableConcept getFundsReserve() { 
7561      if (this.fundsReserve == null)
7562        if (Configuration.errorOnAutoCreate())
7563          throw new Error("Attempt to auto-create Claim.fundsReserve");
7564        else if (Configuration.doAutoCreate())
7565          this.fundsReserve = new CodeableConcept(); // cc
7566      return this.fundsReserve;
7567    }
7568
7569    public boolean hasFundsReserve() { 
7570      return this.fundsReserve != null && !this.fundsReserve.isEmpty();
7571    }
7572
7573    /**
7574     * @param value {@link #fundsReserve} (In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.)
7575     */
7576    public Claim setFundsReserve(CodeableConcept value)  { 
7577      this.fundsReserve = value;
7578      return this;
7579    }
7580
7581    /**
7582     * @return {@link #related} (Other claims which are related to this claim such as prior claim versions or for related services.)
7583     */
7584    public List<RelatedClaimComponent> getRelated() { 
7585      if (this.related == null)
7586        this.related = new ArrayList<RelatedClaimComponent>();
7587      return this.related;
7588    }
7589
7590    /**
7591     * @return Returns a reference to <code>this</code> for easy method chaining
7592     */
7593    public Claim setRelated(List<RelatedClaimComponent> theRelated) { 
7594      this.related = theRelated;
7595      return this;
7596    }
7597
7598    public boolean hasRelated() { 
7599      if (this.related == null)
7600        return false;
7601      for (RelatedClaimComponent item : this.related)
7602        if (!item.isEmpty())
7603          return true;
7604      return false;
7605    }
7606
7607    public RelatedClaimComponent addRelated() { //3
7608      RelatedClaimComponent t = new RelatedClaimComponent();
7609      if (this.related == null)
7610        this.related = new ArrayList<RelatedClaimComponent>();
7611      this.related.add(t);
7612      return t;
7613    }
7614
7615    public Claim addRelated(RelatedClaimComponent t) { //3
7616      if (t == null)
7617        return this;
7618      if (this.related == null)
7619        this.related = new ArrayList<RelatedClaimComponent>();
7620      this.related.add(t);
7621      return this;
7622    }
7623
7624    /**
7625     * @return The first repetition of repeating field {@link #related}, creating it if it does not already exist
7626     */
7627    public RelatedClaimComponent getRelatedFirstRep() { 
7628      if (getRelated().isEmpty()) {
7629        addRelated();
7630      }
7631      return getRelated().get(0);
7632    }
7633
7634    /**
7635     * @return {@link #prescription} (Prescription to support the dispensing of Pharmacy or Vision products.)
7636     */
7637    public Reference getPrescription() { 
7638      if (this.prescription == null)
7639        if (Configuration.errorOnAutoCreate())
7640          throw new Error("Attempt to auto-create Claim.prescription");
7641        else if (Configuration.doAutoCreate())
7642          this.prescription = new Reference(); // cc
7643      return this.prescription;
7644    }
7645
7646    public boolean hasPrescription() { 
7647      return this.prescription != null && !this.prescription.isEmpty();
7648    }
7649
7650    /**
7651     * @param value {@link #prescription} (Prescription to support the dispensing of Pharmacy or Vision products.)
7652     */
7653    public Claim setPrescription(Reference value)  { 
7654      this.prescription = value;
7655      return this;
7656    }
7657
7658    /**
7659     * @return {@link #prescription} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Prescription to support the dispensing of Pharmacy or Vision products.)
7660     */
7661    public Resource getPrescriptionTarget() { 
7662      return this.prescriptionTarget;
7663    }
7664
7665    /**
7666     * @param value {@link #prescription} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Prescription to support the dispensing of Pharmacy or Vision products.)
7667     */
7668    public Claim setPrescriptionTarget(Resource value) { 
7669      this.prescriptionTarget = value;
7670      return this;
7671    }
7672
7673    /**
7674     * @return {@link #originalPrescription} (Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.)
7675     */
7676    public Reference getOriginalPrescription() { 
7677      if (this.originalPrescription == null)
7678        if (Configuration.errorOnAutoCreate())
7679          throw new Error("Attempt to auto-create Claim.originalPrescription");
7680        else if (Configuration.doAutoCreate())
7681          this.originalPrescription = new Reference(); // cc
7682      return this.originalPrescription;
7683    }
7684
7685    public boolean hasOriginalPrescription() { 
7686      return this.originalPrescription != null && !this.originalPrescription.isEmpty();
7687    }
7688
7689    /**
7690     * @param value {@link #originalPrescription} (Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.)
7691     */
7692    public Claim setOriginalPrescription(Reference value)  { 
7693      this.originalPrescription = value;
7694      return this;
7695    }
7696
7697    /**
7698     * @return {@link #originalPrescription} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.)
7699     */
7700    public MedicationRequest getOriginalPrescriptionTarget() { 
7701      if (this.originalPrescriptionTarget == null)
7702        if (Configuration.errorOnAutoCreate())
7703          throw new Error("Attempt to auto-create Claim.originalPrescription");
7704        else if (Configuration.doAutoCreate())
7705          this.originalPrescriptionTarget = new MedicationRequest(); // aa
7706      return this.originalPrescriptionTarget;
7707    }
7708
7709    /**
7710     * @param value {@link #originalPrescription} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.)
7711     */
7712    public Claim setOriginalPrescriptionTarget(MedicationRequest value) { 
7713      this.originalPrescriptionTarget = value;
7714      return this;
7715    }
7716
7717    /**
7718     * @return {@link #payee} (The party to be reimbursed for the services.)
7719     */
7720    public PayeeComponent getPayee() { 
7721      if (this.payee == null)
7722        if (Configuration.errorOnAutoCreate())
7723          throw new Error("Attempt to auto-create Claim.payee");
7724        else if (Configuration.doAutoCreate())
7725          this.payee = new PayeeComponent(); // cc
7726      return this.payee;
7727    }
7728
7729    public boolean hasPayee() { 
7730      return this.payee != null && !this.payee.isEmpty();
7731    }
7732
7733    /**
7734     * @param value {@link #payee} (The party to be reimbursed for the services.)
7735     */
7736    public Claim setPayee(PayeeComponent value)  { 
7737      this.payee = value;
7738      return this;
7739    }
7740
7741    /**
7742     * @return {@link #referral} (The referral resource which lists the date, practitioner, reason and other supporting information.)
7743     */
7744    public Reference getReferral() { 
7745      if (this.referral == null)
7746        if (Configuration.errorOnAutoCreate())
7747          throw new Error("Attempt to auto-create Claim.referral");
7748        else if (Configuration.doAutoCreate())
7749          this.referral = new Reference(); // cc
7750      return this.referral;
7751    }
7752
7753    public boolean hasReferral() { 
7754      return this.referral != null && !this.referral.isEmpty();
7755    }
7756
7757    /**
7758     * @param value {@link #referral} (The referral resource which lists the date, practitioner, reason and other supporting information.)
7759     */
7760    public Claim setReferral(Reference value)  { 
7761      this.referral = value;
7762      return this;
7763    }
7764
7765    /**
7766     * @return {@link #referral} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The referral resource which lists the date, practitioner, reason and other supporting information.)
7767     */
7768    public ReferralRequest getReferralTarget() { 
7769      if (this.referralTarget == null)
7770        if (Configuration.errorOnAutoCreate())
7771          throw new Error("Attempt to auto-create Claim.referral");
7772        else if (Configuration.doAutoCreate())
7773          this.referralTarget = new ReferralRequest(); // aa
7774      return this.referralTarget;
7775    }
7776
7777    /**
7778     * @param value {@link #referral} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The referral resource which lists the date, practitioner, reason and other supporting information.)
7779     */
7780    public Claim setReferralTarget(ReferralRequest value) { 
7781      this.referralTarget = value;
7782      return this;
7783    }
7784
7785    /**
7786     * @return {@link #facility} (Facility where the services were provided.)
7787     */
7788    public Reference getFacility() { 
7789      if (this.facility == null)
7790        if (Configuration.errorOnAutoCreate())
7791          throw new Error("Attempt to auto-create Claim.facility");
7792        else if (Configuration.doAutoCreate())
7793          this.facility = new Reference(); // cc
7794      return this.facility;
7795    }
7796
7797    public boolean hasFacility() { 
7798      return this.facility != null && !this.facility.isEmpty();
7799    }
7800
7801    /**
7802     * @param value {@link #facility} (Facility where the services were provided.)
7803     */
7804    public Claim setFacility(Reference value)  { 
7805      this.facility = value;
7806      return this;
7807    }
7808
7809    /**
7810     * @return {@link #facility} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Facility where the services were provided.)
7811     */
7812    public Location getFacilityTarget() { 
7813      if (this.facilityTarget == null)
7814        if (Configuration.errorOnAutoCreate())
7815          throw new Error("Attempt to auto-create Claim.facility");
7816        else if (Configuration.doAutoCreate())
7817          this.facilityTarget = new Location(); // aa
7818      return this.facilityTarget;
7819    }
7820
7821    /**
7822     * @param value {@link #facility} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Facility where the services were provided.)
7823     */
7824    public Claim setFacilityTarget(Location value) { 
7825      this.facilityTarget = value;
7826      return this;
7827    }
7828
7829    /**
7830     * @return {@link #careTeam} (The members of the team who provided the overall service as well as their role and whether responsible and qualifications.)
7831     */
7832    public List<CareTeamComponent> getCareTeam() { 
7833      if (this.careTeam == null)
7834        this.careTeam = new ArrayList<CareTeamComponent>();
7835      return this.careTeam;
7836    }
7837
7838    /**
7839     * @return Returns a reference to <code>this</code> for easy method chaining
7840     */
7841    public Claim setCareTeam(List<CareTeamComponent> theCareTeam) { 
7842      this.careTeam = theCareTeam;
7843      return this;
7844    }
7845
7846    public boolean hasCareTeam() { 
7847      if (this.careTeam == null)
7848        return false;
7849      for (CareTeamComponent item : this.careTeam)
7850        if (!item.isEmpty())
7851          return true;
7852      return false;
7853    }
7854
7855    public CareTeamComponent addCareTeam() { //3
7856      CareTeamComponent t = new CareTeamComponent();
7857      if (this.careTeam == null)
7858        this.careTeam = new ArrayList<CareTeamComponent>();
7859      this.careTeam.add(t);
7860      return t;
7861    }
7862
7863    public Claim addCareTeam(CareTeamComponent t) { //3
7864      if (t == null)
7865        return this;
7866      if (this.careTeam == null)
7867        this.careTeam = new ArrayList<CareTeamComponent>();
7868      this.careTeam.add(t);
7869      return this;
7870    }
7871
7872    /**
7873     * @return The first repetition of repeating field {@link #careTeam}, creating it if it does not already exist
7874     */
7875    public CareTeamComponent getCareTeamFirstRep() { 
7876      if (getCareTeam().isEmpty()) {
7877        addCareTeam();
7878      }
7879      return getCareTeam().get(0);
7880    }
7881
7882    /**
7883     * @return {@link #information} (Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues. Often there are mutiple jurisdiction specific valuesets which are required.)
7884     */
7885    public List<SpecialConditionComponent> getInformation() { 
7886      if (this.information == null)
7887        this.information = new ArrayList<SpecialConditionComponent>();
7888      return this.information;
7889    }
7890
7891    /**
7892     * @return Returns a reference to <code>this</code> for easy method chaining
7893     */
7894    public Claim setInformation(List<SpecialConditionComponent> theInformation) { 
7895      this.information = theInformation;
7896      return this;
7897    }
7898
7899    public boolean hasInformation() { 
7900      if (this.information == null)
7901        return false;
7902      for (SpecialConditionComponent item : this.information)
7903        if (!item.isEmpty())
7904          return true;
7905      return false;
7906    }
7907
7908    public SpecialConditionComponent addInformation() { //3
7909      SpecialConditionComponent t = new SpecialConditionComponent();
7910      if (this.information == null)
7911        this.information = new ArrayList<SpecialConditionComponent>();
7912      this.information.add(t);
7913      return t;
7914    }
7915
7916    public Claim addInformation(SpecialConditionComponent t) { //3
7917      if (t == null)
7918        return this;
7919      if (this.information == null)
7920        this.information = new ArrayList<SpecialConditionComponent>();
7921      this.information.add(t);
7922      return this;
7923    }
7924
7925    /**
7926     * @return The first repetition of repeating field {@link #information}, creating it if it does not already exist
7927     */
7928    public SpecialConditionComponent getInformationFirstRep() { 
7929      if (getInformation().isEmpty()) {
7930        addInformation();
7931      }
7932      return getInformation().get(0);
7933    }
7934
7935    /**
7936     * @return {@link #diagnosis} (List of patient diagnosis for which care is sought.)
7937     */
7938    public List<DiagnosisComponent> getDiagnosis() { 
7939      if (this.diagnosis == null)
7940        this.diagnosis = new ArrayList<DiagnosisComponent>();
7941      return this.diagnosis;
7942    }
7943
7944    /**
7945     * @return Returns a reference to <code>this</code> for easy method chaining
7946     */
7947    public Claim setDiagnosis(List<DiagnosisComponent> theDiagnosis) { 
7948      this.diagnosis = theDiagnosis;
7949      return this;
7950    }
7951
7952    public boolean hasDiagnosis() { 
7953      if (this.diagnosis == null)
7954        return false;
7955      for (DiagnosisComponent item : this.diagnosis)
7956        if (!item.isEmpty())
7957          return true;
7958      return false;
7959    }
7960
7961    public DiagnosisComponent addDiagnosis() { //3
7962      DiagnosisComponent t = new DiagnosisComponent();
7963      if (this.diagnosis == null)
7964        this.diagnosis = new ArrayList<DiagnosisComponent>();
7965      this.diagnosis.add(t);
7966      return t;
7967    }
7968
7969    public Claim addDiagnosis(DiagnosisComponent t) { //3
7970      if (t == null)
7971        return this;
7972      if (this.diagnosis == null)
7973        this.diagnosis = new ArrayList<DiagnosisComponent>();
7974      this.diagnosis.add(t);
7975      return this;
7976    }
7977
7978    /**
7979     * @return The first repetition of repeating field {@link #diagnosis}, creating it if it does not already exist
7980     */
7981    public DiagnosisComponent getDiagnosisFirstRep() { 
7982      if (getDiagnosis().isEmpty()) {
7983        addDiagnosis();
7984      }
7985      return getDiagnosis().get(0);
7986    }
7987
7988    /**
7989     * @return {@link #procedure} (Ordered list of patient procedures performed to support the adjudication.)
7990     */
7991    public List<ProcedureComponent> getProcedure() { 
7992      if (this.procedure == null)
7993        this.procedure = new ArrayList<ProcedureComponent>();
7994      return this.procedure;
7995    }
7996
7997    /**
7998     * @return Returns a reference to <code>this</code> for easy method chaining
7999     */
8000    public Claim setProcedure(List<ProcedureComponent> theProcedure) { 
8001      this.procedure = theProcedure;
8002      return this;
8003    }
8004
8005    public boolean hasProcedure() { 
8006      if (this.procedure == null)
8007        return false;
8008      for (ProcedureComponent item : this.procedure)
8009        if (!item.isEmpty())
8010          return true;
8011      return false;
8012    }
8013
8014    public ProcedureComponent addProcedure() { //3
8015      ProcedureComponent t = new ProcedureComponent();
8016      if (this.procedure == null)
8017        this.procedure = new ArrayList<ProcedureComponent>();
8018      this.procedure.add(t);
8019      return t;
8020    }
8021
8022    public Claim addProcedure(ProcedureComponent t) { //3
8023      if (t == null)
8024        return this;
8025      if (this.procedure == null)
8026        this.procedure = new ArrayList<ProcedureComponent>();
8027      this.procedure.add(t);
8028      return this;
8029    }
8030
8031    /**
8032     * @return The first repetition of repeating field {@link #procedure}, creating it if it does not already exist
8033     */
8034    public ProcedureComponent getProcedureFirstRep() { 
8035      if (getProcedure().isEmpty()) {
8036        addProcedure();
8037      }
8038      return getProcedure().get(0);
8039    }
8040
8041    /**
8042     * @return {@link #insurance} (Financial instrument by which payment information for health care.)
8043     */
8044    public List<InsuranceComponent> getInsurance() { 
8045      if (this.insurance == null)
8046        this.insurance = new ArrayList<InsuranceComponent>();
8047      return this.insurance;
8048    }
8049
8050    /**
8051     * @return Returns a reference to <code>this</code> for easy method chaining
8052     */
8053    public Claim setInsurance(List<InsuranceComponent> theInsurance) { 
8054      this.insurance = theInsurance;
8055      return this;
8056    }
8057
8058    public boolean hasInsurance() { 
8059      if (this.insurance == null)
8060        return false;
8061      for (InsuranceComponent item : this.insurance)
8062        if (!item.isEmpty())
8063          return true;
8064      return false;
8065    }
8066
8067    public InsuranceComponent addInsurance() { //3
8068      InsuranceComponent t = new InsuranceComponent();
8069      if (this.insurance == null)
8070        this.insurance = new ArrayList<InsuranceComponent>();
8071      this.insurance.add(t);
8072      return t;
8073    }
8074
8075    public Claim addInsurance(InsuranceComponent t) { //3
8076      if (t == null)
8077        return this;
8078      if (this.insurance == null)
8079        this.insurance = new ArrayList<InsuranceComponent>();
8080      this.insurance.add(t);
8081      return this;
8082    }
8083
8084    /**
8085     * @return The first repetition of repeating field {@link #insurance}, creating it if it does not already exist
8086     */
8087    public InsuranceComponent getInsuranceFirstRep() { 
8088      if (getInsurance().isEmpty()) {
8089        addInsurance();
8090      }
8091      return getInsurance().get(0);
8092    }
8093
8094    /**
8095     * @return {@link #accident} (An accident which resulted in the need for healthcare services.)
8096     */
8097    public AccidentComponent getAccident() { 
8098      if (this.accident == null)
8099        if (Configuration.errorOnAutoCreate())
8100          throw new Error("Attempt to auto-create Claim.accident");
8101        else if (Configuration.doAutoCreate())
8102          this.accident = new AccidentComponent(); // cc
8103      return this.accident;
8104    }
8105
8106    public boolean hasAccident() { 
8107      return this.accident != null && !this.accident.isEmpty();
8108    }
8109
8110    /**
8111     * @param value {@link #accident} (An accident which resulted in the need for healthcare services.)
8112     */
8113    public Claim setAccident(AccidentComponent value)  { 
8114      this.accident = value;
8115      return this;
8116    }
8117
8118    /**
8119     * @return {@link #employmentImpacted} (The start and optional end dates of when the patient was precluded from working due to the treatable condition(s).)
8120     */
8121    public Period getEmploymentImpacted() { 
8122      if (this.employmentImpacted == null)
8123        if (Configuration.errorOnAutoCreate())
8124          throw new Error("Attempt to auto-create Claim.employmentImpacted");
8125        else if (Configuration.doAutoCreate())
8126          this.employmentImpacted = new Period(); // cc
8127      return this.employmentImpacted;
8128    }
8129
8130    public boolean hasEmploymentImpacted() { 
8131      return this.employmentImpacted != null && !this.employmentImpacted.isEmpty();
8132    }
8133
8134    /**
8135     * @param value {@link #employmentImpacted} (The start and optional end dates of when the patient was precluded from working due to the treatable condition(s).)
8136     */
8137    public Claim setEmploymentImpacted(Period value)  { 
8138      this.employmentImpacted = value;
8139      return this;
8140    }
8141
8142    /**
8143     * @return {@link #hospitalization} (The start and optional end dates of when the patient was confined to a treatment center.)
8144     */
8145    public Period getHospitalization() { 
8146      if (this.hospitalization == null)
8147        if (Configuration.errorOnAutoCreate())
8148          throw new Error("Attempt to auto-create Claim.hospitalization");
8149        else if (Configuration.doAutoCreate())
8150          this.hospitalization = new Period(); // cc
8151      return this.hospitalization;
8152    }
8153
8154    public boolean hasHospitalization() { 
8155      return this.hospitalization != null && !this.hospitalization.isEmpty();
8156    }
8157
8158    /**
8159     * @param value {@link #hospitalization} (The start and optional end dates of when the patient was confined to a treatment center.)
8160     */
8161    public Claim setHospitalization(Period value)  { 
8162      this.hospitalization = value;
8163      return this;
8164    }
8165
8166    /**
8167     * @return {@link #item} (First tier of goods and services.)
8168     */
8169    public List<ItemComponent> getItem() { 
8170      if (this.item == null)
8171        this.item = new ArrayList<ItemComponent>();
8172      return this.item;
8173    }
8174
8175    /**
8176     * @return Returns a reference to <code>this</code> for easy method chaining
8177     */
8178    public Claim setItem(List<ItemComponent> theItem) { 
8179      this.item = theItem;
8180      return this;
8181    }
8182
8183    public boolean hasItem() { 
8184      if (this.item == null)
8185        return false;
8186      for (ItemComponent item : this.item)
8187        if (!item.isEmpty())
8188          return true;
8189      return false;
8190    }
8191
8192    public ItemComponent addItem() { //3
8193      ItemComponent t = new ItemComponent();
8194      if (this.item == null)
8195        this.item = new ArrayList<ItemComponent>();
8196      this.item.add(t);
8197      return t;
8198    }
8199
8200    public Claim addItem(ItemComponent t) { //3
8201      if (t == null)
8202        return this;
8203      if (this.item == null)
8204        this.item = new ArrayList<ItemComponent>();
8205      this.item.add(t);
8206      return this;
8207    }
8208
8209    /**
8210     * @return The first repetition of repeating field {@link #item}, creating it if it does not already exist
8211     */
8212    public ItemComponent getItemFirstRep() { 
8213      if (getItem().isEmpty()) {
8214        addItem();
8215      }
8216      return getItem().get(0);
8217    }
8218
8219    /**
8220     * @return {@link #total} (The total value of the claim.)
8221     */
8222    public Money getTotal() { 
8223      if (this.total == null)
8224        if (Configuration.errorOnAutoCreate())
8225          throw new Error("Attempt to auto-create Claim.total");
8226        else if (Configuration.doAutoCreate())
8227          this.total = new Money(); // cc
8228      return this.total;
8229    }
8230
8231    public boolean hasTotal() { 
8232      return this.total != null && !this.total.isEmpty();
8233    }
8234
8235    /**
8236     * @param value {@link #total} (The total value of the claim.)
8237     */
8238    public Claim setTotal(Money value)  { 
8239      this.total = value;
8240      return this;
8241    }
8242
8243      protected void listChildren(List<Property> children) {
8244        super.listChildren(children);
8245        children.add(new Property("identifier", "Identifier", "The business identifier for the instance: claim number, pre-determination or pre-authorization number.", 0, java.lang.Integer.MAX_VALUE, identifier));
8246        children.add(new Property("status", "code", "The status of the resource instance.", 0, 1, status));
8247        children.add(new Property("type", "CodeableConcept", "The category of claim, eg, oral, pharmacy, vision, insitutional, professional.", 0, 1, type));
8248        children.add(new Property("subType", "CodeableConcept", "A finer grained suite of claim subtype codes which may convey Inpatient vs Outpatient and/or a specialty service. In the US the BillType.", 0, java.lang.Integer.MAX_VALUE, subType));
8249        children.add(new Property("use", "code", "Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).", 0, 1, use));
8250        children.add(new Property("patient", "Reference(Patient)", "Patient Resource.", 0, 1, patient));
8251        children.add(new Property("billablePeriod", "Period", "The billable period for which charges are being submitted.", 0, 1, billablePeriod));
8252        children.add(new Property("created", "dateTime", "The date when the enclosed suite of services were performed or completed.", 0, 1, created));
8253        children.add(new Property("enterer", "Reference(Practitioner)", "Person who created the invoice/claim/pre-determination or pre-authorization.", 0, 1, enterer));
8254        children.add(new Property("insurer", "Reference(Organization)", "The Insurer who is target of the request.", 0, 1, insurer));
8255        children.add(new Property("provider", "Reference(Practitioner)", "The provider which is responsible for the bill, claim pre-determination, pre-authorization.", 0, 1, provider));
8256        children.add(new Property("organization", "Reference(Organization)", "The organization which is responsible for the bill, claim pre-determination, pre-authorization.", 0, 1, organization));
8257        children.add(new Property("priority", "CodeableConcept", "Immediate (STAT), best effort (NORMAL), deferred (DEFER).", 0, 1, priority));
8258        children.add(new Property("fundsReserve", "CodeableConcept", "In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.", 0, 1, fundsReserve));
8259        children.add(new Property("related", "", "Other claims which are related to this claim such as prior claim versions or for related services.", 0, java.lang.Integer.MAX_VALUE, related));
8260        children.add(new Property("prescription", "Reference(MedicationRequest|VisionPrescription)", "Prescription to support the dispensing of Pharmacy or Vision products.", 0, 1, prescription));
8261        children.add(new Property("originalPrescription", "Reference(MedicationRequest)", "Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.", 0, 1, originalPrescription));
8262        children.add(new Property("payee", "", "The party to be reimbursed for the services.", 0, 1, payee));
8263        children.add(new Property("referral", "Reference(ReferralRequest)", "The referral resource which lists the date, practitioner, reason and other supporting information.", 0, 1, referral));
8264        children.add(new Property("facility", "Reference(Location)", "Facility where the services were provided.", 0, 1, facility));
8265        children.add(new Property("careTeam", "", "The members of the team who provided the overall service as well as their role and whether responsible and qualifications.", 0, java.lang.Integer.MAX_VALUE, careTeam));
8266        children.add(new Property("information", "", "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues. Often there are mutiple jurisdiction specific valuesets which are required.", 0, java.lang.Integer.MAX_VALUE, information));
8267        children.add(new Property("diagnosis", "", "List of patient diagnosis for which care is sought.", 0, java.lang.Integer.MAX_VALUE, diagnosis));
8268        children.add(new Property("procedure", "", "Ordered list of patient procedures performed to support the adjudication.", 0, java.lang.Integer.MAX_VALUE, procedure));
8269        children.add(new Property("insurance", "", "Financial instrument by which payment information for health care.", 0, java.lang.Integer.MAX_VALUE, insurance));
8270        children.add(new Property("accident", "", "An accident which resulted in the need for healthcare services.", 0, 1, accident));
8271        children.add(new Property("employmentImpacted", "Period", "The start and optional end dates of when the patient was precluded from working due to the treatable condition(s).", 0, 1, employmentImpacted));
8272        children.add(new Property("hospitalization", "Period", "The start and optional end dates of when the patient was confined to a treatment center.", 0, 1, hospitalization));
8273        children.add(new Property("item", "", "First tier of goods and services.", 0, java.lang.Integer.MAX_VALUE, item));
8274        children.add(new Property("total", "Money", "The total value of the claim.", 0, 1, total));
8275      }
8276
8277      @Override
8278      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
8279        switch (_hash) {
8280        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "The business identifier for the instance: claim number, pre-determination or pre-authorization number.", 0, java.lang.Integer.MAX_VALUE, identifier);
8281        case -892481550: /*status*/  return new Property("status", "code", "The status of the resource instance.", 0, 1, status);
8282        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The category of claim, eg, oral, pharmacy, vision, insitutional, professional.", 0, 1, type);
8283        case -1868521062: /*subType*/  return new Property("subType", "CodeableConcept", "A finer grained suite of claim subtype codes which may convey Inpatient vs Outpatient and/or a specialty service. In the US the BillType.", 0, java.lang.Integer.MAX_VALUE, subType);
8284        case 116103: /*use*/  return new Property("use", "code", "Complete (Bill or Claim), Proposed (Pre-Authorization), Exploratory (Pre-determination).", 0, 1, use);
8285        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "Patient Resource.", 0, 1, patient);
8286        case -332066046: /*billablePeriod*/  return new Property("billablePeriod", "Period", "The billable period for which charges are being submitted.", 0, 1, billablePeriod);
8287        case 1028554472: /*created*/  return new Property("created", "dateTime", "The date when the enclosed suite of services were performed or completed.", 0, 1, created);
8288        case -1591951995: /*enterer*/  return new Property("enterer", "Reference(Practitioner)", "Person who created the invoice/claim/pre-determination or pre-authorization.", 0, 1, enterer);
8289        case 1957615864: /*insurer*/  return new Property("insurer", "Reference(Organization)", "The Insurer who is target of the request.", 0, 1, insurer);
8290        case -987494927: /*provider*/  return new Property("provider", "Reference(Practitioner)", "The provider which is responsible for the bill, claim pre-determination, pre-authorization.", 0, 1, provider);
8291        case 1178922291: /*organization*/  return new Property("organization", "Reference(Organization)", "The organization which is responsible for the bill, claim pre-determination, pre-authorization.", 0, 1, organization);
8292        case -1165461084: /*priority*/  return new Property("priority", "CodeableConcept", "Immediate (STAT), best effort (NORMAL), deferred (DEFER).", 0, 1, priority);
8293        case 1314609806: /*fundsReserve*/  return new Property("fundsReserve", "CodeableConcept", "In the case of a Pre-Determination/Pre-Authorization the provider may request that funds in the amount of the expected Benefit be reserved ('Patient' or 'Provider') to pay for the Benefits determined on the subsequent claim(s). 'None' explicitly indicates no funds reserving is requested.", 0, 1, fundsReserve);
8294        case 1090493483: /*related*/  return new Property("related", "", "Other claims which are related to this claim such as prior claim versions or for related services.", 0, java.lang.Integer.MAX_VALUE, related);
8295        case 460301338: /*prescription*/  return new Property("prescription", "Reference(MedicationRequest|VisionPrescription)", "Prescription to support the dispensing of Pharmacy or Vision products.", 0, 1, prescription);
8296        case -1814015861: /*originalPrescription*/  return new Property("originalPrescription", "Reference(MedicationRequest)", "Original prescription which has been superceded by this prescription to support the dispensing of pharmacy services, medications or products. For example, a physician may prescribe a medication which the pharmacy determines is contraindicated, or for which the patient has an intolerance, and therefor issues a new precription for an alternate medication which has the same theraputic intent. The prescription from the pharmacy becomes the 'prescription' and that from the physician becomes the 'original prescription'.", 0, 1, originalPrescription);
8297        case 106443592: /*payee*/  return new Property("payee", "", "The party to be reimbursed for the services.", 0, 1, payee);
8298        case -722568291: /*referral*/  return new Property("referral", "Reference(ReferralRequest)", "The referral resource which lists the date, practitioner, reason and other supporting information.", 0, 1, referral);
8299        case 501116579: /*facility*/  return new Property("facility", "Reference(Location)", "Facility where the services were provided.", 0, 1, facility);
8300        case -7323378: /*careTeam*/  return new Property("careTeam", "", "The members of the team who provided the overall service as well as their role and whether responsible and qualifications.", 0, java.lang.Integer.MAX_VALUE, careTeam);
8301        case 1968600364: /*information*/  return new Property("information", "", "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues. Often there are mutiple jurisdiction specific valuesets which are required.", 0, java.lang.Integer.MAX_VALUE, information);
8302        case 1196993265: /*diagnosis*/  return new Property("diagnosis", "", "List of patient diagnosis for which care is sought.", 0, java.lang.Integer.MAX_VALUE, diagnosis);
8303        case -1095204141: /*procedure*/  return new Property("procedure", "", "Ordered list of patient procedures performed to support the adjudication.", 0, java.lang.Integer.MAX_VALUE, procedure);
8304        case 73049818: /*insurance*/  return new Property("insurance", "", "Financial instrument by which payment information for health care.", 0, java.lang.Integer.MAX_VALUE, insurance);
8305        case -2143202801: /*accident*/  return new Property("accident", "", "An accident which resulted in the need for healthcare services.", 0, 1, accident);
8306        case 1051487345: /*employmentImpacted*/  return new Property("employmentImpacted", "Period", "The start and optional end dates of when the patient was precluded from working due to the treatable condition(s).", 0, 1, employmentImpacted);
8307        case 1057894634: /*hospitalization*/  return new Property("hospitalization", "Period", "The start and optional end dates of when the patient was confined to a treatment center.", 0, 1, hospitalization);
8308        case 3242771: /*item*/  return new Property("item", "", "First tier of goods and services.", 0, java.lang.Integer.MAX_VALUE, item);
8309        case 110549828: /*total*/  return new Property("total", "Money", "The total value of the claim.", 0, 1, total);
8310        default: return super.getNamedProperty(_hash, _name, _checkValid);
8311        }
8312
8313      }
8314
8315      @Override
8316      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
8317        switch (hash) {
8318        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
8319        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ClaimStatus>
8320        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
8321        case -1868521062: /*subType*/ return this.subType == null ? new Base[0] : this.subType.toArray(new Base[this.subType.size()]); // CodeableConcept
8322        case 116103: /*use*/ return this.use == null ? new Base[0] : new Base[] {this.use}; // Enumeration<Use>
8323        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
8324        case -332066046: /*billablePeriod*/ return this.billablePeriod == null ? new Base[0] : new Base[] {this.billablePeriod}; // Period
8325        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
8326        case -1591951995: /*enterer*/ return this.enterer == null ? new Base[0] : new Base[] {this.enterer}; // Reference
8327        case 1957615864: /*insurer*/ return this.insurer == null ? new Base[0] : new Base[] {this.insurer}; // Reference
8328        case -987494927: /*provider*/ return this.provider == null ? new Base[0] : new Base[] {this.provider}; // Reference
8329        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
8330        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // CodeableConcept
8331        case 1314609806: /*fundsReserve*/ return this.fundsReserve == null ? new Base[0] : new Base[] {this.fundsReserve}; // CodeableConcept
8332        case 1090493483: /*related*/ return this.related == null ? new Base[0] : this.related.toArray(new Base[this.related.size()]); // RelatedClaimComponent
8333        case 460301338: /*prescription*/ return this.prescription == null ? new Base[0] : new Base[] {this.prescription}; // Reference
8334        case -1814015861: /*originalPrescription*/ return this.originalPrescription == null ? new Base[0] : new Base[] {this.originalPrescription}; // Reference
8335        case 106443592: /*payee*/ return this.payee == null ? new Base[0] : new Base[] {this.payee}; // PayeeComponent
8336        case -722568291: /*referral*/ return this.referral == null ? new Base[0] : new Base[] {this.referral}; // Reference
8337        case 501116579: /*facility*/ return this.facility == null ? new Base[0] : new Base[] {this.facility}; // Reference
8338        case -7323378: /*careTeam*/ return this.careTeam == null ? new Base[0] : this.careTeam.toArray(new Base[this.careTeam.size()]); // CareTeamComponent
8339        case 1968600364: /*information*/ return this.information == null ? new Base[0] : this.information.toArray(new Base[this.information.size()]); // SpecialConditionComponent
8340        case 1196993265: /*diagnosis*/ return this.diagnosis == null ? new Base[0] : this.diagnosis.toArray(new Base[this.diagnosis.size()]); // DiagnosisComponent
8341        case -1095204141: /*procedure*/ return this.procedure == null ? new Base[0] : this.procedure.toArray(new Base[this.procedure.size()]); // ProcedureComponent
8342        case 73049818: /*insurance*/ return this.insurance == null ? new Base[0] : this.insurance.toArray(new Base[this.insurance.size()]); // InsuranceComponent
8343        case -2143202801: /*accident*/ return this.accident == null ? new Base[0] : new Base[] {this.accident}; // AccidentComponent
8344        case 1051487345: /*employmentImpacted*/ return this.employmentImpacted == null ? new Base[0] : new Base[] {this.employmentImpacted}; // Period
8345        case 1057894634: /*hospitalization*/ return this.hospitalization == null ? new Base[0] : new Base[] {this.hospitalization}; // Period
8346        case 3242771: /*item*/ return this.item == null ? new Base[0] : this.item.toArray(new Base[this.item.size()]); // ItemComponent
8347        case 110549828: /*total*/ return this.total == null ? new Base[0] : new Base[] {this.total}; // Money
8348        default: return super.getProperty(hash, name, checkValid);
8349        }
8350
8351      }
8352
8353      @Override
8354      public Base setProperty(int hash, String name, Base value) throws FHIRException {
8355        switch (hash) {
8356        case -1618432855: // identifier
8357          this.getIdentifier().add(castToIdentifier(value)); // Identifier
8358          return value;
8359        case -892481550: // status
8360          value = new ClaimStatusEnumFactory().fromType(castToCode(value));
8361          this.status = (Enumeration) value; // Enumeration<ClaimStatus>
8362          return value;
8363        case 3575610: // type
8364          this.type = castToCodeableConcept(value); // CodeableConcept
8365          return value;
8366        case -1868521062: // subType
8367          this.getSubType().add(castToCodeableConcept(value)); // CodeableConcept
8368          return value;
8369        case 116103: // use
8370          value = new UseEnumFactory().fromType(castToCode(value));
8371          this.use = (Enumeration) value; // Enumeration<Use>
8372          return value;
8373        case -791418107: // patient
8374          this.patient = castToReference(value); // Reference
8375          return value;
8376        case -332066046: // billablePeriod
8377          this.billablePeriod = castToPeriod(value); // Period
8378          return value;
8379        case 1028554472: // created
8380          this.created = castToDateTime(value); // DateTimeType
8381          return value;
8382        case -1591951995: // enterer
8383          this.enterer = castToReference(value); // Reference
8384          return value;
8385        case 1957615864: // insurer
8386          this.insurer = castToReference(value); // Reference
8387          return value;
8388        case -987494927: // provider
8389          this.provider = castToReference(value); // Reference
8390          return value;
8391        case 1178922291: // organization
8392          this.organization = castToReference(value); // Reference
8393          return value;
8394        case -1165461084: // priority
8395          this.priority = castToCodeableConcept(value); // CodeableConcept
8396          return value;
8397        case 1314609806: // fundsReserve
8398          this.fundsReserve = castToCodeableConcept(value); // CodeableConcept
8399          return value;
8400        case 1090493483: // related
8401          this.getRelated().add((RelatedClaimComponent) value); // RelatedClaimComponent
8402          return value;
8403        case 460301338: // prescription
8404          this.prescription = castToReference(value); // Reference
8405          return value;
8406        case -1814015861: // originalPrescription
8407          this.originalPrescription = castToReference(value); // Reference
8408          return value;
8409        case 106443592: // payee
8410          this.payee = (PayeeComponent) value; // PayeeComponent
8411          return value;
8412        case -722568291: // referral
8413          this.referral = castToReference(value); // Reference
8414          return value;
8415        case 501116579: // facility
8416          this.facility = castToReference(value); // Reference
8417          return value;
8418        case -7323378: // careTeam
8419          this.getCareTeam().add((CareTeamComponent) value); // CareTeamComponent
8420          return value;
8421        case 1968600364: // information
8422          this.getInformation().add((SpecialConditionComponent) value); // SpecialConditionComponent
8423          return value;
8424        case 1196993265: // diagnosis
8425          this.getDiagnosis().add((DiagnosisComponent) value); // DiagnosisComponent
8426          return value;
8427        case -1095204141: // procedure
8428          this.getProcedure().add((ProcedureComponent) value); // ProcedureComponent
8429          return value;
8430        case 73049818: // insurance
8431          this.getInsurance().add((InsuranceComponent) value); // InsuranceComponent
8432          return value;
8433        case -2143202801: // accident
8434          this.accident = (AccidentComponent) value; // AccidentComponent
8435          return value;
8436        case 1051487345: // employmentImpacted
8437          this.employmentImpacted = castToPeriod(value); // Period
8438          return value;
8439        case 1057894634: // hospitalization
8440          this.hospitalization = castToPeriod(value); // Period
8441          return value;
8442        case 3242771: // item
8443          this.getItem().add((ItemComponent) value); // ItemComponent
8444          return value;
8445        case 110549828: // total
8446          this.total = castToMoney(value); // Money
8447          return value;
8448        default: return super.setProperty(hash, name, value);
8449        }
8450
8451      }
8452
8453      @Override
8454      public Base setProperty(String name, Base value) throws FHIRException {
8455        if (name.equals("identifier")) {
8456          this.getIdentifier().add(castToIdentifier(value));
8457        } else if (name.equals("status")) {
8458          value = new ClaimStatusEnumFactory().fromType(castToCode(value));
8459          this.status = (Enumeration) value; // Enumeration<ClaimStatus>
8460        } else if (name.equals("type")) {
8461          this.type = castToCodeableConcept(value); // CodeableConcept
8462        } else if (name.equals("subType")) {
8463          this.getSubType().add(castToCodeableConcept(value));
8464        } else if (name.equals("use")) {
8465          value = new UseEnumFactory().fromType(castToCode(value));
8466          this.use = (Enumeration) value; // Enumeration<Use>
8467        } else if (name.equals("patient")) {
8468          this.patient = castToReference(value); // Reference
8469        } else if (name.equals("billablePeriod")) {
8470          this.billablePeriod = castToPeriod(value); // Period
8471        } else if (name.equals("created")) {
8472          this.created = castToDateTime(value); // DateTimeType
8473        } else if (name.equals("enterer")) {
8474          this.enterer = castToReference(value); // Reference
8475        } else if (name.equals("insurer")) {
8476          this.insurer = castToReference(value); // Reference
8477        } else if (name.equals("provider")) {
8478          this.provider = castToReference(value); // Reference
8479        } else if (name.equals("organization")) {
8480          this.organization = castToReference(value); // Reference
8481        } else if (name.equals("priority")) {
8482          this.priority = castToCodeableConcept(value); // CodeableConcept
8483        } else if (name.equals("fundsReserve")) {
8484          this.fundsReserve = castToCodeableConcept(value); // CodeableConcept
8485        } else if (name.equals("related")) {
8486          this.getRelated().add((RelatedClaimComponent) value);
8487        } else if (name.equals("prescription")) {
8488          this.prescription = castToReference(value); // Reference
8489        } else if (name.equals("originalPrescription")) {
8490          this.originalPrescription = castToReference(value); // Reference
8491        } else if (name.equals("payee")) {
8492          this.payee = (PayeeComponent) value; // PayeeComponent
8493        } else if (name.equals("referral")) {
8494          this.referral = castToReference(value); // Reference
8495        } else if (name.equals("facility")) {
8496          this.facility = castToReference(value); // Reference
8497        } else if (name.equals("careTeam")) {
8498          this.getCareTeam().add((CareTeamComponent) value);
8499        } else if (name.equals("information")) {
8500          this.getInformation().add((SpecialConditionComponent) value);
8501        } else if (name.equals("diagnosis")) {
8502          this.getDiagnosis().add((DiagnosisComponent) value);
8503        } else if (name.equals("procedure")) {
8504          this.getProcedure().add((ProcedureComponent) value);
8505        } else if (name.equals("insurance")) {
8506          this.getInsurance().add((InsuranceComponent) value);
8507        } else if (name.equals("accident")) {
8508          this.accident = (AccidentComponent) value; // AccidentComponent
8509        } else if (name.equals("employmentImpacted")) {
8510          this.employmentImpacted = castToPeriod(value); // Period
8511        } else if (name.equals("hospitalization")) {
8512          this.hospitalization = castToPeriod(value); // Period
8513        } else if (name.equals("item")) {
8514          this.getItem().add((ItemComponent) value);
8515        } else if (name.equals("total")) {
8516          this.total = castToMoney(value); // Money
8517        } else
8518          return super.setProperty(name, value);
8519        return value;
8520      }
8521
8522      @Override
8523      public Base makeProperty(int hash, String name) throws FHIRException {
8524        switch (hash) {
8525        case -1618432855:  return addIdentifier(); 
8526        case -892481550:  return getStatusElement();
8527        case 3575610:  return getType(); 
8528        case -1868521062:  return addSubType(); 
8529        case 116103:  return getUseElement();
8530        case -791418107:  return getPatient(); 
8531        case -332066046:  return getBillablePeriod(); 
8532        case 1028554472:  return getCreatedElement();
8533        case -1591951995:  return getEnterer(); 
8534        case 1957615864:  return getInsurer(); 
8535        case -987494927:  return getProvider(); 
8536        case 1178922291:  return getOrganization(); 
8537        case -1165461084:  return getPriority(); 
8538        case 1314609806:  return getFundsReserve(); 
8539        case 1090493483:  return addRelated(); 
8540        case 460301338:  return getPrescription(); 
8541        case -1814015861:  return getOriginalPrescription(); 
8542        case 106443592:  return getPayee(); 
8543        case -722568291:  return getReferral(); 
8544        case 501116579:  return getFacility(); 
8545        case -7323378:  return addCareTeam(); 
8546        case 1968600364:  return addInformation(); 
8547        case 1196993265:  return addDiagnosis(); 
8548        case -1095204141:  return addProcedure(); 
8549        case 73049818:  return addInsurance(); 
8550        case -2143202801:  return getAccident(); 
8551        case 1051487345:  return getEmploymentImpacted(); 
8552        case 1057894634:  return getHospitalization(); 
8553        case 3242771:  return addItem(); 
8554        case 110549828:  return getTotal(); 
8555        default: return super.makeProperty(hash, name);
8556        }
8557
8558      }
8559
8560      @Override
8561      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
8562        switch (hash) {
8563        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
8564        case -892481550: /*status*/ return new String[] {"code"};
8565        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
8566        case -1868521062: /*subType*/ return new String[] {"CodeableConcept"};
8567        case 116103: /*use*/ return new String[] {"code"};
8568        case -791418107: /*patient*/ return new String[] {"Reference"};
8569        case -332066046: /*billablePeriod*/ return new String[] {"Period"};
8570        case 1028554472: /*created*/ return new String[] {"dateTime"};
8571        case -1591951995: /*enterer*/ return new String[] {"Reference"};
8572        case 1957615864: /*insurer*/ return new String[] {"Reference"};
8573        case -987494927: /*provider*/ return new String[] {"Reference"};
8574        case 1178922291: /*organization*/ return new String[] {"Reference"};
8575        case -1165461084: /*priority*/ return new String[] {"CodeableConcept"};
8576        case 1314609806: /*fundsReserve*/ return new String[] {"CodeableConcept"};
8577        case 1090493483: /*related*/ return new String[] {};
8578        case 460301338: /*prescription*/ return new String[] {"Reference"};
8579        case -1814015861: /*originalPrescription*/ return new String[] {"Reference"};
8580        case 106443592: /*payee*/ return new String[] {};
8581        case -722568291: /*referral*/ return new String[] {"Reference"};
8582        case 501116579: /*facility*/ return new String[] {"Reference"};
8583        case -7323378: /*careTeam*/ return new String[] {};
8584        case 1968600364: /*information*/ return new String[] {};
8585        case 1196993265: /*diagnosis*/ return new String[] {};
8586        case -1095204141: /*procedure*/ return new String[] {};
8587        case 73049818: /*insurance*/ return new String[] {};
8588        case -2143202801: /*accident*/ return new String[] {};
8589        case 1051487345: /*employmentImpacted*/ return new String[] {"Period"};
8590        case 1057894634: /*hospitalization*/ return new String[] {"Period"};
8591        case 3242771: /*item*/ return new String[] {};
8592        case 110549828: /*total*/ return new String[] {"Money"};
8593        default: return super.getTypesForProperty(hash, name);
8594        }
8595
8596      }
8597
8598      @Override
8599      public Base addChild(String name) throws FHIRException {
8600        if (name.equals("identifier")) {
8601          return addIdentifier();
8602        }
8603        else if (name.equals("status")) {
8604          throw new FHIRException("Cannot call addChild on a singleton property Claim.status");
8605        }
8606        else if (name.equals("type")) {
8607          this.type = new CodeableConcept();
8608          return this.type;
8609        }
8610        else if (name.equals("subType")) {
8611          return addSubType();
8612        }
8613        else if (name.equals("use")) {
8614          throw new FHIRException("Cannot call addChild on a singleton property Claim.use");
8615        }
8616        else if (name.equals("patient")) {
8617          this.patient = new Reference();
8618          return this.patient;
8619        }
8620        else if (name.equals("billablePeriod")) {
8621          this.billablePeriod = new Period();
8622          return this.billablePeriod;
8623        }
8624        else if (name.equals("created")) {
8625          throw new FHIRException("Cannot call addChild on a singleton property Claim.created");
8626        }
8627        else if (name.equals("enterer")) {
8628          this.enterer = new Reference();
8629          return this.enterer;
8630        }
8631        else if (name.equals("insurer")) {
8632          this.insurer = new Reference();
8633          return this.insurer;
8634        }
8635        else if (name.equals("provider")) {
8636          this.provider = new Reference();
8637          return this.provider;
8638        }
8639        else if (name.equals("organization")) {
8640          this.organization = new Reference();
8641          return this.organization;
8642        }
8643        else if (name.equals("priority")) {
8644          this.priority = new CodeableConcept();
8645          return this.priority;
8646        }
8647        else if (name.equals("fundsReserve")) {
8648          this.fundsReserve = new CodeableConcept();
8649          return this.fundsReserve;
8650        }
8651        else if (name.equals("related")) {
8652          return addRelated();
8653        }
8654        else if (name.equals("prescription")) {
8655          this.prescription = new Reference();
8656          return this.prescription;
8657        }
8658        else if (name.equals("originalPrescription")) {
8659          this.originalPrescription = new Reference();
8660          return this.originalPrescription;
8661        }
8662        else if (name.equals("payee")) {
8663          this.payee = new PayeeComponent();
8664          return this.payee;
8665        }
8666        else if (name.equals("referral")) {
8667          this.referral = new Reference();
8668          return this.referral;
8669        }
8670        else if (name.equals("facility")) {
8671          this.facility = new Reference();
8672          return this.facility;
8673        }
8674        else if (name.equals("careTeam")) {
8675          return addCareTeam();
8676        }
8677        else if (name.equals("information")) {
8678          return addInformation();
8679        }
8680        else if (name.equals("diagnosis")) {
8681          return addDiagnosis();
8682        }
8683        else if (name.equals("procedure")) {
8684          return addProcedure();
8685        }
8686        else if (name.equals("insurance")) {
8687          return addInsurance();
8688        }
8689        else if (name.equals("accident")) {
8690          this.accident = new AccidentComponent();
8691          return this.accident;
8692        }
8693        else if (name.equals("employmentImpacted")) {
8694          this.employmentImpacted = new Period();
8695          return this.employmentImpacted;
8696        }
8697        else if (name.equals("hospitalization")) {
8698          this.hospitalization = new Period();
8699          return this.hospitalization;
8700        }
8701        else if (name.equals("item")) {
8702          return addItem();
8703        }
8704        else if (name.equals("total")) {
8705          this.total = new Money();
8706          return this.total;
8707        }
8708        else
8709          return super.addChild(name);
8710      }
8711
8712  public String fhirType() {
8713    return "Claim";
8714
8715  }
8716
8717      public Claim copy() {
8718        Claim dst = new Claim();
8719        copyValues(dst);
8720        if (identifier != null) {
8721          dst.identifier = new ArrayList<Identifier>();
8722          for (Identifier i : identifier)
8723            dst.identifier.add(i.copy());
8724        };
8725        dst.status = status == null ? null : status.copy();
8726        dst.type = type == null ? null : type.copy();
8727        if (subType != null) {
8728          dst.subType = new ArrayList<CodeableConcept>();
8729          for (CodeableConcept i : subType)
8730            dst.subType.add(i.copy());
8731        };
8732        dst.use = use == null ? null : use.copy();
8733        dst.patient = patient == null ? null : patient.copy();
8734        dst.billablePeriod = billablePeriod == null ? null : billablePeriod.copy();
8735        dst.created = created == null ? null : created.copy();
8736        dst.enterer = enterer == null ? null : enterer.copy();
8737        dst.insurer = insurer == null ? null : insurer.copy();
8738        dst.provider = provider == null ? null : provider.copy();
8739        dst.organization = organization == null ? null : organization.copy();
8740        dst.priority = priority == null ? null : priority.copy();
8741        dst.fundsReserve = fundsReserve == null ? null : fundsReserve.copy();
8742        if (related != null) {
8743          dst.related = new ArrayList<RelatedClaimComponent>();
8744          for (RelatedClaimComponent i : related)
8745            dst.related.add(i.copy());
8746        };
8747        dst.prescription = prescription == null ? null : prescription.copy();
8748        dst.originalPrescription = originalPrescription == null ? null : originalPrescription.copy();
8749        dst.payee = payee == null ? null : payee.copy();
8750        dst.referral = referral == null ? null : referral.copy();
8751        dst.facility = facility == null ? null : facility.copy();
8752        if (careTeam != null) {
8753          dst.careTeam = new ArrayList<CareTeamComponent>();
8754          for (CareTeamComponent i : careTeam)
8755            dst.careTeam.add(i.copy());
8756        };
8757        if (information != null) {
8758          dst.information = new ArrayList<SpecialConditionComponent>();
8759          for (SpecialConditionComponent i : information)
8760            dst.information.add(i.copy());
8761        };
8762        if (diagnosis != null) {
8763          dst.diagnosis = new ArrayList<DiagnosisComponent>();
8764          for (DiagnosisComponent i : diagnosis)
8765            dst.diagnosis.add(i.copy());
8766        };
8767        if (procedure != null) {
8768          dst.procedure = new ArrayList<ProcedureComponent>();
8769          for (ProcedureComponent i : procedure)
8770            dst.procedure.add(i.copy());
8771        };
8772        if (insurance != null) {
8773          dst.insurance = new ArrayList<InsuranceComponent>();
8774          for (InsuranceComponent i : insurance)
8775            dst.insurance.add(i.copy());
8776        };
8777        dst.accident = accident == null ? null : accident.copy();
8778        dst.employmentImpacted = employmentImpacted == null ? null : employmentImpacted.copy();
8779        dst.hospitalization = hospitalization == null ? null : hospitalization.copy();
8780        if (item != null) {
8781          dst.item = new ArrayList<ItemComponent>();
8782          for (ItemComponent i : item)
8783            dst.item.add(i.copy());
8784        };
8785        dst.total = total == null ? null : total.copy();
8786        return dst;
8787      }
8788
8789      protected Claim typedCopy() {
8790        return copy();
8791      }
8792
8793      @Override
8794      public boolean equalsDeep(Base other_) {
8795        if (!super.equalsDeep(other_))
8796          return false;
8797        if (!(other_ instanceof Claim))
8798          return false;
8799        Claim o = (Claim) other_;
8800        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(type, o.type, true)
8801           && compareDeep(subType, o.subType, true) && compareDeep(use, o.use, true) && compareDeep(patient, o.patient, true)
8802           && compareDeep(billablePeriod, o.billablePeriod, true) && compareDeep(created, o.created, true)
8803           && compareDeep(enterer, o.enterer, true) && compareDeep(insurer, o.insurer, true) && compareDeep(provider, o.provider, true)
8804           && compareDeep(organization, o.organization, true) && compareDeep(priority, o.priority, true) && compareDeep(fundsReserve, o.fundsReserve, true)
8805           && compareDeep(related, o.related, true) && compareDeep(prescription, o.prescription, true) && compareDeep(originalPrescription, o.originalPrescription, true)
8806           && compareDeep(payee, o.payee, true) && compareDeep(referral, o.referral, true) && compareDeep(facility, o.facility, true)
8807           && compareDeep(careTeam, o.careTeam, true) && compareDeep(information, o.information, true) && compareDeep(diagnosis, o.diagnosis, true)
8808           && compareDeep(procedure, o.procedure, true) && compareDeep(insurance, o.insurance, true) && compareDeep(accident, o.accident, true)
8809           && compareDeep(employmentImpacted, o.employmentImpacted, true) && compareDeep(hospitalization, o.hospitalization, true)
8810           && compareDeep(item, o.item, true) && compareDeep(total, o.total, true);
8811      }
8812
8813      @Override
8814      public boolean equalsShallow(Base other_) {
8815        if (!super.equalsShallow(other_))
8816          return false;
8817        if (!(other_ instanceof Claim))
8818          return false;
8819        Claim o = (Claim) other_;
8820        return compareValues(status, o.status, true) && compareValues(use, o.use, true) && compareValues(created, o.created, true)
8821          ;
8822      }
8823
8824      public boolean isEmpty() {
8825        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, type
8826          , subType, use, patient, billablePeriod, created, enterer, insurer, provider
8827          , organization, priority, fundsReserve, related, prescription, originalPrescription
8828          , payee, referral, facility, careTeam, information, diagnosis, procedure, insurance
8829          , accident, employmentImpacted, hospitalization, item, total);
8830      }
8831
8832  @Override
8833  public ResourceType getResourceType() {
8834    return ResourceType.Claim;
8835   }
8836
8837 /**
8838   * Search parameter: <b>care-team</b>
8839   * <p>
8840   * Description: <b>Member of the CareTeam</b><br>
8841   * Type: <b>reference</b><br>
8842   * Path: <b>Claim.careTeam.provider</b><br>
8843   * </p>
8844   */
8845  @SearchParamDefinition(name="care-team", path="Claim.careTeam.provider", description="Member of the CareTeam", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Organization.class, Practitioner.class } )
8846  public static final String SP_CARE_TEAM = "care-team";
8847 /**
8848   * <b>Fluent Client</b> search parameter constant for <b>care-team</b>
8849   * <p>
8850   * Description: <b>Member of the CareTeam</b><br>
8851   * Type: <b>reference</b><br>
8852   * Path: <b>Claim.careTeam.provider</b><br>
8853   * </p>
8854   */
8855  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CARE_TEAM = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CARE_TEAM);
8856
8857/**
8858   * Constant for fluent queries to be used to add include statements. Specifies
8859   * the path value of "<b>Claim:care-team</b>".
8860   */
8861  public static final ca.uhn.fhir.model.api.Include INCLUDE_CARE_TEAM = new ca.uhn.fhir.model.api.Include("Claim:care-team").toLocked();
8862
8863 /**
8864   * Search parameter: <b>identifier</b>
8865   * <p>
8866   * Description: <b>The primary identifier of the financial resource</b><br>
8867   * Type: <b>token</b><br>
8868   * Path: <b>Claim.identifier</b><br>
8869   * </p>
8870   */
8871  @SearchParamDefinition(name="identifier", path="Claim.identifier", description="The primary identifier of the financial resource", type="token" )
8872  public static final String SP_IDENTIFIER = "identifier";
8873 /**
8874   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
8875   * <p>
8876   * Description: <b>The primary identifier of the financial resource</b><br>
8877   * Type: <b>token</b><br>
8878   * Path: <b>Claim.identifier</b><br>
8879   * </p>
8880   */
8881  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
8882
8883 /**
8884   * Search parameter: <b>use</b>
8885   * <p>
8886   * Description: <b>The kind of financial resource</b><br>
8887   * Type: <b>token</b><br>
8888   * Path: <b>Claim.use</b><br>
8889   * </p>
8890   */
8891  @SearchParamDefinition(name="use", path="Claim.use", description="The kind of financial resource", type="token" )
8892  public static final String SP_USE = "use";
8893 /**
8894   * <b>Fluent Client</b> search parameter constant for <b>use</b>
8895   * <p>
8896   * Description: <b>The kind of financial resource</b><br>
8897   * Type: <b>token</b><br>
8898   * Path: <b>Claim.use</b><br>
8899   * </p>
8900   */
8901  public static final ca.uhn.fhir.rest.gclient.TokenClientParam USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_USE);
8902
8903 /**
8904   * Search parameter: <b>created</b>
8905   * <p>
8906   * Description: <b>The creation date for the Claim</b><br>
8907   * Type: <b>date</b><br>
8908   * Path: <b>Claim.created</b><br>
8909   * </p>
8910   */
8911  @SearchParamDefinition(name="created", path="Claim.created", description="The creation date for the Claim", type="date" )
8912  public static final String SP_CREATED = "created";
8913 /**
8914   * <b>Fluent Client</b> search parameter constant for <b>created</b>
8915   * <p>
8916   * Description: <b>The creation date for the Claim</b><br>
8917   * Type: <b>date</b><br>
8918   * Path: <b>Claim.created</b><br>
8919   * </p>
8920   */
8921  public static final ca.uhn.fhir.rest.gclient.DateClientParam CREATED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_CREATED);
8922
8923 /**
8924   * Search parameter: <b>encounter</b>
8925   * <p>
8926   * Description: <b>Encounters associated with a billed line item</b><br>
8927   * Type: <b>reference</b><br>
8928   * Path: <b>Claim.item.encounter</b><br>
8929   * </p>
8930   */
8931  @SearchParamDefinition(name="encounter", path="Claim.item.encounter", description="Encounters associated with a billed line item", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class } )
8932  public static final String SP_ENCOUNTER = "encounter";
8933 /**
8934   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
8935   * <p>
8936   * Description: <b>Encounters associated with a billed line item</b><br>
8937   * Type: <b>reference</b><br>
8938   * Path: <b>Claim.item.encounter</b><br>
8939   * </p>
8940   */
8941  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
8942
8943/**
8944   * Constant for fluent queries to be used to add include statements. Specifies
8945   * the path value of "<b>Claim:encounter</b>".
8946   */
8947  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Claim:encounter").toLocked();
8948
8949 /**
8950   * Search parameter: <b>priority</b>
8951   * <p>
8952   * Description: <b>Processing priority requested</b><br>
8953   * Type: <b>token</b><br>
8954   * Path: <b>Claim.priority</b><br>
8955   * </p>
8956   */
8957  @SearchParamDefinition(name="priority", path="Claim.priority", description="Processing priority requested", type="token" )
8958  public static final String SP_PRIORITY = "priority";
8959 /**
8960   * <b>Fluent Client</b> search parameter constant for <b>priority</b>
8961   * <p>
8962   * Description: <b>Processing priority requested</b><br>
8963   * Type: <b>token</b><br>
8964   * Path: <b>Claim.priority</b><br>
8965   * </p>
8966   */
8967  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRIORITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRIORITY);
8968
8969 /**
8970   * Search parameter: <b>payee</b>
8971   * <p>
8972   * Description: <b>The party receiving any payment for the Claim</b><br>
8973   * Type: <b>reference</b><br>
8974   * Path: <b>Claim.payee.party</b><br>
8975   * </p>
8976   */
8977  @SearchParamDefinition(name="payee", path="Claim.payee.party", description="The party receiving any payment for the Claim", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Organization.class, Patient.class, Practitioner.class, RelatedPerson.class } )
8978  public static final String SP_PAYEE = "payee";
8979 /**
8980   * <b>Fluent Client</b> search parameter constant for <b>payee</b>
8981   * <p>
8982   * Description: <b>The party receiving any payment for the Claim</b><br>
8983   * Type: <b>reference</b><br>
8984   * Path: <b>Claim.payee.party</b><br>
8985   * </p>
8986   */
8987  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PAYEE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PAYEE);
8988
8989/**
8990   * Constant for fluent queries to be used to add include statements. Specifies
8991   * the path value of "<b>Claim:payee</b>".
8992   */
8993  public static final ca.uhn.fhir.model.api.Include INCLUDE_PAYEE = new ca.uhn.fhir.model.api.Include("Claim:payee").toLocked();
8994
8995 /**
8996   * Search parameter: <b>provider</b>
8997   * <p>
8998   * Description: <b>Provider responsible for the Claim</b><br>
8999   * Type: <b>reference</b><br>
9000   * Path: <b>Claim.provider</b><br>
9001   * </p>
9002   */
9003  @SearchParamDefinition(name="provider", path="Claim.provider", description="Provider responsible for the Claim", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Practitioner.class } )
9004  public static final String SP_PROVIDER = "provider";
9005 /**
9006   * <b>Fluent Client</b> search parameter constant for <b>provider</b>
9007   * <p>
9008   * Description: <b>Provider responsible for the Claim</b><br>
9009   * Type: <b>reference</b><br>
9010   * Path: <b>Claim.provider</b><br>
9011   * </p>
9012   */
9013  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PROVIDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PROVIDER);
9014
9015/**
9016   * Constant for fluent queries to be used to add include statements. Specifies
9017   * the path value of "<b>Claim:provider</b>".
9018   */
9019  public static final ca.uhn.fhir.model.api.Include INCLUDE_PROVIDER = new ca.uhn.fhir.model.api.Include("Claim:provider").toLocked();
9020
9021 /**
9022   * Search parameter: <b>patient</b>
9023   * <p>
9024   * Description: <b>Patient receiving the services</b><br>
9025   * Type: <b>reference</b><br>
9026   * Path: <b>Claim.patient</b><br>
9027   * </p>
9028   */
9029  @SearchParamDefinition(name="patient", path="Claim.patient", description="Patient receiving the services", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
9030  public static final String SP_PATIENT = "patient";
9031 /**
9032   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
9033   * <p>
9034   * Description: <b>Patient receiving the services</b><br>
9035   * Type: <b>reference</b><br>
9036   * Path: <b>Claim.patient</b><br>
9037   * </p>
9038   */
9039  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
9040
9041/**
9042   * Constant for fluent queries to be used to add include statements. Specifies
9043   * the path value of "<b>Claim:patient</b>".
9044   */
9045  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Claim:patient").toLocked();
9046
9047 /**
9048   * Search parameter: <b>insurer</b>
9049   * <p>
9050   * Description: <b>The target payor/insurer for the Claim</b><br>
9051   * Type: <b>reference</b><br>
9052   * Path: <b>Claim.insurer</b><br>
9053   * </p>
9054   */
9055  @SearchParamDefinition(name="insurer", path="Claim.insurer", description="The target payor/insurer for the Claim", type="reference", target={Organization.class } )
9056  public static final String SP_INSURER = "insurer";
9057 /**
9058   * <b>Fluent Client</b> search parameter constant for <b>insurer</b>
9059   * <p>
9060   * Description: <b>The target payor/insurer for the Claim</b><br>
9061   * Type: <b>reference</b><br>
9062   * Path: <b>Claim.insurer</b><br>
9063   * </p>
9064   */
9065  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INSURER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INSURER);
9066
9067/**
9068   * Constant for fluent queries to be used to add include statements. Specifies
9069   * the path value of "<b>Claim:insurer</b>".
9070   */
9071  public static final ca.uhn.fhir.model.api.Include INCLUDE_INSURER = new ca.uhn.fhir.model.api.Include("Claim:insurer").toLocked();
9072
9073 /**
9074   * Search parameter: <b>organization</b>
9075   * <p>
9076   * Description: <b>The reference to the providing organization</b><br>
9077   * Type: <b>reference</b><br>
9078   * Path: <b>Claim.organization</b><br>
9079   * </p>
9080   */
9081  @SearchParamDefinition(name="organization", path="Claim.organization", description="The reference to the providing organization", type="reference", target={Organization.class } )
9082  public static final String SP_ORGANIZATION = "organization";
9083 /**
9084   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
9085   * <p>
9086   * Description: <b>The reference to the providing organization</b><br>
9087   * Type: <b>reference</b><br>
9088   * Path: <b>Claim.organization</b><br>
9089   * </p>
9090   */
9091  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
9092
9093/**
9094   * Constant for fluent queries to be used to add include statements. Specifies
9095   * the path value of "<b>Claim:organization</b>".
9096   */
9097  pu