001package org.hl7.fhir.r4.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 Thu, Sep 13, 2018 09:04-0400 for FHIR v3.5.0
033
034import java.util.*;
035
036import org.hl7.fhir.utilities.Utilities;
037import org.hl7.fhir.r4.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/StructureDefinition/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> children) {
529          super.listChildren(children);
530          children.add(new Property("type", "CodeableConcept", "Code to indicate the nature of the payment, adjustment, funds advance, etc.", 0, 1, type));
531          children.add(new Property("request", "Reference(Any)", "The claim or financial resource.", 0, 1, request));
532          children.add(new Property("response", "Reference(Any)", "The claim response resource.", 0, 1, response));
533          children.add(new Property("submitter", "Reference(Organization)", "The Organization which submitted the claim or financial transaction.", 0, 1, submitter));
534          children.add(new Property("payee", "Reference(Organization)", "The organization which is receiving the payment.", 0, 1, payee));
535          children.add(new Property("date", "date", "The date of the invoice or financial resource.", 0, 1, date));
536          children.add(new Property("amount", "Money", "Amount paid for this detail.", 0, 1, amount));
537        }
538
539        @Override
540        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
541          switch (_hash) {
542          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Code to indicate the nature of the payment, adjustment, funds advance, etc.", 0, 1, type);
543          case 1095692943: /*request*/  return new Property("request", "Reference(Any)", "The claim or financial resource.", 0, 1, request);
544          case -340323263: /*response*/  return new Property("response", "Reference(Any)", "The claim response resource.", 0, 1, response);
545          case 348678409: /*submitter*/  return new Property("submitter", "Reference(Organization)", "The Organization which submitted the claim or financial transaction.", 0, 1, submitter);
546          case 106443592: /*payee*/  return new Property("payee", "Reference(Organization)", "The organization which is receiving the payment.", 0, 1, payee);
547          case 3076014: /*date*/  return new Property("date", "date", "The date of the invoice or financial resource.", 0, 1, date);
548          case -1413853096: /*amount*/  return new Property("amount", "Money", "Amount paid for this detail.", 0, 1, amount);
549          default: return super.getNamedProperty(_hash, _name, _checkValid);
550          }
551
552        }
553
554      @Override
555      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
556        switch (hash) {
557        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
558        case 1095692943: /*request*/ return this.request == null ? new Base[0] : new Base[] {this.request}; // Reference
559        case -340323263: /*response*/ return this.response == null ? new Base[0] : new Base[] {this.response}; // Reference
560        case 348678409: /*submitter*/ return this.submitter == null ? new Base[0] : new Base[] {this.submitter}; // Reference
561        case 106443592: /*payee*/ return this.payee == null ? new Base[0] : new Base[] {this.payee}; // Reference
562        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateType
563        case -1413853096: /*amount*/ return this.amount == null ? new Base[0] : new Base[] {this.amount}; // Money
564        default: return super.getProperty(hash, name, checkValid);
565        }
566
567      }
568
569      @Override
570      public Base setProperty(int hash, String name, Base value) throws FHIRException {
571        switch (hash) {
572        case 3575610: // type
573          this.type = castToCodeableConcept(value); // CodeableConcept
574          return value;
575        case 1095692943: // request
576          this.request = castToReference(value); // Reference
577          return value;
578        case -340323263: // response
579          this.response = castToReference(value); // Reference
580          return value;
581        case 348678409: // submitter
582          this.submitter = castToReference(value); // Reference
583          return value;
584        case 106443592: // payee
585          this.payee = castToReference(value); // Reference
586          return value;
587        case 3076014: // date
588          this.date = castToDate(value); // DateType
589          return value;
590        case -1413853096: // amount
591          this.amount = castToMoney(value); // Money
592          return value;
593        default: return super.setProperty(hash, name, value);
594        }
595
596      }
597
598      @Override
599      public Base setProperty(String name, Base value) throws FHIRException {
600        if (name.equals("type")) {
601          this.type = castToCodeableConcept(value); // CodeableConcept
602        } else if (name.equals("request")) {
603          this.request = castToReference(value); // Reference
604        } else if (name.equals("response")) {
605          this.response = castToReference(value); // Reference
606        } else if (name.equals("submitter")) {
607          this.submitter = castToReference(value); // Reference
608        } else if (name.equals("payee")) {
609          this.payee = castToReference(value); // Reference
610        } else if (name.equals("date")) {
611          this.date = castToDate(value); // DateType
612        } else if (name.equals("amount")) {
613          this.amount = castToMoney(value); // Money
614        } else
615          return super.setProperty(name, value);
616        return value;
617      }
618
619      @Override
620      public Base makeProperty(int hash, String name) throws FHIRException {
621        switch (hash) {
622        case 3575610:  return getType(); 
623        case 1095692943:  return getRequest(); 
624        case -340323263:  return getResponse(); 
625        case 348678409:  return getSubmitter(); 
626        case 106443592:  return getPayee(); 
627        case 3076014:  return getDateElement();
628        case -1413853096:  return getAmount(); 
629        default: return super.makeProperty(hash, name);
630        }
631
632      }
633
634      @Override
635      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
636        switch (hash) {
637        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
638        case 1095692943: /*request*/ return new String[] {"Reference"};
639        case -340323263: /*response*/ return new String[] {"Reference"};
640        case 348678409: /*submitter*/ return new String[] {"Reference"};
641        case 106443592: /*payee*/ return new String[] {"Reference"};
642        case 3076014: /*date*/ return new String[] {"date"};
643        case -1413853096: /*amount*/ return new String[] {"Money"};
644        default: return super.getTypesForProperty(hash, name);
645        }
646
647      }
648
649      @Override
650      public Base addChild(String name) throws FHIRException {
651        if (name.equals("type")) {
652          this.type = new CodeableConcept();
653          return this.type;
654        }
655        else if (name.equals("request")) {
656          this.request = new Reference();
657          return this.request;
658        }
659        else if (name.equals("response")) {
660          this.response = new Reference();
661          return this.response;
662        }
663        else if (name.equals("submitter")) {
664          this.submitter = new Reference();
665          return this.submitter;
666        }
667        else if (name.equals("payee")) {
668          this.payee = new Reference();
669          return this.payee;
670        }
671        else if (name.equals("date")) {
672          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.date");
673        }
674        else if (name.equals("amount")) {
675          this.amount = new Money();
676          return this.amount;
677        }
678        else
679          return super.addChild(name);
680      }
681
682      public DetailsComponent copy() {
683        DetailsComponent dst = new DetailsComponent();
684        copyValues(dst);
685        dst.type = type == null ? null : type.copy();
686        dst.request = request == null ? null : request.copy();
687        dst.response = response == null ? null : response.copy();
688        dst.submitter = submitter == null ? null : submitter.copy();
689        dst.payee = payee == null ? null : payee.copy();
690        dst.date = date == null ? null : date.copy();
691        dst.amount = amount == null ? null : amount.copy();
692        return dst;
693      }
694
695      @Override
696      public boolean equalsDeep(Base other_) {
697        if (!super.equalsDeep(other_))
698          return false;
699        if (!(other_ instanceof DetailsComponent))
700          return false;
701        DetailsComponent o = (DetailsComponent) other_;
702        return compareDeep(type, o.type, true) && compareDeep(request, o.request, true) && compareDeep(response, o.response, true)
703           && compareDeep(submitter, o.submitter, true) && compareDeep(payee, o.payee, true) && compareDeep(date, o.date, true)
704           && compareDeep(amount, o.amount, true);
705      }
706
707      @Override
708      public boolean equalsShallow(Base other_) {
709        if (!super.equalsShallow(other_))
710          return false;
711        if (!(other_ instanceof DetailsComponent))
712          return false;
713        DetailsComponent o = (DetailsComponent) other_;
714        return compareValues(date, o.date, true);
715      }
716
717      public boolean isEmpty() {
718        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, request, response
719          , submitter, payee, date, amount);
720      }
721
722  public String fhirType() {
723    return "PaymentReconciliation.detail";
724
725  }
726
727  }
728
729    @Block()
730    public static class NotesComponent extends BackboneElement implements IBaseBackboneElement {
731        /**
732         * The note purpose: Print/Display.
733         */
734        @Child(name = "type", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
735        @Description(shortDefinition="display | print | printoper", formalDefinition="The note purpose: Print/Display." )
736        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/note-type")
737        protected Enumeration<NoteType> type;
738
739        /**
740         * The note text.
741         */
742        @Child(name = "text", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
743        @Description(shortDefinition="Comment on the processing", formalDefinition="The note text." )
744        protected StringType text;
745
746        private static final long serialVersionUID = 529250161L;
747
748    /**
749     * Constructor
750     */
751      public NotesComponent() {
752        super();
753      }
754
755        /**
756         * @return {@link #type} (The note purpose: Print/Display.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
757         */
758        public Enumeration<NoteType> getTypeElement() { 
759          if (this.type == null)
760            if (Configuration.errorOnAutoCreate())
761              throw new Error("Attempt to auto-create NotesComponent.type");
762            else if (Configuration.doAutoCreate())
763              this.type = new Enumeration<NoteType>(new NoteTypeEnumFactory()); // bb
764          return this.type;
765        }
766
767        public boolean hasTypeElement() { 
768          return this.type != null && !this.type.isEmpty();
769        }
770
771        public boolean hasType() { 
772          return this.type != null && !this.type.isEmpty();
773        }
774
775        /**
776         * @param value {@link #type} (The note purpose: Print/Display.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
777         */
778        public NotesComponent setTypeElement(Enumeration<NoteType> value) { 
779          this.type = value;
780          return this;
781        }
782
783        /**
784         * @return The note purpose: Print/Display.
785         */
786        public NoteType getType() { 
787          return this.type == null ? null : this.type.getValue();
788        }
789
790        /**
791         * @param value The note purpose: Print/Display.
792         */
793        public NotesComponent setType(NoteType value) { 
794          if (value == null)
795            this.type = null;
796          else {
797            if (this.type == null)
798              this.type = new Enumeration<NoteType>(new NoteTypeEnumFactory());
799            this.type.setValue(value);
800          }
801          return this;
802        }
803
804        /**
805         * @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
806         */
807        public StringType getTextElement() { 
808          if (this.text == null)
809            if (Configuration.errorOnAutoCreate())
810              throw new Error("Attempt to auto-create NotesComponent.text");
811            else if (Configuration.doAutoCreate())
812              this.text = new StringType(); // bb
813          return this.text;
814        }
815
816        public boolean hasTextElement() { 
817          return this.text != null && !this.text.isEmpty();
818        }
819
820        public boolean hasText() { 
821          return this.text != null && !this.text.isEmpty();
822        }
823
824        /**
825         * @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
826         */
827        public NotesComponent setTextElement(StringType value) { 
828          this.text = value;
829          return this;
830        }
831
832        /**
833         * @return The note text.
834         */
835        public String getText() { 
836          return this.text == null ? null : this.text.getValue();
837        }
838
839        /**
840         * @param value The note text.
841         */
842        public NotesComponent setText(String value) { 
843          if (Utilities.noString(value))
844            this.text = null;
845          else {
846            if (this.text == null)
847              this.text = new StringType();
848            this.text.setValue(value);
849          }
850          return this;
851        }
852
853        protected void listChildren(List<Property> children) {
854          super.listChildren(children);
855          children.add(new Property("type", "code", "The note purpose: Print/Display.", 0, 1, type));
856          children.add(new Property("text", "string", "The note text.", 0, 1, text));
857        }
858
859        @Override
860        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
861          switch (_hash) {
862          case 3575610: /*type*/  return new Property("type", "code", "The note purpose: Print/Display.", 0, 1, type);
863          case 3556653: /*text*/  return new Property("text", "string", "The note text.", 0, 1, text);
864          default: return super.getNamedProperty(_hash, _name, _checkValid);
865          }
866
867        }
868
869      @Override
870      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
871        switch (hash) {
872        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<NoteType>
873        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // StringType
874        default: return super.getProperty(hash, name, checkValid);
875        }
876
877      }
878
879      @Override
880      public Base setProperty(int hash, String name, Base value) throws FHIRException {
881        switch (hash) {
882        case 3575610: // type
883          value = new NoteTypeEnumFactory().fromType(castToCode(value));
884          this.type = (Enumeration) value; // Enumeration<NoteType>
885          return value;
886        case 3556653: // text
887          this.text = castToString(value); // StringType
888          return value;
889        default: return super.setProperty(hash, name, value);
890        }
891
892      }
893
894      @Override
895      public Base setProperty(String name, Base value) throws FHIRException {
896        if (name.equals("type")) {
897          value = new NoteTypeEnumFactory().fromType(castToCode(value));
898          this.type = (Enumeration) value; // Enumeration<NoteType>
899        } else if (name.equals("text")) {
900          this.text = castToString(value); // StringType
901        } else
902          return super.setProperty(name, value);
903        return value;
904      }
905
906      @Override
907      public Base makeProperty(int hash, String name) throws FHIRException {
908        switch (hash) {
909        case 3575610:  return getTypeElement();
910        case 3556653:  return getTextElement();
911        default: return super.makeProperty(hash, name);
912        }
913
914      }
915
916      @Override
917      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
918        switch (hash) {
919        case 3575610: /*type*/ return new String[] {"code"};
920        case 3556653: /*text*/ return new String[] {"string"};
921        default: return super.getTypesForProperty(hash, name);
922        }
923
924      }
925
926      @Override
927      public Base addChild(String name) throws FHIRException {
928        if (name.equals("type")) {
929          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.type");
930        }
931        else if (name.equals("text")) {
932          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.text");
933        }
934        else
935          return super.addChild(name);
936      }
937
938      public NotesComponent copy() {
939        NotesComponent dst = new NotesComponent();
940        copyValues(dst);
941        dst.type = type == null ? null : type.copy();
942        dst.text = text == null ? null : text.copy();
943        return dst;
944      }
945
946      @Override
947      public boolean equalsDeep(Base other_) {
948        if (!super.equalsDeep(other_))
949          return false;
950        if (!(other_ instanceof NotesComponent))
951          return false;
952        NotesComponent o = (NotesComponent) other_;
953        return compareDeep(type, o.type, true) && compareDeep(text, o.text, true);
954      }
955
956      @Override
957      public boolean equalsShallow(Base other_) {
958        if (!super.equalsShallow(other_))
959          return false;
960        if (!(other_ instanceof NotesComponent))
961          return false;
962        NotesComponent o = (NotesComponent) other_;
963        return compareValues(type, o.type, true) && compareValues(text, o.text, true);
964      }
965
966      public boolean isEmpty() {
967        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, text);
968      }
969
970  public String fhirType() {
971    return "PaymentReconciliation.processNote";
972
973  }
974
975  }
976
977    /**
978     * The Response business identifier.
979     */
980    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
981    @Description(shortDefinition="Business Identifier", formalDefinition="The Response business identifier." )
982    protected List<Identifier> identifier;
983
984    /**
985     * The status of the resource instance.
986     */
987    @Child(name = "status", type = {CodeType.class}, order=1, min=0, max=1, modifier=true, summary=true)
988    @Description(shortDefinition="active | cancelled | draft | entered-in-error", formalDefinition="The status of the resource instance." )
989    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fm-status")
990    protected Enumeration<PaymentReconciliationStatus> status;
991
992    /**
993     * The period of time for which payments have been gathered into this bulk payment for settlement.
994     */
995    @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=false)
996    @Description(shortDefinition="Period covered", formalDefinition="The period of time for which payments have been gathered into this bulk payment for settlement." )
997    protected Period period;
998
999    /**
1000     * The date when the resource was created.
1001     */
1002    @Child(name = "created", type = {DateTimeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1003    @Description(shortDefinition="Creation date", formalDefinition="The date when the resource was created." )
1004    protected DateTimeType created;
1005
1006    /**
1007     * The Insurer who produced this adjudicated response.
1008     */
1009    @Child(name = "organization", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=false)
1010    @Description(shortDefinition="Insurer", formalDefinition="The Insurer who produced this adjudicated response." )
1011    protected Reference organization;
1012
1013    /**
1014     * The actual object that is the target of the reference (The Insurer who produced this adjudicated response.)
1015     */
1016    protected Organization organizationTarget;
1017
1018    /**
1019     * Original request resource reference.
1020     */
1021    @Child(name = "request", type = {ProcessRequest.class}, order=5, min=0, max=1, modifier=false, summary=false)
1022    @Description(shortDefinition="Claim reference", formalDefinition="Original request resource reference." )
1023    protected Reference request;
1024
1025    /**
1026     * The actual object that is the target of the reference (Original request resource reference.)
1027     */
1028    protected ProcessRequest requestTarget;
1029
1030    /**
1031     * Transaction status: error, complete.
1032     */
1033    @Child(name = "outcome", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=false)
1034    @Description(shortDefinition="queued | complete | error | partial", formalDefinition="Transaction status: error, complete." )
1035    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/remittance-outcome")
1036    protected Enumeration<RemittanceOutcome> outcome;
1037
1038    /**
1039     * A description of the status of the adjudication.
1040     */
1041    @Child(name = "disposition", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=false)
1042    @Description(shortDefinition="Disposition Message", formalDefinition="A description of the status of the adjudication." )
1043    protected StringType disposition;
1044
1045    /**
1046     * The practitioner who is responsible for the services rendered to the patient.
1047     */
1048    @Child(name = "requestProvider", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=8, min=0, max=1, modifier=false, summary=false)
1049    @Description(shortDefinition="Responsible practitioner", formalDefinition="The practitioner who is responsible for the services rendered to the patient." )
1050    protected Reference requestProvider;
1051
1052    /**
1053     * The actual object that is the target of the reference (The practitioner who is responsible for the services rendered to the patient.)
1054     */
1055    protected Resource requestProviderTarget;
1056
1057    /**
1058     * List of individual settlement amounts and the corresponding transaction.
1059     */
1060    @Child(name = "detail", type = {}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1061    @Description(shortDefinition="List of settlements", formalDefinition="List of individual settlement amounts and the corresponding transaction." )
1062    protected List<DetailsComponent> detail;
1063
1064    /**
1065     * The form to be used for printing the content.
1066     */
1067    @Child(name = "form", type = {CodeableConcept.class}, order=10, min=0, max=1, modifier=false, summary=false)
1068    @Description(shortDefinition="Printed Form Identifier", formalDefinition="The form to be used for printing the content." )
1069    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/forms")
1070    protected CodeableConcept form;
1071
1072    /**
1073     * Total payment amount.
1074     */
1075    @Child(name = "total", type = {Money.class}, order=11, min=0, max=1, modifier=false, summary=false)
1076    @Description(shortDefinition="Total amount of Payment", formalDefinition="Total payment amount." )
1077    protected Money total;
1078
1079    /**
1080     * Suite of notes.
1081     */
1082    @Child(name = "processNote", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1083    @Description(shortDefinition="Processing comments", formalDefinition="Suite of notes." )
1084    protected List<NotesComponent> processNote;
1085
1086    private static final long serialVersionUID = -973239463L;
1087
1088  /**
1089   * Constructor
1090   */
1091    public PaymentReconciliation() {
1092      super();
1093    }
1094
1095    /**
1096     * @return {@link #identifier} (The Response business identifier.)
1097     */
1098    public List<Identifier> getIdentifier() { 
1099      if (this.identifier == null)
1100        this.identifier = new ArrayList<Identifier>();
1101      return this.identifier;
1102    }
1103
1104    /**
1105     * @return Returns a reference to <code>this</code> for easy method chaining
1106     */
1107    public PaymentReconciliation setIdentifier(List<Identifier> theIdentifier) { 
1108      this.identifier = theIdentifier;
1109      return this;
1110    }
1111
1112    public boolean hasIdentifier() { 
1113      if (this.identifier == null)
1114        return false;
1115      for (Identifier item : this.identifier)
1116        if (!item.isEmpty())
1117          return true;
1118      return false;
1119    }
1120
1121    public Identifier addIdentifier() { //3
1122      Identifier t = new Identifier();
1123      if (this.identifier == null)
1124        this.identifier = new ArrayList<Identifier>();
1125      this.identifier.add(t);
1126      return t;
1127    }
1128
1129    public PaymentReconciliation addIdentifier(Identifier t) { //3
1130      if (t == null)
1131        return this;
1132      if (this.identifier == null)
1133        this.identifier = new ArrayList<Identifier>();
1134      this.identifier.add(t);
1135      return this;
1136    }
1137
1138    /**
1139     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1140     */
1141    public Identifier getIdentifierFirstRep() { 
1142      if (getIdentifier().isEmpty()) {
1143        addIdentifier();
1144      }
1145      return getIdentifier().get(0);
1146    }
1147
1148    /**
1149     * @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
1150     */
1151    public Enumeration<PaymentReconciliationStatus> getStatusElement() { 
1152      if (this.status == null)
1153        if (Configuration.errorOnAutoCreate())
1154          throw new Error("Attempt to auto-create PaymentReconciliation.status");
1155        else if (Configuration.doAutoCreate())
1156          this.status = new Enumeration<PaymentReconciliationStatus>(new PaymentReconciliationStatusEnumFactory()); // bb
1157      return this.status;
1158    }
1159
1160    public boolean hasStatusElement() { 
1161      return this.status != null && !this.status.isEmpty();
1162    }
1163
1164    public boolean hasStatus() { 
1165      return this.status != null && !this.status.isEmpty();
1166    }
1167
1168    /**
1169     * @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
1170     */
1171    public PaymentReconciliation setStatusElement(Enumeration<PaymentReconciliationStatus> value) { 
1172      this.status = value;
1173      return this;
1174    }
1175
1176    /**
1177     * @return The status of the resource instance.
1178     */
1179    public PaymentReconciliationStatus getStatus() { 
1180      return this.status == null ? null : this.status.getValue();
1181    }
1182
1183    /**
1184     * @param value The status of the resource instance.
1185     */
1186    public PaymentReconciliation setStatus(PaymentReconciliationStatus value) { 
1187      if (value == null)
1188        this.status = null;
1189      else {
1190        if (this.status == null)
1191          this.status = new Enumeration<PaymentReconciliationStatus>(new PaymentReconciliationStatusEnumFactory());
1192        this.status.setValue(value);
1193      }
1194      return this;
1195    }
1196
1197    /**
1198     * @return {@link #period} (The period of time for which payments have been gathered into this bulk payment for settlement.)
1199     */
1200    public Period getPeriod() { 
1201      if (this.period == null)
1202        if (Configuration.errorOnAutoCreate())
1203          throw new Error("Attempt to auto-create PaymentReconciliation.period");
1204        else if (Configuration.doAutoCreate())
1205          this.period = new Period(); // cc
1206      return this.period;
1207    }
1208
1209    public boolean hasPeriod() { 
1210      return this.period != null && !this.period.isEmpty();
1211    }
1212
1213    /**
1214     * @param value {@link #period} (The period of time for which payments have been gathered into this bulk payment for settlement.)
1215     */
1216    public PaymentReconciliation setPeriod(Period value) { 
1217      this.period = value;
1218      return this;
1219    }
1220
1221    /**
1222     * @return {@link #created} (The date when the resource was created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
1223     */
1224    public DateTimeType getCreatedElement() { 
1225      if (this.created == null)
1226        if (Configuration.errorOnAutoCreate())
1227          throw new Error("Attempt to auto-create PaymentReconciliation.created");
1228        else if (Configuration.doAutoCreate())
1229          this.created = new DateTimeType(); // bb
1230      return this.created;
1231    }
1232
1233    public boolean hasCreatedElement() { 
1234      return this.created != null && !this.created.isEmpty();
1235    }
1236
1237    public boolean hasCreated() { 
1238      return this.created != null && !this.created.isEmpty();
1239    }
1240
1241    /**
1242     * @param value {@link #created} (The date when the resource was created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
1243     */
1244    public PaymentReconciliation setCreatedElement(DateTimeType value) { 
1245      this.created = value;
1246      return this;
1247    }
1248
1249    /**
1250     * @return The date when the resource was created.
1251     */
1252    public Date getCreated() { 
1253      return this.created == null ? null : this.created.getValue();
1254    }
1255
1256    /**
1257     * @param value The date when the resource was created.
1258     */
1259    public PaymentReconciliation setCreated(Date value) { 
1260      if (value == null)
1261        this.created = null;
1262      else {
1263        if (this.created == null)
1264          this.created = new DateTimeType();
1265        this.created.setValue(value);
1266      }
1267      return this;
1268    }
1269
1270    /**
1271     * @return {@link #organization} (The Insurer who produced this adjudicated response.)
1272     */
1273    public Reference getOrganization() { 
1274      if (this.organization == null)
1275        if (Configuration.errorOnAutoCreate())
1276          throw new Error("Attempt to auto-create PaymentReconciliation.organization");
1277        else if (Configuration.doAutoCreate())
1278          this.organization = new Reference(); // cc
1279      return this.organization;
1280    }
1281
1282    public boolean hasOrganization() { 
1283      return this.organization != null && !this.organization.isEmpty();
1284    }
1285
1286    /**
1287     * @param value {@link #organization} (The Insurer who produced this adjudicated response.)
1288     */
1289    public PaymentReconciliation setOrganization(Reference value) { 
1290      this.organization = value;
1291      return this;
1292    }
1293
1294    /**
1295     * @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.)
1296     */
1297    public Organization getOrganizationTarget() { 
1298      if (this.organizationTarget == null)
1299        if (Configuration.errorOnAutoCreate())
1300          throw new Error("Attempt to auto-create PaymentReconciliation.organization");
1301        else if (Configuration.doAutoCreate())
1302          this.organizationTarget = new Organization(); // aa
1303      return this.organizationTarget;
1304    }
1305
1306    /**
1307     * @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.)
1308     */
1309    public PaymentReconciliation setOrganizationTarget(Organization value) { 
1310      this.organizationTarget = value;
1311      return this;
1312    }
1313
1314    /**
1315     * @return {@link #request} (Original request resource reference.)
1316     */
1317    public Reference getRequest() { 
1318      if (this.request == null)
1319        if (Configuration.errorOnAutoCreate())
1320          throw new Error("Attempt to auto-create PaymentReconciliation.request");
1321        else if (Configuration.doAutoCreate())
1322          this.request = new Reference(); // cc
1323      return this.request;
1324    }
1325
1326    public boolean hasRequest() { 
1327      return this.request != null && !this.request.isEmpty();
1328    }
1329
1330    /**
1331     * @param value {@link #request} (Original request resource reference.)
1332     */
1333    public PaymentReconciliation setRequest(Reference value) { 
1334      this.request = value;
1335      return this;
1336    }
1337
1338    /**
1339     * @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.)
1340     */
1341    public ProcessRequest getRequestTarget() { 
1342      if (this.requestTarget == null)
1343        if (Configuration.errorOnAutoCreate())
1344          throw new Error("Attempt to auto-create PaymentReconciliation.request");
1345        else if (Configuration.doAutoCreate())
1346          this.requestTarget = new ProcessRequest(); // aa
1347      return this.requestTarget;
1348    }
1349
1350    /**
1351     * @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.)
1352     */
1353    public PaymentReconciliation setRequestTarget(ProcessRequest value) { 
1354      this.requestTarget = value;
1355      return this;
1356    }
1357
1358    /**
1359     * @return {@link #outcome} (Transaction status: error, complete.). This is the underlying object with id, value and extensions. The accessor "getOutcome" gives direct access to the value
1360     */
1361    public Enumeration<RemittanceOutcome> getOutcomeElement() { 
1362      if (this.outcome == null)
1363        if (Configuration.errorOnAutoCreate())
1364          throw new Error("Attempt to auto-create PaymentReconciliation.outcome");
1365        else if (Configuration.doAutoCreate())
1366          this.outcome = new Enumeration<RemittanceOutcome>(new RemittanceOutcomeEnumFactory()); // bb
1367      return this.outcome;
1368    }
1369
1370    public boolean hasOutcomeElement() { 
1371      return this.outcome != null && !this.outcome.isEmpty();
1372    }
1373
1374    public boolean hasOutcome() { 
1375      return this.outcome != null && !this.outcome.isEmpty();
1376    }
1377
1378    /**
1379     * @param value {@link #outcome} (Transaction status: error, complete.). This is the underlying object with id, value and extensions. The accessor "getOutcome" gives direct access to the value
1380     */
1381    public PaymentReconciliation setOutcomeElement(Enumeration<RemittanceOutcome> value) { 
1382      this.outcome = value;
1383      return this;
1384    }
1385
1386    /**
1387     * @return Transaction status: error, complete.
1388     */
1389    public RemittanceOutcome getOutcome() { 
1390      return this.outcome == null ? null : this.outcome.getValue();
1391    }
1392
1393    /**
1394     * @param value Transaction status: error, complete.
1395     */
1396    public PaymentReconciliation setOutcome(RemittanceOutcome value) { 
1397      if (value == null)
1398        this.outcome = null;
1399      else {
1400        if (this.outcome == null)
1401          this.outcome = new Enumeration<RemittanceOutcome>(new RemittanceOutcomeEnumFactory());
1402        this.outcome.setValue(value);
1403      }
1404      return this;
1405    }
1406
1407    /**
1408     * @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
1409     */
1410    public StringType getDispositionElement() { 
1411      if (this.disposition == null)
1412        if (Configuration.errorOnAutoCreate())
1413          throw new Error("Attempt to auto-create PaymentReconciliation.disposition");
1414        else if (Configuration.doAutoCreate())
1415          this.disposition = new StringType(); // bb
1416      return this.disposition;
1417    }
1418
1419    public boolean hasDispositionElement() { 
1420      return this.disposition != null && !this.disposition.isEmpty();
1421    }
1422
1423    public boolean hasDisposition() { 
1424      return this.disposition != null && !this.disposition.isEmpty();
1425    }
1426
1427    /**
1428     * @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
1429     */
1430    public PaymentReconciliation setDispositionElement(StringType value) { 
1431      this.disposition = value;
1432      return this;
1433    }
1434
1435    /**
1436     * @return A description of the status of the adjudication.
1437     */
1438    public String getDisposition() { 
1439      return this.disposition == null ? null : this.disposition.getValue();
1440    }
1441
1442    /**
1443     * @param value A description of the status of the adjudication.
1444     */
1445    public PaymentReconciliation setDisposition(String value) { 
1446      if (Utilities.noString(value))
1447        this.disposition = null;
1448      else {
1449        if (this.disposition == null)
1450          this.disposition = new StringType();
1451        this.disposition.setValue(value);
1452      }
1453      return this;
1454    }
1455
1456    /**
1457     * @return {@link #requestProvider} (The practitioner who is responsible for the services rendered to the patient.)
1458     */
1459    public Reference getRequestProvider() { 
1460      if (this.requestProvider == null)
1461        if (Configuration.errorOnAutoCreate())
1462          throw new Error("Attempt to auto-create PaymentReconciliation.requestProvider");
1463        else if (Configuration.doAutoCreate())
1464          this.requestProvider = new Reference(); // cc
1465      return this.requestProvider;
1466    }
1467
1468    public boolean hasRequestProvider() { 
1469      return this.requestProvider != null && !this.requestProvider.isEmpty();
1470    }
1471
1472    /**
1473     * @param value {@link #requestProvider} (The practitioner who is responsible for the services rendered to the patient.)
1474     */
1475    public PaymentReconciliation setRequestProvider(Reference value) { 
1476      this.requestProvider = value;
1477      return this;
1478    }
1479
1480    /**
1481     * @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.)
1482     */
1483    public Resource getRequestProviderTarget() { 
1484      return this.requestProviderTarget;
1485    }
1486
1487    /**
1488     * @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.)
1489     */
1490    public PaymentReconciliation setRequestProviderTarget(Resource value) { 
1491      this.requestProviderTarget = value;
1492      return this;
1493    }
1494
1495    /**
1496     * @return {@link #detail} (List of individual settlement amounts and the corresponding transaction.)
1497     */
1498    public List<DetailsComponent> getDetail() { 
1499      if (this.detail == null)
1500        this.detail = new ArrayList<DetailsComponent>();
1501      return this.detail;
1502    }
1503
1504    /**
1505     * @return Returns a reference to <code>this</code> for easy method chaining
1506     */
1507    public PaymentReconciliation setDetail(List<DetailsComponent> theDetail) { 
1508      this.detail = theDetail;
1509      return this;
1510    }
1511
1512    public boolean hasDetail() { 
1513      if (this.detail == null)
1514        return false;
1515      for (DetailsComponent item : this.detail)
1516        if (!item.isEmpty())
1517          return true;
1518      return false;
1519    }
1520
1521    public DetailsComponent addDetail() { //3
1522      DetailsComponent t = new DetailsComponent();
1523      if (this.detail == null)
1524        this.detail = new ArrayList<DetailsComponent>();
1525      this.detail.add(t);
1526      return t;
1527    }
1528
1529    public PaymentReconciliation addDetail(DetailsComponent t) { //3
1530      if (t == null)
1531        return this;
1532      if (this.detail == null)
1533        this.detail = new ArrayList<DetailsComponent>();
1534      this.detail.add(t);
1535      return this;
1536    }
1537
1538    /**
1539     * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist
1540     */
1541    public DetailsComponent getDetailFirstRep() { 
1542      if (getDetail().isEmpty()) {
1543        addDetail();
1544      }
1545      return getDetail().get(0);
1546    }
1547
1548    /**
1549     * @return {@link #form} (The form to be used for printing the content.)
1550     */
1551    public CodeableConcept getForm() { 
1552      if (this.form == null)
1553        if (Configuration.errorOnAutoCreate())
1554          throw new Error("Attempt to auto-create PaymentReconciliation.form");
1555        else if (Configuration.doAutoCreate())
1556          this.form = new CodeableConcept(); // cc
1557      return this.form;
1558    }
1559
1560    public boolean hasForm() { 
1561      return this.form != null && !this.form.isEmpty();
1562    }
1563
1564    /**
1565     * @param value {@link #form} (The form to be used for printing the content.)
1566     */
1567    public PaymentReconciliation setForm(CodeableConcept value) { 
1568      this.form = value;
1569      return this;
1570    }
1571
1572    /**
1573     * @return {@link #total} (Total payment amount.)
1574     */
1575    public Money getTotal() { 
1576      if (this.total == null)
1577        if (Configuration.errorOnAutoCreate())
1578          throw new Error("Attempt to auto-create PaymentReconciliation.total");
1579        else if (Configuration.doAutoCreate())
1580          this.total = new Money(); // cc
1581      return this.total;
1582    }
1583
1584    public boolean hasTotal() { 
1585      return this.total != null && !this.total.isEmpty();
1586    }
1587
1588    /**
1589     * @param value {@link #total} (Total payment amount.)
1590     */
1591    public PaymentReconciliation setTotal(Money value) { 
1592      this.total = value;
1593      return this;
1594    }
1595
1596    /**
1597     * @return {@link #processNote} (Suite of notes.)
1598     */
1599    public List<NotesComponent> getProcessNote() { 
1600      if (this.processNote == null)
1601        this.processNote = new ArrayList<NotesComponent>();
1602      return this.processNote;
1603    }
1604
1605    /**
1606     * @return Returns a reference to <code>this</code> for easy method chaining
1607     */
1608    public PaymentReconciliation setProcessNote(List<NotesComponent> theProcessNote) { 
1609      this.processNote = theProcessNote;
1610      return this;
1611    }
1612
1613    public boolean hasProcessNote() { 
1614      if (this.processNote == null)
1615        return false;
1616      for (NotesComponent item : this.processNote)
1617        if (!item.isEmpty())
1618          return true;
1619      return false;
1620    }
1621
1622    public NotesComponent addProcessNote() { //3
1623      NotesComponent t = new NotesComponent();
1624      if (this.processNote == null)
1625        this.processNote = new ArrayList<NotesComponent>();
1626      this.processNote.add(t);
1627      return t;
1628    }
1629
1630    public PaymentReconciliation addProcessNote(NotesComponent t) { //3
1631      if (t == null)
1632        return this;
1633      if (this.processNote == null)
1634        this.processNote = new ArrayList<NotesComponent>();
1635      this.processNote.add(t);
1636      return this;
1637    }
1638
1639    /**
1640     * @return The first repetition of repeating field {@link #processNote}, creating it if it does not already exist
1641     */
1642    public NotesComponent getProcessNoteFirstRep() { 
1643      if (getProcessNote().isEmpty()) {
1644        addProcessNote();
1645      }
1646      return getProcessNote().get(0);
1647    }
1648
1649      protected void listChildren(List<Property> children) {
1650        super.listChildren(children);
1651        children.add(new Property("identifier", "Identifier", "The Response business identifier.", 0, java.lang.Integer.MAX_VALUE, identifier));
1652        children.add(new Property("status", "code", "The status of the resource instance.", 0, 1, status));
1653        children.add(new Property("period", "Period", "The period of time for which payments have been gathered into this bulk payment for settlement.", 0, 1, period));
1654        children.add(new Property("created", "dateTime", "The date when the resource was created.", 0, 1, created));
1655        children.add(new Property("organization", "Reference(Organization)", "The Insurer who produced this adjudicated response.", 0, 1, organization));
1656        children.add(new Property("request", "Reference(ProcessRequest)", "Original request resource reference.", 0, 1, request));
1657        children.add(new Property("outcome", "code", "Transaction status: error, complete.", 0, 1, outcome));
1658        children.add(new Property("disposition", "string", "A description of the status of the adjudication.", 0, 1, disposition));
1659        children.add(new Property("requestProvider", "Reference(Practitioner|PractitionerRole|Organization)", "The practitioner who is responsible for the services rendered to the patient.", 0, 1, requestProvider));
1660        children.add(new Property("detail", "", "List of individual settlement amounts and the corresponding transaction.", 0, java.lang.Integer.MAX_VALUE, detail));
1661        children.add(new Property("form", "CodeableConcept", "The form to be used for printing the content.", 0, 1, form));
1662        children.add(new Property("total", "Money", "Total payment amount.", 0, 1, total));
1663        children.add(new Property("processNote", "", "Suite of notes.", 0, java.lang.Integer.MAX_VALUE, processNote));
1664      }
1665
1666      @Override
1667      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1668        switch (_hash) {
1669        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "The Response business identifier.", 0, java.lang.Integer.MAX_VALUE, identifier);
1670        case -892481550: /*status*/  return new Property("status", "code", "The status of the resource instance.", 0, 1, status);
1671        case -991726143: /*period*/  return new Property("period", "Period", "The period of time for which payments have been gathered into this bulk payment for settlement.", 0, 1, period);
1672        case 1028554472: /*created*/  return new Property("created", "dateTime", "The date when the resource was created.", 0, 1, created);
1673        case 1178922291: /*organization*/  return new Property("organization", "Reference(Organization)", "The Insurer who produced this adjudicated response.", 0, 1, organization);
1674        case 1095692943: /*request*/  return new Property("request", "Reference(ProcessRequest)", "Original request resource reference.", 0, 1, request);
1675        case -1106507950: /*outcome*/  return new Property("outcome", "code", "Transaction status: error, complete.", 0, 1, outcome);
1676        case 583380919: /*disposition*/  return new Property("disposition", "string", "A description of the status of the adjudication.", 0, 1, disposition);
1677        case 1601527200: /*requestProvider*/  return new Property("requestProvider", "Reference(Practitioner|PractitionerRole|Organization)", "The practitioner who is responsible for the services rendered to the patient.", 0, 1, requestProvider);
1678        case -1335224239: /*detail*/  return new Property("detail", "", "List of individual settlement amounts and the corresponding transaction.", 0, java.lang.Integer.MAX_VALUE, detail);
1679        case 3148996: /*form*/  return new Property("form", "CodeableConcept", "The form to be used for printing the content.", 0, 1, form);
1680        case 110549828: /*total*/  return new Property("total", "Money", "Total payment amount.", 0, 1, total);
1681        case 202339073: /*processNote*/  return new Property("processNote", "", "Suite of notes.", 0, java.lang.Integer.MAX_VALUE, processNote);
1682        default: return super.getNamedProperty(_hash, _name, _checkValid);
1683        }
1684
1685      }
1686
1687      @Override
1688      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1689        switch (hash) {
1690        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1691        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PaymentReconciliationStatus>
1692        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1693        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
1694        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
1695        case 1095692943: /*request*/ return this.request == null ? new Base[0] : new Base[] {this.request}; // Reference
1696        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // Enumeration<RemittanceOutcome>
1697        case 583380919: /*disposition*/ return this.disposition == null ? new Base[0] : new Base[] {this.disposition}; // StringType
1698        case 1601527200: /*requestProvider*/ return this.requestProvider == null ? new Base[0] : new Base[] {this.requestProvider}; // Reference
1699        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // DetailsComponent
1700        case 3148996: /*form*/ return this.form == null ? new Base[0] : new Base[] {this.form}; // CodeableConcept
1701        case 110549828: /*total*/ return this.total == null ? new Base[0] : new Base[] {this.total}; // Money
1702        case 202339073: /*processNote*/ return this.processNote == null ? new Base[0] : this.processNote.toArray(new Base[this.processNote.size()]); // NotesComponent
1703        default: return super.getProperty(hash, name, checkValid);
1704        }
1705
1706      }
1707
1708      @Override
1709      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1710        switch (hash) {
1711        case -1618432855: // identifier
1712          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1713          return value;
1714        case -892481550: // status
1715          value = new PaymentReconciliationStatusEnumFactory().fromType(castToCode(value));
1716          this.status = (Enumeration) value; // Enumeration<PaymentReconciliationStatus>
1717          return value;
1718        case -991726143: // period
1719          this.period = castToPeriod(value); // Period
1720          return value;
1721        case 1028554472: // created
1722          this.created = castToDateTime(value); // DateTimeType
1723          return value;
1724        case 1178922291: // organization
1725          this.organization = castToReference(value); // Reference
1726          return value;
1727        case 1095692943: // request
1728          this.request = castToReference(value); // Reference
1729          return value;
1730        case -1106507950: // outcome
1731          value = new RemittanceOutcomeEnumFactory().fromType(castToCode(value));
1732          this.outcome = (Enumeration) value; // Enumeration<RemittanceOutcome>
1733          return value;
1734        case 583380919: // disposition
1735          this.disposition = castToString(value); // StringType
1736          return value;
1737        case 1601527200: // requestProvider
1738          this.requestProvider = castToReference(value); // Reference
1739          return value;
1740        case -1335224239: // detail
1741          this.getDetail().add((DetailsComponent) value); // DetailsComponent
1742          return value;
1743        case 3148996: // form
1744          this.form = castToCodeableConcept(value); // CodeableConcept
1745          return value;
1746        case 110549828: // total
1747          this.total = castToMoney(value); // Money
1748          return value;
1749        case 202339073: // processNote
1750          this.getProcessNote().add((NotesComponent) value); // NotesComponent
1751          return value;
1752        default: return super.setProperty(hash, name, value);
1753        }
1754
1755      }
1756
1757      @Override
1758      public Base setProperty(String name, Base value) throws FHIRException {
1759        if (name.equals("identifier")) {
1760          this.getIdentifier().add(castToIdentifier(value));
1761        } else if (name.equals("status")) {
1762          value = new PaymentReconciliationStatusEnumFactory().fromType(castToCode(value));
1763          this.status = (Enumeration) value; // Enumeration<PaymentReconciliationStatus>
1764        } else if (name.equals("period")) {
1765          this.period = castToPeriod(value); // Period
1766        } else if (name.equals("created")) {
1767          this.created = castToDateTime(value); // DateTimeType
1768        } else if (name.equals("organization")) {
1769          this.organization = castToReference(value); // Reference
1770        } else if (name.equals("request")) {
1771          this.request = castToReference(value); // Reference
1772        } else if (name.equals("outcome")) {
1773          value = new RemittanceOutcomeEnumFactory().fromType(castToCode(value));
1774          this.outcome = (Enumeration) value; // Enumeration<RemittanceOutcome>
1775        } else if (name.equals("disposition")) {
1776          this.disposition = castToString(value); // StringType
1777        } else if (name.equals("requestProvider")) {
1778          this.requestProvider = castToReference(value); // Reference
1779        } else if (name.equals("detail")) {
1780          this.getDetail().add((DetailsComponent) value);
1781        } else if (name.equals("form")) {
1782          this.form = castToCodeableConcept(value); // CodeableConcept
1783        } else if (name.equals("total")) {
1784          this.total = castToMoney(value); // Money
1785        } else if (name.equals("processNote")) {
1786          this.getProcessNote().add((NotesComponent) value);
1787        } else
1788          return super.setProperty(name, value);
1789        return value;
1790      }
1791
1792      @Override
1793      public Base makeProperty(int hash, String name) throws FHIRException {
1794        switch (hash) {
1795        case -1618432855:  return addIdentifier(); 
1796        case -892481550:  return getStatusElement();
1797        case -991726143:  return getPeriod(); 
1798        case 1028554472:  return getCreatedElement();
1799        case 1178922291:  return getOrganization(); 
1800        case 1095692943:  return getRequest(); 
1801        case -1106507950:  return getOutcomeElement();
1802        case 583380919:  return getDispositionElement();
1803        case 1601527200:  return getRequestProvider(); 
1804        case -1335224239:  return addDetail(); 
1805        case 3148996:  return getForm(); 
1806        case 110549828:  return getTotal(); 
1807        case 202339073:  return addProcessNote(); 
1808        default: return super.makeProperty(hash, name);
1809        }
1810
1811      }
1812
1813      @Override
1814      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1815        switch (hash) {
1816        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1817        case -892481550: /*status*/ return new String[] {"code"};
1818        case -991726143: /*period*/ return new String[] {"Period"};
1819        case 1028554472: /*created*/ return new String[] {"dateTime"};
1820        case 1178922291: /*organization*/ return new String[] {"Reference"};
1821        case 1095692943: /*request*/ return new String[] {"Reference"};
1822        case -1106507950: /*outcome*/ return new String[] {"code"};
1823        case 583380919: /*disposition*/ return new String[] {"string"};
1824        case 1601527200: /*requestProvider*/ return new String[] {"Reference"};
1825        case -1335224239: /*detail*/ return new String[] {};
1826        case 3148996: /*form*/ return new String[] {"CodeableConcept"};
1827        case 110549828: /*total*/ return new String[] {"Money"};
1828        case 202339073: /*processNote*/ return new String[] {};
1829        default: return super.getTypesForProperty(hash, name);
1830        }
1831
1832      }
1833
1834      @Override
1835      public Base addChild(String name) throws FHIRException {
1836        if (name.equals("identifier")) {
1837          return addIdentifier();
1838        }
1839        else if (name.equals("status")) {
1840          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.status");
1841        }
1842        else if (name.equals("period")) {
1843          this.period = new Period();
1844          return this.period;
1845        }
1846        else if (name.equals("created")) {
1847          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.created");
1848        }
1849        else if (name.equals("organization")) {
1850          this.organization = new Reference();
1851          return this.organization;
1852        }
1853        else if (name.equals("request")) {
1854          this.request = new Reference();
1855          return this.request;
1856        }
1857        else if (name.equals("outcome")) {
1858          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.outcome");
1859        }
1860        else if (name.equals("disposition")) {
1861          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.disposition");
1862        }
1863        else if (name.equals("requestProvider")) {
1864          this.requestProvider = new Reference();
1865          return this.requestProvider;
1866        }
1867        else if (name.equals("detail")) {
1868          return addDetail();
1869        }
1870        else if (name.equals("form")) {
1871          this.form = new CodeableConcept();
1872          return this.form;
1873        }
1874        else if (name.equals("total")) {
1875          this.total = new Money();
1876          return this.total;
1877        }
1878        else if (name.equals("processNote")) {
1879          return addProcessNote();
1880        }
1881        else
1882          return super.addChild(name);
1883      }
1884
1885  public String fhirType() {
1886    return "PaymentReconciliation";
1887
1888  }
1889
1890      public PaymentReconciliation copy() {
1891        PaymentReconciliation dst = new PaymentReconciliation();
1892        copyValues(dst);
1893        if (identifier != null) {
1894          dst.identifier = new ArrayList<Identifier>();
1895          for (Identifier i : identifier)
1896            dst.identifier.add(i.copy());
1897        };
1898        dst.status = status == null ? null : status.copy();
1899        dst.period = period == null ? null : period.copy();
1900        dst.created = created == null ? null : created.copy();
1901        dst.organization = organization == null ? null : organization.copy();
1902        dst.request = request == null ? null : request.copy();
1903        dst.outcome = outcome == null ? null : outcome.copy();
1904        dst.disposition = disposition == null ? null : disposition.copy();
1905        dst.requestProvider = requestProvider == null ? null : requestProvider.copy();
1906        if (detail != null) {
1907          dst.detail = new ArrayList<DetailsComponent>();
1908          for (DetailsComponent i : detail)
1909            dst.detail.add(i.copy());
1910        };
1911        dst.form = form == null ? null : form.copy();
1912        dst.total = total == null ? null : total.copy();
1913        if (processNote != null) {
1914          dst.processNote = new ArrayList<NotesComponent>();
1915          for (NotesComponent i : processNote)
1916            dst.processNote.add(i.copy());
1917        };
1918        return dst;
1919      }
1920
1921      protected PaymentReconciliation typedCopy() {
1922        return copy();
1923      }
1924
1925      @Override
1926      public boolean equalsDeep(Base other_) {
1927        if (!super.equalsDeep(other_))
1928          return false;
1929        if (!(other_ instanceof PaymentReconciliation))
1930          return false;
1931        PaymentReconciliation o = (PaymentReconciliation) other_;
1932        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(period, o.period, true)
1933           && compareDeep(created, o.created, true) && compareDeep(organization, o.organization, true) && compareDeep(request, o.request, true)
1934           && compareDeep(outcome, o.outcome, true) && compareDeep(disposition, o.disposition, true) && compareDeep(requestProvider, o.requestProvider, true)
1935           && compareDeep(detail, o.detail, true) && compareDeep(form, o.form, true) && compareDeep(total, o.total, true)
1936           && compareDeep(processNote, o.processNote, true);
1937      }
1938
1939      @Override
1940      public boolean equalsShallow(Base other_) {
1941        if (!super.equalsShallow(other_))
1942          return false;
1943        if (!(other_ instanceof PaymentReconciliation))
1944          return false;
1945        PaymentReconciliation o = (PaymentReconciliation) other_;
1946        return compareValues(status, o.status, true) && compareValues(created, o.created, true) && compareValues(outcome, o.outcome, true)
1947           && compareValues(disposition, o.disposition, true);
1948      }
1949
1950      public boolean isEmpty() {
1951        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, period
1952          , created, organization, request, outcome, disposition, requestProvider, detail
1953          , form, total, processNote);
1954      }
1955
1956  @Override
1957  public ResourceType getResourceType() {
1958    return ResourceType.PaymentReconciliation;
1959   }
1960
1961 /**
1962   * Search parameter: <b>identifier</b>
1963   * <p>
1964   * Description: <b>The business identifier of the ExplanationOfBenefit</b><br>
1965   * Type: <b>token</b><br>
1966   * Path: <b>PaymentReconciliation.identifier</b><br>
1967   * </p>
1968   */
1969  @SearchParamDefinition(name="identifier", path="PaymentReconciliation.identifier", description="The business identifier of the ExplanationOfBenefit", type="token" )
1970  public static final String SP_IDENTIFIER = "identifier";
1971 /**
1972   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1973   * <p>
1974   * Description: <b>The business identifier of the ExplanationOfBenefit</b><br>
1975   * Type: <b>token</b><br>
1976   * Path: <b>PaymentReconciliation.identifier</b><br>
1977   * </p>
1978   */
1979  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1980
1981 /**
1982   * Search parameter: <b>request</b>
1983   * <p>
1984   * Description: <b>The reference to the claim</b><br>
1985   * Type: <b>reference</b><br>
1986   * Path: <b>PaymentReconciliation.request</b><br>
1987   * </p>
1988   */
1989  @SearchParamDefinition(name="request", path="PaymentReconciliation.request", description="The reference to the claim", type="reference", target={ProcessRequest.class } )
1990  public static final String SP_REQUEST = "request";
1991 /**
1992   * <b>Fluent Client</b> search parameter constant for <b>request</b>
1993   * <p>
1994   * Description: <b>The reference to the claim</b><br>
1995   * Type: <b>reference</b><br>
1996   * Path: <b>PaymentReconciliation.request</b><br>
1997   * </p>
1998   */
1999  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUEST = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUEST);
2000
2001/**
2002   * Constant for fluent queries to be used to add include statements. Specifies
2003   * the path value of "<b>PaymentReconciliation:request</b>".
2004   */
2005  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUEST = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:request").toLocked();
2006
2007 /**
2008   * Search parameter: <b>disposition</b>
2009   * <p>
2010   * Description: <b>The contents of the disposition message</b><br>
2011   * Type: <b>string</b><br>
2012   * Path: <b>PaymentReconciliation.disposition</b><br>
2013   * </p>
2014   */
2015  @SearchParamDefinition(name="disposition", path="PaymentReconciliation.disposition", description="The contents of the disposition message", type="string" )
2016  public static final String SP_DISPOSITION = "disposition";
2017 /**
2018   * <b>Fluent Client</b> search parameter constant for <b>disposition</b>
2019   * <p>
2020   * Description: <b>The contents of the disposition message</b><br>
2021   * Type: <b>string</b><br>
2022   * Path: <b>PaymentReconciliation.disposition</b><br>
2023   * </p>
2024   */
2025  public static final ca.uhn.fhir.rest.gclient.StringClientParam DISPOSITION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DISPOSITION);
2026
2027 /**
2028   * Search parameter: <b>created</b>
2029   * <p>
2030   * Description: <b>The creation date</b><br>
2031   * Type: <b>date</b><br>
2032   * Path: <b>PaymentReconciliation.created</b><br>
2033   * </p>
2034   */
2035  @SearchParamDefinition(name="created", path="PaymentReconciliation.created", description="The creation date", type="date" )
2036  public static final String SP_CREATED = "created";
2037 /**
2038   * <b>Fluent Client</b> search parameter constant for <b>created</b>
2039   * <p>
2040   * Description: <b>The creation date</b><br>
2041   * Type: <b>date</b><br>
2042   * Path: <b>PaymentReconciliation.created</b><br>
2043   * </p>
2044   */
2045  public static final ca.uhn.fhir.rest.gclient.DateClientParam CREATED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_CREATED);
2046
2047 /**
2048   * Search parameter: <b>organization</b>
2049   * <p>
2050   * Description: <b>The organization which generated this resource</b><br>
2051   * Type: <b>reference</b><br>
2052   * Path: <b>PaymentReconciliation.organization</b><br>
2053   * </p>
2054   */
2055  @SearchParamDefinition(name="organization", path="PaymentReconciliation.organization", description="The organization which generated this resource", type="reference", target={Organization.class } )
2056  public static final String SP_ORGANIZATION = "organization";
2057 /**
2058   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
2059   * <p>
2060   * Description: <b>The organization which generated this resource</b><br>
2061   * Type: <b>reference</b><br>
2062   * Path: <b>PaymentReconciliation.organization</b><br>
2063   * </p>
2064   */
2065  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
2066
2067/**
2068   * Constant for fluent queries to be used to add include statements. Specifies
2069   * the path value of "<b>PaymentReconciliation:organization</b>".
2070   */
2071  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:organization").toLocked();
2072
2073 /**
2074   * Search parameter: <b>request-provider</b>
2075   * <p>
2076   * Description: <b>The reference to the provider who submitted the claim</b><br>
2077   * Type: <b>reference</b><br>
2078   * Path: <b>PaymentReconciliation.requestProvider</b><br>
2079   * </p>
2080   */
2081  @SearchParamDefinition(name="request-provider", path="PaymentReconciliation.requestProvider", description="The reference to the provider who submitted the claim", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner") }, target={Organization.class, Practitioner.class, PractitionerRole.class } )
2082  public static final String SP_REQUEST_PROVIDER = "request-provider";
2083 /**
2084   * <b>Fluent Client</b> search parameter constant for <b>request-provider</b>
2085   * <p>
2086   * Description: <b>The reference to the provider who submitted the claim</b><br>
2087   * Type: <b>reference</b><br>
2088   * Path: <b>PaymentReconciliation.requestProvider</b><br>
2089   * </p>
2090   */
2091  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUEST_PROVIDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUEST_PROVIDER);
2092
2093/**
2094   * Constant for fluent queries to be used to add include statements. Specifies
2095   * the path value of "<b>PaymentReconciliation:request-provider</b>".
2096   */
2097  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUEST_PROVIDER = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:request-provider").toLocked();
2098
2099 /**
2100   * Search parameter: <b>outcome</b>
2101   * <p>
2102   * Description: <b>The processing outcome</b><br>
2103   * Type: <b>token</b><br>
2104   * Path: <b>PaymentReconciliation.outcome</b><br>
2105   * </p>
2106   */
2107  @SearchParamDefinition(name="outcome", path="PaymentReconciliation.outcome", description="The processing outcome", type="token" )
2108  public static final String SP_OUTCOME = "outcome";
2109 /**
2110   * <b>Fluent Client</b> search parameter constant for <b>outcome</b>
2111   * <p>
2112   * Description: <b>The processing outcome</b><br>
2113   * Type: <b>token</b><br>
2114   * Path: <b>PaymentReconciliation.outcome</b><br>
2115   * </p>
2116   */
2117  public static final ca.uhn.fhir.rest.gclient.TokenClientParam OUTCOME = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_OUTCOME);
2118
2119 /**
2120   * Search parameter: <b>status</b>
2121   * <p>
2122   * Description: <b>The status of the payment reconciliation</b><br>
2123   * Type: <b>token</b><br>
2124   * Path: <b>PaymentReconciliation.status</b><br>
2125   * </p>
2126   */
2127  @SearchParamDefinition(name="status", path="PaymentReconciliation.status", description="The status of the payment reconciliation", type="token" )
2128  public static final String SP_STATUS = "status";
2129 /**
2130   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2131   * <p>
2132   * Description: <b>The status of the payment reconciliation</b><br>
2133   * Type: <b>token</b><br>
2134   * Path: <b>PaymentReconciliation.status</b><br>
2135   * </p>
2136   */
2137  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2138
2139
2140}
2141