001package org.hl7.fhir.dstu3.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.dstu3.model.Enumerations.*;
038import ca.uhn.fhir.model.api.annotation.ResourceDef;
039import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
040import ca.uhn.fhir.model.api.annotation.Child;
041import ca.uhn.fhir.model.api.annotation.ChildOrder;
042import ca.uhn.fhir.model.api.annotation.Description;
043import ca.uhn.fhir.model.api.annotation.Block;
044import org.hl7.fhir.instance.model.api.*;
045import org.hl7.fhir.exceptions.FHIRException;
046/**
047 * This resource provides payment details and claim references supporting a bulk payment.
048 */
049@ResourceDef(name="PaymentReconciliation", profile="http://hl7.org/fhir/Profile/PaymentReconciliation")
050public class PaymentReconciliation extends DomainResource {
051
052    public enum PaymentReconciliationStatus {
053        /**
054         * The instance is currently in-force.
055         */
056        ACTIVE, 
057        /**
058         * The instance is withdrawn, rescinded or reversed.
059         */
060        CANCELLED, 
061        /**
062         * A new instance the contents of which is not complete.
063         */
064        DRAFT, 
065        /**
066         * The instance was entered in error.
067         */
068        ENTEREDINERROR, 
069        /**
070         * added to help the parsers with the generic types
071         */
072        NULL;
073        public static PaymentReconciliationStatus fromCode(String codeString) throws FHIRException {
074            if (codeString == null || "".equals(codeString))
075                return null;
076        if ("active".equals(codeString))
077          return ACTIVE;
078        if ("cancelled".equals(codeString))
079          return CANCELLED;
080        if ("draft".equals(codeString))
081          return DRAFT;
082        if ("entered-in-error".equals(codeString))
083          return ENTEREDINERROR;
084        if (Configuration.isAcceptInvalidEnums())
085          return null;
086        else
087          throw new FHIRException("Unknown PaymentReconciliationStatus code '"+codeString+"'");
088        }
089        public String toCode() {
090          switch (this) {
091            case ACTIVE: return "active";
092            case CANCELLED: return "cancelled";
093            case DRAFT: return "draft";
094            case ENTEREDINERROR: return "entered-in-error";
095            default: return "?";
096          }
097        }
098        public String getSystem() {
099          switch (this) {
100            case ACTIVE: return "http://hl7.org/fhir/fm-status";
101            case CANCELLED: return "http://hl7.org/fhir/fm-status";
102            case DRAFT: return "http://hl7.org/fhir/fm-status";
103            case ENTEREDINERROR: return "http://hl7.org/fhir/fm-status";
104            default: return "?";
105          }
106        }
107        public String getDefinition() {
108          switch (this) {
109            case ACTIVE: return "The instance is currently in-force.";
110            case CANCELLED: return "The instance is withdrawn, rescinded or reversed.";
111            case DRAFT: return "A new instance the contents of which is not complete.";
112            case ENTEREDINERROR: return "The instance was entered in error.";
113            default: return "?";
114          }
115        }
116        public String getDisplay() {
117          switch (this) {
118            case ACTIVE: return "Active";
119            case CANCELLED: return "Cancelled";
120            case DRAFT: return "Draft";
121            case ENTEREDINERROR: return "Entered in Error";
122            default: return "?";
123          }
124        }
125    }
126
127  public static class PaymentReconciliationStatusEnumFactory implements EnumFactory<PaymentReconciliationStatus> {
128    public PaymentReconciliationStatus fromCode(String codeString) throws IllegalArgumentException {
129      if (codeString == null || "".equals(codeString))
130            if (codeString == null || "".equals(codeString))
131                return null;
132        if ("active".equals(codeString))
133          return PaymentReconciliationStatus.ACTIVE;
134        if ("cancelled".equals(codeString))
135          return PaymentReconciliationStatus.CANCELLED;
136        if ("draft".equals(codeString))
137          return PaymentReconciliationStatus.DRAFT;
138        if ("entered-in-error".equals(codeString))
139          return PaymentReconciliationStatus.ENTEREDINERROR;
140        throw new IllegalArgumentException("Unknown PaymentReconciliationStatus code '"+codeString+"'");
141        }
142        public Enumeration<PaymentReconciliationStatus> fromType(Base code) throws FHIRException {
143          if (code == null)
144            return null;
145          if (code.isEmpty())
146            return new Enumeration<PaymentReconciliationStatus>(this);
147          String codeString = ((PrimitiveType) code).asStringValue();
148          if (codeString == null || "".equals(codeString))
149            return null;
150        if ("active".equals(codeString))
151          return new Enumeration<PaymentReconciliationStatus>(this, PaymentReconciliationStatus.ACTIVE);
152        if ("cancelled".equals(codeString))
153          return new Enumeration<PaymentReconciliationStatus>(this, PaymentReconciliationStatus.CANCELLED);
154        if ("draft".equals(codeString))
155          return new Enumeration<PaymentReconciliationStatus>(this, PaymentReconciliationStatus.DRAFT);
156        if ("entered-in-error".equals(codeString))
157          return new Enumeration<PaymentReconciliationStatus>(this, PaymentReconciliationStatus.ENTEREDINERROR);
158        throw new FHIRException("Unknown PaymentReconciliationStatus code '"+codeString+"'");
159        }
160    public String toCode(PaymentReconciliationStatus code) {
161      if (code == PaymentReconciliationStatus.ACTIVE)
162        return "active";
163      if (code == PaymentReconciliationStatus.CANCELLED)
164        return "cancelled";
165      if (code == PaymentReconciliationStatus.DRAFT)
166        return "draft";
167      if (code == PaymentReconciliationStatus.ENTEREDINERROR)
168        return "entered-in-error";
169      return "?";
170      }
171    public String toSystem(PaymentReconciliationStatus code) {
172      return code.getSystem();
173      }
174    }
175
176    @Block()
177    public static class DetailsComponent extends BackboneElement implements IBaseBackboneElement {
178        /**
179         * Code to indicate the nature of the payment, adjustment, funds advance, etc.
180         */
181        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
182        @Description(shortDefinition="Type code", formalDefinition="Code to indicate the nature of the payment, adjustment, funds advance, etc." )
183        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/payment-type")
184        protected CodeableConcept type;
185
186        /**
187         * The claim or financial resource.
188         */
189        @Child(name = "request", type = {Reference.class}, order=2, min=0, max=1, modifier=false, summary=false)
190        @Description(shortDefinition="Claim", formalDefinition="The claim or financial resource." )
191        protected Reference request;
192
193        /**
194         * The actual object that is the target of the reference (The claim or financial resource.)
195         */
196        protected Resource requestTarget;
197
198        /**
199         * The claim response resource.
200         */
201        @Child(name = "response", type = {Reference.class}, order=3, min=0, max=1, modifier=false, summary=false)
202        @Description(shortDefinition="Claim Response", formalDefinition="The claim response resource." )
203        protected Reference response;
204
205        /**
206         * The actual object that is the target of the reference (The claim response resource.)
207         */
208        protected Resource responseTarget;
209
210        /**
211         * The Organization which submitted the claim or financial transaction.
212         */
213        @Child(name = "submitter", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=false)
214        @Description(shortDefinition="Organization which submitted the claim", formalDefinition="The Organization which submitted the claim or financial transaction." )
215        protected Reference submitter;
216
217        /**
218         * The actual object that is the target of the reference (The Organization which submitted the claim or financial transaction.)
219         */
220        protected Organization submitterTarget;
221
222        /**
223         * The organization which is receiving the payment.
224         */
225        @Child(name = "payee", type = {Organization.class}, order=5, min=0, max=1, modifier=false, summary=false)
226        @Description(shortDefinition="Organization which is receiving the payment", formalDefinition="The organization which is receiving the payment." )
227        protected Reference payee;
228
229        /**
230         * The actual object that is the target of the reference (The organization which is receiving the payment.)
231         */
232        protected Organization payeeTarget;
233
234        /**
235         * The date of the invoice or financial resource.
236         */
237        @Child(name = "date", type = {DateType.class}, order=6, min=0, max=1, modifier=false, summary=false)
238        @Description(shortDefinition="Invoice date", formalDefinition="The date of the invoice or financial resource." )
239        protected DateType date;
240
241        /**
242         * Amount paid for this detail.
243         */
244        @Child(name = "amount", type = {Money.class}, order=7, min=0, max=1, modifier=false, summary=false)
245        @Description(shortDefinition="Amount being paid", formalDefinition="Amount paid for this detail." )
246        protected Money amount;
247
248        private static final long serialVersionUID = 661095855L;
249
250    /**
251     * Constructor
252     */
253      public DetailsComponent() {
254        super();
255      }
256
257    /**
258     * Constructor
259     */
260      public DetailsComponent(CodeableConcept type) {
261        super();
262        this.type = type;
263      }
264
265        /**
266         * @return {@link #type} (Code to indicate the nature of the payment, adjustment, funds advance, etc.)
267         */
268        public CodeableConcept getType() { 
269          if (this.type == null)
270            if (Configuration.errorOnAutoCreate())
271              throw new Error("Attempt to auto-create DetailsComponent.type");
272            else if (Configuration.doAutoCreate())
273              this.type = new CodeableConcept(); // cc
274          return this.type;
275        }
276
277        public boolean hasType() { 
278          return this.type != null && !this.type.isEmpty();
279        }
280
281        /**
282         * @param value {@link #type} (Code to indicate the nature of the payment, adjustment, funds advance, etc.)
283         */
284        public DetailsComponent setType(CodeableConcept value) { 
285          this.type = value;
286          return this;
287        }
288
289        /**
290         * @return {@link #request} (The claim or financial resource.)
291         */
292        public Reference getRequest() { 
293          if (this.request == null)
294            if (Configuration.errorOnAutoCreate())
295              throw new Error("Attempt to auto-create DetailsComponent.request");
296            else if (Configuration.doAutoCreate())
297              this.request = new Reference(); // cc
298          return this.request;
299        }
300
301        public boolean hasRequest() { 
302          return this.request != null && !this.request.isEmpty();
303        }
304
305        /**
306         * @param value {@link #request} (The claim or financial resource.)
307         */
308        public DetailsComponent setRequest(Reference value) { 
309          this.request = value;
310          return this;
311        }
312
313        /**
314         * @return {@link #request} 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 claim or financial resource.)
315         */
316        public Resource getRequestTarget() { 
317          return this.requestTarget;
318        }
319
320        /**
321         * @param value {@link #request} 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 claim or financial resource.)
322         */
323        public DetailsComponent setRequestTarget(Resource value) { 
324          this.requestTarget = value;
325          return this;
326        }
327
328        /**
329         * @return {@link #response} (The claim response resource.)
330         */
331        public Reference getResponse() { 
332          if (this.response == null)
333            if (Configuration.errorOnAutoCreate())
334              throw new Error("Attempt to auto-create DetailsComponent.response");
335            else if (Configuration.doAutoCreate())
336              this.response = new Reference(); // cc
337          return this.response;
338        }
339
340        public boolean hasResponse() { 
341          return this.response != null && !this.response.isEmpty();
342        }
343
344        /**
345         * @param value {@link #response} (The claim response resource.)
346         */
347        public DetailsComponent setResponse(Reference value) { 
348          this.response = value;
349          return this;
350        }
351
352        /**
353         * @return {@link #response} 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 claim response resource.)
354         */
355        public Resource getResponseTarget() { 
356          return this.responseTarget;
357        }
358
359        /**
360         * @param value {@link #response} 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 claim response resource.)
361         */
362        public DetailsComponent setResponseTarget(Resource value) { 
363          this.responseTarget = value;
364          return this;
365        }
366
367        /**
368         * @return {@link #submitter} (The Organization which submitted the claim or financial transaction.)
369         */
370        public Reference getSubmitter() { 
371          if (this.submitter == null)
372            if (Configuration.errorOnAutoCreate())
373              throw new Error("Attempt to auto-create DetailsComponent.submitter");
374            else if (Configuration.doAutoCreate())
375              this.submitter = new Reference(); // cc
376          return this.submitter;
377        }
378
379        public boolean hasSubmitter() { 
380          return this.submitter != null && !this.submitter.isEmpty();
381        }
382
383        /**
384         * @param value {@link #submitter} (The Organization which submitted the claim or financial transaction.)
385         */
386        public DetailsComponent setSubmitter(Reference value) { 
387          this.submitter = value;
388          return this;
389        }
390
391        /**
392         * @return {@link #submitter} 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 submitted the claim or financial transaction.)
393         */
394        public Organization getSubmitterTarget() { 
395          if (this.submitterTarget == null)
396            if (Configuration.errorOnAutoCreate())
397              throw new Error("Attempt to auto-create DetailsComponent.submitter");
398            else if (Configuration.doAutoCreate())
399              this.submitterTarget = new Organization(); // aa
400          return this.submitterTarget;
401        }
402
403        /**
404         * @param value {@link #submitter} 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 submitted the claim or financial transaction.)
405         */
406        public DetailsComponent setSubmitterTarget(Organization value) { 
407          this.submitterTarget = value;
408          return this;
409        }
410
411        /**
412         * @return {@link #payee} (The organization which is receiving the payment.)
413         */
414        public Reference getPayee() { 
415          if (this.payee == null)
416            if (Configuration.errorOnAutoCreate())
417              throw new Error("Attempt to auto-create DetailsComponent.payee");
418            else if (Configuration.doAutoCreate())
419              this.payee = new Reference(); // cc
420          return this.payee;
421        }
422
423        public boolean hasPayee() { 
424          return this.payee != null && !this.payee.isEmpty();
425        }
426
427        /**
428         * @param value {@link #payee} (The organization which is receiving the payment.)
429         */
430        public DetailsComponent setPayee(Reference value) { 
431          this.payee = value;
432          return this;
433        }
434
435        /**
436         * @return {@link #payee} 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 receiving the payment.)
437         */
438        public Organization getPayeeTarget() { 
439          if (this.payeeTarget == null)
440            if (Configuration.errorOnAutoCreate())
441              throw new Error("Attempt to auto-create DetailsComponent.payee");
442            else if (Configuration.doAutoCreate())
443              this.payeeTarget = new Organization(); // aa
444          return this.payeeTarget;
445        }
446
447        /**
448         * @param value {@link #payee} 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 receiving the payment.)
449         */
450        public DetailsComponent setPayeeTarget(Organization value) { 
451          this.payeeTarget = value;
452          return this;
453        }
454
455        /**
456         * @return {@link #date} (The date of the invoice or financial resource.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
457         */
458        public DateType getDateElement() { 
459          if (this.date == null)
460            if (Configuration.errorOnAutoCreate())
461              throw new Error("Attempt to auto-create DetailsComponent.date");
462            else if (Configuration.doAutoCreate())
463              this.date = new DateType(); // bb
464          return this.date;
465        }
466
467        public boolean hasDateElement() { 
468          return this.date != null && !this.date.isEmpty();
469        }
470
471        public boolean hasDate() { 
472          return this.date != null && !this.date.isEmpty();
473        }
474
475        /**
476         * @param value {@link #date} (The date of the invoice or financial resource.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
477         */
478        public DetailsComponent setDateElement(DateType value) { 
479          this.date = value;
480          return this;
481        }
482
483        /**
484         * @return The date of the invoice or financial resource.
485         */
486        public Date getDate() { 
487          return this.date == null ? null : this.date.getValue();
488        }
489
490        /**
491         * @param value The date of the invoice or financial resource.
492         */
493        public DetailsComponent setDate(Date value) { 
494          if (value == null)
495            this.date = null;
496          else {
497            if (this.date == null)
498              this.date = new DateType();
499            this.date.setValue(value);
500          }
501          return this;
502        }
503
504        /**
505         * @return {@link #amount} (Amount paid for this detail.)
506         */
507        public Money getAmount() { 
508          if (this.amount == null)
509            if (Configuration.errorOnAutoCreate())
510              throw new Error("Attempt to auto-create DetailsComponent.amount");
511            else if (Configuration.doAutoCreate())
512              this.amount = new Money(); // cc
513          return this.amount;
514        }
515
516        public boolean hasAmount() { 
517          return this.amount != null && !this.amount.isEmpty();
518        }
519
520        /**
521         * @param value {@link #amount} (Amount paid for this detail.)
522         */
523        public DetailsComponent setAmount(Money value) { 
524          this.amount = value;
525          return this;
526        }
527
528        protected void listChildren(List<Property> childrenList) {
529          super.listChildren(childrenList);
530          childrenList.add(new Property("type", "CodeableConcept", "Code to indicate the nature of the payment, adjustment, funds advance, etc.", 0, java.lang.Integer.MAX_VALUE, type));
531          childrenList.add(new Property("request", "Reference(Any)", "The claim or financial resource.", 0, java.lang.Integer.MAX_VALUE, request));
532          childrenList.add(new Property("response", "Reference(Any)", "The claim response resource.", 0, java.lang.Integer.MAX_VALUE, response));
533          childrenList.add(new Property("submitter", "Reference(Organization)", "The Organization which submitted the claim or financial transaction.", 0, java.lang.Integer.MAX_VALUE, submitter));
534          childrenList.add(new Property("payee", "Reference(Organization)", "The organization which is receiving the payment.", 0, java.lang.Integer.MAX_VALUE, payee));
535          childrenList.add(new Property("date", "date", "The date of the invoice or financial resource.", 0, java.lang.Integer.MAX_VALUE, date));
536          childrenList.add(new Property("amount", "Money", "Amount paid for this detail.", 0, java.lang.Integer.MAX_VALUE, amount));
537        }
538
539      @Override
540      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
541        switch (hash) {
542        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
543        case 1095692943: /*request*/ return this.request == null ? new Base[0] : new Base[] {this.request}; // Reference
544        case -340323263: /*response*/ return this.response == null ? new Base[0] : new Base[] {this.response}; // Reference
545        case 348678409: /*submitter*/ return this.submitter == null ? new Base[0] : new Base[] {this.submitter}; // Reference
546        case 106443592: /*payee*/ return this.payee == null ? new Base[0] : new Base[] {this.payee}; // Reference
547        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateType
548        case -1413853096: /*amount*/ return this.amount == null ? new Base[0] : new Base[] {this.amount}; // Money
549        default: return super.getProperty(hash, name, checkValid);
550        }
551
552      }
553
554      @Override
555      public Base setProperty(int hash, String name, Base value) throws FHIRException {
556        switch (hash) {
557        case 3575610: // type
558          this.type = castToCodeableConcept(value); // CodeableConcept
559          return value;
560        case 1095692943: // request
561          this.request = castToReference(value); // Reference
562          return value;
563        case -340323263: // response
564          this.response = castToReference(value); // Reference
565          return value;
566        case 348678409: // submitter
567          this.submitter = castToReference(value); // Reference
568          return value;
569        case 106443592: // payee
570          this.payee = castToReference(value); // Reference
571          return value;
572        case 3076014: // date
573          this.date = castToDate(value); // DateType
574          return value;
575        case -1413853096: // amount
576          this.amount = castToMoney(value); // Money
577          return value;
578        default: return super.setProperty(hash, name, value);
579        }
580
581      }
582
583      @Override
584      public Base setProperty(String name, Base value) throws FHIRException {
585        if (name.equals("type")) {
586          this.type = castToCodeableConcept(value); // CodeableConcept
587        } else if (name.equals("request")) {
588          this.request = castToReference(value); // Reference
589        } else if (name.equals("response")) {
590          this.response = castToReference(value); // Reference
591        } else if (name.equals("submitter")) {
592          this.submitter = castToReference(value); // Reference
593        } else if (name.equals("payee")) {
594          this.payee = castToReference(value); // Reference
595        } else if (name.equals("date")) {
596          this.date = castToDate(value); // DateType
597        } else if (name.equals("amount")) {
598          this.amount = castToMoney(value); // Money
599        } else
600          return super.setProperty(name, value);
601        return value;
602      }
603
604      @Override
605      public Base makeProperty(int hash, String name) throws FHIRException {
606        switch (hash) {
607        case 3575610:  return getType(); 
608        case 1095692943:  return getRequest(); 
609        case -340323263:  return getResponse(); 
610        case 348678409:  return getSubmitter(); 
611        case 106443592:  return getPayee(); 
612        case 3076014:  return getDateElement();
613        case -1413853096:  return getAmount(); 
614        default: return super.makeProperty(hash, name);
615        }
616
617      }
618
619      @Override
620      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
621        switch (hash) {
622        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
623        case 1095692943: /*request*/ return new String[] {"Reference"};
624        case -340323263: /*response*/ return new String[] {"Reference"};
625        case 348678409: /*submitter*/ return new String[] {"Reference"};
626        case 106443592: /*payee*/ return new String[] {"Reference"};
627        case 3076014: /*date*/ return new String[] {"date"};
628        case -1413853096: /*amount*/ return new String[] {"Money"};
629        default: return super.getTypesForProperty(hash, name);
630        }
631
632      }
633
634      @Override
635      public Base addChild(String name) throws FHIRException {
636        if (name.equals("type")) {
637          this.type = new CodeableConcept();
638          return this.type;
639        }
640        else if (name.equals("request")) {
641          this.request = new Reference();
642          return this.request;
643        }
644        else if (name.equals("response")) {
645          this.response = new Reference();
646          return this.response;
647        }
648        else if (name.equals("submitter")) {
649          this.submitter = new Reference();
650          return this.submitter;
651        }
652        else if (name.equals("payee")) {
653          this.payee = new Reference();
654          return this.payee;
655        }
656        else if (name.equals("date")) {
657          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.date");
658        }
659        else if (name.equals("amount")) {
660          this.amount = new Money();
661          return this.amount;
662        }
663        else
664          return super.addChild(name);
665      }
666
667      public DetailsComponent copy() {
668        DetailsComponent dst = new DetailsComponent();
669        copyValues(dst);
670        dst.type = type == null ? null : type.copy();
671        dst.request = request == null ? null : request.copy();
672        dst.response = response == null ? null : response.copy();
673        dst.submitter = submitter == null ? null : submitter.copy();
674        dst.payee = payee == null ? null : payee.copy();
675        dst.date = date == null ? null : date.copy();
676        dst.amount = amount == null ? null : amount.copy();
677        return dst;
678      }
679
680      @Override
681      public boolean equalsDeep(Base other) {
682        if (!super.equalsDeep(other))
683          return false;
684        if (!(other instanceof DetailsComponent))
685          return false;
686        DetailsComponent o = (DetailsComponent) other;
687        return compareDeep(type, o.type, true) && compareDeep(request, o.request, true) && compareDeep(response, o.response, true)
688           && compareDeep(submitter, o.submitter, true) && compareDeep(payee, o.payee, true) && compareDeep(date, o.date, true)
689           && compareDeep(amount, o.amount, true);
690      }
691
692      @Override
693      public boolean equalsShallow(Base other) {
694        if (!super.equalsShallow(other))
695          return false;
696        if (!(other instanceof DetailsComponent))
697          return false;
698        DetailsComponent o = (DetailsComponent) other;
699        return compareValues(date, o.date, true);
700      }
701
702      public boolean isEmpty() {
703        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, request, response
704          , submitter, payee, date, amount);
705      }
706
707  public String fhirType() {
708    return "PaymentReconciliation.detail";
709
710  }
711
712  }
713
714    @Block()
715    public static class NotesComponent extends BackboneElement implements IBaseBackboneElement {
716        /**
717         * The note purpose: Print/Display.
718         */
719        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
720        @Description(shortDefinition="display | print | printoper", formalDefinition="The note purpose: Print/Display." )
721        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/note-type")
722        protected CodeableConcept type;
723
724        /**
725         * The note text.
726         */
727        @Child(name = "text", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
728        @Description(shortDefinition="Comment on the processing", formalDefinition="The note text." )
729        protected StringType text;
730
731        private static final long serialVersionUID = 874830709L;
732
733    /**
734     * Constructor
735     */
736      public NotesComponent() {
737        super();
738      }
739
740        /**
741         * @return {@link #type} (The note purpose: Print/Display.)
742         */
743        public CodeableConcept getType() { 
744          if (this.type == null)
745            if (Configuration.errorOnAutoCreate())
746              throw new Error("Attempt to auto-create NotesComponent.type");
747            else if (Configuration.doAutoCreate())
748              this.type = new CodeableConcept(); // cc
749          return this.type;
750        }
751
752        public boolean hasType() { 
753          return this.type != null && !this.type.isEmpty();
754        }
755
756        /**
757         * @param value {@link #type} (The note purpose: Print/Display.)
758         */
759        public NotesComponent setType(CodeableConcept value) { 
760          this.type = value;
761          return this;
762        }
763
764        /**
765         * @return {@link #text} (The note text.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
766         */
767        public StringType getTextElement() { 
768          if (this.text == null)
769            if (Configuration.errorOnAutoCreate())
770              throw new Error("Attempt to auto-create NotesComponent.text");
771            else if (Configuration.doAutoCreate())
772              this.text = new StringType(); // bb
773          return this.text;
774        }
775
776        public boolean hasTextElement() { 
777          return this.text != null && !this.text.isEmpty();
778        }
779
780        public boolean hasText() { 
781          return this.text != null && !this.text.isEmpty();
782        }
783
784        /**
785         * @param value {@link #text} (The note text.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
786         */
787        public NotesComponent setTextElement(StringType value) { 
788          this.text = value;
789          return this;
790        }
791
792        /**
793         * @return The note text.
794         */
795        public String getText() { 
796          return this.text == null ? null : this.text.getValue();
797        }
798
799        /**
800         * @param value The note text.
801         */
802        public NotesComponent setText(String value) { 
803          if (Utilities.noString(value))
804            this.text = null;
805          else {
806            if (this.text == null)
807              this.text = new StringType();
808            this.text.setValue(value);
809          }
810          return this;
811        }
812
813        protected void listChildren(List<Property> childrenList) {
814          super.listChildren(childrenList);
815          childrenList.add(new Property("type", "CodeableConcept", "The note purpose: Print/Display.", 0, java.lang.Integer.MAX_VALUE, type));
816          childrenList.add(new Property("text", "string", "The note text.", 0, java.lang.Integer.MAX_VALUE, text));
817        }
818
819      @Override
820      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
821        switch (hash) {
822        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
823        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // StringType
824        default: return super.getProperty(hash, name, checkValid);
825        }
826
827      }
828
829      @Override
830      public Base setProperty(int hash, String name, Base value) throws FHIRException {
831        switch (hash) {
832        case 3575610: // type
833          this.type = castToCodeableConcept(value); // CodeableConcept
834          return value;
835        case 3556653: // text
836          this.text = castToString(value); // StringType
837          return value;
838        default: return super.setProperty(hash, name, value);
839        }
840
841      }
842
843      @Override
844      public Base setProperty(String name, Base value) throws FHIRException {
845        if (name.equals("type")) {
846          this.type = castToCodeableConcept(value); // CodeableConcept
847        } else if (name.equals("text")) {
848          this.text = castToString(value); // StringType
849        } else
850          return super.setProperty(name, value);
851        return value;
852      }
853
854      @Override
855      public Base makeProperty(int hash, String name) throws FHIRException {
856        switch (hash) {
857        case 3575610:  return getType(); 
858        case 3556653:  return getTextElement();
859        default: return super.makeProperty(hash, name);
860        }
861
862      }
863
864      @Override
865      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
866        switch (hash) {
867        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
868        case 3556653: /*text*/ return new String[] {"string"};
869        default: return super.getTypesForProperty(hash, name);
870        }
871
872      }
873
874      @Override
875      public Base addChild(String name) throws FHIRException {
876        if (name.equals("type")) {
877          this.type = new CodeableConcept();
878          return this.type;
879        }
880        else if (name.equals("text")) {
881          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.text");
882        }
883        else
884          return super.addChild(name);
885      }
886
887      public NotesComponent copy() {
888        NotesComponent dst = new NotesComponent();
889        copyValues(dst);
890        dst.type = type == null ? null : type.copy();
891        dst.text = text == null ? null : text.copy();
892        return dst;
893      }
894
895      @Override
896      public boolean equalsDeep(Base other) {
897        if (!super.equalsDeep(other))
898          return false;
899        if (!(other instanceof NotesComponent))
900          return false;
901        NotesComponent o = (NotesComponent) other;
902        return compareDeep(type, o.type, true) && compareDeep(text, o.text, true);
903      }
904
905      @Override
906      public boolean equalsShallow(Base other) {
907        if (!super.equalsShallow(other))
908          return false;
909        if (!(other instanceof NotesComponent))
910          return false;
911        NotesComponent o = (NotesComponent) other;
912        return compareValues(text, o.text, true);
913      }
914
915      public boolean isEmpty() {
916        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, text);
917      }
918
919  public String fhirType() {
920    return "PaymentReconciliation.processNote";
921
922  }
923
924  }
925
926    /**
927     * The Response business identifier.
928     */
929    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
930    @Description(shortDefinition="Business Identifier", formalDefinition="The Response business identifier." )
931    protected List<Identifier> identifier;
932
933    /**
934     * The status of the resource instance.
935     */
936    @Child(name = "status", type = {CodeType.class}, order=1, min=0, max=1, modifier=true, summary=true)
937    @Description(shortDefinition="active | cancelled | draft | entered-in-error", formalDefinition="The status of the resource instance." )
938    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fm-status")
939    protected Enumeration<PaymentReconciliationStatus> status;
940
941    /**
942     * The period of time for which payments have been gathered into this bulk payment for settlement.
943     */
944    @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
945    @Description(shortDefinition="Period covered", formalDefinition="The period of time for which payments have been gathered into this bulk payment for settlement." )
946    protected Period period;
947
948    /**
949     * The date when the enclosed suite of services were performed or completed.
950     */
951    @Child(name = "created", type = {DateTimeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
952    @Description(shortDefinition="Creation date", formalDefinition="The date when the enclosed suite of services were performed or completed." )
953    protected DateTimeType created;
954
955    /**
956     * The Insurer who produced this adjudicated response.
957     */
958    @Child(name = "organization", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=false)
959    @Description(shortDefinition="Insurer", formalDefinition="The Insurer who produced this adjudicated response." )
960    protected Reference organization;
961
962    /**
963     * The actual object that is the target of the reference (The Insurer who produced this adjudicated response.)
964     */
965    protected Organization organizationTarget;
966
967    /**
968     * Original request resource reference.
969     */
970    @Child(name = "request", type = {ProcessRequest.class}, order=5, min=0, max=1, modifier=false, summary=false)
971    @Description(shortDefinition="Claim reference", formalDefinition="Original request resource reference." )
972    protected Reference request;
973
974    /**
975     * The actual object that is the target of the reference (Original request resource reference.)
976     */
977    protected ProcessRequest requestTarget;
978
979    /**
980     * Transaction status: error, complete.
981     */
982    @Child(name = "outcome", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=false)
983    @Description(shortDefinition="complete | error | partial", formalDefinition="Transaction status: error, complete." )
984    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/remittance-outcome")
985    protected CodeableConcept outcome;
986
987    /**
988     * A description of the status of the adjudication.
989     */
990    @Child(name = "disposition", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=false)
991    @Description(shortDefinition="Disposition Message", formalDefinition="A description of the status of the adjudication." )
992    protected StringType disposition;
993
994    /**
995     * The practitioner who is responsible for the services rendered to the patient.
996     */
997    @Child(name = "requestProvider", type = {Practitioner.class}, order=8, min=0, max=1, modifier=false, summary=false)
998    @Description(shortDefinition="Responsible practitioner", formalDefinition="The practitioner who is responsible for the services rendered to the patient." )
999    protected Reference requestProvider;
1000
1001    /**
1002     * The actual object that is the target of the reference (The practitioner who is responsible for the services rendered to the patient.)
1003     */
1004    protected Practitioner requestProviderTarget;
1005
1006    /**
1007     * The organization which is responsible for the services rendered to the patient.
1008     */
1009    @Child(name = "requestOrganization", type = {Organization.class}, order=9, min=0, max=1, modifier=false, summary=false)
1010    @Description(shortDefinition="Responsible organization", formalDefinition="The organization which is responsible for the services rendered to the patient." )
1011    protected Reference requestOrganization;
1012
1013    /**
1014     * The actual object that is the target of the reference (The organization which is responsible for the services rendered to the patient.)
1015     */
1016    protected Organization requestOrganizationTarget;
1017
1018    /**
1019     * List of individual settlement amounts and the corresponding transaction.
1020     */
1021    @Child(name = "detail", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1022    @Description(shortDefinition="List of settlements", formalDefinition="List of individual settlement amounts and the corresponding transaction." )
1023    protected List<DetailsComponent> detail;
1024
1025    /**
1026     * The form to be used for printing the content.
1027     */
1028    @Child(name = "form", type = {CodeableConcept.class}, order=11, min=0, max=1, modifier=false, summary=false)
1029    @Description(shortDefinition="Printed Form Identifier", formalDefinition="The form to be used for printing the content." )
1030    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/forms")
1031    protected CodeableConcept form;
1032
1033    /**
1034     * Total payment amount.
1035     */
1036    @Child(name = "total", type = {Money.class}, order=12, min=0, max=1, modifier=false, summary=false)
1037    @Description(shortDefinition="Total amount of Payment", formalDefinition="Total payment amount." )
1038    protected Money total;
1039
1040    /**
1041     * Suite of notes.
1042     */
1043    @Child(name = "processNote", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1044    @Description(shortDefinition="Processing comments", formalDefinition="Suite of notes." )
1045    protected List<NotesComponent> processNote;
1046
1047    private static final long serialVersionUID = -665475468L;
1048
1049  /**
1050   * Constructor
1051   */
1052    public PaymentReconciliation() {
1053      super();
1054    }
1055
1056    /**
1057     * @return {@link #identifier} (The Response business identifier.)
1058     */
1059    public List<Identifier> getIdentifier() { 
1060      if (this.identifier == null)
1061        this.identifier = new ArrayList<Identifier>();
1062      return this.identifier;
1063    }
1064
1065    /**
1066     * @return Returns a reference to <code>this</code> for easy method chaining
1067     */
1068    public PaymentReconciliation setIdentifier(List<Identifier> theIdentifier) { 
1069      this.identifier = theIdentifier;
1070      return this;
1071    }
1072
1073    public boolean hasIdentifier() { 
1074      if (this.identifier == null)
1075        return false;
1076      for (Identifier item : this.identifier)
1077        if (!item.isEmpty())
1078          return true;
1079      return false;
1080    }
1081
1082    public Identifier addIdentifier() { //3
1083      Identifier t = new Identifier();
1084      if (this.identifier == null)
1085        this.identifier = new ArrayList<Identifier>();
1086      this.identifier.add(t);
1087      return t;
1088    }
1089
1090    public PaymentReconciliation addIdentifier(Identifier t) { //3
1091      if (t == null)
1092        return this;
1093      if (this.identifier == null)
1094        this.identifier = new ArrayList<Identifier>();
1095      this.identifier.add(t);
1096      return this;
1097    }
1098
1099    /**
1100     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1101     */
1102    public Identifier getIdentifierFirstRep() { 
1103      if (getIdentifier().isEmpty()) {
1104        addIdentifier();
1105      }
1106      return getIdentifier().get(0);
1107    }
1108
1109    /**
1110     * @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
1111     */
1112    public Enumeration<PaymentReconciliationStatus> getStatusElement() { 
1113      if (this.status == null)
1114        if (Configuration.errorOnAutoCreate())
1115          throw new Error("Attempt to auto-create PaymentReconciliation.status");
1116        else if (Configuration.doAutoCreate())
1117          this.status = new Enumeration<PaymentReconciliationStatus>(new PaymentReconciliationStatusEnumFactory()); // bb
1118      return this.status;
1119    }
1120
1121    public boolean hasStatusElement() { 
1122      return this.status != null && !this.status.isEmpty();
1123    }
1124
1125    public boolean hasStatus() { 
1126      return this.status != null && !this.status.isEmpty();
1127    }
1128
1129    /**
1130     * @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
1131     */
1132    public PaymentReconciliation setStatusElement(Enumeration<PaymentReconciliationStatus> value) { 
1133      this.status = value;
1134      return this;
1135    }
1136
1137    /**
1138     * @return The status of the resource instance.
1139     */
1140    public PaymentReconciliationStatus getStatus() { 
1141      return this.status == null ? null : this.status.getValue();
1142    }
1143
1144    /**
1145     * @param value The status of the resource instance.
1146     */
1147    public PaymentReconciliation setStatus(PaymentReconciliationStatus value) { 
1148      if (value == null)
1149        this.status = null;
1150      else {
1151        if (this.status == null)
1152          this.status = new Enumeration<PaymentReconciliationStatus>(new PaymentReconciliationStatusEnumFactory());
1153        this.status.setValue(value);
1154      }
1155      return this;
1156    }
1157
1158    /**
1159     * @return {@link #period} (The period of time for which payments have been gathered into this bulk payment for settlement.)
1160     */
1161    public Period getPeriod() { 
1162      if (this.period == null)
1163        if (Configuration.errorOnAutoCreate())
1164          throw new Error("Attempt to auto-create PaymentReconciliation.period");
1165        else if (Configuration.doAutoCreate())
1166          this.period = new Period(); // cc
1167      return this.period;
1168    }
1169
1170    public boolean hasPeriod() { 
1171      return this.period != null && !this.period.isEmpty();
1172    }
1173
1174    /**
1175     * @param value {@link #period} (The period of time for which payments have been gathered into this bulk payment for settlement.)
1176     */
1177    public PaymentReconciliation setPeriod(Period value) { 
1178      this.period = value;
1179      return this;
1180    }
1181
1182    /**
1183     * @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
1184     */
1185    public DateTimeType getCreatedElement() { 
1186      if (this.created == null)
1187        if (Configuration.errorOnAutoCreate())
1188          throw new Error("Attempt to auto-create PaymentReconciliation.created");
1189        else if (Configuration.doAutoCreate())
1190          this.created = new DateTimeType(); // bb
1191      return this.created;
1192    }
1193
1194    public boolean hasCreatedElement() { 
1195      return this.created != null && !this.created.isEmpty();
1196    }
1197
1198    public boolean hasCreated() { 
1199      return this.created != null && !this.created.isEmpty();
1200    }
1201
1202    /**
1203     * @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
1204     */
1205    public PaymentReconciliation setCreatedElement(DateTimeType value) { 
1206      this.created = value;
1207      return this;
1208    }
1209
1210    /**
1211     * @return The date when the enclosed suite of services were performed or completed.
1212     */
1213    public Date getCreated() { 
1214      return this.created == null ? null : this.created.getValue();
1215    }
1216
1217    /**
1218     * @param value The date when the enclosed suite of services were performed or completed.
1219     */
1220    public PaymentReconciliation setCreated(Date value) { 
1221      if (value == null)
1222        this.created = null;
1223      else {
1224        if (this.created == null)
1225          this.created = new DateTimeType();
1226        this.created.setValue(value);
1227      }
1228      return this;
1229    }
1230
1231    /**
1232     * @return {@link #organization} (The Insurer who produced this adjudicated response.)
1233     */
1234    public Reference getOrganization() { 
1235      if (this.organization == null)
1236        if (Configuration.errorOnAutoCreate())
1237          throw new Error("Attempt to auto-create PaymentReconciliation.organization");
1238        else if (Configuration.doAutoCreate())
1239          this.organization = new Reference(); // cc
1240      return this.organization;
1241    }
1242
1243    public boolean hasOrganization() { 
1244      return this.organization != null && !this.organization.isEmpty();
1245    }
1246
1247    /**
1248     * @param value {@link #organization} (The Insurer who produced this adjudicated response.)
1249     */
1250    public PaymentReconciliation setOrganization(Reference value) { 
1251      this.organization = value;
1252      return this;
1253    }
1254
1255    /**
1256     * @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 Insurer who produced this adjudicated response.)
1257     */
1258    public Organization getOrganizationTarget() { 
1259      if (this.organizationTarget == null)
1260        if (Configuration.errorOnAutoCreate())
1261          throw new Error("Attempt to auto-create PaymentReconciliation.organization");
1262        else if (Configuration.doAutoCreate())
1263          this.organizationTarget = new Organization(); // aa
1264      return this.organizationTarget;
1265    }
1266
1267    /**
1268     * @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 Insurer who produced this adjudicated response.)
1269     */
1270    public PaymentReconciliation setOrganizationTarget(Organization value) { 
1271      this.organizationTarget = value;
1272      return this;
1273    }
1274
1275    /**
1276     * @return {@link #request} (Original request resource reference.)
1277     */
1278    public Reference getRequest() { 
1279      if (this.request == null)
1280        if (Configuration.errorOnAutoCreate())
1281          throw new Error("Attempt to auto-create PaymentReconciliation.request");
1282        else if (Configuration.doAutoCreate())
1283          this.request = new Reference(); // cc
1284      return this.request;
1285    }
1286
1287    public boolean hasRequest() { 
1288      return this.request != null && !this.request.isEmpty();
1289    }
1290
1291    /**
1292     * @param value {@link #request} (Original request resource reference.)
1293     */
1294    public PaymentReconciliation setRequest(Reference value) { 
1295      this.request = value;
1296      return this;
1297    }
1298
1299    /**
1300     * @return {@link #request} 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 request resource reference.)
1301     */
1302    public ProcessRequest getRequestTarget() { 
1303      if (this.requestTarget == null)
1304        if (Configuration.errorOnAutoCreate())
1305          throw new Error("Attempt to auto-create PaymentReconciliation.request");
1306        else if (Configuration.doAutoCreate())
1307          this.requestTarget = new ProcessRequest(); // aa
1308      return this.requestTarget;
1309    }
1310
1311    /**
1312     * @param value {@link #request} 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 request resource reference.)
1313     */
1314    public PaymentReconciliation setRequestTarget(ProcessRequest value) { 
1315      this.requestTarget = value;
1316      return this;
1317    }
1318
1319    /**
1320     * @return {@link #outcome} (Transaction status: error, complete.)
1321     */
1322    public CodeableConcept getOutcome() { 
1323      if (this.outcome == null)
1324        if (Configuration.errorOnAutoCreate())
1325          throw new Error("Attempt to auto-create PaymentReconciliation.outcome");
1326        else if (Configuration.doAutoCreate())
1327          this.outcome = new CodeableConcept(); // cc
1328      return this.outcome;
1329    }
1330
1331    public boolean hasOutcome() { 
1332      return this.outcome != null && !this.outcome.isEmpty();
1333    }
1334
1335    /**
1336     * @param value {@link #outcome} (Transaction status: error, complete.)
1337     */
1338    public PaymentReconciliation setOutcome(CodeableConcept value) { 
1339      this.outcome = value;
1340      return this;
1341    }
1342
1343    /**
1344     * @return {@link #disposition} (A description of the status of the adjudication.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
1345     */
1346    public StringType getDispositionElement() { 
1347      if (this.disposition == null)
1348        if (Configuration.errorOnAutoCreate())
1349          throw new Error("Attempt to auto-create PaymentReconciliation.disposition");
1350        else if (Configuration.doAutoCreate())
1351          this.disposition = new StringType(); // bb
1352      return this.disposition;
1353    }
1354
1355    public boolean hasDispositionElement() { 
1356      return this.disposition != null && !this.disposition.isEmpty();
1357    }
1358
1359    public boolean hasDisposition() { 
1360      return this.disposition != null && !this.disposition.isEmpty();
1361    }
1362
1363    /**
1364     * @param value {@link #disposition} (A description of the status of the adjudication.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
1365     */
1366    public PaymentReconciliation setDispositionElement(StringType value) { 
1367      this.disposition = value;
1368      return this;
1369    }
1370
1371    /**
1372     * @return A description of the status of the adjudication.
1373     */
1374    public String getDisposition() { 
1375      return this.disposition == null ? null : this.disposition.getValue();
1376    }
1377
1378    /**
1379     * @param value A description of the status of the adjudication.
1380     */
1381    public PaymentReconciliation setDisposition(String value) { 
1382      if (Utilities.noString(value))
1383        this.disposition = null;
1384      else {
1385        if (this.disposition == null)
1386          this.disposition = new StringType();
1387        this.disposition.setValue(value);
1388      }
1389      return this;
1390    }
1391
1392    /**
1393     * @return {@link #requestProvider} (The practitioner who is responsible for the services rendered to the patient.)
1394     */
1395    public Reference getRequestProvider() { 
1396      if (this.requestProvider == null)
1397        if (Configuration.errorOnAutoCreate())
1398          throw new Error("Attempt to auto-create PaymentReconciliation.requestProvider");
1399        else if (Configuration.doAutoCreate())
1400          this.requestProvider = new Reference(); // cc
1401      return this.requestProvider;
1402    }
1403
1404    public boolean hasRequestProvider() { 
1405      return this.requestProvider != null && !this.requestProvider.isEmpty();
1406    }
1407
1408    /**
1409     * @param value {@link #requestProvider} (The practitioner who is responsible for the services rendered to the patient.)
1410     */
1411    public PaymentReconciliation setRequestProvider(Reference value) { 
1412      this.requestProvider = value;
1413      return this;
1414    }
1415
1416    /**
1417     * @return {@link #requestProvider} 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 practitioner who is responsible for the services rendered to the patient.)
1418     */
1419    public Practitioner getRequestProviderTarget() { 
1420      if (this.requestProviderTarget == null)
1421        if (Configuration.errorOnAutoCreate())
1422          throw new Error("Attempt to auto-create PaymentReconciliation.requestProvider");
1423        else if (Configuration.doAutoCreate())
1424          this.requestProviderTarget = new Practitioner(); // aa
1425      return this.requestProviderTarget;
1426    }
1427
1428    /**
1429     * @param value {@link #requestProvider} 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 practitioner who is responsible for the services rendered to the patient.)
1430     */
1431    public PaymentReconciliation setRequestProviderTarget(Practitioner value) { 
1432      this.requestProviderTarget = value;
1433      return this;
1434    }
1435
1436    /**
1437     * @return {@link #requestOrganization} (The organization which is responsible for the services rendered to the patient.)
1438     */
1439    public Reference getRequestOrganization() { 
1440      if (this.requestOrganization == null)
1441        if (Configuration.errorOnAutoCreate())
1442          throw new Error("Attempt to auto-create PaymentReconciliation.requestOrganization");
1443        else if (Configuration.doAutoCreate())
1444          this.requestOrganization = new Reference(); // cc
1445      return this.requestOrganization;
1446    }
1447
1448    public boolean hasRequestOrganization() { 
1449      return this.requestOrganization != null && !this.requestOrganization.isEmpty();
1450    }
1451
1452    /**
1453     * @param value {@link #requestOrganization} (The organization which is responsible for the services rendered to the patient.)
1454     */
1455    public PaymentReconciliation setRequestOrganization(Reference value) { 
1456      this.requestOrganization = value;
1457      return this;
1458    }
1459
1460    /**
1461     * @return {@link #requestOrganization} 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 services rendered to the patient.)
1462     */
1463    public Organization getRequestOrganizationTarget() { 
1464      if (this.requestOrganizationTarget == null)
1465        if (Configuration.errorOnAutoCreate())
1466          throw new Error("Attempt to auto-create PaymentReconciliation.requestOrganization");
1467        else if (Configuration.doAutoCreate())
1468          this.requestOrganizationTarget = new Organization(); // aa
1469      return this.requestOrganizationTarget;
1470    }
1471
1472    /**
1473     * @param value {@link #requestOrganization} 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 services rendered to the patient.)
1474     */
1475    public PaymentReconciliation setRequestOrganizationTarget(Organization value) { 
1476      this.requestOrganizationTarget = value;
1477      return this;
1478    }
1479
1480    /**
1481     * @return {@link #detail} (List of individual settlement amounts and the corresponding transaction.)
1482     */
1483    public List<DetailsComponent> getDetail() { 
1484      if (this.detail == null)
1485        this.detail = new ArrayList<DetailsComponent>();
1486      return this.detail;
1487    }
1488
1489    /**
1490     * @return Returns a reference to <code>this</code> for easy method chaining
1491     */
1492    public PaymentReconciliation setDetail(List<DetailsComponent> theDetail) { 
1493      this.detail = theDetail;
1494      return this;
1495    }
1496
1497    public boolean hasDetail() { 
1498      if (this.detail == null)
1499        return false;
1500      for (DetailsComponent item : this.detail)
1501        if (!item.isEmpty())
1502          return true;
1503      return false;
1504    }
1505
1506    public DetailsComponent addDetail() { //3
1507      DetailsComponent t = new DetailsComponent();
1508      if (this.detail == null)
1509        this.detail = new ArrayList<DetailsComponent>();
1510      this.detail.add(t);
1511      return t;
1512    }
1513
1514    public PaymentReconciliation addDetail(DetailsComponent t) { //3
1515      if (t == null)
1516        return this;
1517      if (this.detail == null)
1518        this.detail = new ArrayList<DetailsComponent>();
1519      this.detail.add(t);
1520      return this;
1521    }
1522
1523    /**
1524     * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist
1525     */
1526    public DetailsComponent getDetailFirstRep() { 
1527      if (getDetail().isEmpty()) {
1528        addDetail();
1529      }
1530      return getDetail().get(0);
1531    }
1532
1533    /**
1534     * @return {@link #form} (The form to be used for printing the content.)
1535     */
1536    public CodeableConcept getForm() { 
1537      if (this.form == null)
1538        if (Configuration.errorOnAutoCreate())
1539          throw new Error("Attempt to auto-create PaymentReconciliation.form");
1540        else if (Configuration.doAutoCreate())
1541          this.form = new CodeableConcept(); // cc
1542      return this.form;
1543    }
1544
1545    public boolean hasForm() { 
1546      return this.form != null && !this.form.isEmpty();
1547    }
1548
1549    /**
1550     * @param value {@link #form} (The form to be used for printing the content.)
1551     */
1552    public PaymentReconciliation setForm(CodeableConcept value) { 
1553      this.form = value;
1554      return this;
1555    }
1556
1557    /**
1558     * @return {@link #total} (Total payment amount.)
1559     */
1560    public Money getTotal() { 
1561      if (this.total == null)
1562        if (Configuration.errorOnAutoCreate())
1563          throw new Error("Attempt to auto-create PaymentReconciliation.total");
1564        else if (Configuration.doAutoCreate())
1565          this.total = new Money(); // cc
1566      return this.total;
1567    }
1568
1569    public boolean hasTotal() { 
1570      return this.total != null && !this.total.isEmpty();
1571    }
1572
1573    /**
1574     * @param value {@link #total} (Total payment amount.)
1575     */
1576    public PaymentReconciliation setTotal(Money value) { 
1577      this.total = value;
1578      return this;
1579    }
1580
1581    /**
1582     * @return {@link #processNote} (Suite of notes.)
1583     */
1584    public List<NotesComponent> getProcessNote() { 
1585      if (this.processNote == null)
1586        this.processNote = new ArrayList<NotesComponent>();
1587      return this.processNote;
1588    }
1589
1590    /**
1591     * @return Returns a reference to <code>this</code> for easy method chaining
1592     */
1593    public PaymentReconciliation setProcessNote(List<NotesComponent> theProcessNote) { 
1594      this.processNote = theProcessNote;
1595      return this;
1596    }
1597
1598    public boolean hasProcessNote() { 
1599      if (this.processNote == null)
1600        return false;
1601      for (NotesComponent item : this.processNote)
1602        if (!item.isEmpty())
1603          return true;
1604      return false;
1605    }
1606
1607    public NotesComponent addProcessNote() { //3
1608      NotesComponent t = new NotesComponent();
1609      if (this.processNote == null)
1610        this.processNote = new ArrayList<NotesComponent>();
1611      this.processNote.add(t);
1612      return t;
1613    }
1614
1615    public PaymentReconciliation addProcessNote(NotesComponent t) { //3
1616      if (t == null)
1617        return this;
1618      if (this.processNote == null)
1619        this.processNote = new ArrayList<NotesComponent>();
1620      this.processNote.add(t);
1621      return this;
1622    }
1623
1624    /**
1625     * @return The first repetition of repeating field {@link #processNote}, creating it if it does not already exist
1626     */
1627    public NotesComponent getProcessNoteFirstRep() { 
1628      if (getProcessNote().isEmpty()) {
1629        addProcessNote();
1630      }
1631      return getProcessNote().get(0);
1632    }
1633
1634      protected void listChildren(List<Property> childrenList) {
1635        super.listChildren(childrenList);
1636        childrenList.add(new Property("identifier", "Identifier", "The Response business identifier.", 0, java.lang.Integer.MAX_VALUE, identifier));
1637        childrenList.add(new Property("status", "code", "The status of the resource instance.", 0, java.lang.Integer.MAX_VALUE, status));
1638        childrenList.add(new Property("period", "Period", "The period of time for which payments have been gathered into this bulk payment for settlement.", 0, java.lang.Integer.MAX_VALUE, period));
1639        childrenList.add(new Property("created", "dateTime", "The date when the enclosed suite of services were performed or completed.", 0, java.lang.Integer.MAX_VALUE, created));
1640        childrenList.add(new Property("organization", "Reference(Organization)", "The Insurer who produced this adjudicated response.", 0, java.lang.Integer.MAX_VALUE, organization));
1641        childrenList.add(new Property("request", "Reference(ProcessRequest)", "Original request resource reference.", 0, java.lang.Integer.MAX_VALUE, request));
1642        childrenList.add(new Property("outcome", "CodeableConcept", "Transaction status: error, complete.", 0, java.lang.Integer.MAX_VALUE, outcome));
1643        childrenList.add(new Property("disposition", "string", "A description of the status of the adjudication.", 0, java.lang.Integer.MAX_VALUE, disposition));
1644        childrenList.add(new Property("requestProvider", "Reference(Practitioner)", "The practitioner who is responsible for the services rendered to the patient.", 0, java.lang.Integer.MAX_VALUE, requestProvider));
1645        childrenList.add(new Property("requestOrganization", "Reference(Organization)", "The organization which is responsible for the services rendered to the patient.", 0, java.lang.Integer.MAX_VALUE, requestOrganization));
1646        childrenList.add(new Property("detail", "", "List of individual settlement amounts and the corresponding transaction.", 0, java.lang.Integer.MAX_VALUE, detail));
1647        childrenList.add(new Property("form", "CodeableConcept", "The form to be used for printing the content.", 0, java.lang.Integer.MAX_VALUE, form));
1648        childrenList.add(new Property("total", "Money", "Total payment amount.", 0, java.lang.Integer.MAX_VALUE, total));
1649        childrenList.add(new Property("processNote", "", "Suite of notes.", 0, java.lang.Integer.MAX_VALUE, processNote));
1650      }
1651
1652      @Override
1653      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1654        switch (hash) {
1655        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1656        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PaymentReconciliationStatus>
1657        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1658        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
1659        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
1660        case 1095692943: /*request*/ return this.request == null ? new Base[0] : new Base[] {this.request}; // Reference
1661        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // CodeableConcept
1662        case 583380919: /*disposition*/ return this.disposition == null ? new Base[0] : new Base[] {this.disposition}; // StringType
1663        case 1601527200: /*requestProvider*/ return this.requestProvider == null ? new Base[0] : new Base[] {this.requestProvider}; // Reference
1664        case 599053666: /*requestOrganization*/ return this.requestOrganization == null ? new Base[0] : new Base[] {this.requestOrganization}; // Reference
1665        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // DetailsComponent
1666        case 3148996: /*form*/ return this.form == null ? new Base[0] : new Base[] {this.form}; // CodeableConcept
1667        case 110549828: /*total*/ return this.total == null ? new Base[0] : new Base[] {this.total}; // Money
1668        case 202339073: /*processNote*/ return this.processNote == null ? new Base[0] : this.processNote.toArray(new Base[this.processNote.size()]); // NotesComponent
1669        default: return super.getProperty(hash, name, checkValid);
1670        }
1671
1672      }
1673
1674      @Override
1675      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1676        switch (hash) {
1677        case -1618432855: // identifier
1678          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1679          return value;
1680        case -892481550: // status
1681          value = new PaymentReconciliationStatusEnumFactory().fromType(castToCode(value));
1682          this.status = (Enumeration) value; // Enumeration<PaymentReconciliationStatus>
1683          return value;
1684        case -991726143: // period
1685          this.period = castToPeriod(value); // Period
1686          return value;
1687        case 1028554472: // created
1688          this.created = castToDateTime(value); // DateTimeType
1689          return value;
1690        case 1178922291: // organization
1691          this.organization = castToReference(value); // Reference
1692          return value;
1693        case 1095692943: // request
1694          this.request = castToReference(value); // Reference
1695          return value;
1696        case -1106507950: // outcome
1697          this.outcome = castToCodeableConcept(value); // CodeableConcept
1698          return value;
1699        case 583380919: // disposition
1700          this.disposition = castToString(value); // StringType
1701          return value;
1702        case 1601527200: // requestProvider
1703          this.requestProvider = castToReference(value); // Reference
1704          return value;
1705        case 599053666: // requestOrganization
1706          this.requestOrganization = castToReference(value); // Reference
1707          return value;
1708        case -1335224239: // detail
1709          this.getDetail().add((DetailsComponent) value); // DetailsComponent
1710          return value;
1711        case 3148996: // form
1712          this.form = castToCodeableConcept(value); // CodeableConcept
1713          return value;
1714        case 110549828: // total
1715          this.total = castToMoney(value); // Money
1716          return value;
1717        case 202339073: // processNote
1718          this.getProcessNote().add((NotesComponent) value); // NotesComponent
1719          return value;
1720        default: return super.setProperty(hash, name, value);
1721        }
1722
1723      }
1724
1725      @Override
1726      public Base setProperty(String name, Base value) throws FHIRException {
1727        if (name.equals("identifier")) {
1728          this.getIdentifier().add(castToIdentifier(value));
1729        } else if (name.equals("status")) {
1730          value = new PaymentReconciliationStatusEnumFactory().fromType(castToCode(value));
1731          this.status = (Enumeration) value; // Enumeration<PaymentReconciliationStatus>
1732        } else if (name.equals("period")) {
1733          this.period = castToPeriod(value); // Period
1734        } else if (name.equals("created")) {
1735          this.created = castToDateTime(value); // DateTimeType
1736        } else if (name.equals("organization")) {
1737          this.organization = castToReference(value); // Reference
1738        } else if (name.equals("request")) {
1739          this.request = castToReference(value); // Reference
1740        } else if (name.equals("outcome")) {
1741          this.outcome = castToCodeableConcept(value); // CodeableConcept
1742        } else if (name.equals("disposition")) {
1743          this.disposition = castToString(value); // StringType
1744        } else if (name.equals("requestProvider")) {
1745          this.requestProvider = castToReference(value); // Reference
1746        } else if (name.equals("requestOrganization")) {
1747          this.requestOrganization = castToReference(value); // Reference
1748        } else if (name.equals("detail")) {
1749          this.getDetail().add((DetailsComponent) value);
1750        } else if (name.equals("form")) {
1751          this.form = castToCodeableConcept(value); // CodeableConcept
1752        } else if (name.equals("total")) {
1753          this.total = castToMoney(value); // Money
1754        } else if (name.equals("processNote")) {
1755          this.getProcessNote().add((NotesComponent) value);
1756        } else
1757          return super.setProperty(name, value);
1758        return value;
1759      }
1760
1761      @Override
1762      public Base makeProperty(int hash, String name) throws FHIRException {
1763        switch (hash) {
1764        case -1618432855:  return addIdentifier(); 
1765        case -892481550:  return getStatusElement();
1766        case -991726143:  return getPeriod(); 
1767        case 1028554472:  return getCreatedElement();
1768        case 1178922291:  return getOrganization(); 
1769        case 1095692943:  return getRequest(); 
1770        case -1106507950:  return getOutcome(); 
1771        case 583380919:  return getDispositionElement();
1772        case 1601527200:  return getRequestProvider(); 
1773        case 599053666:  return getRequestOrganization(); 
1774        case -1335224239:  return addDetail(); 
1775        case 3148996:  return getForm(); 
1776        case 110549828:  return getTotal(); 
1777        case 202339073:  return addProcessNote(); 
1778        default: return super.makeProperty(hash, name);
1779        }
1780
1781      }
1782
1783      @Override
1784      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1785        switch (hash) {
1786        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1787        case -892481550: /*status*/ return new String[] {"code"};
1788        case -991726143: /*period*/ return new String[] {"Period"};
1789        case 1028554472: /*created*/ return new String[] {"dateTime"};
1790        case 1178922291: /*organization*/ return new String[] {"Reference"};
1791        case 1095692943: /*request*/ return new String[] {"Reference"};
1792        case -1106507950: /*outcome*/ return new String[] {"CodeableConcept"};
1793        case 583380919: /*disposition*/ return new String[] {"string"};
1794        case 1601527200: /*requestProvider*/ return new String[] {"Reference"};
1795        case 599053666: /*requestOrganization*/ return new String[] {"Reference"};
1796        case -1335224239: /*detail*/ return new String[] {};
1797        case 3148996: /*form*/ return new String[] {"CodeableConcept"};
1798        case 110549828: /*total*/ return new String[] {"Money"};
1799        case 202339073: /*processNote*/ return new String[] {};
1800        default: return super.getTypesForProperty(hash, name);
1801        }
1802
1803      }
1804
1805      @Override
1806      public Base addChild(String name) throws FHIRException {
1807        if (name.equals("identifier")) {
1808          return addIdentifier();
1809        }
1810        else if (name.equals("status")) {
1811          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.status");
1812        }
1813        else if (name.equals("period")) {
1814          this.period = new Period();
1815          return this.period;
1816        }
1817        else if (name.equals("created")) {
1818          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.created");
1819        }
1820        else if (name.equals("organization")) {
1821          this.organization = new Reference();
1822          return this.organization;
1823        }
1824        else if (name.equals("request")) {
1825          this.request = new Reference();
1826          return this.request;
1827        }
1828        else if (name.equals("outcome")) {
1829          this.outcome = new CodeableConcept();
1830          return this.outcome;
1831        }
1832        else if (name.equals("disposition")) {
1833          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.disposition");
1834        }
1835        else if (name.equals("requestProvider")) {
1836          this.requestProvider = new Reference();
1837          return this.requestProvider;
1838        }
1839        else if (name.equals("requestOrganization")) {
1840          this.requestOrganization = new Reference();
1841          return this.requestOrganization;
1842        }
1843        else if (name.equals("detail")) {
1844          return addDetail();
1845        }
1846        else if (name.equals("form")) {
1847          this.form = new CodeableConcept();
1848          return this.form;
1849        }
1850        else if (name.equals("total")) {
1851          this.total = new Money();
1852          return this.total;
1853        }
1854        else if (name.equals("processNote")) {
1855          return addProcessNote();
1856        }
1857        else
1858          return super.addChild(name);
1859      }
1860
1861  public String fhirType() {
1862    return "PaymentReconciliation";
1863
1864  }
1865
1866      public PaymentReconciliation copy() {
1867        PaymentReconciliation dst = new PaymentReconciliation();
1868        copyValues(dst);
1869        if (identifier != null) {
1870          dst.identifier = new ArrayList<Identifier>();
1871          for (Identifier i : identifier)
1872            dst.identifier.add(i.copy());
1873        };
1874        dst.status = status == null ? null : status.copy();
1875        dst.period = period == null ? null : period.copy();
1876        dst.created = created == null ? null : created.copy();
1877        dst.organization = organization == null ? null : organization.copy();
1878        dst.request = request == null ? null : request.copy();
1879        dst.outcome = outcome == null ? null : outcome.copy();
1880        dst.disposition = disposition == null ? null : disposition.copy();
1881        dst.requestProvider = requestProvider == null ? null : requestProvider.copy();
1882        dst.requestOrganization = requestOrganization == null ? null : requestOrganization.copy();
1883        if (detail != null) {
1884          dst.detail = new ArrayList<DetailsComponent>();
1885          for (DetailsComponent i : detail)
1886            dst.detail.add(i.copy());
1887        };
1888        dst.form = form == null ? null : form.copy();
1889        dst.total = total == null ? null : total.copy();
1890        if (processNote != null) {
1891          dst.processNote = new ArrayList<NotesComponent>();
1892          for (NotesComponent i : processNote)
1893            dst.processNote.add(i.copy());
1894        };
1895        return dst;
1896      }
1897
1898      protected PaymentReconciliation typedCopy() {
1899        return copy();
1900      }
1901
1902      @Override
1903      public boolean equalsDeep(Base other) {
1904        if (!super.equalsDeep(other))
1905          return false;
1906        if (!(other instanceof PaymentReconciliation))
1907          return false;
1908        PaymentReconciliation o = (PaymentReconciliation) other;
1909        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(period, o.period, true)
1910           && compareDeep(created, o.created, true) && compareDeep(organization, o.organization, true) && compareDeep(request, o.request, true)
1911           && compareDeep(outcome, o.outcome, true) && compareDeep(disposition, o.disposition, true) && compareDeep(requestProvider, o.requestProvider, true)
1912           && compareDeep(requestOrganization, o.requestOrganization, true) && compareDeep(detail, o.detail, true)
1913           && compareDeep(form, o.form, true) && compareDeep(total, o.total, true) && compareDeep(processNote, o.processNote, true)
1914          ;
1915      }
1916
1917      @Override
1918      public boolean equalsShallow(Base other) {
1919        if (!super.equalsShallow(other))
1920          return false;
1921        if (!(other instanceof PaymentReconciliation))
1922          return false;
1923        PaymentReconciliation o = (PaymentReconciliation) other;
1924        return compareValues(status, o.status, true) && compareValues(created, o.created, true) && compareValues(disposition, o.disposition, true)
1925          ;
1926      }
1927
1928      public boolean isEmpty() {
1929        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, period
1930          , created, organization, request, outcome, disposition, requestProvider, requestOrganization
1931          , detail, form, total, processNote);
1932      }
1933
1934  @Override
1935  public ResourceType getResourceType() {
1936    return ResourceType.PaymentReconciliation;
1937   }
1938
1939 /**
1940   * Search parameter: <b>identifier</b>
1941   * <p>
1942   * Description: <b>The business identifier of the Explanation of Benefit</b><br>
1943   * Type: <b>token</b><br>
1944   * Path: <b>PaymentReconciliation.identifier</b><br>
1945   * </p>
1946   */
1947  @SearchParamDefinition(name="identifier", path="PaymentReconciliation.identifier", description="The business identifier of the Explanation of Benefit", type="token" )
1948  public static final String SP_IDENTIFIER = "identifier";
1949 /**
1950   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1951   * <p>
1952   * Description: <b>The business identifier of the Explanation of Benefit</b><br>
1953   * Type: <b>token</b><br>
1954   * Path: <b>PaymentReconciliation.identifier</b><br>
1955   * </p>
1956   */
1957  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1958
1959 /**
1960   * Search parameter: <b>request</b>
1961   * <p>
1962   * Description: <b>The reference to the claim</b><br>
1963   * Type: <b>reference</b><br>
1964   * Path: <b>PaymentReconciliation.request</b><br>
1965   * </p>
1966   */
1967  @SearchParamDefinition(name="request", path="PaymentReconciliation.request", description="The reference to the claim", type="reference", target={ProcessRequest.class } )
1968  public static final String SP_REQUEST = "request";
1969 /**
1970   * <b>Fluent Client</b> search parameter constant for <b>request</b>
1971   * <p>
1972   * Description: <b>The reference to the claim</b><br>
1973   * Type: <b>reference</b><br>
1974   * Path: <b>PaymentReconciliation.request</b><br>
1975   * </p>
1976   */
1977  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUEST = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUEST);
1978
1979/**
1980   * Constant for fluent queries to be used to add include statements. Specifies
1981   * the path value of "<b>PaymentReconciliation:request</b>".
1982   */
1983  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUEST = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:request").toLocked();
1984
1985 /**
1986   * Search parameter: <b>disposition</b>
1987   * <p>
1988   * Description: <b>The contents of the disposition message</b><br>
1989   * Type: <b>string</b><br>
1990   * Path: <b>PaymentReconciliation.disposition</b><br>
1991   * </p>
1992   */
1993  @SearchParamDefinition(name="disposition", path="PaymentReconciliation.disposition", description="The contents of the disposition message", type="string" )
1994  public static final String SP_DISPOSITION = "disposition";
1995 /**
1996   * <b>Fluent Client</b> search parameter constant for <b>disposition</b>
1997   * <p>
1998   * Description: <b>The contents of the disposition message</b><br>
1999   * Type: <b>string</b><br>
2000   * Path: <b>PaymentReconciliation.disposition</b><br>
2001   * </p>
2002   */
2003  public static final ca.uhn.fhir.rest.gclient.StringClientParam DISPOSITION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DISPOSITION);
2004
2005 /**
2006   * Search parameter: <b>created</b>
2007   * <p>
2008   * Description: <b>The creation date</b><br>
2009   * Type: <b>date</b><br>
2010   * Path: <b>PaymentReconciliation.created</b><br>
2011   * </p>
2012   */
2013  @SearchParamDefinition(name="created", path="PaymentReconciliation.created", description="The creation date", type="date" )
2014  public static final String SP_CREATED = "created";
2015 /**
2016   * <b>Fluent Client</b> search parameter constant for <b>created</b>
2017   * <p>
2018   * Description: <b>The creation date</b><br>
2019   * Type: <b>date</b><br>
2020   * Path: <b>PaymentReconciliation.created</b><br>
2021   * </p>
2022   */
2023  public static final ca.uhn.fhir.rest.gclient.DateClientParam CREATED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_CREATED);
2024
2025 /**
2026   * Search parameter: <b>organization</b>
2027   * <p>
2028   * Description: <b>The organization who generated this resource</b><br>
2029   * Type: <b>reference</b><br>
2030   * Path: <b>PaymentReconciliation.organization</b><br>
2031   * </p>
2032   */
2033  @SearchParamDefinition(name="organization", path="PaymentReconciliation.organization", description="The organization who generated this resource", type="reference", target={Organization.class } )
2034  public static final String SP_ORGANIZATION = "organization";
2035 /**
2036   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
2037   * <p>
2038   * Description: <b>The organization who generated this resource</b><br>
2039   * Type: <b>reference</b><br>
2040   * Path: <b>PaymentReconciliation.organization</b><br>
2041   * </p>
2042   */
2043  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
2044
2045/**
2046   * Constant for fluent queries to be used to add include statements. Specifies
2047   * the path value of "<b>PaymentReconciliation:organization</b>".
2048   */
2049  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:organization").toLocked();
2050
2051 /**
2052   * Search parameter: <b>request-organization</b>
2053   * <p>
2054   * Description: <b>The organization who generated this resource</b><br>
2055   * Type: <b>reference</b><br>
2056   * Path: <b>PaymentReconciliation.requestOrganization</b><br>
2057   * </p>
2058   */
2059  @SearchParamDefinition(name="request-organization", path="PaymentReconciliation.requestOrganization", description="The organization who generated this resource", type="reference", target={Organization.class } )
2060  public static final String SP_REQUEST_ORGANIZATION = "request-organization";
2061 /**
2062   * <b>Fluent Client</b> search parameter constant for <b>request-organization</b>
2063   * <p>
2064   * Description: <b>The organization who generated this resource</b><br>
2065   * Type: <b>reference</b><br>
2066   * Path: <b>PaymentReconciliation.requestOrganization</b><br>
2067   * </p>
2068   */
2069  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUEST_ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUEST_ORGANIZATION);
2070
2071/**
2072   * Constant for fluent queries to be used to add include statements. Specifies
2073   * the path value of "<b>PaymentReconciliation:request-organization</b>".
2074   */
2075  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUEST_ORGANIZATION = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:request-organization").toLocked();
2076
2077 /**
2078   * Search parameter: <b>request-provider</b>
2079   * <p>
2080   * Description: <b>The reference to the provider who sumbitted the claim</b><br>
2081   * Type: <b>reference</b><br>
2082   * Path: <b>PaymentReconciliation.requestProvider</b><br>
2083   * </p>
2084   */
2085  @SearchParamDefinition(name="request-provider", path="PaymentReconciliation.requestProvider", description="The reference to the provider who sumbitted the claim", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Practitioner.class } )
2086  public static final String SP_REQUEST_PROVIDER = "request-provider";
2087 /**
2088   * <b>Fluent Client</b> search parameter constant for <b>request-provider</b>
2089   * <p>
2090   * Description: <b>The reference to the provider who sumbitted the claim</b><br>
2091   * Type: <b>reference</b><br>
2092   * Path: <b>PaymentReconciliation.requestProvider</b><br>
2093   * </p>
2094   */
2095  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUEST_PROVIDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUEST_PROVIDER);
2096
2097/**
2098   * Constant for fluent queries to be used to add include statements. Specifies
2099   * the path value of "<b>PaymentReconciliation:request-provider</b>".
2100   */
2101  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUEST_PROVIDER = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:request-provider").toLocked();
2102
2103 /**
2104   * Search parameter: <b>outcome</b>
2105   * <p>
2106   * Description: <b>The processing outcome</b><br>
2107   * Type: <b>token</b><br>
2108   * Path: <b>PaymentReconciliation.outcome</b><br>
2109   * </p>
2110   */
2111  @SearchParamDefinition(name="outcome", path="PaymentReconciliation.outcome", description="The processing outcome", type="token" )
2112  public static final String SP_OUTCOME = "outcome";
2113 /**
2114   * <b>Fluent Client</b> search parameter constant for <b>outcome</b>
2115   * <p>
2116   * Description: <b>The processing outcome</b><br>
2117   * Type: <b>token</b><br>
2118   * Path: <b>PaymentReconciliation.outcome</b><br>
2119   * </p>
2120   */
2121  public static final ca.uhn.fhir.rest.gclient.TokenClientParam OUTCOME = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_OUTCOME);
2122
2123
2124}
2125