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