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;
038
039import ca.uhn.fhir.model.api.annotation.Child;
040import ca.uhn.fhir.model.api.annotation.Description;
041import ca.uhn.fhir.model.api.annotation.ResourceDef;
042import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
043
044/**
045 * This resource provides the insurance enrollment details to the insurer
046 * regarding a specified coverage.
047 */
048@ResourceDef(name = "EnrollmentRequest", profile = "http://hl7.org/fhir/StructureDefinition/EnrollmentRequest")
049public class EnrollmentRequest extends DomainResource {
050
051  public enum EnrollmentRequestStatus {
052    /**
053     * The instance is currently in-force.
054     */
055    ACTIVE,
056    /**
057     * The instance is withdrawn, rescinded or reversed.
058     */
059    CANCELLED,
060    /**
061     * A new instance the contents of which is not complete.
062     */
063    DRAFT,
064    /**
065     * The instance was entered in error.
066     */
067    ENTEREDINERROR,
068    /**
069     * added to help the parsers with the generic types
070     */
071    NULL;
072
073    public static EnrollmentRequestStatus fromCode(String codeString) throws FHIRException {
074      if (codeString == null || "".equals(codeString))
075        return null;
076      if ("active".equals(codeString))
077        return ACTIVE;
078      if ("cancelled".equals(codeString))
079        return CANCELLED;
080      if ("draft".equals(codeString))
081        return DRAFT;
082      if ("entered-in-error".equals(codeString))
083        return ENTEREDINERROR;
084      if (Configuration.isAcceptInvalidEnums())
085        return null;
086      else
087        throw new FHIRException("Unknown EnrollmentRequestStatus code '" + codeString + "'");
088    }
089
090    public String toCode() {
091      switch (this) {
092      case ACTIVE:
093        return "active";
094      case CANCELLED:
095        return "cancelled";
096      case DRAFT:
097        return "draft";
098      case ENTEREDINERROR:
099        return "entered-in-error";
100      case NULL:
101        return null;
102      default:
103        return "?";
104      }
105    }
106
107    public String getSystem() {
108      switch (this) {
109      case ACTIVE:
110        return "http://hl7.org/fhir/fm-status";
111      case CANCELLED:
112        return "http://hl7.org/fhir/fm-status";
113      case DRAFT:
114        return "http://hl7.org/fhir/fm-status";
115      case ENTEREDINERROR:
116        return "http://hl7.org/fhir/fm-status";
117      case NULL:
118        return null;
119      default:
120        return "?";
121      }
122    }
123
124    public String getDefinition() {
125      switch (this) {
126      case ACTIVE:
127        return "The instance is currently in-force.";
128      case CANCELLED:
129        return "The instance is withdrawn, rescinded or reversed.";
130      case DRAFT:
131        return "A new instance the contents of which is not complete.";
132      case ENTEREDINERROR:
133        return "The instance was entered in error.";
134      case NULL:
135        return null;
136      default:
137        return "?";
138      }
139    }
140
141    public String getDisplay() {
142      switch (this) {
143      case ACTIVE:
144        return "Active";
145      case CANCELLED:
146        return "Cancelled";
147      case DRAFT:
148        return "Draft";
149      case ENTEREDINERROR:
150        return "Entered in Error";
151      case NULL:
152        return null;
153      default:
154        return "?";
155      }
156    }
157  }
158
159  public static class EnrollmentRequestStatusEnumFactory implements EnumFactory<EnrollmentRequestStatus> {
160    public EnrollmentRequestStatus fromCode(String codeString) throws IllegalArgumentException {
161      if (codeString == null || "".equals(codeString))
162        if (codeString == null || "".equals(codeString))
163          return null;
164      if ("active".equals(codeString))
165        return EnrollmentRequestStatus.ACTIVE;
166      if ("cancelled".equals(codeString))
167        return EnrollmentRequestStatus.CANCELLED;
168      if ("draft".equals(codeString))
169        return EnrollmentRequestStatus.DRAFT;
170      if ("entered-in-error".equals(codeString))
171        return EnrollmentRequestStatus.ENTEREDINERROR;
172      throw new IllegalArgumentException("Unknown EnrollmentRequestStatus code '" + codeString + "'");
173    }
174
175    public Enumeration<EnrollmentRequestStatus> fromType(PrimitiveType<?> code) throws FHIRException {
176      if (code == null)
177        return null;
178      if (code.isEmpty())
179        return new Enumeration<EnrollmentRequestStatus>(this, EnrollmentRequestStatus.NULL, code);
180      String codeString = code.asStringValue();
181      if (codeString == null || "".equals(codeString))
182        return new Enumeration<EnrollmentRequestStatus>(this, EnrollmentRequestStatus.NULL, code);
183      if ("active".equals(codeString))
184        return new Enumeration<EnrollmentRequestStatus>(this, EnrollmentRequestStatus.ACTIVE, code);
185      if ("cancelled".equals(codeString))
186        return new Enumeration<EnrollmentRequestStatus>(this, EnrollmentRequestStatus.CANCELLED, code);
187      if ("draft".equals(codeString))
188        return new Enumeration<EnrollmentRequestStatus>(this, EnrollmentRequestStatus.DRAFT, code);
189      if ("entered-in-error".equals(codeString))
190        return new Enumeration<EnrollmentRequestStatus>(this, EnrollmentRequestStatus.ENTEREDINERROR, code);
191      throw new FHIRException("Unknown EnrollmentRequestStatus code '" + codeString + "'");
192    }
193
194    public String toCode(EnrollmentRequestStatus code) {
195      if (code == EnrollmentRequestStatus.ACTIVE)
196        return "active";
197      if (code == EnrollmentRequestStatus.CANCELLED)
198        return "cancelled";
199      if (code == EnrollmentRequestStatus.DRAFT)
200        return "draft";
201      if (code == EnrollmentRequestStatus.ENTEREDINERROR)
202        return "entered-in-error";
203      return "?";
204    }
205
206    public String toSystem(EnrollmentRequestStatus code) {
207      return code.getSystem();
208    }
209  }
210
211  /**
212   * The Response business identifier.
213   */
214  @Child(name = "identifier", type = {
215      Identifier.class }, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
216  @Description(shortDefinition = "Business Identifier", formalDefinition = "The Response business identifier.")
217  protected List<Identifier> identifier;
218
219  /**
220   * The status of the resource instance.
221   */
222  @Child(name = "status", type = { CodeType.class }, order = 1, min = 0, max = 1, modifier = true, summary = true)
223  @Description(shortDefinition = "active | cancelled | draft | entered-in-error", formalDefinition = "The status of the resource instance.")
224  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/fm-status")
225  protected Enumeration<EnrollmentRequestStatus> status;
226
227  /**
228   * The date when this resource was created.
229   */
230  @Child(name = "created", type = {
231      DateTimeType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
232  @Description(shortDefinition = "Creation date", formalDefinition = "The date when this resource was created.")
233  protected DateTimeType created;
234
235  /**
236   * The Insurer who is target of the request.
237   */
238  @Child(name = "insurer", type = {
239      Organization.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
240  @Description(shortDefinition = "Target", formalDefinition = "The Insurer who is target  of the request.")
241  protected Reference insurer;
242
243  /**
244   * The actual object that is the target of the reference (The Insurer who is
245   * target of the request.)
246   */
247  protected Organization insurerTarget;
248
249  /**
250   * The practitioner who is responsible for the services rendered to the patient.
251   */
252  @Child(name = "provider", type = { Practitioner.class, PractitionerRole.class,
253      Organization.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
254  @Description(shortDefinition = "Responsible practitioner", formalDefinition = "The practitioner who is responsible for the services rendered to the patient.")
255  protected Reference provider;
256
257  /**
258   * The actual object that is the target of the reference (The practitioner who
259   * is responsible for the services rendered to the patient.)
260   */
261  protected Resource providerTarget;
262
263  /**
264   * Patient Resource.
265   */
266  @Child(name = "candidate", type = { Patient.class }, order = 5, min = 0, max = 1, modifier = false, summary = false)
267  @Description(shortDefinition = "The subject to be enrolled", formalDefinition = "Patient Resource.")
268  protected Reference candidate;
269
270  /**
271   * The actual object that is the target of the reference (Patient Resource.)
272   */
273  protected Patient candidateTarget;
274
275  /**
276   * Reference to the program or plan identification, underwriter or payor.
277   */
278  @Child(name = "coverage", type = { Coverage.class }, order = 6, min = 0, max = 1, modifier = false, summary = false)
279  @Description(shortDefinition = "Insurance information", formalDefinition = "Reference to the program or plan identification, underwriter or payor.")
280  protected Reference coverage;
281
282  /**
283   * The actual object that is the target of the reference (Reference to the
284   * program or plan identification, underwriter or payor.)
285   */
286  protected Coverage coverageTarget;
287
288  private static final long serialVersionUID = 631501951L;
289
290  /**
291   * Constructor
292   */
293  public EnrollmentRequest() {
294    super();
295  }
296
297  /**
298   * @return {@link #identifier} (The Response business identifier.)
299   */
300  public List<Identifier> getIdentifier() {
301    if (this.identifier == null)
302      this.identifier = new ArrayList<Identifier>();
303    return this.identifier;
304  }
305
306  /**
307   * @return Returns a reference to <code>this</code> for easy method chaining
308   */
309  public EnrollmentRequest setIdentifier(List<Identifier> theIdentifier) {
310    this.identifier = theIdentifier;
311    return this;
312  }
313
314  public boolean hasIdentifier() {
315    if (this.identifier == null)
316      return false;
317    for (Identifier item : this.identifier)
318      if (!item.isEmpty())
319        return true;
320    return false;
321  }
322
323  public Identifier addIdentifier() { // 3
324    Identifier t = new Identifier();
325    if (this.identifier == null)
326      this.identifier = new ArrayList<Identifier>();
327    this.identifier.add(t);
328    return t;
329  }
330
331  public EnrollmentRequest addIdentifier(Identifier t) { // 3
332    if (t == null)
333      return this;
334    if (this.identifier == null)
335      this.identifier = new ArrayList<Identifier>();
336    this.identifier.add(t);
337    return this;
338  }
339
340  /**
341   * @return The first repetition of repeating field {@link #identifier}, creating
342   *         it if it does not already exist
343   */
344  public Identifier getIdentifierFirstRep() {
345    if (getIdentifier().isEmpty()) {
346      addIdentifier();
347    }
348    return getIdentifier().get(0);
349  }
350
351  /**
352   * @return {@link #status} (The status of the resource instance.). This is the
353   *         underlying object with id, value and extensions. The accessor
354   *         "getStatus" gives direct access to the value
355   */
356  public Enumeration<EnrollmentRequestStatus> getStatusElement() {
357    if (this.status == null)
358      if (Configuration.errorOnAutoCreate())
359        throw new Error("Attempt to auto-create EnrollmentRequest.status");
360      else if (Configuration.doAutoCreate())
361        this.status = new Enumeration<EnrollmentRequestStatus>(new EnrollmentRequestStatusEnumFactory()); // bb
362    return this.status;
363  }
364
365  public boolean hasStatusElement() {
366    return this.status != null && !this.status.isEmpty();
367  }
368
369  public boolean hasStatus() {
370    return this.status != null && !this.status.isEmpty();
371  }
372
373  /**
374   * @param value {@link #status} (The status of the resource instance.). This is
375   *              the underlying object with id, value and extensions. The
376   *              accessor "getStatus" gives direct access to the value
377   */
378  public EnrollmentRequest setStatusElement(Enumeration<EnrollmentRequestStatus> value) {
379    this.status = value;
380    return this;
381  }
382
383  /**
384   * @return The status of the resource instance.
385   */
386  public EnrollmentRequestStatus getStatus() {
387    return this.status == null ? null : this.status.getValue();
388  }
389
390  /**
391   * @param value The status of the resource instance.
392   */
393  public EnrollmentRequest setStatus(EnrollmentRequestStatus value) {
394    if (value == null)
395      this.status = null;
396    else {
397      if (this.status == null)
398        this.status = new Enumeration<EnrollmentRequestStatus>(new EnrollmentRequestStatusEnumFactory());
399      this.status.setValue(value);
400    }
401    return this;
402  }
403
404  /**
405   * @return {@link #created} (The date when this resource was created.). This is
406   *         the underlying object with id, value and extensions. The accessor
407   *         "getCreated" gives direct access to the value
408   */
409  public DateTimeType getCreatedElement() {
410    if (this.created == null)
411      if (Configuration.errorOnAutoCreate())
412        throw new Error("Attempt to auto-create EnrollmentRequest.created");
413      else if (Configuration.doAutoCreate())
414        this.created = new DateTimeType(); // bb
415    return this.created;
416  }
417
418  public boolean hasCreatedElement() {
419    return this.created != null && !this.created.isEmpty();
420  }
421
422  public boolean hasCreated() {
423    return this.created != null && !this.created.isEmpty();
424  }
425
426  /**
427   * @param value {@link #created} (The date when this resource was created.).
428   *              This is the underlying object with id, value and extensions. The
429   *              accessor "getCreated" gives direct access to the value
430   */
431  public EnrollmentRequest setCreatedElement(DateTimeType value) {
432    this.created = value;
433    return this;
434  }
435
436  /**
437   * @return The date when this resource was created.
438   */
439  public Date getCreated() {
440    return this.created == null ? null : this.created.getValue();
441  }
442
443  /**
444   * @param value The date when this resource was created.
445   */
446  public EnrollmentRequest setCreated(Date value) {
447    if (value == null)
448      this.created = null;
449    else {
450      if (this.created == null)
451        this.created = new DateTimeType();
452      this.created.setValue(value);
453    }
454    return this;
455  }
456
457  /**
458   * @return {@link #insurer} (The Insurer who is target of the request.)
459   */
460  public Reference getInsurer() {
461    if (this.insurer == null)
462      if (Configuration.errorOnAutoCreate())
463        throw new Error("Attempt to auto-create EnrollmentRequest.insurer");
464      else if (Configuration.doAutoCreate())
465        this.insurer = new Reference(); // cc
466    return this.insurer;
467  }
468
469  public boolean hasInsurer() {
470    return this.insurer != null && !this.insurer.isEmpty();
471  }
472
473  /**
474   * @param value {@link #insurer} (The Insurer who is target of the request.)
475   */
476  public EnrollmentRequest setInsurer(Reference value) {
477    this.insurer = value;
478    return this;
479  }
480
481  /**
482   * @return {@link #insurer} The actual object that is the target of the
483   *         reference. The reference library doesn't populate this, but you can
484   *         use it to hold the resource if you resolve it. (The Insurer who is
485   *         target of the request.)
486   */
487  public Organization getInsurerTarget() {
488    if (this.insurerTarget == null)
489      if (Configuration.errorOnAutoCreate())
490        throw new Error("Attempt to auto-create EnrollmentRequest.insurer");
491      else if (Configuration.doAutoCreate())
492        this.insurerTarget = new Organization(); // aa
493    return this.insurerTarget;
494  }
495
496  /**
497   * @param value {@link #insurer} The actual object that is the target of the
498   *              reference. The reference library doesn't use these, but you can
499   *              use it to hold the resource if you resolve it. (The Insurer who
500   *              is target of the request.)
501   */
502  public EnrollmentRequest setInsurerTarget(Organization value) {
503    this.insurerTarget = value;
504    return this;
505  }
506
507  /**
508   * @return {@link #provider} (The practitioner who is responsible for the
509   *         services rendered to the patient.)
510   */
511  public Reference getProvider() {
512    if (this.provider == null)
513      if (Configuration.errorOnAutoCreate())
514        throw new Error("Attempt to auto-create EnrollmentRequest.provider");
515      else if (Configuration.doAutoCreate())
516        this.provider = new Reference(); // cc
517    return this.provider;
518  }
519
520  public boolean hasProvider() {
521    return this.provider != null && !this.provider.isEmpty();
522  }
523
524  /**
525   * @param value {@link #provider} (The practitioner who is responsible for the
526   *              services rendered to the patient.)
527   */
528  public EnrollmentRequest setProvider(Reference value) {
529    this.provider = value;
530    return this;
531  }
532
533  /**
534   * @return {@link #provider} The actual object that is the target of the
535   *         reference. The reference library doesn't populate this, but you can
536   *         use it to hold the resource if you resolve it. (The practitioner who
537   *         is responsible for the services rendered to the patient.)
538   */
539  public Resource getProviderTarget() {
540    return this.providerTarget;
541  }
542
543  /**
544   * @param value {@link #provider} The actual object that is the target of the
545   *              reference. The reference library doesn't use these, but you can
546   *              use it to hold the resource if you resolve it. (The practitioner
547   *              who is responsible for the services rendered to the patient.)
548   */
549  public EnrollmentRequest setProviderTarget(Resource value) {
550    this.providerTarget = value;
551    return this;
552  }
553
554  /**
555   * @return {@link #candidate} (Patient Resource.)
556   */
557  public Reference getCandidate() {
558    if (this.candidate == null)
559      if (Configuration.errorOnAutoCreate())
560        throw new Error("Attempt to auto-create EnrollmentRequest.candidate");
561      else if (Configuration.doAutoCreate())
562        this.candidate = new Reference(); // cc
563    return this.candidate;
564  }
565
566  public boolean hasCandidate() {
567    return this.candidate != null && !this.candidate.isEmpty();
568  }
569
570  /**
571   * @param value {@link #candidate} (Patient Resource.)
572   */
573  public EnrollmentRequest setCandidate(Reference value) {
574    this.candidate = value;
575    return this;
576  }
577
578  /**
579   * @return {@link #candidate} The actual object that is the target of the
580   *         reference. The reference library doesn't populate this, but you can
581   *         use it to hold the resource if you resolve it. (Patient Resource.)
582   */
583  public Patient getCandidateTarget() {
584    if (this.candidateTarget == null)
585      if (Configuration.errorOnAutoCreate())
586        throw new Error("Attempt to auto-create EnrollmentRequest.candidate");
587      else if (Configuration.doAutoCreate())
588        this.candidateTarget = new Patient(); // aa
589    return this.candidateTarget;
590  }
591
592  /**
593   * @param value {@link #candidate} The actual object that is the target of the
594   *              reference. The reference library doesn't use these, but you can
595   *              use it to hold the resource if you resolve it. (Patient
596   *              Resource.)
597   */
598  public EnrollmentRequest setCandidateTarget(Patient value) {
599    this.candidateTarget = value;
600    return this;
601  }
602
603  /**
604   * @return {@link #coverage} (Reference to the program or plan identification,
605   *         underwriter or payor.)
606   */
607  public Reference getCoverage() {
608    if (this.coverage == null)
609      if (Configuration.errorOnAutoCreate())
610        throw new Error("Attempt to auto-create EnrollmentRequest.coverage");
611      else if (Configuration.doAutoCreate())
612        this.coverage = new Reference(); // cc
613    return this.coverage;
614  }
615
616  public boolean hasCoverage() {
617    return this.coverage != null && !this.coverage.isEmpty();
618  }
619
620  /**
621   * @param value {@link #coverage} (Reference to the program or plan
622   *              identification, underwriter or payor.)
623   */
624  public EnrollmentRequest setCoverage(Reference value) {
625    this.coverage = value;
626    return this;
627  }
628
629  /**
630   * @return {@link #coverage} The actual object that is the target of the
631   *         reference. The reference library doesn't populate this, but you can
632   *         use it to hold the resource if you resolve it. (Reference to the
633   *         program or plan identification, underwriter or payor.)
634   */
635  public Coverage getCoverageTarget() {
636    if (this.coverageTarget == null)
637      if (Configuration.errorOnAutoCreate())
638        throw new Error("Attempt to auto-create EnrollmentRequest.coverage");
639      else if (Configuration.doAutoCreate())
640        this.coverageTarget = new Coverage(); // aa
641    return this.coverageTarget;
642  }
643
644  /**
645   * @param value {@link #coverage} The actual object that is the target of the
646   *              reference. The reference library doesn't use these, but you can
647   *              use it to hold the resource if you resolve it. (Reference to the
648   *              program or plan identification, underwriter or payor.)
649   */
650  public EnrollmentRequest setCoverageTarget(Coverage value) {
651    this.coverageTarget = value;
652    return this;
653  }
654
655  protected void listChildren(List<Property> children) {
656    super.listChildren(children);
657    children.add(new Property("identifier", "Identifier", "The Response business identifier.", 0,
658        java.lang.Integer.MAX_VALUE, identifier));
659    children.add(new Property("status", "code", "The status of the resource instance.", 0, 1, status));
660    children.add(new Property("created", "dateTime", "The date when this resource was created.", 0, 1, created));
661    children.add(new Property("insurer", "Reference(Organization)", "The Insurer who is target  of the request.", 0, 1,
662        insurer));
663    children.add(new Property("provider", "Reference(Practitioner|PractitionerRole|Organization)",
664        "The practitioner who is responsible for the services rendered to the patient.", 0, 1, provider));
665    children.add(new Property("candidate", "Reference(Patient)", "Patient Resource.", 0, 1, candidate));
666    children.add(new Property("coverage", "Reference(Coverage)",
667        "Reference to the program or plan identification, underwriter or payor.", 0, 1, coverage));
668  }
669
670  @Override
671  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
672    switch (_hash) {
673    case -1618432855:
674      /* identifier */ return new Property("identifier", "Identifier", "The Response business identifier.", 0,
675          java.lang.Integer.MAX_VALUE, identifier);
676    case -892481550:
677      /* status */ return new Property("status", "code", "The status of the resource instance.", 0, 1, status);
678    case 1028554472:
679      /* created */ return new Property("created", "dateTime", "The date when this resource was created.", 0, 1,
680          created);
681    case 1957615864:
682      /* insurer */ return new Property("insurer", "Reference(Organization)",
683          "The Insurer who is target  of the request.", 0, 1, insurer);
684    case -987494927:
685      /* provider */ return new Property("provider", "Reference(Practitioner|PractitionerRole|Organization)",
686          "The practitioner who is responsible for the services rendered to the patient.", 0, 1, provider);
687    case 508663171:
688      /* candidate */ return new Property("candidate", "Reference(Patient)", "Patient Resource.", 0, 1, candidate);
689    case -351767064:
690      /* coverage */ return new Property("coverage", "Reference(Coverage)",
691          "Reference to the program or plan identification, underwriter or payor.", 0, 1, coverage);
692    default:
693      return super.getNamedProperty(_hash, _name, _checkValid);
694    }
695
696  }
697
698  @Override
699  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
700    switch (hash) {
701    case -1618432855:
702      /* identifier */ return this.identifier == null ? new Base[0]
703          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
704    case -892481550:
705      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<EnrollmentRequestStatus>
706    case 1028554472:
707      /* created */ return this.created == null ? new Base[0] : new Base[] { this.created }; // DateTimeType
708    case 1957615864:
709      /* insurer */ return this.insurer == null ? new Base[0] : new Base[] { this.insurer }; // Reference
710    case -987494927:
711      /* provider */ return this.provider == null ? new Base[0] : new Base[] { this.provider }; // Reference
712    case 508663171:
713      /* candidate */ return this.candidate == null ? new Base[0] : new Base[] { this.candidate }; // Reference
714    case -351767064:
715      /* coverage */ return this.coverage == null ? new Base[0] : new Base[] { this.coverage }; // Reference
716    default:
717      return super.getProperty(hash, name, checkValid);
718    }
719
720  }
721
722  @Override
723  public Base setProperty(int hash, String name, Base value) throws FHIRException {
724    switch (hash) {
725    case -1618432855: // identifier
726      this.getIdentifier().add(castToIdentifier(value)); // Identifier
727      return value;
728    case -892481550: // status
729      value = new EnrollmentRequestStatusEnumFactory().fromType(castToCode(value));
730      this.status = (Enumeration) value; // Enumeration<EnrollmentRequestStatus>
731      return value;
732    case 1028554472: // created
733      this.created = castToDateTime(value); // DateTimeType
734      return value;
735    case 1957615864: // insurer
736      this.insurer = castToReference(value); // Reference
737      return value;
738    case -987494927: // provider
739      this.provider = castToReference(value); // Reference
740      return value;
741    case 508663171: // candidate
742      this.candidate = castToReference(value); // Reference
743      return value;
744    case -351767064: // coverage
745      this.coverage = castToReference(value); // Reference
746      return value;
747    default:
748      return super.setProperty(hash, name, value);
749    }
750
751  }
752
753  @Override
754  public Base setProperty(String name, Base value) throws FHIRException {
755    if (name.equals("identifier")) {
756      this.getIdentifier().add(castToIdentifier(value));
757    } else if (name.equals("status")) {
758      value = new EnrollmentRequestStatusEnumFactory().fromType(castToCode(value));
759      this.status = (Enumeration) value; // Enumeration<EnrollmentRequestStatus>
760    } else if (name.equals("created")) {
761      this.created = castToDateTime(value); // DateTimeType
762    } else if (name.equals("insurer")) {
763      this.insurer = castToReference(value); // Reference
764    } else if (name.equals("provider")) {
765      this.provider = castToReference(value); // Reference
766    } else if (name.equals("candidate")) {
767      this.candidate = castToReference(value); // Reference
768    } else if (name.equals("coverage")) {
769      this.coverage = castToReference(value); // Reference
770    } else
771      return super.setProperty(name, value);
772    return value;
773  }
774
775  @Override
776  public void removeChild(String name, Base value) throws FHIRException {
777    if (name.equals("identifier")) {
778      this.getIdentifier().remove(castToIdentifier(value));
779    } else if (name.equals("status")) {
780      this.status = null;
781    } else if (name.equals("created")) {
782      this.created = null;
783    } else if (name.equals("insurer")) {
784      this.insurer = null;
785    } else if (name.equals("provider")) {
786      this.provider = null;
787    } else if (name.equals("candidate")) {
788      this.candidate = null;
789    } else if (name.equals("coverage")) {
790      this.coverage = null;
791    } else
792      super.removeChild(name, value);
793    
794  }
795
796  @Override
797  public Base makeProperty(int hash, String name) throws FHIRException {
798    switch (hash) {
799    case -1618432855:
800      return addIdentifier();
801    case -892481550:
802      return getStatusElement();
803    case 1028554472:
804      return getCreatedElement();
805    case 1957615864:
806      return getInsurer();
807    case -987494927:
808      return getProvider();
809    case 508663171:
810      return getCandidate();
811    case -351767064:
812      return getCoverage();
813    default:
814      return super.makeProperty(hash, name);
815    }
816
817  }
818
819  @Override
820  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
821    switch (hash) {
822    case -1618432855:
823      /* identifier */ return new String[] { "Identifier" };
824    case -892481550:
825      /* status */ return new String[] { "code" };
826    case 1028554472:
827      /* created */ return new String[] { "dateTime" };
828    case 1957615864:
829      /* insurer */ return new String[] { "Reference" };
830    case -987494927:
831      /* provider */ return new String[] { "Reference" };
832    case 508663171:
833      /* candidate */ return new String[] { "Reference" };
834    case -351767064:
835      /* coverage */ return new String[] { "Reference" };
836    default:
837      return super.getTypesForProperty(hash, name);
838    }
839
840  }
841
842  @Override
843  public Base addChild(String name) throws FHIRException {
844    if (name.equals("identifier")) {
845      return addIdentifier();
846    } else if (name.equals("status")) {
847      throw new FHIRException("Cannot call addChild on a singleton property EnrollmentRequest.status");
848    } else if (name.equals("created")) {
849      throw new FHIRException("Cannot call addChild on a singleton property EnrollmentRequest.created");
850    } else if (name.equals("insurer")) {
851      this.insurer = new Reference();
852      return this.insurer;
853    } else if (name.equals("provider")) {
854      this.provider = new Reference();
855      return this.provider;
856    } else if (name.equals("candidate")) {
857      this.candidate = new Reference();
858      return this.candidate;
859    } else if (name.equals("coverage")) {
860      this.coverage = new Reference();
861      return this.coverage;
862    } else
863      return super.addChild(name);
864  }
865
866  public String fhirType() {
867    return "EnrollmentRequest";
868
869  }
870
871  public EnrollmentRequest copy() {
872    EnrollmentRequest dst = new EnrollmentRequest();
873    copyValues(dst);
874    return dst;
875  }
876
877  public void copyValues(EnrollmentRequest dst) {
878    super.copyValues(dst);
879    if (identifier != null) {
880      dst.identifier = new ArrayList<Identifier>();
881      for (Identifier i : identifier)
882        dst.identifier.add(i.copy());
883    }
884    ;
885    dst.status = status == null ? null : status.copy();
886    dst.created = created == null ? null : created.copy();
887    dst.insurer = insurer == null ? null : insurer.copy();
888    dst.provider = provider == null ? null : provider.copy();
889    dst.candidate = candidate == null ? null : candidate.copy();
890    dst.coverage = coverage == null ? null : coverage.copy();
891  }
892
893  protected EnrollmentRequest typedCopy() {
894    return copy();
895  }
896
897  @Override
898  public boolean equalsDeep(Base other_) {
899    if (!super.equalsDeep(other_))
900      return false;
901    if (!(other_ instanceof EnrollmentRequest))
902      return false;
903    EnrollmentRequest o = (EnrollmentRequest) other_;
904    return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true)
905        && compareDeep(created, o.created, true) && compareDeep(insurer, o.insurer, true)
906        && compareDeep(provider, o.provider, true) && compareDeep(candidate, o.candidate, true)
907        && compareDeep(coverage, o.coverage, true);
908  }
909
910  @Override
911  public boolean equalsShallow(Base other_) {
912    if (!super.equalsShallow(other_))
913      return false;
914    if (!(other_ instanceof EnrollmentRequest))
915      return false;
916    EnrollmentRequest o = (EnrollmentRequest) other_;
917    return compareValues(status, o.status, true) && compareValues(created, o.created, true);
918  }
919
920  public boolean isEmpty() {
921    return super.isEmpty()
922        && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, created, insurer, provider, candidate, coverage);
923  }
924
925  @Override
926  public ResourceType getResourceType() {
927    return ResourceType.EnrollmentRequest;
928  }
929
930  /**
931   * Search parameter: <b>identifier</b>
932   * <p>
933   * Description: <b>The business identifier of the Enrollment</b><br>
934   * Type: <b>token</b><br>
935   * Path: <b>EnrollmentRequest.identifier</b><br>
936   * </p>
937   */
938  @SearchParamDefinition(name = "identifier", path = "EnrollmentRequest.identifier", description = "The business identifier of the Enrollment", type = "token")
939  public static final String SP_IDENTIFIER = "identifier";
940  /**
941   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
942   * <p>
943   * Description: <b>The business identifier of the Enrollment</b><br>
944   * Type: <b>token</b><br>
945   * Path: <b>EnrollmentRequest.identifier</b><br>
946   * </p>
947   */
948  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
949      SP_IDENTIFIER);
950
951  /**
952   * Search parameter: <b>subject</b>
953   * <p>
954   * Description: <b>The party to be enrolled</b><br>
955   * Type: <b>reference</b><br>
956   * Path: <b>EnrollmentRequest.candidate</b><br>
957   * </p>
958   */
959  @SearchParamDefinition(name = "subject", path = "EnrollmentRequest.candidate", description = "The party to be enrolled", type = "reference", providesMembershipIn = {
960      @ca.uhn.fhir.model.api.annotation.Compartment(name = "Patient") }, target = { Patient.class })
961  public static final String SP_SUBJECT = "subject";
962  /**
963   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
964   * <p>
965   * Description: <b>The party to be enrolled</b><br>
966   * Type: <b>reference</b><br>
967   * Path: <b>EnrollmentRequest.candidate</b><br>
968   * </p>
969   */
970  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
971      SP_SUBJECT);
972
973  /**
974   * Constant for fluent queries to be used to add include statements. Specifies
975   * the path value of "<b>EnrollmentRequest:subject</b>".
976   */
977  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include(
978      "EnrollmentRequest:subject").toLocked();
979
980  /**
981   * Search parameter: <b>patient</b>
982   * <p>
983   * Description: <b>The party to be enrolled</b><br>
984   * Type: <b>reference</b><br>
985   * Path: <b>EnrollmentRequest.candidate</b><br>
986   * </p>
987   */
988  @SearchParamDefinition(name = "patient", path = "EnrollmentRequest.candidate", description = "The party to be enrolled", type = "reference", target = {
989      Patient.class })
990  public static final String SP_PATIENT = "patient";
991  /**
992   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
993   * <p>
994   * Description: <b>The party to be enrolled</b><br>
995   * Type: <b>reference</b><br>
996   * Path: <b>EnrollmentRequest.candidate</b><br>
997   * </p>
998   */
999  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
1000      SP_PATIENT);
1001
1002  /**
1003   * Constant for fluent queries to be used to add include statements. Specifies
1004   * the path value of "<b>EnrollmentRequest:patient</b>".
1005   */
1006  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include(
1007      "EnrollmentRequest:patient").toLocked();
1008
1009  /**
1010   * Search parameter: <b>status</b>
1011   * <p>
1012   * Description: <b>The status of the enrollment</b><br>
1013   * Type: <b>token</b><br>
1014   * Path: <b>EnrollmentRequest.status</b><br>
1015   * </p>
1016   */
1017  @SearchParamDefinition(name = "status", path = "EnrollmentRequest.status", description = "The status of the enrollment", type = "token")
1018  public static final String SP_STATUS = "status";
1019  /**
1020   * <b>Fluent Client</b> search parameter constant for <b>status</b>
1021   * <p>
1022   * Description: <b>The status of the enrollment</b><br>
1023   * Type: <b>token</b><br>
1024   * Path: <b>EnrollmentRequest.status</b><br>
1025   * </p>
1026   */
1027  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
1028      SP_STATUS);
1029
1030}