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, Dec 27, 2018 10:06-0500 for FHIR v4.0.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 the details including amount of a payment and allocates the payment items being paid.
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         * Unique identifier for the current payment item for the referenced payable.
180         */
181        @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=1, modifier=false, summary=false)
182        @Description(shortDefinition="Business identifier of the payment detail", formalDefinition="Unique identifier for the current payment item for the referenced payable." )
183        protected Identifier identifier;
184
185        /**
186         * Unique identifier for the prior payment item for the referenced payable.
187         */
188        @Child(name = "predecessor", type = {Identifier.class}, order=2, min=0, max=1, modifier=false, summary=false)
189        @Description(shortDefinition="Business identifier of the prior payment detail", formalDefinition="Unique identifier for the prior payment item for the referenced payable." )
190        protected Identifier predecessor;
191
192        /**
193         * Code to indicate the nature of the payment.
194         */
195        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=1, max=1, modifier=false, summary=false)
196        @Description(shortDefinition="Category of payment", formalDefinition="Code to indicate the nature of the payment." )
197        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/payment-type")
198        protected CodeableConcept type;
199
200        /**
201         * A resource, such as a Claim, the evaluation of which could lead to payment.
202         */
203        @Child(name = "request", type = {Reference.class}, order=4, min=0, max=1, modifier=false, summary=false)
204        @Description(shortDefinition="Request giving rise to the payment", formalDefinition="A resource, such as a Claim, the evaluation of which could lead to payment." )
205        protected Reference request;
206
207        /**
208         * The actual object that is the target of the reference (A resource, such as a Claim, the evaluation of which could lead to payment.)
209         */
210        protected Resource requestTarget;
211
212        /**
213         * The party which submitted the claim or financial transaction.
214         */
215        @Child(name = "submitter", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=5, min=0, max=1, modifier=false, summary=false)
216        @Description(shortDefinition="Submitter of the request", formalDefinition="The party which submitted the claim or financial transaction." )
217        protected Reference submitter;
218
219        /**
220         * The actual object that is the target of the reference (The party which submitted the claim or financial transaction.)
221         */
222        protected Resource submitterTarget;
223
224        /**
225         * A resource, such as a ClaimResponse, which contains a commitment to payment.
226         */
227        @Child(name = "response", type = {Reference.class}, order=6, min=0, max=1, modifier=false, summary=false)
228        @Description(shortDefinition="Response committing to a payment", formalDefinition="A resource, such as a ClaimResponse, which contains a commitment to payment." )
229        protected Reference response;
230
231        /**
232         * The actual object that is the target of the reference (A resource, such as a ClaimResponse, which contains a commitment to payment.)
233         */
234        protected Resource responseTarget;
235
236        /**
237         * The date from the response resource containing a commitment to pay.
238         */
239        @Child(name = "date", type = {DateType.class}, order=7, min=0, max=1, modifier=false, summary=false)
240        @Description(shortDefinition="Date of commitment to pay", formalDefinition="The date from the response resource containing a commitment to pay." )
241        protected DateType date;
242
243        /**
244         * A reference to the individual who is responsible for inquiries regarding the response and its payment.
245         */
246        @Child(name = "responsible", type = {PractitionerRole.class}, order=8, min=0, max=1, modifier=false, summary=false)
247        @Description(shortDefinition="Contact for the response", formalDefinition="A reference to the individual who is responsible for inquiries regarding the response and its payment." )
248        protected Reference responsible;
249
250        /**
251         * The actual object that is the target of the reference (A reference to the individual who is responsible for inquiries regarding the response and its payment.)
252         */
253        protected PractitionerRole responsibleTarget;
254
255        /**
256         * The party which is receiving the payment.
257         */
258        @Child(name = "payee", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=9, min=0, max=1, modifier=false, summary=false)
259        @Description(shortDefinition="Recipient of the payment", formalDefinition="The party which is receiving the payment." )
260        protected Reference payee;
261
262        /**
263         * The actual object that is the target of the reference (The party which is receiving the payment.)
264         */
265        protected Resource payeeTarget;
266
267        /**
268         * The monetary amount allocated from the total payment to the payable.
269         */
270        @Child(name = "amount", type = {Money.class}, order=10, min=0, max=1, modifier=false, summary=false)
271        @Description(shortDefinition="Amount allocated to this payable", formalDefinition="The monetary amount allocated from the total payment to the payable." )
272        protected Money amount;
273
274        private static final long serialVersionUID = -1361848619L;
275
276    /**
277     * Constructor
278     */
279      public DetailsComponent() {
280        super();
281      }
282
283    /**
284     * Constructor
285     */
286      public DetailsComponent(CodeableConcept type) {
287        super();
288        this.type = type;
289      }
290
291        /**
292         * @return {@link #identifier} (Unique identifier for the current payment item for the referenced payable.)
293         */
294        public Identifier getIdentifier() { 
295          if (this.identifier == null)
296            if (Configuration.errorOnAutoCreate())
297              throw new Error("Attempt to auto-create DetailsComponent.identifier");
298            else if (Configuration.doAutoCreate())
299              this.identifier = new Identifier(); // cc
300          return this.identifier;
301        }
302
303        public boolean hasIdentifier() { 
304          return this.identifier != null && !this.identifier.isEmpty();
305        }
306
307        /**
308         * @param value {@link #identifier} (Unique identifier for the current payment item for the referenced payable.)
309         */
310        public DetailsComponent setIdentifier(Identifier value) { 
311          this.identifier = value;
312          return this;
313        }
314
315        /**
316         * @return {@link #predecessor} (Unique identifier for the prior payment item for the referenced payable.)
317         */
318        public Identifier getPredecessor() { 
319          if (this.predecessor == null)
320            if (Configuration.errorOnAutoCreate())
321              throw new Error("Attempt to auto-create DetailsComponent.predecessor");
322            else if (Configuration.doAutoCreate())
323              this.predecessor = new Identifier(); // cc
324          return this.predecessor;
325        }
326
327        public boolean hasPredecessor() { 
328          return this.predecessor != null && !this.predecessor.isEmpty();
329        }
330
331        /**
332         * @param value {@link #predecessor} (Unique identifier for the prior payment item for the referenced payable.)
333         */
334        public DetailsComponent setPredecessor(Identifier value) { 
335          this.predecessor = value;
336          return this;
337        }
338
339        /**
340         * @return {@link #type} (Code to indicate the nature of the payment.)
341         */
342        public CodeableConcept getType() { 
343          if (this.type == null)
344            if (Configuration.errorOnAutoCreate())
345              throw new Error("Attempt to auto-create DetailsComponent.type");
346            else if (Configuration.doAutoCreate())
347              this.type = new CodeableConcept(); // cc
348          return this.type;
349        }
350
351        public boolean hasType() { 
352          return this.type != null && !this.type.isEmpty();
353        }
354
355        /**
356         * @param value {@link #type} (Code to indicate the nature of the payment.)
357         */
358        public DetailsComponent setType(CodeableConcept value) { 
359          this.type = value;
360          return this;
361        }
362
363        /**
364         * @return {@link #request} (A resource, such as a Claim, the evaluation of which could lead to payment.)
365         */
366        public Reference getRequest() { 
367          if (this.request == null)
368            if (Configuration.errorOnAutoCreate())
369              throw new Error("Attempt to auto-create DetailsComponent.request");
370            else if (Configuration.doAutoCreate())
371              this.request = new Reference(); // cc
372          return this.request;
373        }
374
375        public boolean hasRequest() { 
376          return this.request != null && !this.request.isEmpty();
377        }
378
379        /**
380         * @param value {@link #request} (A resource, such as a Claim, the evaluation of which could lead to payment.)
381         */
382        public DetailsComponent setRequest(Reference value) { 
383          this.request = value;
384          return this;
385        }
386
387        /**
388         * @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. (A resource, such as a Claim, the evaluation of which could lead to payment.)
389         */
390        public Resource getRequestTarget() { 
391          return this.requestTarget;
392        }
393
394        /**
395         * @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. (A resource, such as a Claim, the evaluation of which could lead to payment.)
396         */
397        public DetailsComponent setRequestTarget(Resource value) { 
398          this.requestTarget = value;
399          return this;
400        }
401
402        /**
403         * @return {@link #submitter} (The party which submitted the claim or financial transaction.)
404         */
405        public Reference getSubmitter() { 
406          if (this.submitter == null)
407            if (Configuration.errorOnAutoCreate())
408              throw new Error("Attempt to auto-create DetailsComponent.submitter");
409            else if (Configuration.doAutoCreate())
410              this.submitter = new Reference(); // cc
411          return this.submitter;
412        }
413
414        public boolean hasSubmitter() { 
415          return this.submitter != null && !this.submitter.isEmpty();
416        }
417
418        /**
419         * @param value {@link #submitter} (The party which submitted the claim or financial transaction.)
420         */
421        public DetailsComponent setSubmitter(Reference value) { 
422          this.submitter = value;
423          return this;
424        }
425
426        /**
427         * @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 party which submitted the claim or financial transaction.)
428         */
429        public Resource getSubmitterTarget() { 
430          return this.submitterTarget;
431        }
432
433        /**
434         * @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 party which submitted the claim or financial transaction.)
435         */
436        public DetailsComponent setSubmitterTarget(Resource value) { 
437          this.submitterTarget = value;
438          return this;
439        }
440
441        /**
442         * @return {@link #response} (A resource, such as a ClaimResponse, which contains a commitment to payment.)
443         */
444        public Reference getResponse() { 
445          if (this.response == null)
446            if (Configuration.errorOnAutoCreate())
447              throw new Error("Attempt to auto-create DetailsComponent.response");
448            else if (Configuration.doAutoCreate())
449              this.response = new Reference(); // cc
450          return this.response;
451        }
452
453        public boolean hasResponse() { 
454          return this.response != null && !this.response.isEmpty();
455        }
456
457        /**
458         * @param value {@link #response} (A resource, such as a ClaimResponse, which contains a commitment to payment.)
459         */
460        public DetailsComponent setResponse(Reference value) { 
461          this.response = value;
462          return this;
463        }
464
465        /**
466         * @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. (A resource, such as a ClaimResponse, which contains a commitment to payment.)
467         */
468        public Resource getResponseTarget() { 
469          return this.responseTarget;
470        }
471
472        /**
473         * @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. (A resource, such as a ClaimResponse, which contains a commitment to payment.)
474         */
475        public DetailsComponent setResponseTarget(Resource value) { 
476          this.responseTarget = value;
477          return this;
478        }
479
480        /**
481         * @return {@link #date} (The date from the response resource containing a commitment to pay.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
482         */
483        public DateType getDateElement() { 
484          if (this.date == null)
485            if (Configuration.errorOnAutoCreate())
486              throw new Error("Attempt to auto-create DetailsComponent.date");
487            else if (Configuration.doAutoCreate())
488              this.date = new DateType(); // bb
489          return this.date;
490        }
491
492        public boolean hasDateElement() { 
493          return this.date != null && !this.date.isEmpty();
494        }
495
496        public boolean hasDate() { 
497          return this.date != null && !this.date.isEmpty();
498        }
499
500        /**
501         * @param value {@link #date} (The date from the response resource containing a commitment to pay.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
502         */
503        public DetailsComponent setDateElement(DateType value) { 
504          this.date = value;
505          return this;
506        }
507
508        /**
509         * @return The date from the response resource containing a commitment to pay.
510         */
511        public Date getDate() { 
512          return this.date == null ? null : this.date.getValue();
513        }
514
515        /**
516         * @param value The date from the response resource containing a commitment to pay.
517         */
518        public DetailsComponent setDate(Date value) { 
519          if (value == null)
520            this.date = null;
521          else {
522            if (this.date == null)
523              this.date = new DateType();
524            this.date.setValue(value);
525          }
526          return this;
527        }
528
529        /**
530         * @return {@link #responsible} (A reference to the individual who is responsible for inquiries regarding the response and its payment.)
531         */
532        public Reference getResponsible() { 
533          if (this.responsible == null)
534            if (Configuration.errorOnAutoCreate())
535              throw new Error("Attempt to auto-create DetailsComponent.responsible");
536            else if (Configuration.doAutoCreate())
537              this.responsible = new Reference(); // cc
538          return this.responsible;
539        }
540
541        public boolean hasResponsible() { 
542          return this.responsible != null && !this.responsible.isEmpty();
543        }
544
545        /**
546         * @param value {@link #responsible} (A reference to the individual who is responsible for inquiries regarding the response and its payment.)
547         */
548        public DetailsComponent setResponsible(Reference value) { 
549          this.responsible = value;
550          return this;
551        }
552
553        /**
554         * @return {@link #responsible} 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. (A reference to the individual who is responsible for inquiries regarding the response and its payment.)
555         */
556        public PractitionerRole getResponsibleTarget() { 
557          if (this.responsibleTarget == null)
558            if (Configuration.errorOnAutoCreate())
559              throw new Error("Attempt to auto-create DetailsComponent.responsible");
560            else if (Configuration.doAutoCreate())
561              this.responsibleTarget = new PractitionerRole(); // aa
562          return this.responsibleTarget;
563        }
564
565        /**
566         * @param value {@link #responsible} 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. (A reference to the individual who is responsible for inquiries regarding the response and its payment.)
567         */
568        public DetailsComponent setResponsibleTarget(PractitionerRole value) { 
569          this.responsibleTarget = value;
570          return this;
571        }
572
573        /**
574         * @return {@link #payee} (The party which is receiving the payment.)
575         */
576        public Reference getPayee() { 
577          if (this.payee == null)
578            if (Configuration.errorOnAutoCreate())
579              throw new Error("Attempt to auto-create DetailsComponent.payee");
580            else if (Configuration.doAutoCreate())
581              this.payee = new Reference(); // cc
582          return this.payee;
583        }
584
585        public boolean hasPayee() { 
586          return this.payee != null && !this.payee.isEmpty();
587        }
588
589        /**
590         * @param value {@link #payee} (The party which is receiving the payment.)
591         */
592        public DetailsComponent setPayee(Reference value) { 
593          this.payee = value;
594          return this;
595        }
596
597        /**
598         * @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 party which is receiving the payment.)
599         */
600        public Resource getPayeeTarget() { 
601          return this.payeeTarget;
602        }
603
604        /**
605         * @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 party which is receiving the payment.)
606         */
607        public DetailsComponent setPayeeTarget(Resource value) { 
608          this.payeeTarget = value;
609          return this;
610        }
611
612        /**
613         * @return {@link #amount} (The monetary amount allocated from the total payment to the payable.)
614         */
615        public Money getAmount() { 
616          if (this.amount == null)
617            if (Configuration.errorOnAutoCreate())
618              throw new Error("Attempt to auto-create DetailsComponent.amount");
619            else if (Configuration.doAutoCreate())
620              this.amount = new Money(); // cc
621          return this.amount;
622        }
623
624        public boolean hasAmount() { 
625          return this.amount != null && !this.amount.isEmpty();
626        }
627
628        /**
629         * @param value {@link #amount} (The monetary amount allocated from the total payment to the payable.)
630         */
631        public DetailsComponent setAmount(Money value) { 
632          this.amount = value;
633          return this;
634        }
635
636        protected void listChildren(List<Property> children) {
637          super.listChildren(children);
638          children.add(new Property("identifier", "Identifier", "Unique identifier for the current payment item for the referenced payable.", 0, 1, identifier));
639          children.add(new Property("predecessor", "Identifier", "Unique identifier for the prior payment item for the referenced payable.", 0, 1, predecessor));
640          children.add(new Property("type", "CodeableConcept", "Code to indicate the nature of the payment.", 0, 1, type));
641          children.add(new Property("request", "Reference(Any)", "A resource, such as a Claim, the evaluation of which could lead to payment.", 0, 1, request));
642          children.add(new Property("submitter", "Reference(Practitioner|PractitionerRole|Organization)", "The party which submitted the claim or financial transaction.", 0, 1, submitter));
643          children.add(new Property("response", "Reference(Any)", "A resource, such as a ClaimResponse, which contains a commitment to payment.", 0, 1, response));
644          children.add(new Property("date", "date", "The date from the response resource containing a commitment to pay.", 0, 1, date));
645          children.add(new Property("responsible", "Reference(PractitionerRole)", "A reference to the individual who is responsible for inquiries regarding the response and its payment.", 0, 1, responsible));
646          children.add(new Property("payee", "Reference(Practitioner|PractitionerRole|Organization)", "The party which is receiving the payment.", 0, 1, payee));
647          children.add(new Property("amount", "Money", "The monetary amount allocated from the total payment to the payable.", 0, 1, amount));
648        }
649
650        @Override
651        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
652          switch (_hash) {
653          case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Unique identifier for the current payment item for the referenced payable.", 0, 1, identifier);
654          case -1925032183: /*predecessor*/  return new Property("predecessor", "Identifier", "Unique identifier for the prior payment item for the referenced payable.", 0, 1, predecessor);
655          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Code to indicate the nature of the payment.", 0, 1, type);
656          case 1095692943: /*request*/  return new Property("request", "Reference(Any)", "A resource, such as a Claim, the evaluation of which could lead to payment.", 0, 1, request);
657          case 348678409: /*submitter*/  return new Property("submitter", "Reference(Practitioner|PractitionerRole|Organization)", "The party which submitted the claim or financial transaction.", 0, 1, submitter);
658          case -340323263: /*response*/  return new Property("response", "Reference(Any)", "A resource, such as a ClaimResponse, which contains a commitment to payment.", 0, 1, response);
659          case 3076014: /*date*/  return new Property("date", "date", "The date from the response resource containing a commitment to pay.", 0, 1, date);
660          case 1847674614: /*responsible*/  return new Property("responsible", "Reference(PractitionerRole)", "A reference to the individual who is responsible for inquiries regarding the response and its payment.", 0, 1, responsible);
661          case 106443592: /*payee*/  return new Property("payee", "Reference(Practitioner|PractitionerRole|Organization)", "The party which is receiving the payment.", 0, 1, payee);
662          case -1413853096: /*amount*/  return new Property("amount", "Money", "The monetary amount allocated from the total payment to the payable.", 0, 1, amount);
663          default: return super.getNamedProperty(_hash, _name, _checkValid);
664          }
665
666        }
667
668      @Override
669      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
670        switch (hash) {
671        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
672        case -1925032183: /*predecessor*/ return this.predecessor == null ? new Base[0] : new Base[] {this.predecessor}; // Identifier
673        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
674        case 1095692943: /*request*/ return this.request == null ? new Base[0] : new Base[] {this.request}; // Reference
675        case 348678409: /*submitter*/ return this.submitter == null ? new Base[0] : new Base[] {this.submitter}; // Reference
676        case -340323263: /*response*/ return this.response == null ? new Base[0] : new Base[] {this.response}; // Reference
677        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateType
678        case 1847674614: /*responsible*/ return this.responsible == null ? new Base[0] : new Base[] {this.responsible}; // Reference
679        case 106443592: /*payee*/ return this.payee == null ? new Base[0] : new Base[] {this.payee}; // Reference
680        case -1413853096: /*amount*/ return this.amount == null ? new Base[0] : new Base[] {this.amount}; // Money
681        default: return super.getProperty(hash, name, checkValid);
682        }
683
684      }
685
686      @Override
687      public Base setProperty(int hash, String name, Base value) throws FHIRException {
688        switch (hash) {
689        case -1618432855: // identifier
690          this.identifier = castToIdentifier(value); // Identifier
691          return value;
692        case -1925032183: // predecessor
693          this.predecessor = castToIdentifier(value); // Identifier
694          return value;
695        case 3575610: // type
696          this.type = castToCodeableConcept(value); // CodeableConcept
697          return value;
698        case 1095692943: // request
699          this.request = castToReference(value); // Reference
700          return value;
701        case 348678409: // submitter
702          this.submitter = castToReference(value); // Reference
703          return value;
704        case -340323263: // response
705          this.response = castToReference(value); // Reference
706          return value;
707        case 3076014: // date
708          this.date = castToDate(value); // DateType
709          return value;
710        case 1847674614: // responsible
711          this.responsible = castToReference(value); // Reference
712          return value;
713        case 106443592: // payee
714          this.payee = castToReference(value); // Reference
715          return value;
716        case -1413853096: // amount
717          this.amount = castToMoney(value); // Money
718          return value;
719        default: return super.setProperty(hash, name, value);
720        }
721
722      }
723
724      @Override
725      public Base setProperty(String name, Base value) throws FHIRException {
726        if (name.equals("identifier")) {
727          this.identifier = castToIdentifier(value); // Identifier
728        } else if (name.equals("predecessor")) {
729          this.predecessor = castToIdentifier(value); // Identifier
730        } else if (name.equals("type")) {
731          this.type = castToCodeableConcept(value); // CodeableConcept
732        } else if (name.equals("request")) {
733          this.request = castToReference(value); // Reference
734        } else if (name.equals("submitter")) {
735          this.submitter = castToReference(value); // Reference
736        } else if (name.equals("response")) {
737          this.response = castToReference(value); // Reference
738        } else if (name.equals("date")) {
739          this.date = castToDate(value); // DateType
740        } else if (name.equals("responsible")) {
741          this.responsible = castToReference(value); // Reference
742        } else if (name.equals("payee")) {
743          this.payee = castToReference(value); // Reference
744        } else if (name.equals("amount")) {
745          this.amount = castToMoney(value); // Money
746        } else
747          return super.setProperty(name, value);
748        return value;
749      }
750
751      @Override
752      public Base makeProperty(int hash, String name) throws FHIRException {
753        switch (hash) {
754        case -1618432855:  return getIdentifier(); 
755        case -1925032183:  return getPredecessor(); 
756        case 3575610:  return getType(); 
757        case 1095692943:  return getRequest(); 
758        case 348678409:  return getSubmitter(); 
759        case -340323263:  return getResponse(); 
760        case 3076014:  return getDateElement();
761        case 1847674614:  return getResponsible(); 
762        case 106443592:  return getPayee(); 
763        case -1413853096:  return getAmount(); 
764        default: return super.makeProperty(hash, name);
765        }
766
767      }
768
769      @Override
770      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
771        switch (hash) {
772        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
773        case -1925032183: /*predecessor*/ return new String[] {"Identifier"};
774        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
775        case 1095692943: /*request*/ return new String[] {"Reference"};
776        case 348678409: /*submitter*/ return new String[] {"Reference"};
777        case -340323263: /*response*/ return new String[] {"Reference"};
778        case 3076014: /*date*/ return new String[] {"date"};
779        case 1847674614: /*responsible*/ return new String[] {"Reference"};
780        case 106443592: /*payee*/ return new String[] {"Reference"};
781        case -1413853096: /*amount*/ return new String[] {"Money"};
782        default: return super.getTypesForProperty(hash, name);
783        }
784
785      }
786
787      @Override
788      public Base addChild(String name) throws FHIRException {
789        if (name.equals("identifier")) {
790          this.identifier = new Identifier();
791          return this.identifier;
792        }
793        else if (name.equals("predecessor")) {
794          this.predecessor = new Identifier();
795          return this.predecessor;
796        }
797        else if (name.equals("type")) {
798          this.type = new CodeableConcept();
799          return this.type;
800        }
801        else if (name.equals("request")) {
802          this.request = new Reference();
803          return this.request;
804        }
805        else if (name.equals("submitter")) {
806          this.submitter = new Reference();
807          return this.submitter;
808        }
809        else if (name.equals("response")) {
810          this.response = new Reference();
811          return this.response;
812        }
813        else if (name.equals("date")) {
814          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.date");
815        }
816        else if (name.equals("responsible")) {
817          this.responsible = new Reference();
818          return this.responsible;
819        }
820        else if (name.equals("payee")) {
821          this.payee = new Reference();
822          return this.payee;
823        }
824        else if (name.equals("amount")) {
825          this.amount = new Money();
826          return this.amount;
827        }
828        else
829          return super.addChild(name);
830      }
831
832      public DetailsComponent copy() {
833        DetailsComponent dst = new DetailsComponent();
834        copyValues(dst);
835        dst.identifier = identifier == null ? null : identifier.copy();
836        dst.predecessor = predecessor == null ? null : predecessor.copy();
837        dst.type = type == null ? null : type.copy();
838        dst.request = request == null ? null : request.copy();
839        dst.submitter = submitter == null ? null : submitter.copy();
840        dst.response = response == null ? null : response.copy();
841        dst.date = date == null ? null : date.copy();
842        dst.responsible = responsible == null ? null : responsible.copy();
843        dst.payee = payee == null ? null : payee.copy();
844        dst.amount = amount == null ? null : amount.copy();
845        return dst;
846      }
847
848      @Override
849      public boolean equalsDeep(Base other_) {
850        if (!super.equalsDeep(other_))
851          return false;
852        if (!(other_ instanceof DetailsComponent))
853          return false;
854        DetailsComponent o = (DetailsComponent) other_;
855        return compareDeep(identifier, o.identifier, true) && compareDeep(predecessor, o.predecessor, true)
856           && compareDeep(type, o.type, true) && compareDeep(request, o.request, true) && compareDeep(submitter, o.submitter, true)
857           && compareDeep(response, o.response, true) && compareDeep(date, o.date, true) && compareDeep(responsible, o.responsible, true)
858           && compareDeep(payee, o.payee, true) && compareDeep(amount, o.amount, true);
859      }
860
861      @Override
862      public boolean equalsShallow(Base other_) {
863        if (!super.equalsShallow(other_))
864          return false;
865        if (!(other_ instanceof DetailsComponent))
866          return false;
867        DetailsComponent o = (DetailsComponent) other_;
868        return compareValues(date, o.date, true);
869      }
870
871      public boolean isEmpty() {
872        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, predecessor, type
873          , request, submitter, response, date, responsible, payee, amount);
874      }
875
876  public String fhirType() {
877    return "PaymentReconciliation.detail";
878
879  }
880
881  }
882
883    @Block()
884    public static class NotesComponent extends BackboneElement implements IBaseBackboneElement {
885        /**
886         * The business purpose of the note text.
887         */
888        @Child(name = "type", type = {CodeType.class}, order=1, min=0, max=1, modifier=false, summary=false)
889        @Description(shortDefinition="display | print | printoper", formalDefinition="The business purpose of the note text." )
890        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/note-type")
891        protected Enumeration<NoteType> type;
892
893        /**
894         * The explanation or description associated with the processing.
895         */
896        @Child(name = "text", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
897        @Description(shortDefinition="Note explanatory text", formalDefinition="The explanation or description associated with the processing." )
898        protected StringType text;
899
900        private static final long serialVersionUID = 529250161L;
901
902    /**
903     * Constructor
904     */
905      public NotesComponent() {
906        super();
907      }
908
909        /**
910         * @return {@link #type} (The business purpose of the note text.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
911         */
912        public Enumeration<NoteType> getTypeElement() { 
913          if (this.type == null)
914            if (Configuration.errorOnAutoCreate())
915              throw new Error("Attempt to auto-create NotesComponent.type");
916            else if (Configuration.doAutoCreate())
917              this.type = new Enumeration<NoteType>(new NoteTypeEnumFactory()); // bb
918          return this.type;
919        }
920
921        public boolean hasTypeElement() { 
922          return this.type != null && !this.type.isEmpty();
923        }
924
925        public boolean hasType() { 
926          return this.type != null && !this.type.isEmpty();
927        }
928
929        /**
930         * @param value {@link #type} (The business purpose of the note text.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
931         */
932        public NotesComponent setTypeElement(Enumeration<NoteType> value) { 
933          this.type = value;
934          return this;
935        }
936
937        /**
938         * @return The business purpose of the note text.
939         */
940        public NoteType getType() { 
941          return this.type == null ? null : this.type.getValue();
942        }
943
944        /**
945         * @param value The business purpose of the note text.
946         */
947        public NotesComponent setType(NoteType value) { 
948          if (value == null)
949            this.type = null;
950          else {
951            if (this.type == null)
952              this.type = new Enumeration<NoteType>(new NoteTypeEnumFactory());
953            this.type.setValue(value);
954          }
955          return this;
956        }
957
958        /**
959         * @return {@link #text} (The explanation or description associated with the processing.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
960         */
961        public StringType getTextElement() { 
962          if (this.text == null)
963            if (Configuration.errorOnAutoCreate())
964              throw new Error("Attempt to auto-create NotesComponent.text");
965            else if (Configuration.doAutoCreate())
966              this.text = new StringType(); // bb
967          return this.text;
968        }
969
970        public boolean hasTextElement() { 
971          return this.text != null && !this.text.isEmpty();
972        }
973
974        public boolean hasText() { 
975          return this.text != null && !this.text.isEmpty();
976        }
977
978        /**
979         * @param value {@link #text} (The explanation or description associated with the processing.). This is the underlying object with id, value and extensions. The accessor "getText" gives direct access to the value
980         */
981        public NotesComponent setTextElement(StringType value) { 
982          this.text = value;
983          return this;
984        }
985
986        /**
987         * @return The explanation or description associated with the processing.
988         */
989        public String getText() { 
990          return this.text == null ? null : this.text.getValue();
991        }
992
993        /**
994         * @param value The explanation or description associated with the processing.
995         */
996        public NotesComponent setText(String value) { 
997          if (Utilities.noString(value))
998            this.text = null;
999          else {
1000            if (this.text == null)
1001              this.text = new StringType();
1002            this.text.setValue(value);
1003          }
1004          return this;
1005        }
1006
1007        protected void listChildren(List<Property> children) {
1008          super.listChildren(children);
1009          children.add(new Property("type", "code", "The business purpose of the note text.", 0, 1, type));
1010          children.add(new Property("text", "string", "The explanation or description associated with the processing.", 0, 1, text));
1011        }
1012
1013        @Override
1014        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1015          switch (_hash) {
1016          case 3575610: /*type*/  return new Property("type", "code", "The business purpose of the note text.", 0, 1, type);
1017          case 3556653: /*text*/  return new Property("text", "string", "The explanation or description associated with the processing.", 0, 1, text);
1018          default: return super.getNamedProperty(_hash, _name, _checkValid);
1019          }
1020
1021        }
1022
1023      @Override
1024      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1025        switch (hash) {
1026        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<NoteType>
1027        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // StringType
1028        default: return super.getProperty(hash, name, checkValid);
1029        }
1030
1031      }
1032
1033      @Override
1034      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1035        switch (hash) {
1036        case 3575610: // type
1037          value = new NoteTypeEnumFactory().fromType(castToCode(value));
1038          this.type = (Enumeration) value; // Enumeration<NoteType>
1039          return value;
1040        case 3556653: // text
1041          this.text = castToString(value); // StringType
1042          return value;
1043        default: return super.setProperty(hash, name, value);
1044        }
1045
1046      }
1047
1048      @Override
1049      public Base setProperty(String name, Base value) throws FHIRException {
1050        if (name.equals("type")) {
1051          value = new NoteTypeEnumFactory().fromType(castToCode(value));
1052          this.type = (Enumeration) value; // Enumeration<NoteType>
1053        } else if (name.equals("text")) {
1054          this.text = castToString(value); // StringType
1055        } else
1056          return super.setProperty(name, value);
1057        return value;
1058      }
1059
1060      @Override
1061      public Base makeProperty(int hash, String name) throws FHIRException {
1062        switch (hash) {
1063        case 3575610:  return getTypeElement();
1064        case 3556653:  return getTextElement();
1065        default: return super.makeProperty(hash, name);
1066        }
1067
1068      }
1069
1070      @Override
1071      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1072        switch (hash) {
1073        case 3575610: /*type*/ return new String[] {"code"};
1074        case 3556653: /*text*/ return new String[] {"string"};
1075        default: return super.getTypesForProperty(hash, name);
1076        }
1077
1078      }
1079
1080      @Override
1081      public Base addChild(String name) throws FHIRException {
1082        if (name.equals("type")) {
1083          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.type");
1084        }
1085        else if (name.equals("text")) {
1086          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.text");
1087        }
1088        else
1089          return super.addChild(name);
1090      }
1091
1092      public NotesComponent copy() {
1093        NotesComponent dst = new NotesComponent();
1094        copyValues(dst);
1095        dst.type = type == null ? null : type.copy();
1096        dst.text = text == null ? null : text.copy();
1097        return dst;
1098      }
1099
1100      @Override
1101      public boolean equalsDeep(Base other_) {
1102        if (!super.equalsDeep(other_))
1103          return false;
1104        if (!(other_ instanceof NotesComponent))
1105          return false;
1106        NotesComponent o = (NotesComponent) other_;
1107        return compareDeep(type, o.type, true) && compareDeep(text, o.text, true);
1108      }
1109
1110      @Override
1111      public boolean equalsShallow(Base other_) {
1112        if (!super.equalsShallow(other_))
1113          return false;
1114        if (!(other_ instanceof NotesComponent))
1115          return false;
1116        NotesComponent o = (NotesComponent) other_;
1117        return compareValues(type, o.type, true) && compareValues(text, o.text, true);
1118      }
1119
1120      public boolean isEmpty() {
1121        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, text);
1122      }
1123
1124  public String fhirType() {
1125    return "PaymentReconciliation.processNote";
1126
1127  }
1128
1129  }
1130
1131    /**
1132     * A unique identifier assigned to this payment reconciliation.
1133     */
1134    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1135    @Description(shortDefinition="Business Identifier for a payment reconciliation", formalDefinition="A unique identifier assigned to this payment reconciliation." )
1136    protected List<Identifier> identifier;
1137
1138    /**
1139     * The status of the resource instance.
1140     */
1141    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
1142    @Description(shortDefinition="active | cancelled | draft | entered-in-error", formalDefinition="The status of the resource instance." )
1143    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/fm-status")
1144    protected Enumeration<PaymentReconciliationStatus> status;
1145
1146    /**
1147     * The period of time for which payments have been gathered into this bulk payment for settlement.
1148     */
1149    @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
1150    @Description(shortDefinition="Period covered", formalDefinition="The period of time for which payments have been gathered into this bulk payment for settlement." )
1151    protected Period period;
1152
1153    /**
1154     * The date when the resource was created.
1155     */
1156    @Child(name = "created", type = {DateTimeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1157    @Description(shortDefinition="Creation date", formalDefinition="The date when the resource was created." )
1158    protected DateTimeType created;
1159
1160    /**
1161     * The party who generated the payment.
1162     */
1163    @Child(name = "paymentIssuer", type = {Organization.class}, order=4, min=0, max=1, modifier=false, summary=true)
1164    @Description(shortDefinition="Party generating payment", formalDefinition="The party who generated the payment." )
1165    protected Reference paymentIssuer;
1166
1167    /**
1168     * The actual object that is the target of the reference (The party who generated the payment.)
1169     */
1170    protected Organization paymentIssuerTarget;
1171
1172    /**
1173     * Original request resource reference.
1174     */
1175    @Child(name = "request", type = {Task.class}, order=5, min=0, max=1, modifier=false, summary=false)
1176    @Description(shortDefinition="Reference to requesting resource", formalDefinition="Original request resource reference." )
1177    protected Reference request;
1178
1179    /**
1180     * The actual object that is the target of the reference (Original request resource reference.)
1181     */
1182    protected Task requestTarget;
1183
1184    /**
1185     * The practitioner who is responsible for the services rendered to the patient.
1186     */
1187    @Child(name = "requestor", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=6, min=0, max=1, modifier=false, summary=false)
1188    @Description(shortDefinition="Responsible practitioner", formalDefinition="The practitioner who is responsible for the services rendered to the patient." )
1189    protected Reference requestor;
1190
1191    /**
1192     * The actual object that is the target of the reference (The practitioner who is responsible for the services rendered to the patient.)
1193     */
1194    protected Resource requestorTarget;
1195
1196    /**
1197     * The outcome of a request for a reconciliation.
1198     */
1199    @Child(name = "outcome", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
1200    @Description(shortDefinition="queued | complete | error | partial", formalDefinition="The outcome of a request for a reconciliation." )
1201    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/remittance-outcome")
1202    protected Enumeration<RemittanceOutcome> outcome;
1203
1204    /**
1205     * A human readable description of the status of the request for the reconciliation.
1206     */
1207    @Child(name = "disposition", type = {StringType.class}, order=8, min=0, max=1, modifier=false, summary=false)
1208    @Description(shortDefinition="Disposition message", formalDefinition="A human readable description of the status of the request for the reconciliation." )
1209    protected StringType disposition;
1210
1211    /**
1212     * The date of payment as indicated on the financial instrument.
1213     */
1214    @Child(name = "paymentDate", type = {DateType.class}, order=9, min=1, max=1, modifier=false, summary=true)
1215    @Description(shortDefinition="When payment issued", formalDefinition="The date of payment as indicated on the financial instrument." )
1216    protected DateType paymentDate;
1217
1218    /**
1219     * Total payment amount as indicated on the financial instrument.
1220     */
1221    @Child(name = "paymentAmount", type = {Money.class}, order=10, min=1, max=1, modifier=false, summary=true)
1222    @Description(shortDefinition="Total amount of Payment", formalDefinition="Total payment amount as indicated on the financial instrument." )
1223    protected Money paymentAmount;
1224
1225    /**
1226     * Issuer's unique identifier for the payment instrument.
1227     */
1228    @Child(name = "paymentIdentifier", type = {Identifier.class}, order=11, min=0, max=1, modifier=false, summary=false)
1229    @Description(shortDefinition="Business identifier for the payment", formalDefinition="Issuer's unique identifier for the payment instrument." )
1230    protected Identifier paymentIdentifier;
1231
1232    /**
1233     * Distribution of the payment amount for a previously acknowledged payable.
1234     */
1235    @Child(name = "detail", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1236    @Description(shortDefinition="Settlement particulars", formalDefinition="Distribution of the payment amount for a previously acknowledged payable." )
1237    protected List<DetailsComponent> detail;
1238
1239    /**
1240     * A code for the form to be used for printing the content.
1241     */
1242    @Child(name = "formCode", type = {CodeableConcept.class}, order=13, min=0, max=1, modifier=false, summary=false)
1243    @Description(shortDefinition="Printed form identifier", formalDefinition="A code for the form to be used for printing the content." )
1244    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/forms")
1245    protected CodeableConcept formCode;
1246
1247    /**
1248     * A note that describes or explains the processing in a human readable form.
1249     */
1250    @Child(name = "processNote", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1251    @Description(shortDefinition="Note concerning processing", formalDefinition="A note that describes or explains the processing in a human readable form." )
1252    protected List<NotesComponent> processNote;
1253
1254    private static final long serialVersionUID = -1620965037L;
1255
1256  /**
1257   * Constructor
1258   */
1259    public PaymentReconciliation() {
1260      super();
1261    }
1262
1263  /**
1264   * Constructor
1265   */
1266    public PaymentReconciliation(Enumeration<PaymentReconciliationStatus> status, DateTimeType created, DateType paymentDate, Money paymentAmount) {
1267      super();
1268      this.status = status;
1269      this.created = created;
1270      this.paymentDate = paymentDate;
1271      this.paymentAmount = paymentAmount;
1272    }
1273
1274    /**
1275     * @return {@link #identifier} (A unique identifier assigned to this payment reconciliation.)
1276     */
1277    public List<Identifier> getIdentifier() { 
1278      if (this.identifier == null)
1279        this.identifier = new ArrayList<Identifier>();
1280      return this.identifier;
1281    }
1282
1283    /**
1284     * @return Returns a reference to <code>this</code> for easy method chaining
1285     */
1286    public PaymentReconciliation setIdentifier(List<Identifier> theIdentifier) { 
1287      this.identifier = theIdentifier;
1288      return this;
1289    }
1290
1291    public boolean hasIdentifier() { 
1292      if (this.identifier == null)
1293        return false;
1294      for (Identifier item : this.identifier)
1295        if (!item.isEmpty())
1296          return true;
1297      return false;
1298    }
1299
1300    public Identifier addIdentifier() { //3
1301      Identifier t = new Identifier();
1302      if (this.identifier == null)
1303        this.identifier = new ArrayList<Identifier>();
1304      this.identifier.add(t);
1305      return t;
1306    }
1307
1308    public PaymentReconciliation addIdentifier(Identifier t) { //3
1309      if (t == null)
1310        return this;
1311      if (this.identifier == null)
1312        this.identifier = new ArrayList<Identifier>();
1313      this.identifier.add(t);
1314      return this;
1315    }
1316
1317    /**
1318     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
1319     */
1320    public Identifier getIdentifierFirstRep() { 
1321      if (getIdentifier().isEmpty()) {
1322        addIdentifier();
1323      }
1324      return getIdentifier().get(0);
1325    }
1326
1327    /**
1328     * @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
1329     */
1330    public Enumeration<PaymentReconciliationStatus> getStatusElement() { 
1331      if (this.status == null)
1332        if (Configuration.errorOnAutoCreate())
1333          throw new Error("Attempt to auto-create PaymentReconciliation.status");
1334        else if (Configuration.doAutoCreate())
1335          this.status = new Enumeration<PaymentReconciliationStatus>(new PaymentReconciliationStatusEnumFactory()); // bb
1336      return this.status;
1337    }
1338
1339    public boolean hasStatusElement() { 
1340      return this.status != null && !this.status.isEmpty();
1341    }
1342
1343    public boolean hasStatus() { 
1344      return this.status != null && !this.status.isEmpty();
1345    }
1346
1347    /**
1348     * @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
1349     */
1350    public PaymentReconciliation setStatusElement(Enumeration<PaymentReconciliationStatus> value) { 
1351      this.status = value;
1352      return this;
1353    }
1354
1355    /**
1356     * @return The status of the resource instance.
1357     */
1358    public PaymentReconciliationStatus getStatus() { 
1359      return this.status == null ? null : this.status.getValue();
1360    }
1361
1362    /**
1363     * @param value The status of the resource instance.
1364     */
1365    public PaymentReconciliation setStatus(PaymentReconciliationStatus value) { 
1366        if (this.status == null)
1367          this.status = new Enumeration<PaymentReconciliationStatus>(new PaymentReconciliationStatusEnumFactory());
1368        this.status.setValue(value);
1369      return this;
1370    }
1371
1372    /**
1373     * @return {@link #period} (The period of time for which payments have been gathered into this bulk payment for settlement.)
1374     */
1375    public Period getPeriod() { 
1376      if (this.period == null)
1377        if (Configuration.errorOnAutoCreate())
1378          throw new Error("Attempt to auto-create PaymentReconciliation.period");
1379        else if (Configuration.doAutoCreate())
1380          this.period = new Period(); // cc
1381      return this.period;
1382    }
1383
1384    public boolean hasPeriod() { 
1385      return this.period != null && !this.period.isEmpty();
1386    }
1387
1388    /**
1389     * @param value {@link #period} (The period of time for which payments have been gathered into this bulk payment for settlement.)
1390     */
1391    public PaymentReconciliation setPeriod(Period value) { 
1392      this.period = value;
1393      return this;
1394    }
1395
1396    /**
1397     * @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
1398     */
1399    public DateTimeType getCreatedElement() { 
1400      if (this.created == null)
1401        if (Configuration.errorOnAutoCreate())
1402          throw new Error("Attempt to auto-create PaymentReconciliation.created");
1403        else if (Configuration.doAutoCreate())
1404          this.created = new DateTimeType(); // bb
1405      return this.created;
1406    }
1407
1408    public boolean hasCreatedElement() { 
1409      return this.created != null && !this.created.isEmpty();
1410    }
1411
1412    public boolean hasCreated() { 
1413      return this.created != null && !this.created.isEmpty();
1414    }
1415
1416    /**
1417     * @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
1418     */
1419    public PaymentReconciliation setCreatedElement(DateTimeType value) { 
1420      this.created = value;
1421      return this;
1422    }
1423
1424    /**
1425     * @return The date when the resource was created.
1426     */
1427    public Date getCreated() { 
1428      return this.created == null ? null : this.created.getValue();
1429    }
1430
1431    /**
1432     * @param value The date when the resource was created.
1433     */
1434    public PaymentReconciliation setCreated(Date value) { 
1435        if (this.created == null)
1436          this.created = new DateTimeType();
1437        this.created.setValue(value);
1438      return this;
1439    }
1440
1441    /**
1442     * @return {@link #paymentIssuer} (The party who generated the payment.)
1443     */
1444    public Reference getPaymentIssuer() { 
1445      if (this.paymentIssuer == null)
1446        if (Configuration.errorOnAutoCreate())
1447          throw new Error("Attempt to auto-create PaymentReconciliation.paymentIssuer");
1448        else if (Configuration.doAutoCreate())
1449          this.paymentIssuer = new Reference(); // cc
1450      return this.paymentIssuer;
1451    }
1452
1453    public boolean hasPaymentIssuer() { 
1454      return this.paymentIssuer != null && !this.paymentIssuer.isEmpty();
1455    }
1456
1457    /**
1458     * @param value {@link #paymentIssuer} (The party who generated the payment.)
1459     */
1460    public PaymentReconciliation setPaymentIssuer(Reference value) { 
1461      this.paymentIssuer = value;
1462      return this;
1463    }
1464
1465    /**
1466     * @return {@link #paymentIssuer} 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 party who generated the payment.)
1467     */
1468    public Organization getPaymentIssuerTarget() { 
1469      if (this.paymentIssuerTarget == null)
1470        if (Configuration.errorOnAutoCreate())
1471          throw new Error("Attempt to auto-create PaymentReconciliation.paymentIssuer");
1472        else if (Configuration.doAutoCreate())
1473          this.paymentIssuerTarget = new Organization(); // aa
1474      return this.paymentIssuerTarget;
1475    }
1476
1477    /**
1478     * @param value {@link #paymentIssuer} 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 party who generated the payment.)
1479     */
1480    public PaymentReconciliation setPaymentIssuerTarget(Organization value) { 
1481      this.paymentIssuerTarget = value;
1482      return this;
1483    }
1484
1485    /**
1486     * @return {@link #request} (Original request resource reference.)
1487     */
1488    public Reference getRequest() { 
1489      if (this.request == null)
1490        if (Configuration.errorOnAutoCreate())
1491          throw new Error("Attempt to auto-create PaymentReconciliation.request");
1492        else if (Configuration.doAutoCreate())
1493          this.request = new Reference(); // cc
1494      return this.request;
1495    }
1496
1497    public boolean hasRequest() { 
1498      return this.request != null && !this.request.isEmpty();
1499    }
1500
1501    /**
1502     * @param value {@link #request} (Original request resource reference.)
1503     */
1504    public PaymentReconciliation setRequest(Reference value) { 
1505      this.request = value;
1506      return this;
1507    }
1508
1509    /**
1510     * @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.)
1511     */
1512    public Task getRequestTarget() { 
1513      if (this.requestTarget == null)
1514        if (Configuration.errorOnAutoCreate())
1515          throw new Error("Attempt to auto-create PaymentReconciliation.request");
1516        else if (Configuration.doAutoCreate())
1517          this.requestTarget = new Task(); // aa
1518      return this.requestTarget;
1519    }
1520
1521    /**
1522     * @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.)
1523     */
1524    public PaymentReconciliation setRequestTarget(Task value) { 
1525      this.requestTarget = value;
1526      return this;
1527    }
1528
1529    /**
1530     * @return {@link #requestor} (The practitioner who is responsible for the services rendered to the patient.)
1531     */
1532    public Reference getRequestor() { 
1533      if (this.requestor == null)
1534        if (Configuration.errorOnAutoCreate())
1535          throw new Error("Attempt to auto-create PaymentReconciliation.requestor");
1536        else if (Configuration.doAutoCreate())
1537          this.requestor = new Reference(); // cc
1538      return this.requestor;
1539    }
1540
1541    public boolean hasRequestor() { 
1542      return this.requestor != null && !this.requestor.isEmpty();
1543    }
1544
1545    /**
1546     * @param value {@link #requestor} (The practitioner who is responsible for the services rendered to the patient.)
1547     */
1548    public PaymentReconciliation setRequestor(Reference value) { 
1549      this.requestor = value;
1550      return this;
1551    }
1552
1553    /**
1554     * @return {@link #requestor} 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.)
1555     */
1556    public Resource getRequestorTarget() { 
1557      return this.requestorTarget;
1558    }
1559
1560    /**
1561     * @param value {@link #requestor} 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.)
1562     */
1563    public PaymentReconciliation setRequestorTarget(Resource value) { 
1564      this.requestorTarget = value;
1565      return this;
1566    }
1567
1568    /**
1569     * @return {@link #outcome} (The outcome of a request for a reconciliation.). This is the underlying object with id, value and extensions. The accessor "getOutcome" gives direct access to the value
1570     */
1571    public Enumeration<RemittanceOutcome> getOutcomeElement() { 
1572      if (this.outcome == null)
1573        if (Configuration.errorOnAutoCreate())
1574          throw new Error("Attempt to auto-create PaymentReconciliation.outcome");
1575        else if (Configuration.doAutoCreate())
1576          this.outcome = new Enumeration<RemittanceOutcome>(new RemittanceOutcomeEnumFactory()); // bb
1577      return this.outcome;
1578    }
1579
1580    public boolean hasOutcomeElement() { 
1581      return this.outcome != null && !this.outcome.isEmpty();
1582    }
1583
1584    public boolean hasOutcome() { 
1585      return this.outcome != null && !this.outcome.isEmpty();
1586    }
1587
1588    /**
1589     * @param value {@link #outcome} (The outcome of a request for a reconciliation.). This is the underlying object with id, value and extensions. The accessor "getOutcome" gives direct access to the value
1590     */
1591    public PaymentReconciliation setOutcomeElement(Enumeration<RemittanceOutcome> value) { 
1592      this.outcome = value;
1593      return this;
1594    }
1595
1596    /**
1597     * @return The outcome of a request for a reconciliation.
1598     */
1599    public RemittanceOutcome getOutcome() { 
1600      return this.outcome == null ? null : this.outcome.getValue();
1601    }
1602
1603    /**
1604     * @param value The outcome of a request for a reconciliation.
1605     */
1606    public PaymentReconciliation setOutcome(RemittanceOutcome value) { 
1607      if (value == null)
1608        this.outcome = null;
1609      else {
1610        if (this.outcome == null)
1611          this.outcome = new Enumeration<RemittanceOutcome>(new RemittanceOutcomeEnumFactory());
1612        this.outcome.setValue(value);
1613      }
1614      return this;
1615    }
1616
1617    /**
1618     * @return {@link #disposition} (A human readable description of the status of the request for the reconciliation.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
1619     */
1620    public StringType getDispositionElement() { 
1621      if (this.disposition == null)
1622        if (Configuration.errorOnAutoCreate())
1623          throw new Error("Attempt to auto-create PaymentReconciliation.disposition");
1624        else if (Configuration.doAutoCreate())
1625          this.disposition = new StringType(); // bb
1626      return this.disposition;
1627    }
1628
1629    public boolean hasDispositionElement() { 
1630      return this.disposition != null && !this.disposition.isEmpty();
1631    }
1632
1633    public boolean hasDisposition() { 
1634      return this.disposition != null && !this.disposition.isEmpty();
1635    }
1636
1637    /**
1638     * @param value {@link #disposition} (A human readable description of the status of the request for the reconciliation.). This is the underlying object with id, value and extensions. The accessor "getDisposition" gives direct access to the value
1639     */
1640    public PaymentReconciliation setDispositionElement(StringType value) { 
1641      this.disposition = value;
1642      return this;
1643    }
1644
1645    /**
1646     * @return A human readable description of the status of the request for the reconciliation.
1647     */
1648    public String getDisposition() { 
1649      return this.disposition == null ? null : this.disposition.getValue();
1650    }
1651
1652    /**
1653     * @param value A human readable description of the status of the request for the reconciliation.
1654     */
1655    public PaymentReconciliation setDisposition(String value) { 
1656      if (Utilities.noString(value))
1657        this.disposition = null;
1658      else {
1659        if (this.disposition == null)
1660          this.disposition = new StringType();
1661        this.disposition.setValue(value);
1662      }
1663      return this;
1664    }
1665
1666    /**
1667     * @return {@link #paymentDate} (The date of payment as indicated on the financial instrument.). This is the underlying object with id, value and extensions. The accessor "getPaymentDate" gives direct access to the value
1668     */
1669    public DateType getPaymentDateElement() { 
1670      if (this.paymentDate == null)
1671        if (Configuration.errorOnAutoCreate())
1672          throw new Error("Attempt to auto-create PaymentReconciliation.paymentDate");
1673        else if (Configuration.doAutoCreate())
1674          this.paymentDate = new DateType(); // bb
1675      return this.paymentDate;
1676    }
1677
1678    public boolean hasPaymentDateElement() { 
1679      return this.paymentDate != null && !this.paymentDate.isEmpty();
1680    }
1681
1682    public boolean hasPaymentDate() { 
1683      return this.paymentDate != null && !this.paymentDate.isEmpty();
1684    }
1685
1686    /**
1687     * @param value {@link #paymentDate} (The date of payment as indicated on the financial instrument.). This is the underlying object with id, value and extensions. The accessor "getPaymentDate" gives direct access to the value
1688     */
1689    public PaymentReconciliation setPaymentDateElement(DateType value) { 
1690      this.paymentDate = value;
1691      return this;
1692    }
1693
1694    /**
1695     * @return The date of payment as indicated on the financial instrument.
1696     */
1697    public Date getPaymentDate() { 
1698      return this.paymentDate == null ? null : this.paymentDate.getValue();
1699    }
1700
1701    /**
1702     * @param value The date of payment as indicated on the financial instrument.
1703     */
1704    public PaymentReconciliation setPaymentDate(Date value) { 
1705        if (this.paymentDate == null)
1706          this.paymentDate = new DateType();
1707        this.paymentDate.setValue(value);
1708      return this;
1709    }
1710
1711    /**
1712     * @return {@link #paymentAmount} (Total payment amount as indicated on the financial instrument.)
1713     */
1714    public Money getPaymentAmount() { 
1715      if (this.paymentAmount == null)
1716        if (Configuration.errorOnAutoCreate())
1717          throw new Error("Attempt to auto-create PaymentReconciliation.paymentAmount");
1718        else if (Configuration.doAutoCreate())
1719          this.paymentAmount = new Money(); // cc
1720      return this.paymentAmount;
1721    }
1722
1723    public boolean hasPaymentAmount() { 
1724      return this.paymentAmount != null && !this.paymentAmount.isEmpty();
1725    }
1726
1727    /**
1728     * @param value {@link #paymentAmount} (Total payment amount as indicated on the financial instrument.)
1729     */
1730    public PaymentReconciliation setPaymentAmount(Money value) { 
1731      this.paymentAmount = value;
1732      return this;
1733    }
1734
1735    /**
1736     * @return {@link #paymentIdentifier} (Issuer's unique identifier for the payment instrument.)
1737     */
1738    public Identifier getPaymentIdentifier() { 
1739      if (this.paymentIdentifier == null)
1740        if (Configuration.errorOnAutoCreate())
1741          throw new Error("Attempt to auto-create PaymentReconciliation.paymentIdentifier");
1742        else if (Configuration.doAutoCreate())
1743          this.paymentIdentifier = new Identifier(); // cc
1744      return this.paymentIdentifier;
1745    }
1746
1747    public boolean hasPaymentIdentifier() { 
1748      return this.paymentIdentifier != null && !this.paymentIdentifier.isEmpty();
1749    }
1750
1751    /**
1752     * @param value {@link #paymentIdentifier} (Issuer's unique identifier for the payment instrument.)
1753     */
1754    public PaymentReconciliation setPaymentIdentifier(Identifier value) { 
1755      this.paymentIdentifier = value;
1756      return this;
1757    }
1758
1759    /**
1760     * @return {@link #detail} (Distribution of the payment amount for a previously acknowledged payable.)
1761     */
1762    public List<DetailsComponent> getDetail() { 
1763      if (this.detail == null)
1764        this.detail = new ArrayList<DetailsComponent>();
1765      return this.detail;
1766    }
1767
1768    /**
1769     * @return Returns a reference to <code>this</code> for easy method chaining
1770     */
1771    public PaymentReconciliation setDetail(List<DetailsComponent> theDetail) { 
1772      this.detail = theDetail;
1773      return this;
1774    }
1775
1776    public boolean hasDetail() { 
1777      if (this.detail == null)
1778        return false;
1779      for (DetailsComponent item : this.detail)
1780        if (!item.isEmpty())
1781          return true;
1782      return false;
1783    }
1784
1785    public DetailsComponent addDetail() { //3
1786      DetailsComponent t = new DetailsComponent();
1787      if (this.detail == null)
1788        this.detail = new ArrayList<DetailsComponent>();
1789      this.detail.add(t);
1790      return t;
1791    }
1792
1793    public PaymentReconciliation addDetail(DetailsComponent t) { //3
1794      if (t == null)
1795        return this;
1796      if (this.detail == null)
1797        this.detail = new ArrayList<DetailsComponent>();
1798      this.detail.add(t);
1799      return this;
1800    }
1801
1802    /**
1803     * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist
1804     */
1805    public DetailsComponent getDetailFirstRep() { 
1806      if (getDetail().isEmpty()) {
1807        addDetail();
1808      }
1809      return getDetail().get(0);
1810    }
1811
1812    /**
1813     * @return {@link #formCode} (A code for the form to be used for printing the content.)
1814     */
1815    public CodeableConcept getFormCode() { 
1816      if (this.formCode == null)
1817        if (Configuration.errorOnAutoCreate())
1818          throw new Error("Attempt to auto-create PaymentReconciliation.formCode");
1819        else if (Configuration.doAutoCreate())
1820          this.formCode = new CodeableConcept(); // cc
1821      return this.formCode;
1822    }
1823
1824    public boolean hasFormCode() { 
1825      return this.formCode != null && !this.formCode.isEmpty();
1826    }
1827
1828    /**
1829     * @param value {@link #formCode} (A code for the form to be used for printing the content.)
1830     */
1831    public PaymentReconciliation setFormCode(CodeableConcept value) { 
1832      this.formCode = value;
1833      return this;
1834    }
1835
1836    /**
1837     * @return {@link #processNote} (A note that describes or explains the processing in a human readable form.)
1838     */
1839    public List<NotesComponent> getProcessNote() { 
1840      if (this.processNote == null)
1841        this.processNote = new ArrayList<NotesComponent>();
1842      return this.processNote;
1843    }
1844
1845    /**
1846     * @return Returns a reference to <code>this</code> for easy method chaining
1847     */
1848    public PaymentReconciliation setProcessNote(List<NotesComponent> theProcessNote) { 
1849      this.processNote = theProcessNote;
1850      return this;
1851    }
1852
1853    public boolean hasProcessNote() { 
1854      if (this.processNote == null)
1855        return false;
1856      for (NotesComponent item : this.processNote)
1857        if (!item.isEmpty())
1858          return true;
1859      return false;
1860    }
1861
1862    public NotesComponent addProcessNote() { //3
1863      NotesComponent t = new NotesComponent();
1864      if (this.processNote == null)
1865        this.processNote = new ArrayList<NotesComponent>();
1866      this.processNote.add(t);
1867      return t;
1868    }
1869
1870    public PaymentReconciliation addProcessNote(NotesComponent t) { //3
1871      if (t == null)
1872        return this;
1873      if (this.processNote == null)
1874        this.processNote = new ArrayList<NotesComponent>();
1875      this.processNote.add(t);
1876      return this;
1877    }
1878
1879    /**
1880     * @return The first repetition of repeating field {@link #processNote}, creating it if it does not already exist
1881     */
1882    public NotesComponent getProcessNoteFirstRep() { 
1883      if (getProcessNote().isEmpty()) {
1884        addProcessNote();
1885      }
1886      return getProcessNote().get(0);
1887    }
1888
1889      protected void listChildren(List<Property> children) {
1890        super.listChildren(children);
1891        children.add(new Property("identifier", "Identifier", "A unique identifier assigned to this payment reconciliation.", 0, java.lang.Integer.MAX_VALUE, identifier));
1892        children.add(new Property("status", "code", "The status of the resource instance.", 0, 1, status));
1893        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));
1894        children.add(new Property("created", "dateTime", "The date when the resource was created.", 0, 1, created));
1895        children.add(new Property("paymentIssuer", "Reference(Organization)", "The party who generated the payment.", 0, 1, paymentIssuer));
1896        children.add(new Property("request", "Reference(Task)", "Original request resource reference.", 0, 1, request));
1897        children.add(new Property("requestor", "Reference(Practitioner|PractitionerRole|Organization)", "The practitioner who is responsible for the services rendered to the patient.", 0, 1, requestor));
1898        children.add(new Property("outcome", "code", "The outcome of a request for a reconciliation.", 0, 1, outcome));
1899        children.add(new Property("disposition", "string", "A human readable description of the status of the request for the reconciliation.", 0, 1, disposition));
1900        children.add(new Property("paymentDate", "date", "The date of payment as indicated on the financial instrument.", 0, 1, paymentDate));
1901        children.add(new Property("paymentAmount", "Money", "Total payment amount as indicated on the financial instrument.", 0, 1, paymentAmount));
1902        children.add(new Property("paymentIdentifier", "Identifier", "Issuer's unique identifier for the payment instrument.", 0, 1, paymentIdentifier));
1903        children.add(new Property("detail", "", "Distribution of the payment amount for a previously acknowledged payable.", 0, java.lang.Integer.MAX_VALUE, detail));
1904        children.add(new Property("formCode", "CodeableConcept", "A code for the form to be used for printing the content.", 0, 1, formCode));
1905        children.add(new Property("processNote", "", "A note that describes or explains the processing in a human readable form.", 0, java.lang.Integer.MAX_VALUE, processNote));
1906      }
1907
1908      @Override
1909      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1910        switch (_hash) {
1911        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A unique identifier assigned to this payment reconciliation.", 0, java.lang.Integer.MAX_VALUE, identifier);
1912        case -892481550: /*status*/  return new Property("status", "code", "The status of the resource instance.", 0, 1, status);
1913        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);
1914        case 1028554472: /*created*/  return new Property("created", "dateTime", "The date when the resource was created.", 0, 1, created);
1915        case 1144026207: /*paymentIssuer*/  return new Property("paymentIssuer", "Reference(Organization)", "The party who generated the payment.", 0, 1, paymentIssuer);
1916        case 1095692943: /*request*/  return new Property("request", "Reference(Task)", "Original request resource reference.", 0, 1, request);
1917        case 693934258: /*requestor*/  return new Property("requestor", "Reference(Practitioner|PractitionerRole|Organization)", "The practitioner who is responsible for the services rendered to the patient.", 0, 1, requestor);
1918        case -1106507950: /*outcome*/  return new Property("outcome", "code", "The outcome of a request for a reconciliation.", 0, 1, outcome);
1919        case 583380919: /*disposition*/  return new Property("disposition", "string", "A human readable description of the status of the request for the reconciliation.", 0, 1, disposition);
1920        case -1540873516: /*paymentDate*/  return new Property("paymentDate", "date", "The date of payment as indicated on the financial instrument.", 0, 1, paymentDate);
1921        case 909332990: /*paymentAmount*/  return new Property("paymentAmount", "Money", "Total payment amount as indicated on the financial instrument.", 0, 1, paymentAmount);
1922        case 1555852111: /*paymentIdentifier*/  return new Property("paymentIdentifier", "Identifier", "Issuer's unique identifier for the payment instrument.", 0, 1, paymentIdentifier);
1923        case -1335224239: /*detail*/  return new Property("detail", "", "Distribution of the payment amount for a previously acknowledged payable.", 0, java.lang.Integer.MAX_VALUE, detail);
1924        case 473181393: /*formCode*/  return new Property("formCode", "CodeableConcept", "A code for the form to be used for printing the content.", 0, 1, formCode);
1925        case 202339073: /*processNote*/  return new Property("processNote", "", "A note that describes or explains the processing in a human readable form.", 0, java.lang.Integer.MAX_VALUE, processNote);
1926        default: return super.getNamedProperty(_hash, _name, _checkValid);
1927        }
1928
1929      }
1930
1931      @Override
1932      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1933        switch (hash) {
1934        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1935        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<PaymentReconciliationStatus>
1936        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1937        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateTimeType
1938        case 1144026207: /*paymentIssuer*/ return this.paymentIssuer == null ? new Base[0] : new Base[] {this.paymentIssuer}; // Reference
1939        case 1095692943: /*request*/ return this.request == null ? new Base[0] : new Base[] {this.request}; // Reference
1940        case 693934258: /*requestor*/ return this.requestor == null ? new Base[0] : new Base[] {this.requestor}; // Reference
1941        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // Enumeration<RemittanceOutcome>
1942        case 583380919: /*disposition*/ return this.disposition == null ? new Base[0] : new Base[] {this.disposition}; // StringType
1943        case -1540873516: /*paymentDate*/ return this.paymentDate == null ? new Base[0] : new Base[] {this.paymentDate}; // DateType
1944        case 909332990: /*paymentAmount*/ return this.paymentAmount == null ? new Base[0] : new Base[] {this.paymentAmount}; // Money
1945        case 1555852111: /*paymentIdentifier*/ return this.paymentIdentifier == null ? new Base[0] : new Base[] {this.paymentIdentifier}; // Identifier
1946        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // DetailsComponent
1947        case 473181393: /*formCode*/ return this.formCode == null ? new Base[0] : new Base[] {this.formCode}; // CodeableConcept
1948        case 202339073: /*processNote*/ return this.processNote == null ? new Base[0] : this.processNote.toArray(new Base[this.processNote.size()]); // NotesComponent
1949        default: return super.getProperty(hash, name, checkValid);
1950        }
1951
1952      }
1953
1954      @Override
1955      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1956        switch (hash) {
1957        case -1618432855: // identifier
1958          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1959          return value;
1960        case -892481550: // status
1961          value = new PaymentReconciliationStatusEnumFactory().fromType(castToCode(value));
1962          this.status = (Enumeration) value; // Enumeration<PaymentReconciliationStatus>
1963          return value;
1964        case -991726143: // period
1965          this.period = castToPeriod(value); // Period
1966          return value;
1967        case 1028554472: // created
1968          this.created = castToDateTime(value); // DateTimeType
1969          return value;
1970        case 1144026207: // paymentIssuer
1971          this.paymentIssuer = castToReference(value); // Reference
1972          return value;
1973        case 1095692943: // request
1974          this.request = castToReference(value); // Reference
1975          return value;
1976        case 693934258: // requestor
1977          this.requestor = castToReference(value); // Reference
1978          return value;
1979        case -1106507950: // outcome
1980          value = new RemittanceOutcomeEnumFactory().fromType(castToCode(value));
1981          this.outcome = (Enumeration) value; // Enumeration<RemittanceOutcome>
1982          return value;
1983        case 583380919: // disposition
1984          this.disposition = castToString(value); // StringType
1985          return value;
1986        case -1540873516: // paymentDate
1987          this.paymentDate = castToDate(value); // DateType
1988          return value;
1989        case 909332990: // paymentAmount
1990          this.paymentAmount = castToMoney(value); // Money
1991          return value;
1992        case 1555852111: // paymentIdentifier
1993          this.paymentIdentifier = castToIdentifier(value); // Identifier
1994          return value;
1995        case -1335224239: // detail
1996          this.getDetail().add((DetailsComponent) value); // DetailsComponent
1997          return value;
1998        case 473181393: // formCode
1999          this.formCode = castToCodeableConcept(value); // CodeableConcept
2000          return value;
2001        case 202339073: // processNote
2002          this.getProcessNote().add((NotesComponent) value); // NotesComponent
2003          return value;
2004        default: return super.setProperty(hash, name, value);
2005        }
2006
2007      }
2008
2009      @Override
2010      public Base setProperty(String name, Base value) throws FHIRException {
2011        if (name.equals("identifier")) {
2012          this.getIdentifier().add(castToIdentifier(value));
2013        } else if (name.equals("status")) {
2014          value = new PaymentReconciliationStatusEnumFactory().fromType(castToCode(value));
2015          this.status = (Enumeration) value; // Enumeration<PaymentReconciliationStatus>
2016        } else if (name.equals("period")) {
2017          this.period = castToPeriod(value); // Period
2018        } else if (name.equals("created")) {
2019          this.created = castToDateTime(value); // DateTimeType
2020        } else if (name.equals("paymentIssuer")) {
2021          this.paymentIssuer = castToReference(value); // Reference
2022        } else if (name.equals("request")) {
2023          this.request = castToReference(value); // Reference
2024        } else if (name.equals("requestor")) {
2025          this.requestor = castToReference(value); // Reference
2026        } else if (name.equals("outcome")) {
2027          value = new RemittanceOutcomeEnumFactory().fromType(castToCode(value));
2028          this.outcome = (Enumeration) value; // Enumeration<RemittanceOutcome>
2029        } else if (name.equals("disposition")) {
2030          this.disposition = castToString(value); // StringType
2031        } else if (name.equals("paymentDate")) {
2032          this.paymentDate = castToDate(value); // DateType
2033        } else if (name.equals("paymentAmount")) {
2034          this.paymentAmount = castToMoney(value); // Money
2035        } else if (name.equals("paymentIdentifier")) {
2036          this.paymentIdentifier = castToIdentifier(value); // Identifier
2037        } else if (name.equals("detail")) {
2038          this.getDetail().add((DetailsComponent) value);
2039        } else if (name.equals("formCode")) {
2040          this.formCode = castToCodeableConcept(value); // CodeableConcept
2041        } else if (name.equals("processNote")) {
2042          this.getProcessNote().add((NotesComponent) value);
2043        } else
2044          return super.setProperty(name, value);
2045        return value;
2046      }
2047
2048      @Override
2049      public Base makeProperty(int hash, String name) throws FHIRException {
2050        switch (hash) {
2051        case -1618432855:  return addIdentifier(); 
2052        case -892481550:  return getStatusElement();
2053        case -991726143:  return getPeriod(); 
2054        case 1028554472:  return getCreatedElement();
2055        case 1144026207:  return getPaymentIssuer(); 
2056        case 1095692943:  return getRequest(); 
2057        case 693934258:  return getRequestor(); 
2058        case -1106507950:  return getOutcomeElement();
2059        case 583380919:  return getDispositionElement();
2060        case -1540873516:  return getPaymentDateElement();
2061        case 909332990:  return getPaymentAmount(); 
2062        case 1555852111:  return getPaymentIdentifier(); 
2063        case -1335224239:  return addDetail(); 
2064        case 473181393:  return getFormCode(); 
2065        case 202339073:  return addProcessNote(); 
2066        default: return super.makeProperty(hash, name);
2067        }
2068
2069      }
2070
2071      @Override
2072      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2073        switch (hash) {
2074        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2075        case -892481550: /*status*/ return new String[] {"code"};
2076        case -991726143: /*period*/ return new String[] {"Period"};
2077        case 1028554472: /*created*/ return new String[] {"dateTime"};
2078        case 1144026207: /*paymentIssuer*/ return new String[] {"Reference"};
2079        case 1095692943: /*request*/ return new String[] {"Reference"};
2080        case 693934258: /*requestor*/ return new String[] {"Reference"};
2081        case -1106507950: /*outcome*/ return new String[] {"code"};
2082        case 583380919: /*disposition*/ return new String[] {"string"};
2083        case -1540873516: /*paymentDate*/ return new String[] {"date"};
2084        case 909332990: /*paymentAmount*/ return new String[] {"Money"};
2085        case 1555852111: /*paymentIdentifier*/ return new String[] {"Identifier"};
2086        case -1335224239: /*detail*/ return new String[] {};
2087        case 473181393: /*formCode*/ return new String[] {"CodeableConcept"};
2088        case 202339073: /*processNote*/ return new String[] {};
2089        default: return super.getTypesForProperty(hash, name);
2090        }
2091
2092      }
2093
2094      @Override
2095      public Base addChild(String name) throws FHIRException {
2096        if (name.equals("identifier")) {
2097          return addIdentifier();
2098        }
2099        else if (name.equals("status")) {
2100          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.status");
2101        }
2102        else if (name.equals("period")) {
2103          this.period = new Period();
2104          return this.period;
2105        }
2106        else if (name.equals("created")) {
2107          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.created");
2108        }
2109        else if (name.equals("paymentIssuer")) {
2110          this.paymentIssuer = new Reference();
2111          return this.paymentIssuer;
2112        }
2113        else if (name.equals("request")) {
2114          this.request = new Reference();
2115          return this.request;
2116        }
2117        else if (name.equals("requestor")) {
2118          this.requestor = new Reference();
2119          return this.requestor;
2120        }
2121        else if (name.equals("outcome")) {
2122          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.outcome");
2123        }
2124        else if (name.equals("disposition")) {
2125          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.disposition");
2126        }
2127        else if (name.equals("paymentDate")) {
2128          throw new FHIRException("Cannot call addChild on a primitive type PaymentReconciliation.paymentDate");
2129        }
2130        else if (name.equals("paymentAmount")) {
2131          this.paymentAmount = new Money();
2132          return this.paymentAmount;
2133        }
2134        else if (name.equals("paymentIdentifier")) {
2135          this.paymentIdentifier = new Identifier();
2136          return this.paymentIdentifier;
2137        }
2138        else if (name.equals("detail")) {
2139          return addDetail();
2140        }
2141        else if (name.equals("formCode")) {
2142          this.formCode = new CodeableConcept();
2143          return this.formCode;
2144        }
2145        else if (name.equals("processNote")) {
2146          return addProcessNote();
2147        }
2148        else
2149          return super.addChild(name);
2150      }
2151
2152  public String fhirType() {
2153    return "PaymentReconciliation";
2154
2155  }
2156
2157      public PaymentReconciliation copy() {
2158        PaymentReconciliation dst = new PaymentReconciliation();
2159        copyValues(dst);
2160        if (identifier != null) {
2161          dst.identifier = new ArrayList<Identifier>();
2162          for (Identifier i : identifier)
2163            dst.identifier.add(i.copy());
2164        };
2165        dst.status = status == null ? null : status.copy();
2166        dst.period = period == null ? null : period.copy();
2167        dst.created = created == null ? null : created.copy();
2168        dst.paymentIssuer = paymentIssuer == null ? null : paymentIssuer.copy();
2169        dst.request = request == null ? null : request.copy();
2170        dst.requestor = requestor == null ? null : requestor.copy();
2171        dst.outcome = outcome == null ? null : outcome.copy();
2172        dst.disposition = disposition == null ? null : disposition.copy();
2173        dst.paymentDate = paymentDate == null ? null : paymentDate.copy();
2174        dst.paymentAmount = paymentAmount == null ? null : paymentAmount.copy();
2175        dst.paymentIdentifier = paymentIdentifier == null ? null : paymentIdentifier.copy();
2176        if (detail != null) {
2177          dst.detail = new ArrayList<DetailsComponent>();
2178          for (DetailsComponent i : detail)
2179            dst.detail.add(i.copy());
2180        };
2181        dst.formCode = formCode == null ? null : formCode.copy();
2182        if (processNote != null) {
2183          dst.processNote = new ArrayList<NotesComponent>();
2184          for (NotesComponent i : processNote)
2185            dst.processNote.add(i.copy());
2186        };
2187        return dst;
2188      }
2189
2190      protected PaymentReconciliation typedCopy() {
2191        return copy();
2192      }
2193
2194      @Override
2195      public boolean equalsDeep(Base other_) {
2196        if (!super.equalsDeep(other_))
2197          return false;
2198        if (!(other_ instanceof PaymentReconciliation))
2199          return false;
2200        PaymentReconciliation o = (PaymentReconciliation) other_;
2201        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(period, o.period, true)
2202           && compareDeep(created, o.created, true) && compareDeep(paymentIssuer, o.paymentIssuer, true) && compareDeep(request, o.request, true)
2203           && compareDeep(requestor, o.requestor, true) && compareDeep(outcome, o.outcome, true) && compareDeep(disposition, o.disposition, true)
2204           && compareDeep(paymentDate, o.paymentDate, true) && compareDeep(paymentAmount, o.paymentAmount, true)
2205           && compareDeep(paymentIdentifier, o.paymentIdentifier, true) && compareDeep(detail, o.detail, true)
2206           && compareDeep(formCode, o.formCode, true) && compareDeep(processNote, o.processNote, true);
2207      }
2208
2209      @Override
2210      public boolean equalsShallow(Base other_) {
2211        if (!super.equalsShallow(other_))
2212          return false;
2213        if (!(other_ instanceof PaymentReconciliation))
2214          return false;
2215        PaymentReconciliation o = (PaymentReconciliation) other_;
2216        return compareValues(status, o.status, true) && compareValues(created, o.created, true) && compareValues(outcome, o.outcome, true)
2217           && compareValues(disposition, o.disposition, true) && compareValues(paymentDate, o.paymentDate, true)
2218          ;
2219      }
2220
2221      public boolean isEmpty() {
2222        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, period
2223          , created, paymentIssuer, request, requestor, outcome, disposition, paymentDate
2224          , paymentAmount, paymentIdentifier, detail, formCode, processNote);
2225      }
2226
2227  @Override
2228  public ResourceType getResourceType() {
2229    return ResourceType.PaymentReconciliation;
2230   }
2231
2232 /**
2233   * Search parameter: <b>identifier</b>
2234   * <p>
2235   * Description: <b>The business identifier of the ExplanationOfBenefit</b><br>
2236   * Type: <b>token</b><br>
2237   * Path: <b>PaymentReconciliation.identifier</b><br>
2238   * </p>
2239   */
2240  @SearchParamDefinition(name="identifier", path="PaymentReconciliation.identifier", description="The business identifier of the ExplanationOfBenefit", type="token" )
2241  public static final String SP_IDENTIFIER = "identifier";
2242 /**
2243   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2244   * <p>
2245   * Description: <b>The business identifier of the ExplanationOfBenefit</b><br>
2246   * Type: <b>token</b><br>
2247   * Path: <b>PaymentReconciliation.identifier</b><br>
2248   * </p>
2249   */
2250  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2251
2252 /**
2253   * Search parameter: <b>request</b>
2254   * <p>
2255   * Description: <b>The reference to the claim</b><br>
2256   * Type: <b>reference</b><br>
2257   * Path: <b>PaymentReconciliation.request</b><br>
2258   * </p>
2259   */
2260  @SearchParamDefinition(name="request", path="PaymentReconciliation.request", description="The reference to the claim", type="reference", target={Task.class } )
2261  public static final String SP_REQUEST = "request";
2262 /**
2263   * <b>Fluent Client</b> search parameter constant for <b>request</b>
2264   * <p>
2265   * Description: <b>The reference to the claim</b><br>
2266   * Type: <b>reference</b><br>
2267   * Path: <b>PaymentReconciliation.request</b><br>
2268   * </p>
2269   */
2270  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUEST = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUEST);
2271
2272/**
2273   * Constant for fluent queries to be used to add include statements. Specifies
2274   * the path value of "<b>PaymentReconciliation:request</b>".
2275   */
2276  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUEST = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:request").toLocked();
2277
2278 /**
2279   * Search parameter: <b>disposition</b>
2280   * <p>
2281   * Description: <b>The contents of the disposition message</b><br>
2282   * Type: <b>string</b><br>
2283   * Path: <b>PaymentReconciliation.disposition</b><br>
2284   * </p>
2285   */
2286  @SearchParamDefinition(name="disposition", path="PaymentReconciliation.disposition", description="The contents of the disposition message", type="string" )
2287  public static final String SP_DISPOSITION = "disposition";
2288 /**
2289   * <b>Fluent Client</b> search parameter constant for <b>disposition</b>
2290   * <p>
2291   * Description: <b>The contents of the disposition message</b><br>
2292   * Type: <b>string</b><br>
2293   * Path: <b>PaymentReconciliation.disposition</b><br>
2294   * </p>
2295   */
2296  public static final ca.uhn.fhir.rest.gclient.StringClientParam DISPOSITION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DISPOSITION);
2297
2298 /**
2299   * Search parameter: <b>created</b>
2300   * <p>
2301   * Description: <b>The creation date</b><br>
2302   * Type: <b>date</b><br>
2303   * Path: <b>PaymentReconciliation.created</b><br>
2304   * </p>
2305   */
2306  @SearchParamDefinition(name="created", path="PaymentReconciliation.created", description="The creation date", type="date" )
2307  public static final String SP_CREATED = "created";
2308 /**
2309   * <b>Fluent Client</b> search parameter constant for <b>created</b>
2310   * <p>
2311   * Description: <b>The creation date</b><br>
2312   * Type: <b>date</b><br>
2313   * Path: <b>PaymentReconciliation.created</b><br>
2314   * </p>
2315   */
2316  public static final ca.uhn.fhir.rest.gclient.DateClientParam CREATED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_CREATED);
2317
2318 /**
2319   * Search parameter: <b>payment-issuer</b>
2320   * <p>
2321   * Description: <b>The organization which generated this resource</b><br>
2322   * Type: <b>reference</b><br>
2323   * Path: <b>PaymentReconciliation.paymentIssuer</b><br>
2324   * </p>
2325   */
2326  @SearchParamDefinition(name="payment-issuer", path="PaymentReconciliation.paymentIssuer", description="The organization which generated this resource", type="reference", target={Organization.class } )
2327  public static final String SP_PAYMENT_ISSUER = "payment-issuer";
2328 /**
2329   * <b>Fluent Client</b> search parameter constant for <b>payment-issuer</b>
2330   * <p>
2331   * Description: <b>The organization which generated this resource</b><br>
2332   * Type: <b>reference</b><br>
2333   * Path: <b>PaymentReconciliation.paymentIssuer</b><br>
2334   * </p>
2335   */
2336  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PAYMENT_ISSUER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PAYMENT_ISSUER);
2337
2338/**
2339   * Constant for fluent queries to be used to add include statements. Specifies
2340   * the path value of "<b>PaymentReconciliation:payment-issuer</b>".
2341   */
2342  public static final ca.uhn.fhir.model.api.Include INCLUDE_PAYMENT_ISSUER = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:payment-issuer").toLocked();
2343
2344 /**
2345   * Search parameter: <b>outcome</b>
2346   * <p>
2347   * Description: <b>The processing outcome</b><br>
2348   * Type: <b>token</b><br>
2349   * Path: <b>PaymentReconciliation.outcome</b><br>
2350   * </p>
2351   */
2352  @SearchParamDefinition(name="outcome", path="PaymentReconciliation.outcome", description="The processing outcome", type="token" )
2353  public static final String SP_OUTCOME = "outcome";
2354 /**
2355   * <b>Fluent Client</b> search parameter constant for <b>outcome</b>
2356   * <p>
2357   * Description: <b>The processing outcome</b><br>
2358   * Type: <b>token</b><br>
2359   * Path: <b>PaymentReconciliation.outcome</b><br>
2360   * </p>
2361   */
2362  public static final ca.uhn.fhir.rest.gclient.TokenClientParam OUTCOME = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_OUTCOME);
2363
2364 /**
2365   * Search parameter: <b>requestor</b>
2366   * <p>
2367   * Description: <b>The reference to the provider who submitted the claim</b><br>
2368   * Type: <b>reference</b><br>
2369   * Path: <b>PaymentReconciliation.requestor</b><br>
2370   * </p>
2371   */
2372  @SearchParamDefinition(name="requestor", path="PaymentReconciliation.requestor", 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 } )
2373  public static final String SP_REQUESTOR = "requestor";
2374 /**
2375   * <b>Fluent Client</b> search parameter constant for <b>requestor</b>
2376   * <p>
2377   * Description: <b>The reference to the provider who submitted the claim</b><br>
2378   * Type: <b>reference</b><br>
2379   * Path: <b>PaymentReconciliation.requestor</b><br>
2380   * </p>
2381   */
2382  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUESTOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUESTOR);
2383
2384/**
2385   * Constant for fluent queries to be used to add include statements. Specifies
2386   * the path value of "<b>PaymentReconciliation:requestor</b>".
2387   */
2388  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUESTOR = new ca.uhn.fhir.model.api.Include("PaymentReconciliation:requestor").toLocked();
2389
2390 /**
2391   * Search parameter: <b>status</b>
2392   * <p>
2393   * Description: <b>The status of the payment reconciliation</b><br>
2394   * Type: <b>token</b><br>
2395   * Path: <b>PaymentReconciliation.status</b><br>
2396   * </p>
2397   */
2398  @SearchParamDefinition(name="status", path="PaymentReconciliation.status", description="The status of the payment reconciliation", type="token" )
2399  public static final String SP_STATUS = "status";
2400 /**
2401   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2402   * <p>
2403   * Description: <b>The status of the payment reconciliation</b><br>
2404   * Type: <b>token</b><br>
2405   * Path: <b>PaymentReconciliation.status</b><br>
2406   * </p>
2407   */
2408  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2409
2410
2411}
2412