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