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