001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Sat, Nov 5, 2022 10:47+1100 for FHIR v5.0.0-ballot
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A record of a healthcare consumer?s  choices  or choices made on their behalf by a third party, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.
052 */
053@ResourceDef(name="Consent", profile="http://hl7.org/fhir/StructureDefinition/Consent")
054public class Consent extends DomainResource {
055
056    public enum ConsentState {
057        /**
058         * The consent is in development or awaiting use but is not yet intended to be acted upon.
059         */
060        DRAFT, 
061        /**
062         * The consent is to be followed and enforced.
063         */
064        ACTIVE, 
065        /**
066         * The consent is terminated or replaced.
067         */
068        INACTIVE, 
069        /**
070         * The consent development has been terminated prior to completion.
071         */
072        NOTDONE, 
073        /**
074         * The consent was created wrongly (e.g. wrong patient) and should be ignored.
075         */
076        ENTEREDINERROR, 
077        /**
078         * The resource is in an indeterminate state.
079         */
080        UNKNOWN, 
081        /**
082         * added to help the parsers with the generic types
083         */
084        NULL;
085        public static ConsentState fromCode(String codeString) throws FHIRException {
086            if (codeString == null || "".equals(codeString))
087                return null;
088        if ("draft".equals(codeString))
089          return DRAFT;
090        if ("active".equals(codeString))
091          return ACTIVE;
092        if ("inactive".equals(codeString))
093          return INACTIVE;
094        if ("not-done".equals(codeString))
095          return NOTDONE;
096        if ("entered-in-error".equals(codeString))
097          return ENTEREDINERROR;
098        if ("unknown".equals(codeString))
099          return UNKNOWN;
100        if (Configuration.isAcceptInvalidEnums())
101          return null;
102        else
103          throw new FHIRException("Unknown ConsentState code '"+codeString+"'");
104        }
105        public String toCode() {
106          switch (this) {
107            case DRAFT: return "draft";
108            case ACTIVE: return "active";
109            case INACTIVE: return "inactive";
110            case NOTDONE: return "not-done";
111            case ENTEREDINERROR: return "entered-in-error";
112            case UNKNOWN: return "unknown";
113            case NULL: return null;
114            default: return "?";
115          }
116        }
117        public String getSystem() {
118          switch (this) {
119            case DRAFT: return "http://hl7.org/fhir/consent-state-codes";
120            case ACTIVE: return "http://hl7.org/fhir/consent-state-codes";
121            case INACTIVE: return "http://hl7.org/fhir/consent-state-codes";
122            case NOTDONE: return "http://hl7.org/fhir/consent-state-codes";
123            case ENTEREDINERROR: return "http://hl7.org/fhir/consent-state-codes";
124            case UNKNOWN: return "http://hl7.org/fhir/consent-state-codes";
125            case NULL: return null;
126            default: return "?";
127          }
128        }
129        public String getDefinition() {
130          switch (this) {
131            case DRAFT: return "The consent is in development or awaiting use but is not yet intended to be acted upon.";
132            case ACTIVE: return "The consent is to be followed and enforced.";
133            case INACTIVE: return "The consent is terminated or replaced.";
134            case NOTDONE: return "The consent development has been terminated prior to completion.";
135            case ENTEREDINERROR: return "The consent was created wrongly (e.g. wrong patient) and should be ignored.";
136            case UNKNOWN: return "The resource is in an indeterminate state.";
137            case NULL: return null;
138            default: return "?";
139          }
140        }
141        public String getDisplay() {
142          switch (this) {
143            case DRAFT: return "Pending";
144            case ACTIVE: return "Active";
145            case INACTIVE: return "Inactive";
146            case NOTDONE: return "Abandoned";
147            case ENTEREDINERROR: return "Entered in Error";
148            case UNKNOWN: return "Unknown";
149            case NULL: return null;
150            default: return "?";
151          }
152        }
153    }
154
155  public static class ConsentStateEnumFactory implements EnumFactory<ConsentState> {
156    public ConsentState fromCode(String codeString) throws IllegalArgumentException {
157      if (codeString == null || "".equals(codeString))
158            if (codeString == null || "".equals(codeString))
159                return null;
160        if ("draft".equals(codeString))
161          return ConsentState.DRAFT;
162        if ("active".equals(codeString))
163          return ConsentState.ACTIVE;
164        if ("inactive".equals(codeString))
165          return ConsentState.INACTIVE;
166        if ("not-done".equals(codeString))
167          return ConsentState.NOTDONE;
168        if ("entered-in-error".equals(codeString))
169          return ConsentState.ENTEREDINERROR;
170        if ("unknown".equals(codeString))
171          return ConsentState.UNKNOWN;
172        throw new IllegalArgumentException("Unknown ConsentState code '"+codeString+"'");
173        }
174        public Enumeration<ConsentState> fromType(Base code) throws FHIRException {
175          if (code == null)
176            return null;
177          if (code.isEmpty())
178            return new Enumeration<ConsentState>(this);
179          String codeString = ((PrimitiveType) code).asStringValue();
180          if (codeString == null || "".equals(codeString))
181            return null;
182        if ("draft".equals(codeString))
183          return new Enumeration<ConsentState>(this, ConsentState.DRAFT);
184        if ("active".equals(codeString))
185          return new Enumeration<ConsentState>(this, ConsentState.ACTIVE);
186        if ("inactive".equals(codeString))
187          return new Enumeration<ConsentState>(this, ConsentState.INACTIVE);
188        if ("not-done".equals(codeString))
189          return new Enumeration<ConsentState>(this, ConsentState.NOTDONE);
190        if ("entered-in-error".equals(codeString))
191          return new Enumeration<ConsentState>(this, ConsentState.ENTEREDINERROR);
192        if ("unknown".equals(codeString))
193          return new Enumeration<ConsentState>(this, ConsentState.UNKNOWN);
194        throw new FHIRException("Unknown ConsentState code '"+codeString+"'");
195        }
196    public String toCode(ConsentState code) {
197      if (code == ConsentState.DRAFT)
198        return "draft";
199      if (code == ConsentState.ACTIVE)
200        return "active";
201      if (code == ConsentState.INACTIVE)
202        return "inactive";
203      if (code == ConsentState.NOTDONE)
204        return "not-done";
205      if (code == ConsentState.ENTEREDINERROR)
206        return "entered-in-error";
207      if (code == ConsentState.UNKNOWN)
208        return "unknown";
209      return "?";
210      }
211    public String toSystem(ConsentState code) {
212      return code.getSystem();
213      }
214    }
215
216    @Block()
217    public static class ConsentPolicyBasisComponent extends BackboneElement implements IBaseBackboneElement {
218        /**
219         * A Reference that identifies the policy the organization will enforce for this Consent.
220         */
221        @Child(name = "reference", type = {Reference.class}, order=1, min=0, max=1, modifier=false, summary=false)
222        @Description(shortDefinition="Reference backing policy resource", formalDefinition="A Reference that identifies the policy the organization will enforce for this Consent." )
223        protected Reference reference;
224
225        /**
226         * A URL that links to a computable version of the policy the organization will enforce for this Consent.
227         */
228        @Child(name = "url", type = {UrlType.class}, order=2, min=0, max=1, modifier=false, summary=false)
229        @Description(shortDefinition="URL to a computable backing policy", formalDefinition="A URL that links to a computable version of the policy the organization will enforce for this Consent." )
230        protected UrlType url;
231
232        private static final long serialVersionUID = 252506182L;
233
234    /**
235     * Constructor
236     */
237      public ConsentPolicyBasisComponent() {
238        super();
239      }
240
241        /**
242         * @return {@link #reference} (A Reference that identifies the policy the organization will enforce for this Consent.)
243         */
244        public Reference getReference() { 
245          if (this.reference == null)
246            if (Configuration.errorOnAutoCreate())
247              throw new Error("Attempt to auto-create ConsentPolicyBasisComponent.reference");
248            else if (Configuration.doAutoCreate())
249              this.reference = new Reference(); // cc
250          return this.reference;
251        }
252
253        public boolean hasReference() { 
254          return this.reference != null && !this.reference.isEmpty();
255        }
256
257        /**
258         * @param value {@link #reference} (A Reference that identifies the policy the organization will enforce for this Consent.)
259         */
260        public ConsentPolicyBasisComponent setReference(Reference value) { 
261          this.reference = value;
262          return this;
263        }
264
265        /**
266         * @return {@link #url} (A URL that links to a computable version of the policy the organization will enforce for this Consent.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
267         */
268        public UrlType getUrlElement() { 
269          if (this.url == null)
270            if (Configuration.errorOnAutoCreate())
271              throw new Error("Attempt to auto-create ConsentPolicyBasisComponent.url");
272            else if (Configuration.doAutoCreate())
273              this.url = new UrlType(); // bb
274          return this.url;
275        }
276
277        public boolean hasUrlElement() { 
278          return this.url != null && !this.url.isEmpty();
279        }
280
281        public boolean hasUrl() { 
282          return this.url != null && !this.url.isEmpty();
283        }
284
285        /**
286         * @param value {@link #url} (A URL that links to a computable version of the policy the organization will enforce for this Consent.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
287         */
288        public ConsentPolicyBasisComponent setUrlElement(UrlType value) { 
289          this.url = value;
290          return this;
291        }
292
293        /**
294         * @return A URL that links to a computable version of the policy the organization will enforce for this Consent.
295         */
296        public String getUrl() { 
297          return this.url == null ? null : this.url.getValue();
298        }
299
300        /**
301         * @param value A URL that links to a computable version of the policy the organization will enforce for this Consent.
302         */
303        public ConsentPolicyBasisComponent setUrl(String value) { 
304          if (Utilities.noString(value))
305            this.url = null;
306          else {
307            if (this.url == null)
308              this.url = new UrlType();
309            this.url.setValue(value);
310          }
311          return this;
312        }
313
314        protected void listChildren(List<Property> children) {
315          super.listChildren(children);
316          children.add(new Property("reference", "Reference(Any)", "A Reference that identifies the policy the organization will enforce for this Consent.", 0, 1, reference));
317          children.add(new Property("url", "url", "A URL that links to a computable version of the policy the organization will enforce for this Consent.", 0, 1, url));
318        }
319
320        @Override
321        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
322          switch (_hash) {
323          case -925155509: /*reference*/  return new Property("reference", "Reference(Any)", "A Reference that identifies the policy the organization will enforce for this Consent.", 0, 1, reference);
324          case 116079: /*url*/  return new Property("url", "url", "A URL that links to a computable version of the policy the organization will enforce for this Consent.", 0, 1, url);
325          default: return super.getNamedProperty(_hash, _name, _checkValid);
326          }
327
328        }
329
330      @Override
331      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
332        switch (hash) {
333        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Reference
334        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UrlType
335        default: return super.getProperty(hash, name, checkValid);
336        }
337
338      }
339
340      @Override
341      public Base setProperty(int hash, String name, Base value) throws FHIRException {
342        switch (hash) {
343        case -925155509: // reference
344          this.reference = TypeConvertor.castToReference(value); // Reference
345          return value;
346        case 116079: // url
347          this.url = TypeConvertor.castToUrl(value); // UrlType
348          return value;
349        default: return super.setProperty(hash, name, value);
350        }
351
352      }
353
354      @Override
355      public Base setProperty(String name, Base value) throws FHIRException {
356        if (name.equals("reference")) {
357          this.reference = TypeConvertor.castToReference(value); // Reference
358        } else if (name.equals("url")) {
359          this.url = TypeConvertor.castToUrl(value); // UrlType
360        } else
361          return super.setProperty(name, value);
362        return value;
363      }
364
365      @Override
366      public Base makeProperty(int hash, String name) throws FHIRException {
367        switch (hash) {
368        case -925155509:  return getReference();
369        case 116079:  return getUrlElement();
370        default: return super.makeProperty(hash, name);
371        }
372
373      }
374
375      @Override
376      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
377        switch (hash) {
378        case -925155509: /*reference*/ return new String[] {"Reference"};
379        case 116079: /*url*/ return new String[] {"url"};
380        default: return super.getTypesForProperty(hash, name);
381        }
382
383      }
384
385      @Override
386      public Base addChild(String name) throws FHIRException {
387        if (name.equals("reference")) {
388          this.reference = new Reference();
389          return this.reference;
390        }
391        else if (name.equals("url")) {
392          throw new FHIRException("Cannot call addChild on a primitive type Consent.policyBasis.url");
393        }
394        else
395          return super.addChild(name);
396      }
397
398      public ConsentPolicyBasisComponent copy() {
399        ConsentPolicyBasisComponent dst = new ConsentPolicyBasisComponent();
400        copyValues(dst);
401        return dst;
402      }
403
404      public void copyValues(ConsentPolicyBasisComponent dst) {
405        super.copyValues(dst);
406        dst.reference = reference == null ? null : reference.copy();
407        dst.url = url == null ? null : url.copy();
408      }
409
410      @Override
411      public boolean equalsDeep(Base other_) {
412        if (!super.equalsDeep(other_))
413          return false;
414        if (!(other_ instanceof ConsentPolicyBasisComponent))
415          return false;
416        ConsentPolicyBasisComponent o = (ConsentPolicyBasisComponent) other_;
417        return compareDeep(reference, o.reference, true) && compareDeep(url, o.url, true);
418      }
419
420      @Override
421      public boolean equalsShallow(Base other_) {
422        if (!super.equalsShallow(other_))
423          return false;
424        if (!(other_ instanceof ConsentPolicyBasisComponent))
425          return false;
426        ConsentPolicyBasisComponent o = (ConsentPolicyBasisComponent) other_;
427        return compareValues(url, o.url, true);
428      }
429
430      public boolean isEmpty() {
431        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(reference, url);
432      }
433
434  public String fhirType() {
435    return "Consent.policyBasis";
436
437  }
438
439  }
440
441    @Block()
442    public static class ConsentVerificationComponent extends BackboneElement implements IBaseBackboneElement {
443        /**
444         * Has the instruction been verified.
445         */
446        @Child(name = "verified", type = {BooleanType.class}, order=1, min=1, max=1, modifier=false, summary=true)
447        @Description(shortDefinition="Has been verified", formalDefinition="Has the instruction been verified." )
448        protected BooleanType verified;
449
450        /**
451         * Extensible list of verification type starting with verification and re-validation.
452         */
453        @Child(name = "verificationType", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
454        @Description(shortDefinition="Business case of verification", formalDefinition="Extensible list of verification type starting with verification and re-validation." )
455        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-verification")
456        protected CodeableConcept verificationType;
457
458        /**
459         * The person who conducted the verification/validation of the Grantor decision.
460         */
461        @Child(name = "verifiedBy", type = {Organization.class, Practitioner.class, PractitionerRole.class}, order=3, min=0, max=1, modifier=false, summary=false)
462        @Description(shortDefinition="Person conducting verification", formalDefinition="The person who conducted the verification/validation of the Grantor decision." )
463        protected Reference verifiedBy;
464
465        /**
466         * Who verified the instruction (Patient, Relative or other Authorized Person).
467         */
468        @Child(name = "verifiedWith", type = {Patient.class, RelatedPerson.class}, order=4, min=0, max=1, modifier=false, summary=false)
469        @Description(shortDefinition="Person who verified", formalDefinition="Who verified the instruction (Patient, Relative or other Authorized Person)." )
470        protected Reference verifiedWith;
471
472        /**
473         * Date(s) verification was collected.
474         */
475        @Child(name = "verificationDate", type = {DateTimeType.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
476        @Description(shortDefinition="When consent verified", formalDefinition="Date(s) verification was collected." )
477        protected List<DateTimeType> verificationDate;
478
479        private static final long serialVersionUID = -1266157329L;
480
481    /**
482     * Constructor
483     */
484      public ConsentVerificationComponent() {
485        super();
486      }
487
488    /**
489     * Constructor
490     */
491      public ConsentVerificationComponent(boolean verified) {
492        super();
493        this.setVerified(verified);
494      }
495
496        /**
497         * @return {@link #verified} (Has the instruction been verified.). This is the underlying object with id, value and extensions. The accessor "getVerified" gives direct access to the value
498         */
499        public BooleanType getVerifiedElement() { 
500          if (this.verified == null)
501            if (Configuration.errorOnAutoCreate())
502              throw new Error("Attempt to auto-create ConsentVerificationComponent.verified");
503            else if (Configuration.doAutoCreate())
504              this.verified = new BooleanType(); // bb
505          return this.verified;
506        }
507
508        public boolean hasVerifiedElement() { 
509          return this.verified != null && !this.verified.isEmpty();
510        }
511
512        public boolean hasVerified() { 
513          return this.verified != null && !this.verified.isEmpty();
514        }
515
516        /**
517         * @param value {@link #verified} (Has the instruction been verified.). This is the underlying object with id, value and extensions. The accessor "getVerified" gives direct access to the value
518         */
519        public ConsentVerificationComponent setVerifiedElement(BooleanType value) { 
520          this.verified = value;
521          return this;
522        }
523
524        /**
525         * @return Has the instruction been verified.
526         */
527        public boolean getVerified() { 
528          return this.verified == null || this.verified.isEmpty() ? false : this.verified.getValue();
529        }
530
531        /**
532         * @param value Has the instruction been verified.
533         */
534        public ConsentVerificationComponent setVerified(boolean value) { 
535            if (this.verified == null)
536              this.verified = new BooleanType();
537            this.verified.setValue(value);
538          return this;
539        }
540
541        /**
542         * @return {@link #verificationType} (Extensible list of verification type starting with verification and re-validation.)
543         */
544        public CodeableConcept getVerificationType() { 
545          if (this.verificationType == null)
546            if (Configuration.errorOnAutoCreate())
547              throw new Error("Attempt to auto-create ConsentVerificationComponent.verificationType");
548            else if (Configuration.doAutoCreate())
549              this.verificationType = new CodeableConcept(); // cc
550          return this.verificationType;
551        }
552
553        public boolean hasVerificationType() { 
554          return this.verificationType != null && !this.verificationType.isEmpty();
555        }
556
557        /**
558         * @param value {@link #verificationType} (Extensible list of verification type starting with verification and re-validation.)
559         */
560        public ConsentVerificationComponent setVerificationType(CodeableConcept value) { 
561          this.verificationType = value;
562          return this;
563        }
564
565        /**
566         * @return {@link #verifiedBy} (The person who conducted the verification/validation of the Grantor decision.)
567         */
568        public Reference getVerifiedBy() { 
569          if (this.verifiedBy == null)
570            if (Configuration.errorOnAutoCreate())
571              throw new Error("Attempt to auto-create ConsentVerificationComponent.verifiedBy");
572            else if (Configuration.doAutoCreate())
573              this.verifiedBy = new Reference(); // cc
574          return this.verifiedBy;
575        }
576
577        public boolean hasVerifiedBy() { 
578          return this.verifiedBy != null && !this.verifiedBy.isEmpty();
579        }
580
581        /**
582         * @param value {@link #verifiedBy} (The person who conducted the verification/validation of the Grantor decision.)
583         */
584        public ConsentVerificationComponent setVerifiedBy(Reference value) { 
585          this.verifiedBy = value;
586          return this;
587        }
588
589        /**
590         * @return {@link #verifiedWith} (Who verified the instruction (Patient, Relative or other Authorized Person).)
591         */
592        public Reference getVerifiedWith() { 
593          if (this.verifiedWith == null)
594            if (Configuration.errorOnAutoCreate())
595              throw new Error("Attempt to auto-create ConsentVerificationComponent.verifiedWith");
596            else if (Configuration.doAutoCreate())
597              this.verifiedWith = new Reference(); // cc
598          return this.verifiedWith;
599        }
600
601        public boolean hasVerifiedWith() { 
602          return this.verifiedWith != null && !this.verifiedWith.isEmpty();
603        }
604
605        /**
606         * @param value {@link #verifiedWith} (Who verified the instruction (Patient, Relative or other Authorized Person).)
607         */
608        public ConsentVerificationComponent setVerifiedWith(Reference value) { 
609          this.verifiedWith = value;
610          return this;
611        }
612
613        /**
614         * @return {@link #verificationDate} (Date(s) verification was collected.)
615         */
616        public List<DateTimeType> getVerificationDate() { 
617          if (this.verificationDate == null)
618            this.verificationDate = new ArrayList<DateTimeType>();
619          return this.verificationDate;
620        }
621
622        /**
623         * @return Returns a reference to <code>this</code> for easy method chaining
624         */
625        public ConsentVerificationComponent setVerificationDate(List<DateTimeType> theVerificationDate) { 
626          this.verificationDate = theVerificationDate;
627          return this;
628        }
629
630        public boolean hasVerificationDate() { 
631          if (this.verificationDate == null)
632            return false;
633          for (DateTimeType item : this.verificationDate)
634            if (!item.isEmpty())
635              return true;
636          return false;
637        }
638
639        /**
640         * @return {@link #verificationDate} (Date(s) verification was collected.)
641         */
642        public DateTimeType addVerificationDateElement() {//2 
643          DateTimeType t = new DateTimeType();
644          if (this.verificationDate == null)
645            this.verificationDate = new ArrayList<DateTimeType>();
646          this.verificationDate.add(t);
647          return t;
648        }
649
650        /**
651         * @param value {@link #verificationDate} (Date(s) verification was collected.)
652         */
653        public ConsentVerificationComponent addVerificationDate(Date value) { //1
654          DateTimeType t = new DateTimeType();
655          t.setValue(value);
656          if (this.verificationDate == null)
657            this.verificationDate = new ArrayList<DateTimeType>();
658          this.verificationDate.add(t);
659          return this;
660        }
661
662        /**
663         * @param value {@link #verificationDate} (Date(s) verification was collected.)
664         */
665        public boolean hasVerificationDate(Date value) { 
666          if (this.verificationDate == null)
667            return false;
668          for (DateTimeType v : this.verificationDate)
669            if (v.getValue().equals(value)) // dateTime
670              return true;
671          return false;
672        }
673
674        protected void listChildren(List<Property> children) {
675          super.listChildren(children);
676          children.add(new Property("verified", "boolean", "Has the instruction been verified.", 0, 1, verified));
677          children.add(new Property("verificationType", "CodeableConcept", "Extensible list of verification type starting with verification and re-validation.", 0, 1, verificationType));
678          children.add(new Property("verifiedBy", "Reference(Organization|Practitioner|PractitionerRole)", "The person who conducted the verification/validation of the Grantor decision.", 0, 1, verifiedBy));
679          children.add(new Property("verifiedWith", "Reference(Patient|RelatedPerson)", "Who verified the instruction (Patient, Relative or other Authorized Person).", 0, 1, verifiedWith));
680          children.add(new Property("verificationDate", "dateTime", "Date(s) verification was collected.", 0, java.lang.Integer.MAX_VALUE, verificationDate));
681        }
682
683        @Override
684        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
685          switch (_hash) {
686          case -1994383672: /*verified*/  return new Property("verified", "boolean", "Has the instruction been verified.", 0, 1, verified);
687          case 642733045: /*verificationType*/  return new Property("verificationType", "CodeableConcept", "Extensible list of verification type starting with verification and re-validation.", 0, 1, verificationType);
688          case -1047292609: /*verifiedBy*/  return new Property("verifiedBy", "Reference(Organization|Practitioner|PractitionerRole)", "The person who conducted the verification/validation of the Grantor decision.", 0, 1, verifiedBy);
689          case -1425236050: /*verifiedWith*/  return new Property("verifiedWith", "Reference(Patient|RelatedPerson)", "Who verified the instruction (Patient, Relative or other Authorized Person).", 0, 1, verifiedWith);
690          case 642233449: /*verificationDate*/  return new Property("verificationDate", "dateTime", "Date(s) verification was collected.", 0, java.lang.Integer.MAX_VALUE, verificationDate);
691          default: return super.getNamedProperty(_hash, _name, _checkValid);
692          }
693
694        }
695
696      @Override
697      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
698        switch (hash) {
699        case -1994383672: /*verified*/ return this.verified == null ? new Base[0] : new Base[] {this.verified}; // BooleanType
700        case 642733045: /*verificationType*/ return this.verificationType == null ? new Base[0] : new Base[] {this.verificationType}; // CodeableConcept
701        case -1047292609: /*verifiedBy*/ return this.verifiedBy == null ? new Base[0] : new Base[] {this.verifiedBy}; // Reference
702        case -1425236050: /*verifiedWith*/ return this.verifiedWith == null ? new Base[0] : new Base[] {this.verifiedWith}; // Reference
703        case 642233449: /*verificationDate*/ return this.verificationDate == null ? new Base[0] : this.verificationDate.toArray(new Base[this.verificationDate.size()]); // DateTimeType
704        default: return super.getProperty(hash, name, checkValid);
705        }
706
707      }
708
709      @Override
710      public Base setProperty(int hash, String name, Base value) throws FHIRException {
711        switch (hash) {
712        case -1994383672: // verified
713          this.verified = TypeConvertor.castToBoolean(value); // BooleanType
714          return value;
715        case 642733045: // verificationType
716          this.verificationType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
717          return value;
718        case -1047292609: // verifiedBy
719          this.verifiedBy = TypeConvertor.castToReference(value); // Reference
720          return value;
721        case -1425236050: // verifiedWith
722          this.verifiedWith = TypeConvertor.castToReference(value); // Reference
723          return value;
724        case 642233449: // verificationDate
725          this.getVerificationDate().add(TypeConvertor.castToDateTime(value)); // DateTimeType
726          return value;
727        default: return super.setProperty(hash, name, value);
728        }
729
730      }
731
732      @Override
733      public Base setProperty(String name, Base value) throws FHIRException {
734        if (name.equals("verified")) {
735          this.verified = TypeConvertor.castToBoolean(value); // BooleanType
736        } else if (name.equals("verificationType")) {
737          this.verificationType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
738        } else if (name.equals("verifiedBy")) {
739          this.verifiedBy = TypeConvertor.castToReference(value); // Reference
740        } else if (name.equals("verifiedWith")) {
741          this.verifiedWith = TypeConvertor.castToReference(value); // Reference
742        } else if (name.equals("verificationDate")) {
743          this.getVerificationDate().add(TypeConvertor.castToDateTime(value));
744        } else
745          return super.setProperty(name, value);
746        return value;
747      }
748
749      @Override
750      public Base makeProperty(int hash, String name) throws FHIRException {
751        switch (hash) {
752        case -1994383672:  return getVerifiedElement();
753        case 642733045:  return getVerificationType();
754        case -1047292609:  return getVerifiedBy();
755        case -1425236050:  return getVerifiedWith();
756        case 642233449:  return addVerificationDateElement();
757        default: return super.makeProperty(hash, name);
758        }
759
760      }
761
762      @Override
763      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
764        switch (hash) {
765        case -1994383672: /*verified*/ return new String[] {"boolean"};
766        case 642733045: /*verificationType*/ return new String[] {"CodeableConcept"};
767        case -1047292609: /*verifiedBy*/ return new String[] {"Reference"};
768        case -1425236050: /*verifiedWith*/ return new String[] {"Reference"};
769        case 642233449: /*verificationDate*/ return new String[] {"dateTime"};
770        default: return super.getTypesForProperty(hash, name);
771        }
772
773      }
774
775      @Override
776      public Base addChild(String name) throws FHIRException {
777        if (name.equals("verified")) {
778          throw new FHIRException("Cannot call addChild on a primitive type Consent.verification.verified");
779        }
780        else if (name.equals("verificationType")) {
781          this.verificationType = new CodeableConcept();
782          return this.verificationType;
783        }
784        else if (name.equals("verifiedBy")) {
785          this.verifiedBy = new Reference();
786          return this.verifiedBy;
787        }
788        else if (name.equals("verifiedWith")) {
789          this.verifiedWith = new Reference();
790          return this.verifiedWith;
791        }
792        else if (name.equals("verificationDate")) {
793          throw new FHIRException("Cannot call addChild on a primitive type Consent.verification.verificationDate");
794        }
795        else
796          return super.addChild(name);
797      }
798
799      public ConsentVerificationComponent copy() {
800        ConsentVerificationComponent dst = new ConsentVerificationComponent();
801        copyValues(dst);
802        return dst;
803      }
804
805      public void copyValues(ConsentVerificationComponent dst) {
806        super.copyValues(dst);
807        dst.verified = verified == null ? null : verified.copy();
808        dst.verificationType = verificationType == null ? null : verificationType.copy();
809        dst.verifiedBy = verifiedBy == null ? null : verifiedBy.copy();
810        dst.verifiedWith = verifiedWith == null ? null : verifiedWith.copy();
811        if (verificationDate != null) {
812          dst.verificationDate = new ArrayList<DateTimeType>();
813          for (DateTimeType i : verificationDate)
814            dst.verificationDate.add(i.copy());
815        };
816      }
817
818      @Override
819      public boolean equalsDeep(Base other_) {
820        if (!super.equalsDeep(other_))
821          return false;
822        if (!(other_ instanceof ConsentVerificationComponent))
823          return false;
824        ConsentVerificationComponent o = (ConsentVerificationComponent) other_;
825        return compareDeep(verified, o.verified, true) && compareDeep(verificationType, o.verificationType, true)
826           && compareDeep(verifiedBy, o.verifiedBy, true) && compareDeep(verifiedWith, o.verifiedWith, true)
827           && compareDeep(verificationDate, o.verificationDate, true);
828      }
829
830      @Override
831      public boolean equalsShallow(Base other_) {
832        if (!super.equalsShallow(other_))
833          return false;
834        if (!(other_ instanceof ConsentVerificationComponent))
835          return false;
836        ConsentVerificationComponent o = (ConsentVerificationComponent) other_;
837        return compareValues(verified, o.verified, true) && compareValues(verificationDate, o.verificationDate, true)
838          ;
839      }
840
841      public boolean isEmpty() {
842        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(verified, verificationType
843          , verifiedBy, verifiedWith, verificationDate);
844      }
845
846  public String fhirType() {
847    return "Consent.verification";
848
849  }
850
851  }
852
853    @Block()
854    public static class ProvisionComponent extends BackboneElement implements IBaseBackboneElement {
855        /**
856         * Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.
857         */
858        @Child(name = "type", type = {CodeType.class}, order=1, min=0, max=1, modifier=true, summary=true)
859        @Description(shortDefinition="deny | permit", formalDefinition="Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules." )
860        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-provision-type")
861        protected Enumeration<ConsentProvisionType> type;
862
863        /**
864         * The timeframe in this rule is valid.
865         */
866        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
867        @Description(shortDefinition="Timeframe for this rule", formalDefinition="The timeframe in this rule is valid." )
868        protected Period period;
869
870        /**
871         * Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').
872         */
873        @Child(name = "actor", type = {}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
874        @Description(shortDefinition="Who|what controlled by this rule (or group, by role)", formalDefinition="Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. 'admitting officers')." )
875        protected List<ProvisionActorComponent> actor;
876
877        /**
878         * Actions controlled by this Rule.
879         */
880        @Child(name = "action", type = {CodeableConcept.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
881        @Description(shortDefinition="Actions controlled by this rule", formalDefinition="Actions controlled by this Rule." )
882        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-action")
883        protected List<CodeableConcept> action;
884
885        /**
886         * A security label, comprised of 0..* security label fields (Privacy tags), which define which resources are controlled by this exception.
887         */
888        @Child(name = "securityLabel", type = {Coding.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
889        @Description(shortDefinition="Security Labels that define affected resources", formalDefinition="A security label, comprised of 0..* security label fields (Privacy tags), which define which resources are controlled by this exception." )
890        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/security-label-examples")
891        protected List<Coding> securityLabel;
892
893        /**
894         * The context of the activities a user is taking - why the user is accessing the data - that are controlled by this rule.
895         */
896        @Child(name = "purpose", type = {Coding.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
897        @Description(shortDefinition="Context of activities covered by this rule", formalDefinition="The context of the activities a user is taking - why the user is accessing the data - that are controlled by this rule." )
898        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-PurposeOfUse")
899        protected List<Coding> purpose;
900
901        /**
902         * The class of information covered by this rule. The type can be a FHIR resource type, a profile on a type, or a CDA document, or some other type that indicates what sort of information the consent relates to.
903         */
904        @Child(name = "class", type = {Coding.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
905        @Description(shortDefinition="e.g. Resource Type, Profile, CDA, etc.", formalDefinition="The class of information covered by this rule. The type can be a FHIR resource type, a profile on a type, or a CDA document, or some other type that indicates what sort of information the consent relates to." )
906        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-content-class")
907        protected List<Coding> class_;
908
909        /**
910         * If this code is found in an instance, then the rule applies.
911         */
912        @Child(name = "code", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
913        @Description(shortDefinition="e.g. LOINC or SNOMED CT code, etc. in the content", formalDefinition="If this code is found in an instance, then the rule applies." )
914        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-content-code")
915        protected List<CodeableConcept> code;
916
917        /**
918         * Clinical or Operational Relevant period of time that bounds the data controlled by this rule.
919         */
920        @Child(name = "dataPeriod", type = {Period.class}, order=9, min=0, max=1, modifier=false, summary=true)
921        @Description(shortDefinition="Timeframe for data controlled by this rule", formalDefinition="Clinical or Operational Relevant period of time that bounds the data controlled by this rule." )
922        protected Period dataPeriod;
923
924        /**
925         * The resources controlled by this rule if specific resources are referenced.
926         */
927        @Child(name = "data", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
928        @Description(shortDefinition="Data controlled by this rule", formalDefinition="The resources controlled by this rule if specific resources are referenced." )
929        protected List<ProvisionDataComponent> data;
930
931        /**
932         * A computable (FHIRPath or other) definition of what is controlled by this consent.
933         */
934        @Child(name = "expression", type = {Expression.class}, order=11, min=0, max=1, modifier=false, summary=false)
935        @Description(shortDefinition="A computable expression of the consent", formalDefinition="A computable (FHIRPath or other) definition of what is controlled by this consent." )
936        protected Expression expression;
937
938        /**
939         * Rules which provide exceptions to the base rule or subrules.
940         */
941        @Child(name = "provision", type = {ProvisionComponent.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
942        @Description(shortDefinition="Nested Exception Rules", formalDefinition="Rules which provide exceptions to the base rule or subrules." )
943        protected List<ProvisionComponent> provision;
944
945        private static final long serialVersionUID = 649023539L;
946
947    /**
948     * Constructor
949     */
950      public ProvisionComponent() {
951        super();
952      }
953
954        /**
955         * @return {@link #type} (Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
956         */
957        public Enumeration<ConsentProvisionType> getTypeElement() { 
958          if (this.type == null)
959            if (Configuration.errorOnAutoCreate())
960              throw new Error("Attempt to auto-create ProvisionComponent.type");
961            else if (Configuration.doAutoCreate())
962              this.type = new Enumeration<ConsentProvisionType>(new ConsentProvisionTypeEnumFactory()); // bb
963          return this.type;
964        }
965
966        public boolean hasTypeElement() { 
967          return this.type != null && !this.type.isEmpty();
968        }
969
970        public boolean hasType() { 
971          return this.type != null && !this.type.isEmpty();
972        }
973
974        /**
975         * @param value {@link #type} (Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.). This is the underlying object with id, value and extensions. The accessor "getType" gives direct access to the value
976         */
977        public ProvisionComponent setTypeElement(Enumeration<ConsentProvisionType> value) { 
978          this.type = value;
979          return this;
980        }
981
982        /**
983         * @return Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.
984         */
985        public ConsentProvisionType getType() { 
986          return this.type == null ? null : this.type.getValue();
987        }
988
989        /**
990         * @param value Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.
991         */
992        public ProvisionComponent setType(ConsentProvisionType value) { 
993          if (value == null)
994            this.type = null;
995          else {
996            if (this.type == null)
997              this.type = new Enumeration<ConsentProvisionType>(new ConsentProvisionTypeEnumFactory());
998            this.type.setValue(value);
999          }
1000          return this;
1001        }
1002
1003        /**
1004         * @return {@link #period} (The timeframe in this rule is valid.)
1005         */
1006        public Period getPeriod() { 
1007          if (this.period == null)
1008            if (Configuration.errorOnAutoCreate())
1009              throw new Error("Attempt to auto-create ProvisionComponent.period");
1010            else if (Configuration.doAutoCreate())
1011              this.period = new Period(); // cc
1012          return this.period;
1013        }
1014
1015        public boolean hasPeriod() { 
1016          return this.period != null && !this.period.isEmpty();
1017        }
1018
1019        /**
1020         * @param value {@link #period} (The timeframe in this rule is valid.)
1021         */
1022        public ProvisionComponent setPeriod(Period value) { 
1023          this.period = value;
1024          return this;
1025        }
1026
1027        /**
1028         * @return {@link #actor} (Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').)
1029         */
1030        public List<ProvisionActorComponent> getActor() { 
1031          if (this.actor == null)
1032            this.actor = new ArrayList<ProvisionActorComponent>();
1033          return this.actor;
1034        }
1035
1036        /**
1037         * @return Returns a reference to <code>this</code> for easy method chaining
1038         */
1039        public ProvisionComponent setActor(List<ProvisionActorComponent> theActor) { 
1040          this.actor = theActor;
1041          return this;
1042        }
1043
1044        public boolean hasActor() { 
1045          if (this.actor == null)
1046            return false;
1047          for (ProvisionActorComponent item : this.actor)
1048            if (!item.isEmpty())
1049              return true;
1050          return false;
1051        }
1052
1053        public ProvisionActorComponent addActor() { //3
1054          ProvisionActorComponent t = new ProvisionActorComponent();
1055          if (this.actor == null)
1056            this.actor = new ArrayList<ProvisionActorComponent>();
1057          this.actor.add(t);
1058          return t;
1059        }
1060
1061        public ProvisionComponent addActor(ProvisionActorComponent t) { //3
1062          if (t == null)
1063            return this;
1064          if (this.actor == null)
1065            this.actor = new ArrayList<ProvisionActorComponent>();
1066          this.actor.add(t);
1067          return this;
1068        }
1069
1070        /**
1071         * @return The first repetition of repeating field {@link #actor}, creating it if it does not already exist {3}
1072         */
1073        public ProvisionActorComponent getActorFirstRep() { 
1074          if (getActor().isEmpty()) {
1075            addActor();
1076          }
1077          return getActor().get(0);
1078        }
1079
1080        /**
1081         * @return {@link #action} (Actions controlled by this Rule.)
1082         */
1083        public List<CodeableConcept> getAction() { 
1084          if (this.action == null)
1085            this.action = new ArrayList<CodeableConcept>();
1086          return this.action;
1087        }
1088
1089        /**
1090         * @return Returns a reference to <code>this</code> for easy method chaining
1091         */
1092        public ProvisionComponent setAction(List<CodeableConcept> theAction) { 
1093          this.action = theAction;
1094          return this;
1095        }
1096
1097        public boolean hasAction() { 
1098          if (this.action == null)
1099            return false;
1100          for (CodeableConcept item : this.action)
1101            if (!item.isEmpty())
1102              return true;
1103          return false;
1104        }
1105
1106        public CodeableConcept addAction() { //3
1107          CodeableConcept t = new CodeableConcept();
1108          if (this.action == null)
1109            this.action = new ArrayList<CodeableConcept>();
1110          this.action.add(t);
1111          return t;
1112        }
1113
1114        public ProvisionComponent addAction(CodeableConcept t) { //3
1115          if (t == null)
1116            return this;
1117          if (this.action == null)
1118            this.action = new ArrayList<CodeableConcept>();
1119          this.action.add(t);
1120          return this;
1121        }
1122
1123        /**
1124         * @return The first repetition of repeating field {@link #action}, creating it if it does not already exist {3}
1125         */
1126        public CodeableConcept getActionFirstRep() { 
1127          if (getAction().isEmpty()) {
1128            addAction();
1129          }
1130          return getAction().get(0);
1131        }
1132
1133        /**
1134         * @return {@link #securityLabel} (A security label, comprised of 0..* security label fields (Privacy tags), which define which resources are controlled by this exception.)
1135         */
1136        public List<Coding> getSecurityLabel() { 
1137          if (this.securityLabel == null)
1138            this.securityLabel = new ArrayList<Coding>();
1139          return this.securityLabel;
1140        }
1141
1142        /**
1143         * @return Returns a reference to <code>this</code> for easy method chaining
1144         */
1145        public ProvisionComponent setSecurityLabel(List<Coding> theSecurityLabel) { 
1146          this.securityLabel = theSecurityLabel;
1147          return this;
1148        }
1149
1150        public boolean hasSecurityLabel() { 
1151          if (this.securityLabel == null)
1152            return false;
1153          for (Coding item : this.securityLabel)
1154            if (!item.isEmpty())
1155              return true;
1156          return false;
1157        }
1158
1159        public Coding addSecurityLabel() { //3
1160          Coding t = new Coding();
1161          if (this.securityLabel == null)
1162            this.securityLabel = new ArrayList<Coding>();
1163          this.securityLabel.add(t);
1164          return t;
1165        }
1166
1167        public ProvisionComponent addSecurityLabel(Coding t) { //3
1168          if (t == null)
1169            return this;
1170          if (this.securityLabel == null)
1171            this.securityLabel = new ArrayList<Coding>();
1172          this.securityLabel.add(t);
1173          return this;
1174        }
1175
1176        /**
1177         * @return The first repetition of repeating field {@link #securityLabel}, creating it if it does not already exist {3}
1178         */
1179        public Coding getSecurityLabelFirstRep() { 
1180          if (getSecurityLabel().isEmpty()) {
1181            addSecurityLabel();
1182          }
1183          return getSecurityLabel().get(0);
1184        }
1185
1186        /**
1187         * @return {@link #purpose} (The context of the activities a user is taking - why the user is accessing the data - that are controlled by this rule.)
1188         */
1189        public List<Coding> getPurpose() { 
1190          if (this.purpose == null)
1191            this.purpose = new ArrayList<Coding>();
1192          return this.purpose;
1193        }
1194
1195        /**
1196         * @return Returns a reference to <code>this</code> for easy method chaining
1197         */
1198        public ProvisionComponent setPurpose(List<Coding> thePurpose) { 
1199          this.purpose = thePurpose;
1200          return this;
1201        }
1202
1203        public boolean hasPurpose() { 
1204          if (this.purpose == null)
1205            return false;
1206          for (Coding item : this.purpose)
1207            if (!item.isEmpty())
1208              return true;
1209          return false;
1210        }
1211
1212        public Coding addPurpose() { //3
1213          Coding t = new Coding();
1214          if (this.purpose == null)
1215            this.purpose = new ArrayList<Coding>();
1216          this.purpose.add(t);
1217          return t;
1218        }
1219
1220        public ProvisionComponent addPurpose(Coding t) { //3
1221          if (t == null)
1222            return this;
1223          if (this.purpose == null)
1224            this.purpose = new ArrayList<Coding>();
1225          this.purpose.add(t);
1226          return this;
1227        }
1228
1229        /**
1230         * @return The first repetition of repeating field {@link #purpose}, creating it if it does not already exist {3}
1231         */
1232        public Coding getPurposeFirstRep() { 
1233          if (getPurpose().isEmpty()) {
1234            addPurpose();
1235          }
1236          return getPurpose().get(0);
1237        }
1238
1239        /**
1240         * @return {@link #class_} (The class of information covered by this rule. The type can be a FHIR resource type, a profile on a type, or a CDA document, or some other type that indicates what sort of information the consent relates to.)
1241         */
1242        public List<Coding> getClass_() { 
1243          if (this.class_ == null)
1244            this.class_ = new ArrayList<Coding>();
1245          return this.class_;
1246        }
1247
1248        /**
1249         * @return Returns a reference to <code>this</code> for easy method chaining
1250         */
1251        public ProvisionComponent setClass_(List<Coding> theClass_) { 
1252          this.class_ = theClass_;
1253          return this;
1254        }
1255
1256        public boolean hasClass_() { 
1257          if (this.class_ == null)
1258            return false;
1259          for (Coding item : this.class_)
1260            if (!item.isEmpty())
1261              return true;
1262          return false;
1263        }
1264
1265        public Coding addClass_() { //3
1266          Coding t = new Coding();
1267          if (this.class_ == null)
1268            this.class_ = new ArrayList<Coding>();
1269          this.class_.add(t);
1270          return t;
1271        }
1272
1273        public ProvisionComponent addClass_(Coding t) { //3
1274          if (t == null)
1275            return this;
1276          if (this.class_ == null)
1277            this.class_ = new ArrayList<Coding>();
1278          this.class_.add(t);
1279          return this;
1280        }
1281
1282        /**
1283         * @return The first repetition of repeating field {@link #class_}, creating it if it does not already exist {3}
1284         */
1285        public Coding getClass_FirstRep() { 
1286          if (getClass_().isEmpty()) {
1287            addClass_();
1288          }
1289          return getClass_().get(0);
1290        }
1291
1292        /**
1293         * @return {@link #code} (If this code is found in an instance, then the rule applies.)
1294         */
1295        public List<CodeableConcept> getCode() { 
1296          if (this.code == null)
1297            this.code = new ArrayList<CodeableConcept>();
1298          return this.code;
1299        }
1300
1301        /**
1302         * @return Returns a reference to <code>this</code> for easy method chaining
1303         */
1304        public ProvisionComponent setCode(List<CodeableConcept> theCode) { 
1305          this.code = theCode;
1306          return this;
1307        }
1308
1309        public boolean hasCode() { 
1310          if (this.code == null)
1311            return false;
1312          for (CodeableConcept item : this.code)
1313            if (!item.isEmpty())
1314              return true;
1315          return false;
1316        }
1317
1318        public CodeableConcept addCode() { //3
1319          CodeableConcept t = new CodeableConcept();
1320          if (this.code == null)
1321            this.code = new ArrayList<CodeableConcept>();
1322          this.code.add(t);
1323          return t;
1324        }
1325
1326        public ProvisionComponent addCode(CodeableConcept t) { //3
1327          if (t == null)
1328            return this;
1329          if (this.code == null)
1330            this.code = new ArrayList<CodeableConcept>();
1331          this.code.add(t);
1332          return this;
1333        }
1334
1335        /**
1336         * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist {3}
1337         */
1338        public CodeableConcept getCodeFirstRep() { 
1339          if (getCode().isEmpty()) {
1340            addCode();
1341          }
1342          return getCode().get(0);
1343        }
1344
1345        /**
1346         * @return {@link #dataPeriod} (Clinical or Operational Relevant period of time that bounds the data controlled by this rule.)
1347         */
1348        public Period getDataPeriod() { 
1349          if (this.dataPeriod == null)
1350            if (Configuration.errorOnAutoCreate())
1351              throw new Error("Attempt to auto-create ProvisionComponent.dataPeriod");
1352            else if (Configuration.doAutoCreate())
1353              this.dataPeriod = new Period(); // cc
1354          return this.dataPeriod;
1355        }
1356
1357        public boolean hasDataPeriod() { 
1358          return this.dataPeriod != null && !this.dataPeriod.isEmpty();
1359        }
1360
1361        /**
1362         * @param value {@link #dataPeriod} (Clinical or Operational Relevant period of time that bounds the data controlled by this rule.)
1363         */
1364        public ProvisionComponent setDataPeriod(Period value) { 
1365          this.dataPeriod = value;
1366          return this;
1367        }
1368
1369        /**
1370         * @return {@link #data} (The resources controlled by this rule if specific resources are referenced.)
1371         */
1372        public List<ProvisionDataComponent> getData() { 
1373          if (this.data == null)
1374            this.data = new ArrayList<ProvisionDataComponent>();
1375          return this.data;
1376        }
1377
1378        /**
1379         * @return Returns a reference to <code>this</code> for easy method chaining
1380         */
1381        public ProvisionComponent setData(List<ProvisionDataComponent> theData) { 
1382          this.data = theData;
1383          return this;
1384        }
1385
1386        public boolean hasData() { 
1387          if (this.data == null)
1388            return false;
1389          for (ProvisionDataComponent item : this.data)
1390            if (!item.isEmpty())
1391              return true;
1392          return false;
1393        }
1394
1395        public ProvisionDataComponent addData() { //3
1396          ProvisionDataComponent t = new ProvisionDataComponent();
1397          if (this.data == null)
1398            this.data = new ArrayList<ProvisionDataComponent>();
1399          this.data.add(t);
1400          return t;
1401        }
1402
1403        public ProvisionComponent addData(ProvisionDataComponent t) { //3
1404          if (t == null)
1405            return this;
1406          if (this.data == null)
1407            this.data = new ArrayList<ProvisionDataComponent>();
1408          this.data.add(t);
1409          return this;
1410        }
1411
1412        /**
1413         * @return The first repetition of repeating field {@link #data}, creating it if it does not already exist {3}
1414         */
1415        public ProvisionDataComponent getDataFirstRep() { 
1416          if (getData().isEmpty()) {
1417            addData();
1418          }
1419          return getData().get(0);
1420        }
1421
1422        /**
1423         * @return {@link #expression} (A computable (FHIRPath or other) definition of what is controlled by this consent.)
1424         */
1425        public Expression getExpression() { 
1426          if (this.expression == null)
1427            if (Configuration.errorOnAutoCreate())
1428              throw new Error("Attempt to auto-create ProvisionComponent.expression");
1429            else if (Configuration.doAutoCreate())
1430              this.expression = new Expression(); // cc
1431          return this.expression;
1432        }
1433
1434        public boolean hasExpression() { 
1435          return this.expression != null && !this.expression.isEmpty();
1436        }
1437
1438        /**
1439         * @param value {@link #expression} (A computable (FHIRPath or other) definition of what is controlled by this consent.)
1440         */
1441        public ProvisionComponent setExpression(Expression value) { 
1442          this.expression = value;
1443          return this;
1444        }
1445
1446        /**
1447         * @return {@link #provision} (Rules which provide exceptions to the base rule or subrules.)
1448         */
1449        public List<ProvisionComponent> getProvision() { 
1450          if (this.provision == null)
1451            this.provision = new ArrayList<ProvisionComponent>();
1452          return this.provision;
1453        }
1454
1455        /**
1456         * @return Returns a reference to <code>this</code> for easy method chaining
1457         */
1458        public ProvisionComponent setProvision(List<ProvisionComponent> theProvision) { 
1459          this.provision = theProvision;
1460          return this;
1461        }
1462
1463        public boolean hasProvision() { 
1464          if (this.provision == null)
1465            return false;
1466          for (ProvisionComponent item : this.provision)
1467            if (!item.isEmpty())
1468              return true;
1469          return false;
1470        }
1471
1472        public ProvisionComponent addProvision() { //3
1473          ProvisionComponent t = new ProvisionComponent();
1474          if (this.provision == null)
1475            this.provision = new ArrayList<ProvisionComponent>();
1476          this.provision.add(t);
1477          return t;
1478        }
1479
1480        public ProvisionComponent addProvision(ProvisionComponent t) { //3
1481          if (t == null)
1482            return this;
1483          if (this.provision == null)
1484            this.provision = new ArrayList<ProvisionComponent>();
1485          this.provision.add(t);
1486          return this;
1487        }
1488
1489        /**
1490         * @return The first repetition of repeating field {@link #provision}, creating it if it does not already exist {3}
1491         */
1492        public ProvisionComponent getProvisionFirstRep() { 
1493          if (getProvision().isEmpty()) {
1494            addProvision();
1495          }
1496          return getProvision().get(0);
1497        }
1498
1499        protected void listChildren(List<Property> children) {
1500          super.listChildren(children);
1501          children.add(new Property("type", "code", "Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.", 0, 1, type));
1502          children.add(new Property("period", "Period", "The timeframe in this rule is valid.", 0, 1, period));
1503          children.add(new Property("actor", "", "Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').", 0, java.lang.Integer.MAX_VALUE, actor));
1504          children.add(new Property("action", "CodeableConcept", "Actions controlled by this Rule.", 0, java.lang.Integer.MAX_VALUE, action));
1505          children.add(new Property("securityLabel", "Coding", "A security label, comprised of 0..* security label fields (Privacy tags), which define which resources are controlled by this exception.", 0, java.lang.Integer.MAX_VALUE, securityLabel));
1506          children.add(new Property("purpose", "Coding", "The context of the activities a user is taking - why the user is accessing the data - that are controlled by this rule.", 0, java.lang.Integer.MAX_VALUE, purpose));
1507          children.add(new Property("class", "Coding", "The class of information covered by this rule. The type can be a FHIR resource type, a profile on a type, or a CDA document, or some other type that indicates what sort of information the consent relates to.", 0, java.lang.Integer.MAX_VALUE, class_));
1508          children.add(new Property("code", "CodeableConcept", "If this code is found in an instance, then the rule applies.", 0, java.lang.Integer.MAX_VALUE, code));
1509          children.add(new Property("dataPeriod", "Period", "Clinical or Operational Relevant period of time that bounds the data controlled by this rule.", 0, 1, dataPeriod));
1510          children.add(new Property("data", "", "The resources controlled by this rule if specific resources are referenced.", 0, java.lang.Integer.MAX_VALUE, data));
1511          children.add(new Property("expression", "Expression", "A computable (FHIRPath or other) definition of what is controlled by this consent.", 0, 1, expression));
1512          children.add(new Property("provision", "@Consent.provision", "Rules which provide exceptions to the base rule or subrules.", 0, java.lang.Integer.MAX_VALUE, provision));
1513        }
1514
1515        @Override
1516        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1517          switch (_hash) {
1518          case 3575610: /*type*/  return new Property("type", "code", "Action  to take - permit or deny - when the rule conditions are met.  Not permitted in root rule, required in all nested rules.", 0, 1, type);
1519          case -991726143: /*period*/  return new Property("period", "Period", "The timeframe in this rule is valid.", 0, 1, period);
1520          case 92645877: /*actor*/  return new Property("actor", "", "Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. 'admitting officers').", 0, java.lang.Integer.MAX_VALUE, actor);
1521          case -1422950858: /*action*/  return new Property("action", "CodeableConcept", "Actions controlled by this Rule.", 0, java.lang.Integer.MAX_VALUE, action);
1522          case -722296940: /*securityLabel*/  return new Property("securityLabel", "Coding", "A security label, comprised of 0..* security label fields (Privacy tags), which define which resources are controlled by this exception.", 0, java.lang.Integer.MAX_VALUE, securityLabel);
1523          case -220463842: /*purpose*/  return new Property("purpose", "Coding", "The context of the activities a user is taking - why the user is accessing the data - that are controlled by this rule.", 0, java.lang.Integer.MAX_VALUE, purpose);
1524          case 94742904: /*class*/  return new Property("class", "Coding", "The class of information covered by this rule. The type can be a FHIR resource type, a profile on a type, or a CDA document, or some other type that indicates what sort of information the consent relates to.", 0, java.lang.Integer.MAX_VALUE, class_);
1525          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "If this code is found in an instance, then the rule applies.", 0, java.lang.Integer.MAX_VALUE, code);
1526          case 1177250315: /*dataPeriod*/  return new Property("dataPeriod", "Period", "Clinical or Operational Relevant period of time that bounds the data controlled by this rule.", 0, 1, dataPeriod);
1527          case 3076010: /*data*/  return new Property("data", "", "The resources controlled by this rule if specific resources are referenced.", 0, java.lang.Integer.MAX_VALUE, data);
1528          case -1795452264: /*expression*/  return new Property("expression", "Expression", "A computable (FHIRPath or other) definition of what is controlled by this consent.", 0, 1, expression);
1529          case -547120939: /*provision*/  return new Property("provision", "@Consent.provision", "Rules which provide exceptions to the base rule or subrules.", 0, java.lang.Integer.MAX_VALUE, provision);
1530          default: return super.getNamedProperty(_hash, _name, _checkValid);
1531          }
1532
1533        }
1534
1535      @Override
1536      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1537        switch (hash) {
1538        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Enumeration<ConsentProvisionType>
1539        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1540        case 92645877: /*actor*/ return this.actor == null ? new Base[0] : this.actor.toArray(new Base[this.actor.size()]); // ProvisionActorComponent
1541        case -1422950858: /*action*/ return this.action == null ? new Base[0] : this.action.toArray(new Base[this.action.size()]); // CodeableConcept
1542        case -722296940: /*securityLabel*/ return this.securityLabel == null ? new Base[0] : this.securityLabel.toArray(new Base[this.securityLabel.size()]); // Coding
1543        case -220463842: /*purpose*/ return this.purpose == null ? new Base[0] : this.purpose.toArray(new Base[this.purpose.size()]); // Coding
1544        case 94742904: /*class*/ return this.class_ == null ? new Base[0] : this.class_.toArray(new Base[this.class_.size()]); // Coding
1545        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // CodeableConcept
1546        case 1177250315: /*dataPeriod*/ return this.dataPeriod == null ? new Base[0] : new Base[] {this.dataPeriod}; // Period
1547        case 3076010: /*data*/ return this.data == null ? new Base[0] : this.data.toArray(new Base[this.data.size()]); // ProvisionDataComponent
1548        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // Expression
1549        case -547120939: /*provision*/ return this.provision == null ? new Base[0] : this.provision.toArray(new Base[this.provision.size()]); // ProvisionComponent
1550        default: return super.getProperty(hash, name, checkValid);
1551        }
1552
1553      }
1554
1555      @Override
1556      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1557        switch (hash) {
1558        case 3575610: // type
1559          value = new ConsentProvisionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1560          this.type = (Enumeration) value; // Enumeration<ConsentProvisionType>
1561          return value;
1562        case -991726143: // period
1563          this.period = TypeConvertor.castToPeriod(value); // Period
1564          return value;
1565        case 92645877: // actor
1566          this.getActor().add((ProvisionActorComponent) value); // ProvisionActorComponent
1567          return value;
1568        case -1422950858: // action
1569          this.getAction().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1570          return value;
1571        case -722296940: // securityLabel
1572          this.getSecurityLabel().add(TypeConvertor.castToCoding(value)); // Coding
1573          return value;
1574        case -220463842: // purpose
1575          this.getPurpose().add(TypeConvertor.castToCoding(value)); // Coding
1576          return value;
1577        case 94742904: // class
1578          this.getClass_().add(TypeConvertor.castToCoding(value)); // Coding
1579          return value;
1580        case 3059181: // code
1581          this.getCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1582          return value;
1583        case 1177250315: // dataPeriod
1584          this.dataPeriod = TypeConvertor.castToPeriod(value); // Period
1585          return value;
1586        case 3076010: // data
1587          this.getData().add((ProvisionDataComponent) value); // ProvisionDataComponent
1588          return value;
1589        case -1795452264: // expression
1590          this.expression = TypeConvertor.castToExpression(value); // Expression
1591          return value;
1592        case -547120939: // provision
1593          this.getProvision().add((ProvisionComponent) value); // ProvisionComponent
1594          return value;
1595        default: return super.setProperty(hash, name, value);
1596        }
1597
1598      }
1599
1600      @Override
1601      public Base setProperty(String name, Base value) throws FHIRException {
1602        if (name.equals("type")) {
1603          value = new ConsentProvisionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
1604          this.type = (Enumeration) value; // Enumeration<ConsentProvisionType>
1605        } else if (name.equals("period")) {
1606          this.period = TypeConvertor.castToPeriod(value); // Period
1607        } else if (name.equals("actor")) {
1608          this.getActor().add((ProvisionActorComponent) value);
1609        } else if (name.equals("action")) {
1610          this.getAction().add(TypeConvertor.castToCodeableConcept(value));
1611        } else if (name.equals("securityLabel")) {
1612          this.getSecurityLabel().add(TypeConvertor.castToCoding(value));
1613        } else if (name.equals("purpose")) {
1614          this.getPurpose().add(TypeConvertor.castToCoding(value));
1615        } else if (name.equals("class")) {
1616          this.getClass_().add(TypeConvertor.castToCoding(value));
1617        } else if (name.equals("code")) {
1618          this.getCode().add(TypeConvertor.castToCodeableConcept(value));
1619        } else if (name.equals("dataPeriod")) {
1620          this.dataPeriod = TypeConvertor.castToPeriod(value); // Period
1621        } else if (name.equals("data")) {
1622          this.getData().add((ProvisionDataComponent) value);
1623        } else if (name.equals("expression")) {
1624          this.expression = TypeConvertor.castToExpression(value); // Expression
1625        } else if (name.equals("provision")) {
1626          this.getProvision().add((ProvisionComponent) value);
1627        } else
1628          return super.setProperty(name, value);
1629        return value;
1630      }
1631
1632      @Override
1633      public Base makeProperty(int hash, String name) throws FHIRException {
1634        switch (hash) {
1635        case 3575610:  return getTypeElement();
1636        case -991726143:  return getPeriod();
1637        case 92645877:  return addActor(); 
1638        case -1422950858:  return addAction(); 
1639        case -722296940:  return addSecurityLabel(); 
1640        case -220463842:  return addPurpose(); 
1641        case 94742904:  return addClass_(); 
1642        case 3059181:  return addCode(); 
1643        case 1177250315:  return getDataPeriod();
1644        case 3076010:  return addData(); 
1645        case -1795452264:  return getExpression();
1646        case -547120939:  return addProvision(); 
1647        default: return super.makeProperty(hash, name);
1648        }
1649
1650      }
1651
1652      @Override
1653      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1654        switch (hash) {
1655        case 3575610: /*type*/ return new String[] {"code"};
1656        case -991726143: /*period*/ return new String[] {"Period"};
1657        case 92645877: /*actor*/ return new String[] {};
1658        case -1422950858: /*action*/ return new String[] {"CodeableConcept"};
1659        case -722296940: /*securityLabel*/ return new String[] {"Coding"};
1660        case -220463842: /*purpose*/ return new String[] {"Coding"};
1661        case 94742904: /*class*/ return new String[] {"Coding"};
1662        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1663        case 1177250315: /*dataPeriod*/ return new String[] {"Period"};
1664        case 3076010: /*data*/ return new String[] {};
1665        case -1795452264: /*expression*/ return new String[] {"Expression"};
1666        case -547120939: /*provision*/ return new String[] {"@Consent.provision"};
1667        default: return super.getTypesForProperty(hash, name);
1668        }
1669
1670      }
1671
1672      @Override
1673      public Base addChild(String name) throws FHIRException {
1674        if (name.equals("type")) {
1675          throw new FHIRException("Cannot call addChild on a primitive type Consent.provision.type");
1676        }
1677        else if (name.equals("period")) {
1678          this.period = new Period();
1679          return this.period;
1680        }
1681        else if (name.equals("actor")) {
1682          return addActor();
1683        }
1684        else if (name.equals("action")) {
1685          return addAction();
1686        }
1687        else if (name.equals("securityLabel")) {
1688          return addSecurityLabel();
1689        }
1690        else if (name.equals("purpose")) {
1691          return addPurpose();
1692        }
1693        else if (name.equals("class")) {
1694          return addClass_();
1695        }
1696        else if (name.equals("code")) {
1697          return addCode();
1698        }
1699        else if (name.equals("dataPeriod")) {
1700          this.dataPeriod = new Period();
1701          return this.dataPeriod;
1702        }
1703        else if (name.equals("data")) {
1704          return addData();
1705        }
1706        else if (name.equals("expression")) {
1707          this.expression = new Expression();
1708          return this.expression;
1709        }
1710        else if (name.equals("provision")) {
1711          return addProvision();
1712        }
1713        else
1714          return super.addChild(name);
1715      }
1716
1717      public ProvisionComponent copy() {
1718        ProvisionComponent dst = new ProvisionComponent();
1719        copyValues(dst);
1720        return dst;
1721      }
1722
1723      public void copyValues(ProvisionComponent dst) {
1724        super.copyValues(dst);
1725        dst.type = type == null ? null : type.copy();
1726        dst.period = period == null ? null : period.copy();
1727        if (actor != null) {
1728          dst.actor = new ArrayList<ProvisionActorComponent>();
1729          for (ProvisionActorComponent i : actor)
1730            dst.actor.add(i.copy());
1731        };
1732        if (action != null) {
1733          dst.action = new ArrayList<CodeableConcept>();
1734          for (CodeableConcept i : action)
1735            dst.action.add(i.copy());
1736        };
1737        if (securityLabel != null) {
1738          dst.securityLabel = new ArrayList<Coding>();
1739          for (Coding i : securityLabel)
1740            dst.securityLabel.add(i.copy());
1741        };
1742        if (purpose != null) {
1743          dst.purpose = new ArrayList<Coding>();
1744          for (Coding i : purpose)
1745            dst.purpose.add(i.copy());
1746        };
1747        if (class_ != null) {
1748          dst.class_ = new ArrayList<Coding>();
1749          for (Coding i : class_)
1750            dst.class_.add(i.copy());
1751        };
1752        if (code != null) {
1753          dst.code = new ArrayList<CodeableConcept>();
1754          for (CodeableConcept i : code)
1755            dst.code.add(i.copy());
1756        };
1757        dst.dataPeriod = dataPeriod == null ? null : dataPeriod.copy();
1758        if (data != null) {
1759          dst.data = new ArrayList<ProvisionDataComponent>();
1760          for (ProvisionDataComponent i : data)
1761            dst.data.add(i.copy());
1762        };
1763        dst.expression = expression == null ? null : expression.copy();
1764        if (provision != null) {
1765          dst.provision = new ArrayList<ProvisionComponent>();
1766          for (ProvisionComponent i : provision)
1767            dst.provision.add(i.copy());
1768        };
1769      }
1770
1771      @Override
1772      public boolean equalsDeep(Base other_) {
1773        if (!super.equalsDeep(other_))
1774          return false;
1775        if (!(other_ instanceof ProvisionComponent))
1776          return false;
1777        ProvisionComponent o = (ProvisionComponent) other_;
1778        return compareDeep(type, o.type, true) && compareDeep(period, o.period, true) && compareDeep(actor, o.actor, true)
1779           && compareDeep(action, o.action, true) && compareDeep(securityLabel, o.securityLabel, true) && compareDeep(purpose, o.purpose, true)
1780           && compareDeep(class_, o.class_, true) && compareDeep(code, o.code, true) && compareDeep(dataPeriod, o.dataPeriod, true)
1781           && compareDeep(data, o.data, true) && compareDeep(expression, o.expression, true) && compareDeep(provision, o.provision, true)
1782          ;
1783      }
1784
1785      @Override
1786      public boolean equalsShallow(Base other_) {
1787        if (!super.equalsShallow(other_))
1788          return false;
1789        if (!(other_ instanceof ProvisionComponent))
1790          return false;
1791        ProvisionComponent o = (ProvisionComponent) other_;
1792        return compareValues(type, o.type, true);
1793      }
1794
1795      public boolean isEmpty() {
1796        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, period, actor, action
1797          , securityLabel, purpose, class_, code, dataPeriod, data, expression, provision
1798          );
1799      }
1800
1801  public String fhirType() {
1802    return "Consent.provision";
1803
1804  }
1805
1806  }
1807
1808    @Block()
1809    public static class ProvisionActorComponent extends BackboneElement implements IBaseBackboneElement {
1810        /**
1811         * How the individual is involved in the resources content that is described in the exception.
1812         */
1813        @Child(name = "role", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
1814        @Description(shortDefinition="How the actor is involved", formalDefinition="How the individual is involved in the resources content that is described in the exception." )
1815        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/participation-role-type")
1816        protected CodeableConcept role;
1817
1818        /**
1819         * The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').
1820         */
1821        @Child(name = "reference", type = {Device.class, Group.class, CareTeam.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class, PractitionerRole.class}, order=2, min=0, max=1, modifier=false, summary=false)
1822        @Description(shortDefinition="Resource for the actor (or group, by role)", formalDefinition="The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers')." )
1823        protected Reference reference;
1824
1825        private static final long serialVersionUID = -1992921787L;
1826
1827    /**
1828     * Constructor
1829     */
1830      public ProvisionActorComponent() {
1831        super();
1832      }
1833
1834        /**
1835         * @return {@link #role} (How the individual is involved in the resources content that is described in the exception.)
1836         */
1837        public CodeableConcept getRole() { 
1838          if (this.role == null)
1839            if (Configuration.errorOnAutoCreate())
1840              throw new Error("Attempt to auto-create ProvisionActorComponent.role");
1841            else if (Configuration.doAutoCreate())
1842              this.role = new CodeableConcept(); // cc
1843          return this.role;
1844        }
1845
1846        public boolean hasRole() { 
1847          return this.role != null && !this.role.isEmpty();
1848        }
1849
1850        /**
1851         * @param value {@link #role} (How the individual is involved in the resources content that is described in the exception.)
1852         */
1853        public ProvisionActorComponent setRole(CodeableConcept value) { 
1854          this.role = value;
1855          return this;
1856        }
1857
1858        /**
1859         * @return {@link #reference} (The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').)
1860         */
1861        public Reference getReference() { 
1862          if (this.reference == null)
1863            if (Configuration.errorOnAutoCreate())
1864              throw new Error("Attempt to auto-create ProvisionActorComponent.reference");
1865            else if (Configuration.doAutoCreate())
1866              this.reference = new Reference(); // cc
1867          return this.reference;
1868        }
1869
1870        public boolean hasReference() { 
1871          return this.reference != null && !this.reference.isEmpty();
1872        }
1873
1874        /**
1875         * @param value {@link #reference} (The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').)
1876         */
1877        public ProvisionActorComponent setReference(Reference value) { 
1878          this.reference = value;
1879          return this;
1880        }
1881
1882        protected void listChildren(List<Property> children) {
1883          super.listChildren(children);
1884          children.add(new Property("role", "CodeableConcept", "How the individual is involved in the resources content that is described in the exception.", 0, 1, role));
1885          children.add(new Property("reference", "Reference(Device|Group|CareTeam|Organization|Patient|Practitioner|RelatedPerson|PractitionerRole)", "The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').", 0, 1, reference));
1886        }
1887
1888        @Override
1889        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1890          switch (_hash) {
1891          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "How the individual is involved in the resources content that is described in the exception.", 0, 1, role);
1892          case -925155509: /*reference*/  return new Property("reference", "Reference(Device|Group|CareTeam|Organization|Patient|Practitioner|RelatedPerson|PractitionerRole)", "The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. 'admitting officers').", 0, 1, reference);
1893          default: return super.getNamedProperty(_hash, _name, _checkValid);
1894          }
1895
1896        }
1897
1898      @Override
1899      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1900        switch (hash) {
1901        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
1902        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Reference
1903        default: return super.getProperty(hash, name, checkValid);
1904        }
1905
1906      }
1907
1908      @Override
1909      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1910        switch (hash) {
1911        case 3506294: // role
1912          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1913          return value;
1914        case -925155509: // reference
1915          this.reference = TypeConvertor.castToReference(value); // Reference
1916          return value;
1917        default: return super.setProperty(hash, name, value);
1918        }
1919
1920      }
1921
1922      @Override
1923      public Base setProperty(String name, Base value) throws FHIRException {
1924        if (name.equals("role")) {
1925          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1926        } else if (name.equals("reference")) {
1927          this.reference = TypeConvertor.castToReference(value); // Reference
1928        } else
1929          return super.setProperty(name, value);
1930        return value;
1931      }
1932
1933      @Override
1934      public Base makeProperty(int hash, String name) throws FHIRException {
1935        switch (hash) {
1936        case 3506294:  return getRole();
1937        case -925155509:  return getReference();
1938        default: return super.makeProperty(hash, name);
1939        }
1940
1941      }
1942
1943      @Override
1944      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1945        switch (hash) {
1946        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
1947        case -925155509: /*reference*/ return new String[] {"Reference"};
1948        default: return super.getTypesForProperty(hash, name);
1949        }
1950
1951      }
1952
1953      @Override
1954      public Base addChild(String name) throws FHIRException {
1955        if (name.equals("role")) {
1956          this.role = new CodeableConcept();
1957          return this.role;
1958        }
1959        else if (name.equals("reference")) {
1960          this.reference = new Reference();
1961          return this.reference;
1962        }
1963        else
1964          return super.addChild(name);
1965      }
1966
1967      public ProvisionActorComponent copy() {
1968        ProvisionActorComponent dst = new ProvisionActorComponent();
1969        copyValues(dst);
1970        return dst;
1971      }
1972
1973      public void copyValues(ProvisionActorComponent dst) {
1974        super.copyValues(dst);
1975        dst.role = role == null ? null : role.copy();
1976        dst.reference = reference == null ? null : reference.copy();
1977      }
1978
1979      @Override
1980      public boolean equalsDeep(Base other_) {
1981        if (!super.equalsDeep(other_))
1982          return false;
1983        if (!(other_ instanceof ProvisionActorComponent))
1984          return false;
1985        ProvisionActorComponent o = (ProvisionActorComponent) other_;
1986        return compareDeep(role, o.role, true) && compareDeep(reference, o.reference, true);
1987      }
1988
1989      @Override
1990      public boolean equalsShallow(Base other_) {
1991        if (!super.equalsShallow(other_))
1992          return false;
1993        if (!(other_ instanceof ProvisionActorComponent))
1994          return false;
1995        ProvisionActorComponent o = (ProvisionActorComponent) other_;
1996        return true;
1997      }
1998
1999      public boolean isEmpty() {
2000        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(role, reference);
2001      }
2002
2003  public String fhirType() {
2004    return "Consent.provision.actor";
2005
2006  }
2007
2008  }
2009
2010    @Block()
2011    public static class ProvisionDataComponent extends BackboneElement implements IBaseBackboneElement {
2012        /**
2013         * How the resource reference is interpreted when testing consent restrictions.
2014         */
2015        @Child(name = "meaning", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=true)
2016        @Description(shortDefinition="instance | related | dependents | authoredby", formalDefinition="How the resource reference is interpreted when testing consent restrictions." )
2017        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-data-meaning")
2018        protected Enumeration<ConsentDataMeaning> meaning;
2019
2020        /**
2021         * A reference to a specific resource that defines which resources are covered by this consent.
2022         */
2023        @Child(name = "reference", type = {Reference.class}, order=2, min=1, max=1, modifier=false, summary=true)
2024        @Description(shortDefinition="The actual data reference", formalDefinition="A reference to a specific resource that defines which resources are covered by this consent." )
2025        protected Reference reference;
2026
2027        private static final long serialVersionUID = 1735979153L;
2028
2029    /**
2030     * Constructor
2031     */
2032      public ProvisionDataComponent() {
2033        super();
2034      }
2035
2036    /**
2037     * Constructor
2038     */
2039      public ProvisionDataComponent(ConsentDataMeaning meaning, Reference reference) {
2040        super();
2041        this.setMeaning(meaning);
2042        this.setReference(reference);
2043      }
2044
2045        /**
2046         * @return {@link #meaning} (How the resource reference is interpreted when testing consent restrictions.). This is the underlying object with id, value and extensions. The accessor "getMeaning" gives direct access to the value
2047         */
2048        public Enumeration<ConsentDataMeaning> getMeaningElement() { 
2049          if (this.meaning == null)
2050            if (Configuration.errorOnAutoCreate())
2051              throw new Error("Attempt to auto-create ProvisionDataComponent.meaning");
2052            else if (Configuration.doAutoCreate())
2053              this.meaning = new Enumeration<ConsentDataMeaning>(new ConsentDataMeaningEnumFactory()); // bb
2054          return this.meaning;
2055        }
2056
2057        public boolean hasMeaningElement() { 
2058          return this.meaning != null && !this.meaning.isEmpty();
2059        }
2060
2061        public boolean hasMeaning() { 
2062          return this.meaning != null && !this.meaning.isEmpty();
2063        }
2064
2065        /**
2066         * @param value {@link #meaning} (How the resource reference is interpreted when testing consent restrictions.). This is the underlying object with id, value and extensions. The accessor "getMeaning" gives direct access to the value
2067         */
2068        public ProvisionDataComponent setMeaningElement(Enumeration<ConsentDataMeaning> value) { 
2069          this.meaning = value;
2070          return this;
2071        }
2072
2073        /**
2074         * @return How the resource reference is interpreted when testing consent restrictions.
2075         */
2076        public ConsentDataMeaning getMeaning() { 
2077          return this.meaning == null ? null : this.meaning.getValue();
2078        }
2079
2080        /**
2081         * @param value How the resource reference is interpreted when testing consent restrictions.
2082         */
2083        public ProvisionDataComponent setMeaning(ConsentDataMeaning value) { 
2084            if (this.meaning == null)
2085              this.meaning = new Enumeration<ConsentDataMeaning>(new ConsentDataMeaningEnumFactory());
2086            this.meaning.setValue(value);
2087          return this;
2088        }
2089
2090        /**
2091         * @return {@link #reference} (A reference to a specific resource that defines which resources are covered by this consent.)
2092         */
2093        public Reference getReference() { 
2094          if (this.reference == null)
2095            if (Configuration.errorOnAutoCreate())
2096              throw new Error("Attempt to auto-create ProvisionDataComponent.reference");
2097            else if (Configuration.doAutoCreate())
2098              this.reference = new Reference(); // cc
2099          return this.reference;
2100        }
2101
2102        public boolean hasReference() { 
2103          return this.reference != null && !this.reference.isEmpty();
2104        }
2105
2106        /**
2107         * @param value {@link #reference} (A reference to a specific resource that defines which resources are covered by this consent.)
2108         */
2109        public ProvisionDataComponent setReference(Reference value) { 
2110          this.reference = value;
2111          return this;
2112        }
2113
2114        protected void listChildren(List<Property> children) {
2115          super.listChildren(children);
2116          children.add(new Property("meaning", "code", "How the resource reference is interpreted when testing consent restrictions.", 0, 1, meaning));
2117          children.add(new Property("reference", "Reference(Any)", "A reference to a specific resource that defines which resources are covered by this consent.", 0, 1, reference));
2118        }
2119
2120        @Override
2121        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2122          switch (_hash) {
2123          case 938160637: /*meaning*/  return new Property("meaning", "code", "How the resource reference is interpreted when testing consent restrictions.", 0, 1, meaning);
2124          case -925155509: /*reference*/  return new Property("reference", "Reference(Any)", "A reference to a specific resource that defines which resources are covered by this consent.", 0, 1, reference);
2125          default: return super.getNamedProperty(_hash, _name, _checkValid);
2126          }
2127
2128        }
2129
2130      @Override
2131      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2132        switch (hash) {
2133        case 938160637: /*meaning*/ return this.meaning == null ? new Base[0] : new Base[] {this.meaning}; // Enumeration<ConsentDataMeaning>
2134        case -925155509: /*reference*/ return this.reference == null ? new Base[0] : new Base[] {this.reference}; // Reference
2135        default: return super.getProperty(hash, name, checkValid);
2136        }
2137
2138      }
2139
2140      @Override
2141      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2142        switch (hash) {
2143        case 938160637: // meaning
2144          value = new ConsentDataMeaningEnumFactory().fromType(TypeConvertor.castToCode(value));
2145          this.meaning = (Enumeration) value; // Enumeration<ConsentDataMeaning>
2146          return value;
2147        case -925155509: // reference
2148          this.reference = TypeConvertor.castToReference(value); // Reference
2149          return value;
2150        default: return super.setProperty(hash, name, value);
2151        }
2152
2153      }
2154
2155      @Override
2156      public Base setProperty(String name, Base value) throws FHIRException {
2157        if (name.equals("meaning")) {
2158          value = new ConsentDataMeaningEnumFactory().fromType(TypeConvertor.castToCode(value));
2159          this.meaning = (Enumeration) value; // Enumeration<ConsentDataMeaning>
2160        } else if (name.equals("reference")) {
2161          this.reference = TypeConvertor.castToReference(value); // Reference
2162        } else
2163          return super.setProperty(name, value);
2164        return value;
2165      }
2166
2167      @Override
2168      public Base makeProperty(int hash, String name) throws FHIRException {
2169        switch (hash) {
2170        case 938160637:  return getMeaningElement();
2171        case -925155509:  return getReference();
2172        default: return super.makeProperty(hash, name);
2173        }
2174
2175      }
2176
2177      @Override
2178      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2179        switch (hash) {
2180        case 938160637: /*meaning*/ return new String[] {"code"};
2181        case -925155509: /*reference*/ return new String[] {"Reference"};
2182        default: return super.getTypesForProperty(hash, name);
2183        }
2184
2185      }
2186
2187      @Override
2188      public Base addChild(String name) throws FHIRException {
2189        if (name.equals("meaning")) {
2190          throw new FHIRException("Cannot call addChild on a primitive type Consent.provision.data.meaning");
2191        }
2192        else if (name.equals("reference")) {
2193          this.reference = new Reference();
2194          return this.reference;
2195        }
2196        else
2197          return super.addChild(name);
2198      }
2199
2200      public ProvisionDataComponent copy() {
2201        ProvisionDataComponent dst = new ProvisionDataComponent();
2202        copyValues(dst);
2203        return dst;
2204      }
2205
2206      public void copyValues(ProvisionDataComponent dst) {
2207        super.copyValues(dst);
2208        dst.meaning = meaning == null ? null : meaning.copy();
2209        dst.reference = reference == null ? null : reference.copy();
2210      }
2211
2212      @Override
2213      public boolean equalsDeep(Base other_) {
2214        if (!super.equalsDeep(other_))
2215          return false;
2216        if (!(other_ instanceof ProvisionDataComponent))
2217          return false;
2218        ProvisionDataComponent o = (ProvisionDataComponent) other_;
2219        return compareDeep(meaning, o.meaning, true) && compareDeep(reference, o.reference, true);
2220      }
2221
2222      @Override
2223      public boolean equalsShallow(Base other_) {
2224        if (!super.equalsShallow(other_))
2225          return false;
2226        if (!(other_ instanceof ProvisionDataComponent))
2227          return false;
2228        ProvisionDataComponent o = (ProvisionDataComponent) other_;
2229        return compareValues(meaning, o.meaning, true);
2230      }
2231
2232      public boolean isEmpty() {
2233        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(meaning, reference);
2234      }
2235
2236  public String fhirType() {
2237    return "Consent.provision.data";
2238
2239  }
2240
2241  }
2242
2243    /**
2244     * Unique identifier for this copy of the Consent Statement.
2245     */
2246    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2247    @Description(shortDefinition="Identifier for this record (external references)", formalDefinition="Unique identifier for this copy of the Consent Statement." )
2248    protected List<Identifier> identifier;
2249
2250    /**
2251     * Indicates the current state of this Consent resource.
2252     */
2253    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
2254    @Description(shortDefinition="draft | active | inactive | not-done | entered-in-error | unknown", formalDefinition="Indicates the current state of this Consent resource." )
2255    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-state-codes")
2256    protected Enumeration<ConsentState> status;
2257
2258    /**
2259     * A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements.
2260     */
2261    @Child(name = "category", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2262    @Description(shortDefinition="Classification of the consent statement - for indexing/retrieval", formalDefinition="A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements." )
2263    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-category")
2264    protected List<CodeableConcept> category;
2265
2266    /**
2267     * The patient/healthcare practitioner or group of persons to whom this consent applies.
2268     */
2269    @Child(name = "subject", type = {Patient.class, Practitioner.class, Group.class}, order=3, min=0, max=1, modifier=false, summary=true)
2270    @Description(shortDefinition="Who the consent applies to", formalDefinition="The patient/healthcare practitioner or group of persons to whom this consent applies." )
2271    protected Reference subject;
2272
2273    /**
2274     * Date and time the consent instance was agreed to.
2275     */
2276    @Child(name = "dateTime", type = {DateTimeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
2277    @Description(shortDefinition="When consent was agreed to", formalDefinition="Date and time the consent instance was agreed to." )
2278    protected DateTimeType dateTime;
2279
2280    /**
2281     * The entity responsible for granting the rights listed in a Consent Directive.
2282     */
2283    @Child(name = "grantor", type = {CareTeam.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class, PractitionerRole.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2284    @Description(shortDefinition="Who is granting rights according to the policy and rules", formalDefinition="The entity responsible for granting the rights listed in a Consent Directive." )
2285    protected List<Reference> grantor;
2286
2287    /**
2288     * The entity responsible for complying with the Consent Directive, including any obligations or limitations on authorizations and enforcement of prohibitions.
2289     */
2290    @Child(name = "grantee", type = {CareTeam.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class, PractitionerRole.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2291    @Description(shortDefinition="Who is agreeing to the policy and rules", formalDefinition="The entity responsible for complying with the Consent Directive, including any obligations or limitations on authorizations and enforcement of prohibitions." )
2292    protected List<Reference> grantee;
2293
2294    /**
2295     * The actor that manages the consent through its lifecycle.
2296     */
2297    @Child(name = "manager", type = {HealthcareService.class, Organization.class, Patient.class, Practitioner.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2298    @Description(shortDefinition="Consent workflow management", formalDefinition="The actor that manages the consent through its lifecycle." )
2299    protected List<Reference> manager;
2300
2301    /**
2302     * The actor that controls/enforces the access according to the consent.
2303     */
2304    @Child(name = "controller", type = {HealthcareService.class, Organization.class, Patient.class, Practitioner.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2305    @Description(shortDefinition="Consent Enforcer", formalDefinition="The actor that controls/enforces the access according to the consent." )
2306    protected List<Reference> controller;
2307
2308    /**
2309     * The source on which this consent statement is based. The source might be a scanned original paper form.
2310     */
2311    @Child(name = "sourceAttachment", type = {Attachment.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2312    @Description(shortDefinition="Source from which this consent is taken", formalDefinition="The source on which this consent statement is based. The source might be a scanned original paper form." )
2313    protected List<Attachment> sourceAttachment;
2314
2315    /**
2316     * A reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.
2317     */
2318    @Child(name = "sourceReference", type = {Consent.class, DocumentReference.class, Contract.class, QuestionnaireResponse.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2319    @Description(shortDefinition="Source from which this consent is taken", formalDefinition="A reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document." )
2320    protected List<Reference> sourceReference;
2321
2322    /**
2323     * A set of codes that indicate the regulatory basis (if any) that this consent supports.
2324     */
2325    @Child(name = "regulatoryBasis", type = {CodeableConcept.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2326    @Description(shortDefinition="Regulations establishing base Consent", formalDefinition="A set of codes that indicate the regulatory basis (if any) that this consent supports." )
2327    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/consent-policy")
2328    protected List<CodeableConcept> regulatoryBasis;
2329
2330    /**
2331     * A Reference or URL used to uniquely identify the policy the organization will enforce for this Consent. This Reference or URL should be specific to the version of the policy and should be dereferencable to a computable policy of some form.
2332     */
2333    @Child(name = "policyBasis", type = {}, order=12, min=0, max=1, modifier=false, summary=false)
2334    @Description(shortDefinition="Computable version of the backing policy", formalDefinition="A Reference or URL used to uniquely identify the policy the organization will enforce for this Consent. This Reference or URL should be specific to the version of the policy and should be dereferencable to a computable policy of some form." )
2335    protected ConsentPolicyBasisComponent policyBasis;
2336
2337    /**
2338     * A Reference to the human readable policy explaining the basis for the Consent.
2339     */
2340    @Child(name = "policyText", type = {DocumentReference.class}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2341    @Description(shortDefinition="Human Readable Policy", formalDefinition="A Reference to the human readable policy explaining the basis for the Consent." )
2342    protected List<Reference> policyText;
2343
2344    /**
2345     * Whether a treatment instruction (e.g. artificial respiration: yes or no) was verified with the patient, his/her family or another authorized person.
2346     */
2347    @Child(name = "verification", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2348    @Description(shortDefinition="Consent Verified by patient or family", formalDefinition="Whether a treatment instruction (e.g. artificial respiration: yes or no) was verified with the patient, his/her family or another authorized person." )
2349    protected List<ConsentVerificationComponent> verification;
2350
2351    /**
2352     * An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.
2353     */
2354    @Child(name = "provision", type = {}, order=15, min=0, max=1, modifier=false, summary=true)
2355    @Description(shortDefinition="Constraints to the base Consent.policyRule/Consent.policy", formalDefinition="An exception to the base policy of this consent. An exception can be an addition or removal of access permissions." )
2356    protected ProvisionComponent provision;
2357
2358    private static final long serialVersionUID = 1252772004L;
2359
2360  /**
2361   * Constructor
2362   */
2363    public Consent() {
2364      super();
2365    }
2366
2367  /**
2368   * Constructor
2369   */
2370    public Consent(ConsentState status) {
2371      super();
2372      this.setStatus(status);
2373    }
2374
2375    /**
2376     * @return {@link #identifier} (Unique identifier for this copy of the Consent Statement.)
2377     */
2378    public List<Identifier> getIdentifier() { 
2379      if (this.identifier == null)
2380        this.identifier = new ArrayList<Identifier>();
2381      return this.identifier;
2382    }
2383
2384    /**
2385     * @return Returns a reference to <code>this</code> for easy method chaining
2386     */
2387    public Consent setIdentifier(List<Identifier> theIdentifier) { 
2388      this.identifier = theIdentifier;
2389      return this;
2390    }
2391
2392    public boolean hasIdentifier() { 
2393      if (this.identifier == null)
2394        return false;
2395      for (Identifier item : this.identifier)
2396        if (!item.isEmpty())
2397          return true;
2398      return false;
2399    }
2400
2401    public Identifier addIdentifier() { //3
2402      Identifier t = new Identifier();
2403      if (this.identifier == null)
2404        this.identifier = new ArrayList<Identifier>();
2405      this.identifier.add(t);
2406      return t;
2407    }
2408
2409    public Consent addIdentifier(Identifier t) { //3
2410      if (t == null)
2411        return this;
2412      if (this.identifier == null)
2413        this.identifier = new ArrayList<Identifier>();
2414      this.identifier.add(t);
2415      return this;
2416    }
2417
2418    /**
2419     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
2420     */
2421    public Identifier getIdentifierFirstRep() { 
2422      if (getIdentifier().isEmpty()) {
2423        addIdentifier();
2424      }
2425      return getIdentifier().get(0);
2426    }
2427
2428    /**
2429     * @return {@link #status} (Indicates the current state of this Consent resource.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2430     */
2431    public Enumeration<ConsentState> getStatusElement() { 
2432      if (this.status == null)
2433        if (Configuration.errorOnAutoCreate())
2434          throw new Error("Attempt to auto-create Consent.status");
2435        else if (Configuration.doAutoCreate())
2436          this.status = new Enumeration<ConsentState>(new ConsentStateEnumFactory()); // bb
2437      return this.status;
2438    }
2439
2440    public boolean hasStatusElement() { 
2441      return this.status != null && !this.status.isEmpty();
2442    }
2443
2444    public boolean hasStatus() { 
2445      return this.status != null && !this.status.isEmpty();
2446    }
2447
2448    /**
2449     * @param value {@link #status} (Indicates the current state of this Consent resource.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
2450     */
2451    public Consent setStatusElement(Enumeration<ConsentState> value) { 
2452      this.status = value;
2453      return this;
2454    }
2455
2456    /**
2457     * @return Indicates the current state of this Consent resource.
2458     */
2459    public ConsentState getStatus() { 
2460      return this.status == null ? null : this.status.getValue();
2461    }
2462
2463    /**
2464     * @param value Indicates the current state of this Consent resource.
2465     */
2466    public Consent setStatus(ConsentState value) { 
2467        if (this.status == null)
2468          this.status = new Enumeration<ConsentState>(new ConsentStateEnumFactory());
2469        this.status.setValue(value);
2470      return this;
2471    }
2472
2473    /**
2474     * @return {@link #category} (A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements.)
2475     */
2476    public List<CodeableConcept> getCategory() { 
2477      if (this.category == null)
2478        this.category = new ArrayList<CodeableConcept>();
2479      return this.category;
2480    }
2481
2482    /**
2483     * @return Returns a reference to <code>this</code> for easy method chaining
2484     */
2485    public Consent setCategory(List<CodeableConcept> theCategory) { 
2486      this.category = theCategory;
2487      return this;
2488    }
2489
2490    public boolean hasCategory() { 
2491      if (this.category == null)
2492        return false;
2493      for (CodeableConcept item : this.category)
2494        if (!item.isEmpty())
2495          return true;
2496      return false;
2497    }
2498
2499    public CodeableConcept addCategory() { //3
2500      CodeableConcept t = new CodeableConcept();
2501      if (this.category == null)
2502        this.category = new ArrayList<CodeableConcept>();
2503      this.category.add(t);
2504      return t;
2505    }
2506
2507    public Consent addCategory(CodeableConcept t) { //3
2508      if (t == null)
2509        return this;
2510      if (this.category == null)
2511        this.category = new ArrayList<CodeableConcept>();
2512      this.category.add(t);
2513      return this;
2514    }
2515
2516    /**
2517     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist {3}
2518     */
2519    public CodeableConcept getCategoryFirstRep() { 
2520      if (getCategory().isEmpty()) {
2521        addCategory();
2522      }
2523      return getCategory().get(0);
2524    }
2525
2526    /**
2527     * @return {@link #subject} (The patient/healthcare practitioner or group of persons to whom this consent applies.)
2528     */
2529    public Reference getSubject() { 
2530      if (this.subject == null)
2531        if (Configuration.errorOnAutoCreate())
2532          throw new Error("Attempt to auto-create Consent.subject");
2533        else if (Configuration.doAutoCreate())
2534          this.subject = new Reference(); // cc
2535      return this.subject;
2536    }
2537
2538    public boolean hasSubject() { 
2539      return this.subject != null && !this.subject.isEmpty();
2540    }
2541
2542    /**
2543     * @param value {@link #subject} (The patient/healthcare practitioner or group of persons to whom this consent applies.)
2544     */
2545    public Consent setSubject(Reference value) { 
2546      this.subject = value;
2547      return this;
2548    }
2549
2550    /**
2551     * @return {@link #dateTime} (Date and time the consent instance was agreed to.). This is the underlying object with id, value and extensions. The accessor "getDateTime" gives direct access to the value
2552     */
2553    public DateTimeType getDateTimeElement() { 
2554      if (this.dateTime == null)
2555        if (Configuration.errorOnAutoCreate())
2556          throw new Error("Attempt to auto-create Consent.dateTime");
2557        else if (Configuration.doAutoCreate())
2558          this.dateTime = new DateTimeType(); // bb
2559      return this.dateTime;
2560    }
2561
2562    public boolean hasDateTimeElement() { 
2563      return this.dateTime != null && !this.dateTime.isEmpty();
2564    }
2565
2566    public boolean hasDateTime() { 
2567      return this.dateTime != null && !this.dateTime.isEmpty();
2568    }
2569
2570    /**
2571     * @param value {@link #dateTime} (Date and time the consent instance was agreed to.). This is the underlying object with id, value and extensions. The accessor "getDateTime" gives direct access to the value
2572     */
2573    public Consent setDateTimeElement(DateTimeType value) { 
2574      this.dateTime = value;
2575      return this;
2576    }
2577
2578    /**
2579     * @return Date and time the consent instance was agreed to.
2580     */
2581    public Date getDateTime() { 
2582      return this.dateTime == null ? null : this.dateTime.getValue();
2583    }
2584
2585    /**
2586     * @param value Date and time the consent instance was agreed to.
2587     */
2588    public Consent setDateTime(Date value) { 
2589      if (value == null)
2590        this.dateTime = null;
2591      else {
2592        if (this.dateTime == null)
2593          this.dateTime = new DateTimeType();
2594        this.dateTime.setValue(value);
2595      }
2596      return this;
2597    }
2598
2599    /**
2600     * @return {@link #grantor} (The entity responsible for granting the rights listed in a Consent Directive.)
2601     */
2602    public List<Reference> getGrantor() { 
2603      if (this.grantor == null)
2604        this.grantor = new ArrayList<Reference>();
2605      return this.grantor;
2606    }
2607
2608    /**
2609     * @return Returns a reference to <code>this</code> for easy method chaining
2610     */
2611    public Consent setGrantor(List<Reference> theGrantor) { 
2612      this.grantor = theGrantor;
2613      return this;
2614    }
2615
2616    public boolean hasGrantor() { 
2617      if (this.grantor == null)
2618        return false;
2619      for (Reference item : this.grantor)
2620        if (!item.isEmpty())
2621          return true;
2622      return false;
2623    }
2624
2625    public Reference addGrantor() { //3
2626      Reference t = new Reference();
2627      if (this.grantor == null)
2628        this.grantor = new ArrayList<Reference>();
2629      this.grantor.add(t);
2630      return t;
2631    }
2632
2633    public Consent addGrantor(Reference t) { //3
2634      if (t == null)
2635        return this;
2636      if (this.grantor == null)
2637        this.grantor = new ArrayList<Reference>();
2638      this.grantor.add(t);
2639      return this;
2640    }
2641
2642    /**
2643     * @return The first repetition of repeating field {@link #grantor}, creating it if it does not already exist {3}
2644     */
2645    public Reference getGrantorFirstRep() { 
2646      if (getGrantor().isEmpty()) {
2647        addGrantor();
2648      }
2649      return getGrantor().get(0);
2650    }
2651
2652    /**
2653     * @return {@link #grantee} (The entity responsible for complying with the Consent Directive, including any obligations or limitations on authorizations and enforcement of prohibitions.)
2654     */
2655    public List<Reference> getGrantee() { 
2656      if (this.grantee == null)
2657        this.grantee = new ArrayList<Reference>();
2658      return this.grantee;
2659    }
2660
2661    /**
2662     * @return Returns a reference to <code>this</code> for easy method chaining
2663     */
2664    public Consent setGrantee(List<Reference> theGrantee) { 
2665      this.grantee = theGrantee;
2666      return this;
2667    }
2668
2669    public boolean hasGrantee() { 
2670      if (this.grantee == null)
2671        return false;
2672      for (Reference item : this.grantee)
2673        if (!item.isEmpty())
2674          return true;
2675      return false;
2676    }
2677
2678    public Reference addGrantee() { //3
2679      Reference t = new Reference();
2680      if (this.grantee == null)
2681        this.grantee = new ArrayList<Reference>();
2682      this.grantee.add(t);
2683      return t;
2684    }
2685
2686    public Consent addGrantee(Reference t) { //3
2687      if (t == null)
2688        return this;
2689      if (this.grantee == null)
2690        this.grantee = new ArrayList<Reference>();
2691      this.grantee.add(t);
2692      return this;
2693    }
2694
2695    /**
2696     * @return The first repetition of repeating field {@link #grantee}, creating it if it does not already exist {3}
2697     */
2698    public Reference getGranteeFirstRep() { 
2699      if (getGrantee().isEmpty()) {
2700        addGrantee();
2701      }
2702      return getGrantee().get(0);
2703    }
2704
2705    /**
2706     * @return {@link #manager} (The actor that manages the consent through its lifecycle.)
2707     */
2708    public List<Reference> getManager() { 
2709      if (this.manager == null)
2710        this.manager = new ArrayList<Reference>();
2711      return this.manager;
2712    }
2713
2714    /**
2715     * @return Returns a reference to <code>this</code> for easy method chaining
2716     */
2717    public Consent setManager(List<Reference> theManager) { 
2718      this.manager = theManager;
2719      return this;
2720    }
2721
2722    public boolean hasManager() { 
2723      if (this.manager == null)
2724        return false;
2725      for (Reference item : this.manager)
2726        if (!item.isEmpty())
2727          return true;
2728      return false;
2729    }
2730
2731    public Reference addManager() { //3
2732      Reference t = new Reference();
2733      if (this.manager == null)
2734        this.manager = new ArrayList<Reference>();
2735      this.manager.add(t);
2736      return t;
2737    }
2738
2739    public Consent addManager(Reference t) { //3
2740      if (t == null)
2741        return this;
2742      if (this.manager == null)
2743        this.manager = new ArrayList<Reference>();
2744      this.manager.add(t);
2745      return this;
2746    }
2747
2748    /**
2749     * @return The first repetition of repeating field {@link #manager}, creating it if it does not already exist {3}
2750     */
2751    public Reference getManagerFirstRep() { 
2752      if (getManager().isEmpty()) {
2753        addManager();
2754      }
2755      return getManager().get(0);
2756    }
2757
2758    /**
2759     * @return {@link #controller} (The actor that controls/enforces the access according to the consent.)
2760     */
2761    public List<Reference> getController() { 
2762      if (this.controller == null)
2763        this.controller = new ArrayList<Reference>();
2764      return this.controller;
2765    }
2766
2767    /**
2768     * @return Returns a reference to <code>this</code> for easy method chaining
2769     */
2770    public Consent setController(List<Reference> theController) { 
2771      this.controller = theController;
2772      return this;
2773    }
2774
2775    public boolean hasController() { 
2776      if (this.controller == null)
2777        return false;
2778      for (Reference item : this.controller)
2779        if (!item.isEmpty())
2780          return true;
2781      return false;
2782    }
2783
2784    public Reference addController() { //3
2785      Reference t = new Reference();
2786      if (this.controller == null)
2787        this.controller = new ArrayList<Reference>();
2788      this.controller.add(t);
2789      return t;
2790    }
2791
2792    public Consent addController(Reference t) { //3
2793      if (t == null)
2794        return this;
2795      if (this.controller == null)
2796        this.controller = new ArrayList<Reference>();
2797      this.controller.add(t);
2798      return this;
2799    }
2800
2801    /**
2802     * @return The first repetition of repeating field {@link #controller}, creating it if it does not already exist {3}
2803     */
2804    public Reference getControllerFirstRep() { 
2805      if (getController().isEmpty()) {
2806        addController();
2807      }
2808      return getController().get(0);
2809    }
2810
2811    /**
2812     * @return {@link #sourceAttachment} (The source on which this consent statement is based. The source might be a scanned original paper form.)
2813     */
2814    public List<Attachment> getSourceAttachment() { 
2815      if (this.sourceAttachment == null)
2816        this.sourceAttachment = new ArrayList<Attachment>();
2817      return this.sourceAttachment;
2818    }
2819
2820    /**
2821     * @return Returns a reference to <code>this</code> for easy method chaining
2822     */
2823    public Consent setSourceAttachment(List<Attachment> theSourceAttachment) { 
2824      this.sourceAttachment = theSourceAttachment;
2825      return this;
2826    }
2827
2828    public boolean hasSourceAttachment() { 
2829      if (this.sourceAttachment == null)
2830        return false;
2831      for (Attachment item : this.sourceAttachment)
2832        if (!item.isEmpty())
2833          return true;
2834      return false;
2835    }
2836
2837    public Attachment addSourceAttachment() { //3
2838      Attachment t = new Attachment();
2839      if (this.sourceAttachment == null)
2840        this.sourceAttachment = new ArrayList<Attachment>();
2841      this.sourceAttachment.add(t);
2842      return t;
2843    }
2844
2845    public Consent addSourceAttachment(Attachment t) { //3
2846      if (t == null)
2847        return this;
2848      if (this.sourceAttachment == null)
2849        this.sourceAttachment = new ArrayList<Attachment>();
2850      this.sourceAttachment.add(t);
2851      return this;
2852    }
2853
2854    /**
2855     * @return The first repetition of repeating field {@link #sourceAttachment}, creating it if it does not already exist {3}
2856     */
2857    public Attachment getSourceAttachmentFirstRep() { 
2858      if (getSourceAttachment().isEmpty()) {
2859        addSourceAttachment();
2860      }
2861      return getSourceAttachment().get(0);
2862    }
2863
2864    /**
2865     * @return {@link #sourceReference} (A reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.)
2866     */
2867    public List<Reference> getSourceReference() { 
2868      if (this.sourceReference == null)
2869        this.sourceReference = new ArrayList<Reference>();
2870      return this.sourceReference;
2871    }
2872
2873    /**
2874     * @return Returns a reference to <code>this</code> for easy method chaining
2875     */
2876    public Consent setSourceReference(List<Reference> theSourceReference) { 
2877      this.sourceReference = theSourceReference;
2878      return this;
2879    }
2880
2881    public boolean hasSourceReference() { 
2882      if (this.sourceReference == null)
2883        return false;
2884      for (Reference item : this.sourceReference)
2885        if (!item.isEmpty())
2886          return true;
2887      return false;
2888    }
2889
2890    public Reference addSourceReference() { //3
2891      Reference t = new Reference();
2892      if (this.sourceReference == null)
2893        this.sourceReference = new ArrayList<Reference>();
2894      this.sourceReference.add(t);
2895      return t;
2896    }
2897
2898    public Consent addSourceReference(Reference t) { //3
2899      if (t == null)
2900        return this;
2901      if (this.sourceReference == null)
2902        this.sourceReference = new ArrayList<Reference>();
2903      this.sourceReference.add(t);
2904      return this;
2905    }
2906
2907    /**
2908     * @return The first repetition of repeating field {@link #sourceReference}, creating it if it does not already exist {3}
2909     */
2910    public Reference getSourceReferenceFirstRep() { 
2911      if (getSourceReference().isEmpty()) {
2912        addSourceReference();
2913      }
2914      return getSourceReference().get(0);
2915    }
2916
2917    /**
2918     * @return {@link #regulatoryBasis} (A set of codes that indicate the regulatory basis (if any) that this consent supports.)
2919     */
2920    public List<CodeableConcept> getRegulatoryBasis() { 
2921      if (this.regulatoryBasis == null)
2922        this.regulatoryBasis = new ArrayList<CodeableConcept>();
2923      return this.regulatoryBasis;
2924    }
2925
2926    /**
2927     * @return Returns a reference to <code>this</code> for easy method chaining
2928     */
2929    public Consent setRegulatoryBasis(List<CodeableConcept> theRegulatoryBasis) { 
2930      this.regulatoryBasis = theRegulatoryBasis;
2931      return this;
2932    }
2933
2934    public boolean hasRegulatoryBasis() { 
2935      if (this.regulatoryBasis == null)
2936        return false;
2937      for (CodeableConcept item : this.regulatoryBasis)
2938        if (!item.isEmpty())
2939          return true;
2940      return false;
2941    }
2942
2943    public CodeableConcept addRegulatoryBasis() { //3
2944      CodeableConcept t = new CodeableConcept();
2945      if (this.regulatoryBasis == null)
2946        this.regulatoryBasis = new ArrayList<CodeableConcept>();
2947      this.regulatoryBasis.add(t);
2948      return t;
2949    }
2950
2951    public Consent addRegulatoryBasis(CodeableConcept t) { //3
2952      if (t == null)
2953        return this;
2954      if (this.regulatoryBasis == null)
2955        this.regulatoryBasis = new ArrayList<CodeableConcept>();
2956      this.regulatoryBasis.add(t);
2957      return this;
2958    }
2959
2960    /**
2961     * @return The first repetition of repeating field {@link #regulatoryBasis}, creating it if it does not already exist {3}
2962     */
2963    public CodeableConcept getRegulatoryBasisFirstRep() { 
2964      if (getRegulatoryBasis().isEmpty()) {
2965        addRegulatoryBasis();
2966      }
2967      return getRegulatoryBasis().get(0);
2968    }
2969
2970    /**
2971     * @return {@link #policyBasis} (A Reference or URL used to uniquely identify the policy the organization will enforce for this Consent. This Reference or URL should be specific to the version of the policy and should be dereferencable to a computable policy of some form.)
2972     */
2973    public ConsentPolicyBasisComponent getPolicyBasis() { 
2974      if (this.policyBasis == null)
2975        if (Configuration.errorOnAutoCreate())
2976          throw new Error("Attempt to auto-create Consent.policyBasis");
2977        else if (Configuration.doAutoCreate())
2978          this.policyBasis = new ConsentPolicyBasisComponent(); // cc
2979      return this.policyBasis;
2980    }
2981
2982    public boolean hasPolicyBasis() { 
2983      return this.policyBasis != null && !this.policyBasis.isEmpty();
2984    }
2985
2986    /**
2987     * @param value {@link #policyBasis} (A Reference or URL used to uniquely identify the policy the organization will enforce for this Consent. This Reference or URL should be specific to the version of the policy and should be dereferencable to a computable policy of some form.)
2988     */
2989    public Consent setPolicyBasis(ConsentPolicyBasisComponent value) { 
2990      this.policyBasis = value;
2991      return this;
2992    }
2993
2994    /**
2995     * @return {@link #policyText} (A Reference to the human readable policy explaining the basis for the Consent.)
2996     */
2997    public List<Reference> getPolicyText() { 
2998      if (this.policyText == null)
2999        this.policyText = new ArrayList<Reference>();
3000      return this.policyText;
3001    }
3002
3003    /**
3004     * @return Returns a reference to <code>this</code> for easy method chaining
3005     */
3006    public Consent setPolicyText(List<Reference> thePolicyText) { 
3007      this.policyText = thePolicyText;
3008      return this;
3009    }
3010
3011    public boolean hasPolicyText() { 
3012      if (this.policyText == null)
3013        return false;
3014      for (Reference item : this.policyText)
3015        if (!item.isEmpty())
3016          return true;
3017      return false;
3018    }
3019
3020    public Reference addPolicyText() { //3
3021      Reference t = new Reference();
3022      if (this.policyText == null)
3023        this.policyText = new ArrayList<Reference>();
3024      this.policyText.add(t);
3025      return t;
3026    }
3027
3028    public Consent addPolicyText(Reference t) { //3
3029      if (t == null)
3030        return this;
3031      if (this.policyText == null)
3032        this.policyText = new ArrayList<Reference>();
3033      this.policyText.add(t);
3034      return this;
3035    }
3036
3037    /**
3038     * @return The first repetition of repeating field {@link #policyText}, creating it if it does not already exist {3}
3039     */
3040    public Reference getPolicyTextFirstRep() { 
3041      if (getPolicyText().isEmpty()) {
3042        addPolicyText();
3043      }
3044      return getPolicyText().get(0);
3045    }
3046
3047    /**
3048     * @return {@link #verification} (Whether a treatment instruction (e.g. artificial respiration: yes or no) was verified with the patient, his/her family or another authorized person.)
3049     */
3050    public List<ConsentVerificationComponent> getVerification() { 
3051      if (this.verification == null)
3052        this.verification = new ArrayList<ConsentVerificationComponent>();
3053      return this.verification;
3054    }
3055
3056    /**
3057     * @return Returns a reference to <code>this</code> for easy method chaining
3058     */
3059    public Consent setVerification(List<ConsentVerificationComponent> theVerification) { 
3060      this.verification = theVerification;
3061      return this;
3062    }
3063
3064    public boolean hasVerification() { 
3065      if (this.verification == null)
3066        return false;
3067      for (ConsentVerificationComponent item : this.verification)
3068        if (!item.isEmpty())
3069          return true;
3070      return false;
3071    }
3072
3073    public ConsentVerificationComponent addVerification() { //3
3074      ConsentVerificationComponent t = new ConsentVerificationComponent();
3075      if (this.verification == null)
3076        this.verification = new ArrayList<ConsentVerificationComponent>();
3077      this.verification.add(t);
3078      return t;
3079    }
3080
3081    public Consent addVerification(ConsentVerificationComponent t) { //3
3082      if (t == null)
3083        return this;
3084      if (this.verification == null)
3085        this.verification = new ArrayList<ConsentVerificationComponent>();
3086      this.verification.add(t);
3087      return this;
3088    }
3089
3090    /**
3091     * @return The first repetition of repeating field {@link #verification}, creating it if it does not already exist {3}
3092     */
3093    public ConsentVerificationComponent getVerificationFirstRep() { 
3094      if (getVerification().isEmpty()) {
3095        addVerification();
3096      }
3097      return getVerification().get(0);
3098    }
3099
3100    /**
3101     * @return {@link #provision} (An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.)
3102     */
3103    public ProvisionComponent getProvision() { 
3104      if (this.provision == null)
3105        if (Configuration.errorOnAutoCreate())
3106          throw new Error("Attempt to auto-create Consent.provision");
3107        else if (Configuration.doAutoCreate())
3108          this.provision = new ProvisionComponent(); // cc
3109      return this.provision;
3110    }
3111
3112    public boolean hasProvision() { 
3113      return this.provision != null && !this.provision.isEmpty();
3114    }
3115
3116    /**
3117     * @param value {@link #provision} (An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.)
3118     */
3119    public Consent setProvision(ProvisionComponent value) { 
3120      this.provision = value;
3121      return this;
3122    }
3123
3124      protected void listChildren(List<Property> children) {
3125        super.listChildren(children);
3126        children.add(new Property("identifier", "Identifier", "Unique identifier for this copy of the Consent Statement.", 0, java.lang.Integer.MAX_VALUE, identifier));
3127        children.add(new Property("status", "code", "Indicates the current state of this Consent resource.", 0, 1, status));
3128        children.add(new Property("category", "CodeableConcept", "A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements.", 0, java.lang.Integer.MAX_VALUE, category));
3129        children.add(new Property("subject", "Reference(Patient|Practitioner|Group)", "The patient/healthcare practitioner or group of persons to whom this consent applies.", 0, 1, subject));
3130        children.add(new Property("dateTime", "dateTime", "Date and time the consent instance was agreed to.", 0, 1, dateTime));
3131        children.add(new Property("grantor", "Reference(CareTeam|HealthcareService|Organization|Patient|Practitioner|RelatedPerson|PractitionerRole)", "The entity responsible for granting the rights listed in a Consent Directive.", 0, java.lang.Integer.MAX_VALUE, grantor));
3132        children.add(new Property("grantee", "Reference(CareTeam|HealthcareService|Organization|Patient|Practitioner|RelatedPerson|PractitionerRole)", "The entity responsible for complying with the Consent Directive, including any obligations or limitations on authorizations and enforcement of prohibitions.", 0, java.lang.Integer.MAX_VALUE, grantee));
3133        children.add(new Property("manager", "Reference(HealthcareService|Organization|Patient|Practitioner)", "The actor that manages the consent through its lifecycle.", 0, java.lang.Integer.MAX_VALUE, manager));
3134        children.add(new Property("controller", "Reference(HealthcareService|Organization|Patient|Practitioner)", "The actor that controls/enforces the access according to the consent.", 0, java.lang.Integer.MAX_VALUE, controller));
3135        children.add(new Property("sourceAttachment", "Attachment", "The source on which this consent statement is based. The source might be a scanned original paper form.", 0, java.lang.Integer.MAX_VALUE, sourceAttachment));
3136        children.add(new Property("sourceReference", "Reference(Consent|DocumentReference|Contract|QuestionnaireResponse)", "A reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.", 0, java.lang.Integer.MAX_VALUE, sourceReference));
3137        children.add(new Property("regulatoryBasis", "CodeableConcept", "A set of codes that indicate the regulatory basis (if any) that this consent supports.", 0, java.lang.Integer.MAX_VALUE, regulatoryBasis));
3138        children.add(new Property("policyBasis", "", "A Reference or URL used to uniquely identify the policy the organization will enforce for this Consent. This Reference or URL should be specific to the version of the policy and should be dereferencable to a computable policy of some form.", 0, 1, policyBasis));
3139        children.add(new Property("policyText", "Reference(DocumentReference)", "A Reference to the human readable policy explaining the basis for the Consent.", 0, java.lang.Integer.MAX_VALUE, policyText));
3140        children.add(new Property("verification", "", "Whether a treatment instruction (e.g. artificial respiration: yes or no) was verified with the patient, his/her family or another authorized person.", 0, java.lang.Integer.MAX_VALUE, verification));
3141        children.add(new Property("provision", "", "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.", 0, 1, provision));
3142      }
3143
3144      @Override
3145      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3146        switch (_hash) {
3147        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Unique identifier for this copy of the Consent Statement.", 0, java.lang.Integer.MAX_VALUE, identifier);
3148        case -892481550: /*status*/  return new Property("status", "code", "Indicates the current state of this Consent resource.", 0, 1, status);
3149        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements.", 0, java.lang.Integer.MAX_VALUE, category);
3150        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Practitioner|Group)", "The patient/healthcare practitioner or group of persons to whom this consent applies.", 0, 1, subject);
3151        case 1792749467: /*dateTime*/  return new Property("dateTime", "dateTime", "Date and time the consent instance was agreed to.", 0, 1, dateTime);
3152        case 280295423: /*grantor*/  return new Property("grantor", "Reference(CareTeam|HealthcareService|Organization|Patient|Practitioner|RelatedPerson|PractitionerRole)", "The entity responsible for granting the rights listed in a Consent Directive.", 0, java.lang.Integer.MAX_VALUE, grantor);
3153        case 280295100: /*grantee*/  return new Property("grantee", "Reference(CareTeam|HealthcareService|Organization|Patient|Practitioner|RelatedPerson|PractitionerRole)", "The entity responsible for complying with the Consent Directive, including any obligations or limitations on authorizations and enforcement of prohibitions.", 0, java.lang.Integer.MAX_VALUE, grantee);
3154        case 835260333: /*manager*/  return new Property("manager", "Reference(HealthcareService|Organization|Patient|Practitioner)", "The actor that manages the consent through its lifecycle.", 0, java.lang.Integer.MAX_VALUE, manager);
3155        case 637428636: /*controller*/  return new Property("controller", "Reference(HealthcareService|Organization|Patient|Practitioner)", "The actor that controls/enforces the access according to the consent.", 0, java.lang.Integer.MAX_VALUE, controller);
3156        case 1964406686: /*sourceAttachment*/  return new Property("sourceAttachment", "Attachment", "The source on which this consent statement is based. The source might be a scanned original paper form.", 0, java.lang.Integer.MAX_VALUE, sourceAttachment);
3157        case -244259472: /*sourceReference*/  return new Property("sourceReference", "Reference(Consent|DocumentReference|Contract|QuestionnaireResponse)", "A reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.", 0, java.lang.Integer.MAX_VALUE, sourceReference);
3158        case -1780301690: /*regulatoryBasis*/  return new Property("regulatoryBasis", "CodeableConcept", "A set of codes that indicate the regulatory basis (if any) that this consent supports.", 0, java.lang.Integer.MAX_VALUE, regulatoryBasis);
3159        case 2138287660: /*policyBasis*/  return new Property("policyBasis", "", "A Reference or URL used to uniquely identify the policy the organization will enforce for this Consent. This Reference or URL should be specific to the version of the policy and should be dereferencable to a computable policy of some form.", 0, 1, policyBasis);
3160        case 1593537919: /*policyText*/  return new Property("policyText", "Reference(DocumentReference)", "A Reference to the human readable policy explaining the basis for the Consent.", 0, java.lang.Integer.MAX_VALUE, policyText);
3161        case -1484401125: /*verification*/  return new Property("verification", "", "Whether a treatment instruction (e.g. artificial respiration: yes or no) was verified with the patient, his/her family or another authorized person.", 0, java.lang.Integer.MAX_VALUE, verification);
3162        case -547120939: /*provision*/  return new Property("provision", "", "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.", 0, 1, provision);
3163        default: return super.getNamedProperty(_hash, _name, _checkValid);
3164        }
3165
3166      }
3167
3168      @Override
3169      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3170        switch (hash) {
3171        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
3172        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ConsentState>
3173        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
3174        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
3175        case 1792749467: /*dateTime*/ return this.dateTime == null ? new Base[0] : new Base[] {this.dateTime}; // DateTimeType
3176        case 280295423: /*grantor*/ return this.grantor == null ? new Base[0] : this.grantor.toArray(new Base[this.grantor.size()]); // Reference
3177        case 280295100: /*grantee*/ return this.grantee == null ? new Base[0] : this.grantee.toArray(new Base[this.grantee.size()]); // Reference
3178        case 835260333: /*manager*/ return this.manager == null ? new Base[0] : this.manager.toArray(new Base[this.manager.size()]); // Reference
3179        case 637428636: /*controller*/ return this.controller == null ? new Base[0] : this.controller.toArray(new Base[this.controller.size()]); // Reference
3180        case 1964406686: /*sourceAttachment*/ return this.sourceAttachment == null ? new Base[0] : this.sourceAttachment.toArray(new Base[this.sourceAttachment.size()]); // Attachment
3181        case -244259472: /*sourceReference*/ return this.sourceReference == null ? new Base[0] : this.sourceReference.toArray(new Base[this.sourceReference.size()]); // Reference
3182        case -1780301690: /*regulatoryBasis*/ return this.regulatoryBasis == null ? new Base[0] : this.regulatoryBasis.toArray(new Base[this.regulatoryBasis.size()]); // CodeableConcept
3183        case 2138287660: /*policyBasis*/ return this.policyBasis == null ? new Base[0] : new Base[] {this.policyBasis}; // ConsentPolicyBasisComponent
3184        case 1593537919: /*policyText*/ return this.policyText == null ? new Base[0] : this.policyText.toArray(new Base[this.policyText.size()]); // Reference
3185        case -1484401125: /*verification*/ return this.verification == null ? new Base[0] : this.verification.toArray(new Base[this.verification.size()]); // ConsentVerificationComponent
3186        case -547120939: /*provision*/ return this.provision == null ? new Base[0] : new Base[] {this.provision}; // ProvisionComponent
3187        default: return super.getProperty(hash, name, checkValid);
3188        }
3189
3190      }
3191
3192      @Override
3193      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3194        switch (hash) {
3195        case -1618432855: // identifier
3196          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
3197          return value;
3198        case -892481550: // status
3199          value = new ConsentStateEnumFactory().fromType(TypeConvertor.castToCode(value));
3200          this.status = (Enumeration) value; // Enumeration<ConsentState>
3201          return value;
3202        case 50511102: // category
3203          this.getCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3204          return value;
3205        case -1867885268: // subject
3206          this.subject = TypeConvertor.castToReference(value); // Reference
3207          return value;
3208        case 1792749467: // dateTime
3209          this.dateTime = TypeConvertor.castToDateTime(value); // DateTimeType
3210          return value;
3211        case 280295423: // grantor
3212          this.getGrantor().add(TypeConvertor.castToReference(value)); // Reference
3213          return value;
3214        case 280295100: // grantee
3215          this.getGrantee().add(TypeConvertor.castToReference(value)); // Reference
3216          return value;
3217        case 835260333: // manager
3218          this.getManager().add(TypeConvertor.castToReference(value)); // Reference
3219          return value;
3220        case 637428636: // controller
3221          this.getController().add(TypeConvertor.castToReference(value)); // Reference
3222          return value;
3223        case 1964406686: // sourceAttachment
3224          this.getSourceAttachment().add(TypeConvertor.castToAttachment(value)); // Attachment
3225          return value;
3226        case -244259472: // sourceReference
3227          this.getSourceReference().add(TypeConvertor.castToReference(value)); // Reference
3228          return value;
3229        case -1780301690: // regulatoryBasis
3230          this.getRegulatoryBasis().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3231          return value;
3232        case 2138287660: // policyBasis
3233          this.policyBasis = (ConsentPolicyBasisComponent) value; // ConsentPolicyBasisComponent
3234          return value;
3235        case 1593537919: // policyText
3236          this.getPolicyText().add(TypeConvertor.castToReference(value)); // Reference
3237          return value;
3238        case -1484401125: // verification
3239          this.getVerification().add((ConsentVerificationComponent) value); // ConsentVerificationComponent
3240          return value;
3241        case -547120939: // provision
3242          this.provision = (ProvisionComponent) value; // ProvisionComponent
3243          return value;
3244        default: return super.setProperty(hash, name, value);
3245        }
3246
3247      }
3248
3249      @Override
3250      public Base setProperty(String name, Base value) throws FHIRException {
3251        if (name.equals("identifier")) {
3252          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
3253        } else if (name.equals("status")) {
3254          value = new ConsentStateEnumFactory().fromType(TypeConvertor.castToCode(value));
3255          this.status = (Enumeration) value; // Enumeration<ConsentState>
3256        } else if (name.equals("category")) {
3257          this.getCategory().add(TypeConvertor.castToCodeableConcept(value));
3258        } else if (name.equals("subject")) {
3259          this.subject = TypeConvertor.castToReference(value); // Reference
3260        } else if (name.equals("dateTime")) {
3261          this.dateTime = TypeConvertor.castToDateTime(value); // DateTimeType
3262        } else if (name.equals("grantor")) {
3263          this.getGrantor().add(TypeConvertor.castToReference(value));
3264        } else if (name.equals("grantee")) {
3265          this.getGrantee().add(TypeConvertor.castToReference(value));
3266        } else if (name.equals("manager")) {
3267          this.getManager().add(TypeConvertor.castToReference(value));
3268        } else if (name.equals("controller")) {
3269          this.getController().add(TypeConvertor.castToReference(value));
3270        } else if (name.equals("sourceAttachment")) {
3271          this.getSourceAttachment().add(TypeConvertor.castToAttachment(value));
3272        } else if (name.equals("sourceReference")) {
3273          this.getSourceReference().add(TypeConvertor.castToReference(value));
3274        } else if (name.equals("regulatoryBasis")) {
3275          this.getRegulatoryBasis().add(TypeConvertor.castToCodeableConcept(value));
3276        } else if (name.equals("policyBasis")) {
3277          this.policyBasis = (ConsentPolicyBasisComponent) value; // ConsentPolicyBasisComponent
3278        } else if (name.equals("policyText")) {
3279          this.getPolicyText().add(TypeConvertor.castToReference(value));
3280        } else if (name.equals("verification")) {
3281          this.getVerification().add((ConsentVerificationComponent) value);
3282        } else if (name.equals("provision")) {
3283          this.provision = (ProvisionComponent) value; // ProvisionComponent
3284        } else
3285          return super.setProperty(name, value);
3286        return value;
3287      }
3288
3289      @Override
3290      public Base makeProperty(int hash, String name) throws FHIRException {
3291        switch (hash) {
3292        case -1618432855:  return addIdentifier(); 
3293        case -892481550:  return getStatusElement();
3294        case 50511102:  return addCategory(); 
3295        case -1867885268:  return getSubject();
3296        case 1792749467:  return getDateTimeElement();
3297        case 280295423:  return addGrantor(); 
3298        case 280295100:  return addGrantee(); 
3299        case 835260333:  return addManager(); 
3300        case 637428636:  return addController(); 
3301        case 1964406686:  return addSourceAttachment(); 
3302        case -244259472:  return addSourceReference(); 
3303        case -1780301690:  return addRegulatoryBasis(); 
3304        case 2138287660:  return getPolicyBasis();
3305        case 1593537919:  return addPolicyText(); 
3306        case -1484401125:  return addVerification(); 
3307        case -547120939:  return getProvision();
3308        default: return super.makeProperty(hash, name);
3309        }
3310
3311      }
3312
3313      @Override
3314      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3315        switch (hash) {
3316        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
3317        case -892481550: /*status*/ return new String[] {"code"};
3318        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
3319        case -1867885268: /*subject*/ return new String[] {"Reference"};
3320        case 1792749467: /*dateTime*/ return new String[] {"dateTime"};
3321        case 280295423: /*grantor*/ return new String[] {"Reference"};
3322        case 280295100: /*grantee*/ return new String[] {"Reference"};
3323        case 835260333: /*manager*/ return new String[] {"Reference"};
3324        case 637428636: /*controller*/ return new String[] {"Reference"};
3325        case 1964406686: /*sourceAttachment*/ return new String[] {"Attachment"};
3326        case -244259472: /*sourceReference*/ return new String[] {"Reference"};
3327        case -1780301690: /*regulatoryBasis*/ return new String[] {"CodeableConcept"};
3328        case 2138287660: /*policyBasis*/ return new String[] {};
3329        case 1593537919: /*policyText*/ return new String[] {"Reference"};
3330        case -1484401125: /*verification*/ return new String[] {};
3331        case -547120939: /*provision*/ return new String[] {};
3332        default: return super.getTypesForProperty(hash, name);
3333        }
3334
3335      }
3336
3337      @Override
3338      public Base addChild(String name) throws FHIRException {
3339        if (name.equals("identifier")) {
3340          return addIdentifier();
3341        }
3342        else if (name.equals("status")) {
3343          throw new FHIRException("Cannot call addChild on a primitive type Consent.status");
3344        }
3345        else if (name.equals("category")) {
3346          return addCategory();
3347        }
3348        else if (name.equals("subject")) {
3349          this.subject = new Reference();
3350          return this.subject;
3351        }
3352        else if (name.equals("dateTime")) {
3353          throw new FHIRException("Cannot call addChild on a primitive type Consent.dateTime");
3354        }
3355        else if (name.equals("grantor")) {
3356          return addGrantor();
3357        }
3358        else if (name.equals("grantee")) {
3359          return addGrantee();
3360        }
3361        else if (name.equals("manager")) {
3362          return addManager();
3363        }
3364        else if (name.equals("controller")) {
3365          return addController();
3366        }
3367        else if (name.equals("sourceAttachment")) {
3368          return addSourceAttachment();
3369        }
3370        else if (name.equals("sourceReference")) {
3371          return addSourceReference();
3372        }
3373        else if (name.equals("regulatoryBasis")) {
3374          return addRegulatoryBasis();
3375        }
3376        else if (name.equals("policyBasis")) {
3377          this.policyBasis = new ConsentPolicyBasisComponent();
3378          return this.policyBasis;
3379        }
3380        else if (name.equals("policyText")) {
3381          return addPolicyText();
3382        }
3383        else if (name.equals("verification")) {
3384          return addVerification();
3385        }
3386        else if (name.equals("provision")) {
3387          this.provision = new ProvisionComponent();
3388          return this.provision;
3389        }
3390        else
3391          return super.addChild(name);
3392      }
3393
3394  public String fhirType() {
3395    return "Consent";
3396
3397  }
3398
3399      public Consent copy() {
3400        Consent dst = new Consent();
3401        copyValues(dst);
3402        return dst;
3403      }
3404
3405      public void copyValues(Consent dst) {
3406        super.copyValues(dst);
3407        if (identifier != null) {
3408          dst.identifier = new ArrayList<Identifier>();
3409          for (Identifier i : identifier)
3410            dst.identifier.add(i.copy());
3411        };
3412        dst.status = status == null ? null : status.copy();
3413        if (category != null) {
3414          dst.category = new ArrayList<CodeableConcept>();
3415          for (CodeableConcept i : category)
3416            dst.category.add(i.copy());
3417        };
3418        dst.subject = subject == null ? null : subject.copy();
3419        dst.dateTime = dateTime == null ? null : dateTime.copy();
3420        if (grantor != null) {
3421          dst.grantor = new ArrayList<Reference>();
3422          for (Reference i : grantor)
3423            dst.grantor.add(i.copy());
3424        };
3425        if (grantee != null) {
3426          dst.grantee = new ArrayList<Reference>();
3427          for (Reference i : grantee)
3428            dst.grantee.add(i.copy());
3429        };
3430        if (manager != null) {
3431          dst.manager = new ArrayList<Reference>();
3432          for (Reference i : manager)
3433            dst.manager.add(i.copy());
3434        };
3435        if (controller != null) {
3436          dst.controller = new ArrayList<Reference>();
3437          for (Reference i : controller)
3438            dst.controller.add(i.copy());
3439        };
3440        if (sourceAttachment != null) {
3441          dst.sourceAttachment = new ArrayList<Attachment>();
3442          for (Attachment i : sourceAttachment)
3443            dst.sourceAttachment.add(i.copy());
3444        };
3445        if (sourceReference != null) {
3446          dst.sourceReference = new ArrayList<Reference>();
3447          for (Reference i : sourceReference)
3448            dst.sourceReference.add(i.copy());
3449        };
3450        if (regulatoryBasis != null) {
3451          dst.regulatoryBasis = new ArrayList<CodeableConcept>();
3452          for (CodeableConcept i : regulatoryBasis)
3453            dst.regulatoryBasis.add(i.copy());
3454        };
3455        dst.policyBasis = policyBasis == null ? null : policyBasis.copy();
3456        if (policyText != null) {
3457          dst.policyText = new ArrayList<Reference>();
3458          for (Reference i : policyText)
3459            dst.policyText.add(i.copy());
3460        };
3461        if (verification != null) {
3462          dst.verification = new ArrayList<ConsentVerificationComponent>();
3463          for (ConsentVerificationComponent i : verification)
3464            dst.verification.add(i.copy());
3465        };
3466        dst.provision = provision == null ? null : provision.copy();
3467      }
3468
3469      protected Consent typedCopy() {
3470        return copy();
3471      }
3472
3473      @Override
3474      public boolean equalsDeep(Base other_) {
3475        if (!super.equalsDeep(other_))
3476          return false;
3477        if (!(other_ instanceof Consent))
3478          return false;
3479        Consent o = (Consent) other_;
3480        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(category, o.category, true)
3481           && compareDeep(subject, o.subject, true) && compareDeep(dateTime, o.dateTime, true) && compareDeep(grantor, o.grantor, true)
3482           && compareDeep(grantee, o.grantee, true) && compareDeep(manager, o.manager, true) && compareDeep(controller, o.controller, true)
3483           && compareDeep(sourceAttachment, o.sourceAttachment, true) && compareDeep(sourceReference, o.sourceReference, true)
3484           && compareDeep(regulatoryBasis, o.regulatoryBasis, true) && compareDeep(policyBasis, o.policyBasis, true)
3485           && compareDeep(policyText, o.policyText, true) && compareDeep(verification, o.verification, true)
3486           && compareDeep(provision, o.provision, true);
3487      }
3488
3489      @Override
3490      public boolean equalsShallow(Base other_) {
3491        if (!super.equalsShallow(other_))
3492          return false;
3493        if (!(other_ instanceof Consent))
3494          return false;
3495        Consent o = (Consent) other_;
3496        return compareValues(status, o.status, true) && compareValues(dateTime, o.dateTime, true);
3497      }
3498
3499      public boolean isEmpty() {
3500        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, category
3501          , subject, dateTime, grantor, grantee, manager, controller, sourceAttachment, sourceReference
3502          , regulatoryBasis, policyBasis, policyText, verification, provision);
3503      }
3504
3505  @Override
3506  public ResourceType getResourceType() {
3507    return ResourceType.Consent;
3508   }
3509
3510 /**
3511   * Search parameter: <b>action</b>
3512   * <p>
3513   * Description: <b>Actions controlled by this rule</b><br>
3514   * Type: <b>token</b><br>
3515   * Path: <b>Consent.provision.action</b><br>
3516   * </p>
3517   */
3518  @SearchParamDefinition(name="action", path="Consent.provision.action", description="Actions controlled by this rule", type="token" )
3519  public static final String SP_ACTION = "action";
3520 /**
3521   * <b>Fluent Client</b> search parameter constant for <b>action</b>
3522   * <p>
3523   * Description: <b>Actions controlled by this rule</b><br>
3524   * Type: <b>token</b><br>
3525   * Path: <b>Consent.provision.action</b><br>
3526   * </p>
3527   */
3528  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTION);
3529
3530 /**
3531   * Search parameter: <b>actor</b>
3532   * <p>
3533   * Description: <b>Resource for the actor (or group, by role)</b><br>
3534   * Type: <b>reference</b><br>
3535   * Path: <b>Consent.provision.actor.reference</b><br>
3536   * </p>
3537   */
3538  @SearchParamDefinition(name="actor", path="Consent.provision.actor.reference", description="Resource for the actor (or group, by role)", type="reference", target={CareTeam.class, Device.class, Group.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
3539  public static final String SP_ACTOR = "actor";
3540 /**
3541   * <b>Fluent Client</b> search parameter constant for <b>actor</b>
3542   * <p>
3543   * Description: <b>Resource for the actor (or group, by role)</b><br>
3544   * Type: <b>reference</b><br>
3545   * Path: <b>Consent.provision.actor.reference</b><br>
3546   * </p>
3547   */
3548  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ACTOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ACTOR);
3549
3550/**
3551   * Constant for fluent queries to be used to add include statements. Specifies
3552   * the path value of "<b>Consent:actor</b>".
3553   */
3554  public static final ca.uhn.fhir.model.api.Include INCLUDE_ACTOR = new ca.uhn.fhir.model.api.Include("Consent:actor").toLocked();
3555
3556 /**
3557   * Search parameter: <b>category</b>
3558   * <p>
3559   * Description: <b>Classification of the consent statement - for indexing/retrieval</b><br>
3560   * Type: <b>token</b><br>
3561   * Path: <b>Consent.category</b><br>
3562   * </p>
3563   */
3564  @SearchParamDefinition(name="category", path="Consent.category", description="Classification of the consent statement - for indexing/retrieval", type="token" )
3565  public static final String SP_CATEGORY = "category";
3566 /**
3567   * <b>Fluent Client</b> search parameter constant for <b>category</b>
3568   * <p>
3569   * Description: <b>Classification of the consent statement - for indexing/retrieval</b><br>
3570   * Type: <b>token</b><br>
3571   * Path: <b>Consent.category</b><br>
3572   * </p>
3573   */
3574  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
3575
3576 /**
3577   * Search parameter: <b>controller</b>
3578   * <p>
3579   * Description: <b>Consent Enforcer</b><br>
3580   * Type: <b>reference</b><br>
3581   * Path: <b>Consent.controller</b><br>
3582   * </p>
3583   */
3584  @SearchParamDefinition(name="controller", path="Consent.controller", description="Consent Enforcer", type="reference", target={HealthcareService.class, Organization.class, Patient.class, Practitioner.class } )
3585  public static final String SP_CONTROLLER = "controller";
3586 /**
3587   * <b>Fluent Client</b> search parameter constant for <b>controller</b>
3588   * <p>
3589   * Description: <b>Consent Enforcer</b><br>
3590   * Type: <b>reference</b><br>
3591   * Path: <b>Consent.controller</b><br>
3592   * </p>
3593   */
3594  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTROLLER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTROLLER);
3595
3596/**
3597   * Constant for fluent queries to be used to add include statements. Specifies
3598   * the path value of "<b>Consent:controller</b>".
3599   */
3600  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTROLLER = new ca.uhn.fhir.model.api.Include("Consent:controller").toLocked();
3601
3602 /**
3603   * Search parameter: <b>data</b>
3604   * <p>
3605   * Description: <b>The actual data reference</b><br>
3606   * Type: <b>reference</b><br>
3607   * Path: <b>Consent.provision.data.reference</b><br>
3608   * </p>
3609   */
3610  @SearchParamDefinition(name="data", path="Consent.provision.data.reference", description="The actual data reference", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationUsage.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3611  public static final String SP_DATA = "data";
3612 /**
3613   * <b>Fluent Client</b> search parameter constant for <b>data</b>
3614   * <p>
3615   * Description: <b>The actual data reference</b><br>
3616   * Type: <b>reference</b><br>
3617   * Path: <b>Consent.provision.data.reference</b><br>
3618   * </p>
3619   */
3620  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DATA = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DATA);
3621
3622/**
3623   * Constant for fluent queries to be used to add include statements. Specifies
3624   * the path value of "<b>Consent:data</b>".
3625   */
3626  public static final ca.uhn.fhir.model.api.Include INCLUDE_DATA = new ca.uhn.fhir.model.api.Include("Consent:data").toLocked();
3627
3628 /**
3629   * Search parameter: <b>grantee</b>
3630   * <p>
3631   * Description: <b>Who is agreeing to the policy and rules</b><br>
3632   * Type: <b>reference</b><br>
3633   * Path: <b>Consent.grantee</b><br>
3634   * </p>
3635   */
3636  @SearchParamDefinition(name="grantee", path="Consent.grantee", description="Who is agreeing to the policy and rules", type="reference", target={CareTeam.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
3637  public static final String SP_GRANTEE = "grantee";
3638 /**
3639   * <b>Fluent Client</b> search parameter constant for <b>grantee</b>
3640   * <p>
3641   * Description: <b>Who is agreeing to the policy and rules</b><br>
3642   * Type: <b>reference</b><br>
3643   * Path: <b>Consent.grantee</b><br>
3644   * </p>
3645   */
3646  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam GRANTEE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_GRANTEE);
3647
3648/**
3649   * Constant for fluent queries to be used to add include statements. Specifies
3650   * the path value of "<b>Consent:grantee</b>".
3651   */
3652  public static final ca.uhn.fhir.model.api.Include INCLUDE_GRANTEE = new ca.uhn.fhir.model.api.Include("Consent:grantee").toLocked();
3653
3654 /**
3655   * Search parameter: <b>manager</b>
3656   * <p>
3657   * Description: <b>Consent workflow management</b><br>
3658   * Type: <b>reference</b><br>
3659   * Path: <b>Consent.manager</b><br>
3660   * </p>
3661   */
3662  @SearchParamDefinition(name="manager", path="Consent.manager", description="Consent workflow management", type="reference", target={HealthcareService.class, Organization.class, Patient.class, Practitioner.class } )
3663  public static final String SP_MANAGER = "manager";
3664 /**
3665   * <b>Fluent Client</b> search parameter constant for <b>manager</b>
3666   * <p>
3667   * Description: <b>Consent workflow management</b><br>
3668   * Type: <b>reference</b><br>
3669   * Path: <b>Consent.manager</b><br>
3670   * </p>
3671   */
3672  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam MANAGER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_MANAGER);
3673
3674/**
3675   * Constant for fluent queries to be used to add include statements. Specifies
3676   * the path value of "<b>Consent:manager</b>".
3677   */
3678  public static final ca.uhn.fhir.model.api.Include INCLUDE_MANAGER = new ca.uhn.fhir.model.api.Include("Consent:manager").toLocked();
3679
3680 /**
3681   * Search parameter: <b>period</b>
3682   * <p>
3683   * Description: <b>Timeframe for this rule</b><br>
3684   * Type: <b>date</b><br>
3685   * Path: <b>Consent.provision.period</b><br>
3686   * </p>
3687   */
3688  @SearchParamDefinition(name="period", path="Consent.provision.period", description="Timeframe for this rule", type="date" )
3689  public static final String SP_PERIOD = "period";
3690 /**
3691   * <b>Fluent Client</b> search parameter constant for <b>period</b>
3692   * <p>
3693   * Description: <b>Timeframe for this rule</b><br>
3694   * Type: <b>date</b><br>
3695   * Path: <b>Consent.provision.period</b><br>
3696   * </p>
3697   */
3698  public static final ca.uhn.fhir.rest.gclient.DateClientParam PERIOD = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_PERIOD);
3699
3700 /**
3701   * Search parameter: <b>purpose</b>
3702   * <p>
3703   * Description: <b>Context of activities covered by this rule</b><br>
3704   * Type: <b>token</b><br>
3705   * Path: <b>Consent.provision.purpose</b><br>
3706   * </p>
3707   */
3708  @SearchParamDefinition(name="purpose", path="Consent.provision.purpose", description="Context of activities covered by this rule", type="token" )
3709  public static final String SP_PURPOSE = "purpose";
3710 /**
3711   * <b>Fluent Client</b> search parameter constant for <b>purpose</b>
3712   * <p>
3713   * Description: <b>Context of activities covered by this rule</b><br>
3714   * Type: <b>token</b><br>
3715   * Path: <b>Consent.provision.purpose</b><br>
3716   * </p>
3717   */
3718  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PURPOSE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PURPOSE);
3719
3720 /**
3721   * Search parameter: <b>security-label</b>
3722   * <p>
3723   * Description: <b>Security Labels that define affected resources</b><br>
3724   * Type: <b>token</b><br>
3725   * Path: <b>Consent.provision.securityLabel</b><br>
3726   * </p>
3727   */
3728  @SearchParamDefinition(name="security-label", path="Consent.provision.securityLabel", description="Security Labels that define affected resources", type="token" )
3729  public static final String SP_SECURITY_LABEL = "security-label";
3730 /**
3731   * <b>Fluent Client</b> search parameter constant for <b>security-label</b>
3732   * <p>
3733   * Description: <b>Security Labels that define affected resources</b><br>
3734   * Type: <b>token</b><br>
3735   * Path: <b>Consent.provision.securityLabel</b><br>
3736   * </p>
3737   */
3738  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SECURITY_LABEL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SECURITY_LABEL);
3739
3740 /**
3741   * Search parameter: <b>source-reference</b>
3742   * <p>
3743   * Description: <b>Search by reference to a Consent, DocumentReference, Contract  or QuestionnaireResponse</b><br>
3744   * Type: <b>reference</b><br>
3745   * Path: <b>Consent.sourceReference</b><br>
3746   * </p>
3747   */
3748  @SearchParamDefinition(name="source-reference", path="Consent.sourceReference", description="Search by reference to a Consent, DocumentReference, Contract  or QuestionnaireResponse", type="reference", target={Consent.class, Contract.class, DocumentReference.class, QuestionnaireResponse.class } )
3749  public static final String SP_SOURCE_REFERENCE = "source-reference";
3750 /**
3751   * <b>Fluent Client</b> search parameter constant for <b>source-reference</b>
3752   * <p>
3753   * Description: <b>Search by reference to a Consent, DocumentReference, Contract  or QuestionnaireResponse</b><br>
3754   * Type: <b>reference</b><br>
3755   * Path: <b>Consent.sourceReference</b><br>
3756   * </p>
3757   */
3758  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SOURCE_REFERENCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SOURCE_REFERENCE);
3759
3760/**
3761   * Constant for fluent queries to be used to add include statements. Specifies
3762   * the path value of "<b>Consent:source-reference</b>".
3763   */
3764  public static final ca.uhn.fhir.model.api.Include INCLUDE_SOURCE_REFERENCE = new ca.uhn.fhir.model.api.Include("Consent:source-reference").toLocked();
3765
3766 /**
3767   * Search parameter: <b>status</b>
3768   * <p>
3769   * Description: <b>draft | active | inactive | entered-in-error | unknown</b><br>
3770   * Type: <b>token</b><br>
3771   * Path: <b>Consent.status</b><br>
3772   * </p>
3773   */
3774  @SearchParamDefinition(name="status", path="Consent.status", description="draft | active | inactive | entered-in-error | unknown", type="token" )
3775  public static final String SP_STATUS = "status";
3776 /**
3777   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3778   * <p>
3779   * Description: <b>draft | active | inactive | entered-in-error | unknown</b><br>
3780   * Type: <b>token</b><br>
3781   * Path: <b>Consent.status</b><br>
3782   * </p>
3783   */
3784  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3785
3786 /**
3787   * Search parameter: <b>subject</b>
3788   * <p>
3789   * Description: <b>Who the consent applies to</b><br>
3790   * Type: <b>reference</b><br>
3791   * Path: <b>Consent.subject</b><br>
3792   * </p>
3793   */
3794  @SearchParamDefinition(name="subject", path="Consent.subject", description="Who the consent applies to", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Group.class, Patient.class, Practitioner.class } )
3795  public static final String SP_SUBJECT = "subject";
3796 /**
3797   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
3798   * <p>
3799   * Description: <b>Who the consent applies to</b><br>
3800   * Type: <b>reference</b><br>
3801   * Path: <b>Consent.subject</b><br>
3802   * </p>
3803   */
3804  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
3805
3806/**
3807   * Constant for fluent queries to be used to add include statements. Specifies
3808   * the path value of "<b>Consent:subject</b>".
3809   */
3810  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Consent:subject").toLocked();
3811
3812 /**
3813   * Search parameter: <b>verified-date</b>
3814   * <p>
3815   * Description: <b>When consent verified</b><br>
3816   * Type: <b>date</b><br>
3817   * Path: <b>Consent.verification.verificationDate</b><br>
3818   * </p>
3819   */
3820  @SearchParamDefinition(name="verified-date", path="Consent.verification.verificationDate", description="When consent verified", type="date" )
3821  public static final String SP_VERIFIED_DATE = "verified-date";
3822 /**
3823   * <b>Fluent Client</b> search parameter constant for <b>verified-date</b>
3824   * <p>
3825   * Description: <b>When consent verified</b><br>
3826   * Type: <b>date</b><br>
3827   * Path: <b>Consent.verification.verificationDate</b><br>
3828   * </p>
3829   */
3830  public static final ca.uhn.fhir.rest.gclient.DateClientParam VERIFIED_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_VERIFIED_DATE);
3831
3832 /**
3833   * Search parameter: <b>verified</b>
3834   * <p>
3835   * Description: <b>Has been verified</b><br>
3836   * Type: <b>token</b><br>
3837   * Path: <b>Consent.verification.verified</b><br>
3838   * </p>
3839   */
3840  @SearchParamDefinition(name="verified", path="Consent.verification.verified", description="Has been verified", type="token" )
3841  public static final String SP_VERIFIED = "verified";
3842 /**
3843   * <b>Fluent Client</b> search parameter constant for <b>verified</b>
3844   * <p>
3845   * Description: <b>Has been verified</b><br>
3846   * Type: <b>token</b><br>
3847   * Path: <b>Consent.verification.verified</b><br>
3848   * </p>
3849   */
3850  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERIFIED = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERIFIED);
3851
3852 /**
3853   * Search parameter: <b>date</b>
3854   * <p>
3855   * Description: <b>Multiple Resources: 
3856
3857* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3858* [CarePlan](careplan.html): Time period plan covers
3859* [CareTeam](careteam.html): A date within the coverage time period.
3860* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3861* [Composition](composition.html): Composition editing time
3862* [Consent](consent.html): When consent was agreed to
3863* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3864* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
3865* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3866* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3867* [Flag](flag.html): Time period when flag is active
3868* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3869* [List](list.html): When the list was prepared
3870* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3871* [Procedure](procedure.html): When the procedure occurred or is occurring
3872* [RiskAssessment](riskassessment.html): When was assessment made?
3873* [SupplyRequest](supplyrequest.html): When the request was made
3874</b><br>
3875   * Type: <b>date</b><br>
3876   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence as dateTime) | List.date | Observation.effective | Procedure.occurrence | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3877   * </p>
3878   */
3879  @SearchParamDefinition(name="date", path="AllergyIntolerance.recordedDate | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence as dateTime) | List.date | Observation.effective | Procedure.occurrence | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded\r\n* [CarePlan](careplan.html): Time period plan covers\r\n* [CareTeam](careteam.html): A date within the coverage time period.\r\n* [ClinicalImpression](clinicalimpression.html): When the assessment was documented\r\n* [Composition](composition.html): Composition editing time\r\n* [Consent](consent.html): When consent was agreed to\r\n* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report\r\n* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted\r\n* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period\r\n* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated\r\n* [Flag](flag.html): Time period when flag is active\r\n* [Immunization](immunization.html): Vaccination  (non)-Administration Date\r\n* [List](list.html): When the list was prepared\r\n* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period\r\n* [Procedure](procedure.html): When the procedure occurred or is occurring\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
3880  public static final String SP_DATE = "date";
3881 /**
3882   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3883   * <p>
3884   * Description: <b>Multiple Resources: 
3885
3886* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3887* [CarePlan](careplan.html): Time period plan covers
3888* [CareTeam](careteam.html): A date within the coverage time period.
3889* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3890* [Composition](composition.html): Composition editing time
3891* [Consent](consent.html): When consent was agreed to
3892* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3893* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
3894* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3895* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3896* [Flag](flag.html): Time period when flag is active
3897* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3898* [List](list.html): When the list was prepared
3899* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3900* [Procedure](procedure.html): When the procedure occurred or is occurring
3901* [RiskAssessment](riskassessment.html): When was assessment made?
3902* [SupplyRequest](supplyrequest.html): When the request was made
3903</b><br>
3904   * Type: <b>date</b><br>
3905   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence as dateTime) | List.date | Observation.effective | Procedure.occurrence | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3906   * </p>
3907   */
3908  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3909
3910 /**
3911   * Search parameter: <b>identifier</b>
3912   * <p>
3913   * Description: <b>Multiple Resources: 
3914
3915* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3916* [CarePlan](careplan.html): External Ids for this plan
3917* [CareTeam](careteam.html): External Ids for this team
3918* [Composition](composition.html): Version-independent identifier for the Composition
3919* [Condition](condition.html): A unique identifier of the condition record
3920* [Consent](consent.html): Identifier for this record (external references)
3921* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3922* [DeviceRequest](devicerequest.html): Business identifier for request/order
3923* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3924* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3925* [DocumentReference](documentreference.html): Identifier of the attachment binary
3926* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3927* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3928* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3929* [Goal](goal.html): External Ids for this goal
3930* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
3931* [Immunization](immunization.html): Business identifier
3932* [List](list.html): Business identifier
3933* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3934* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3935* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3936* [MedicationUsage](medicationusage.html): Return statements with this external identifier
3937* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3938* [Observation](observation.html): The unique id for a particular observation
3939* [Procedure](procedure.html): A unique identifier for a procedure
3940* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3941* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3942* [SupplyDelivery](supplydelivery.html): External identifier
3943* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3944* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3945</b><br>
3946   * Type: <b>token</b><br>
3947   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationUsage.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3948   * </p>
3949   */
3950  @SearchParamDefinition(name="identifier", path="AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationUsage.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): External ids for this item\r\n* [CarePlan](careplan.html): External Ids for this plan\r\n* [CareTeam](careteam.html): External Ids for this team\r\n* [Composition](composition.html): Version-independent identifier for the Composition\r\n* [Condition](condition.html): A unique identifier of the condition record\r\n* [Consent](consent.html): Identifier for this record (external references)\r\n* [DetectedIssue](detectedissue.html): Unique id for the detected issue\r\n* [DeviceRequest](devicerequest.html): Business identifier for request/order\r\n* [DiagnosticReport](diagnosticreport.html): An identifier for the report\r\n* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents\r\n* [DocumentReference](documentreference.html): Identifier of the attachment binary\r\n* [Encounter](encounter.html): Identifier(s) by which this encounter is known\r\n* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier\r\n* [Goal](goal.html): External Ids for this goal\r\n* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID\r\n* [Immunization](immunization.html): Business identifier\r\n* [List](list.html): Business identifier\r\n* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier\r\n* [MedicationUsage](medicationusage.html): Return statements with this external identifier\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier\r\n* [Observation](observation.html): The unique id for a particular observation\r\n* [Procedure](procedure.html): A unique identifier for a procedure\r\n* [RiskAssessment](riskassessment.html): Unique identifier for the assessment\r\n* [ServiceRequest](servicerequest.html): Identifiers assigned to this order\r\n* [SupplyDelivery](supplydelivery.html): External identifier\r\n* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier\r\n", type="token" )
3951  public static final String SP_IDENTIFIER = "identifier";
3952 /**
3953   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3954   * <p>
3955   * Description: <b>Multiple Resources: 
3956
3957* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3958* [CarePlan](careplan.html): External Ids for this plan
3959* [CareTeam](careteam.html): External Ids for this team
3960* [Composition](composition.html): Version-independent identifier for the Composition
3961* [Condition](condition.html): A unique identifier of the condition record
3962* [Consent](consent.html): Identifier for this record (external references)
3963* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3964* [DeviceRequest](devicerequest.html): Business identifier for request/order
3965* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3966* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3967* [DocumentReference](documentreference.html): Identifier of the attachment binary
3968* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3969* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3970* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3971* [Goal](goal.html): External Ids for this goal
3972* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID
3973* [Immunization](immunization.html): Business identifier
3974* [List](list.html): Business identifier
3975* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3976* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3977* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3978* [MedicationUsage](medicationusage.html): Return statements with this external identifier
3979* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3980* [Observation](observation.html): The unique id for a particular observation
3981* [Procedure](procedure.html): A unique identifier for a procedure
3982* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3983* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3984* [SupplyDelivery](supplydelivery.html): External identifier
3985* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3986* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3987</b><br>
3988   * Type: <b>token</b><br>
3989   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationUsage.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3990   * </p>
3991   */
3992  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3993
3994 /**
3995   * Search parameter: <b>patient</b>
3996   * <p>
3997   * Description: <b>Multiple Resources: 
3998
3999* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
4000* [CarePlan](careplan.html): Who the care plan is for
4001* [CareTeam](careteam.html): Who care team is for
4002* [ClinicalImpression](clinicalimpression.html): Patient assessed
4003* [Composition](composition.html): Who and/or what the composition is about
4004* [Condition](condition.html): Who has the condition?
4005* [Consent](consent.html): Who the consent applies to
4006* [DetectedIssue](detectedissue.html): Associated patient
4007* [DeviceRequest](devicerequest.html): Individual the service is ordered for
4008* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
4009* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
4010* [DocumentManifest](documentmanifest.html): The subject of the set of documents
4011* [DocumentReference](documentreference.html): Who/what is the subject of the document
4012* [Encounter](encounter.html): The patient present at the encounter
4013* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
4014* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
4015* [Flag](flag.html): The identity of a subject to list flags for
4016* [Goal](goal.html): Who this goal is intended for
4017* [ImagingStudy](imagingstudy.html): Who the study is about
4018* [Immunization](immunization.html): The patient for the vaccination record
4019* [List](list.html): If all resources have the same subject
4020* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
4021* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
4022* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
4023* [MedicationUsage](medicationusage.html): Returns statements for a specific patient.
4024* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
4025* [Observation](observation.html): The subject that the observation is about (if patient)
4026* [Procedure](procedure.html): Search by subject - a patient
4027* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
4028* [ServiceRequest](servicerequest.html): Search by subject - a patient
4029* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
4030* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
4031</b><br>
4032   * Type: <b>reference</b><br>
4033   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | DetectedIssue.subject | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationUsage.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
4034   * </p>
4035   */
4036  @SearchParamDefinition(name="patient", path="AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | DetectedIssue.subject | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationUsage.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for\r\n* [CarePlan](careplan.html): Who the care plan is for\r\n* [CareTeam](careteam.html): Who care team is for\r\n* [ClinicalImpression](clinicalimpression.html): Patient assessed\r\n* [Composition](composition.html): Who and/or what the composition is about\r\n* [Condition](condition.html): Who has the condition?\r\n* [Consent](consent.html): Who the consent applies to\r\n* [DetectedIssue](detectedissue.html): Associated patient\r\n* [DeviceRequest](devicerequest.html): Individual the service is ordered for\r\n* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device\r\n* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient\r\n* [DocumentManifest](documentmanifest.html): The subject of the set of documents\r\n* [DocumentReference](documentreference.html): Who/what is the subject of the document\r\n* [Encounter](encounter.html): The patient present at the encounter\r\n* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care\r\n* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for\r\n* [Flag](flag.html): The identity of a subject to list flags for\r\n* [Goal](goal.html): Who this goal is intended for\r\n* [ImagingStudy](imagingstudy.html): Who the study is about\r\n* [Immunization](immunization.html): The patient for the vaccination record\r\n* [List](list.html): If all resources have the same subject\r\n* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for\r\n* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for\r\n* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient\r\n* [MedicationUsage](medicationusage.html): Returns statements for a specific patient.\r\n* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement\r\n* [Observation](observation.html): The subject that the observation is about (if patient)\r\n* [Procedure](procedure.html): Search by subject - a patient\r\n* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?\r\n* [ServiceRequest](servicerequest.html): Search by subject - a patient\r\n* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied\r\n* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for\r\n", type="reference", target={BiologicallyDerivedProduct.class, Device.class, Group.class, Location.class, Medication.class, NutritionProduct.class, Organization.class, Patient.class, Practitioner.class, Procedure.class, Substance.class } )
4037  public static final String SP_PATIENT = "patient";
4038 /**
4039   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
4040   * <p>
4041   * Description: <b>Multiple Resources: 
4042
4043* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
4044* [CarePlan](careplan.html): Who the care plan is for
4045* [CareTeam](careteam.html): Who care team is for
4046* [ClinicalImpression](clinicalimpression.html): Patient assessed
4047* [Composition](composition.html): Who and/or what the composition is about
4048* [Condition](condition.html): Who has the condition?
4049* [Consent](consent.html): Who the consent applies to
4050* [DetectedIssue](detectedissue.html): Associated patient
4051* [DeviceRequest](devicerequest.html): Individual the service is ordered for
4052* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
4053* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
4054* [DocumentManifest](documentmanifest.html): The subject of the set of documents
4055* [DocumentReference](documentreference.html): Who/what is the subject of the document
4056* [Encounter](encounter.html): The patient present at the encounter
4057* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
4058* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
4059* [Flag](flag.html): The identity of a subject to list flags for
4060* [Goal](goal.html): Who this goal is intended for
4061* [ImagingStudy](imagingstudy.html): Who the study is about
4062* [Immunization](immunization.html): The patient for the vaccination record
4063* [List](list.html): If all resources have the same subject
4064* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
4065* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
4066* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
4067* [MedicationUsage](medicationusage.html): Returns statements for a specific patient.
4068* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
4069* [Observation](observation.html): The subject that the observation is about (if patient)
4070* [Procedure](procedure.html): Search by subject - a patient
4071* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
4072* [ServiceRequest](servicerequest.html): Search by subject - a patient
4073* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
4074* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
4075</b><br>
4076   * Type: <b>reference</b><br>
4077   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | DetectedIssue.subject | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationUsage.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
4078   * </p>
4079   */
4080  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
4081
4082/**
4083   * Constant for fluent queries to be used to add include statements. Specifies
4084   * the path value of "<b>Consent:patient</b>".
4085   */
4086  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Consent:patient").toLocked();
4087
4088
4089}
4090