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 Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
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 an event relevant for purposes such as operations, privacy, security, maintenance, and performance analysis.
052 */
053@ResourceDef(name="AuditEvent", profile="http://hl7.org/fhir/StructureDefinition/AuditEvent")
054public class AuditEvent extends DomainResource {
055
056    public enum AuditEventAction {
057        /**
058         * Create a new database object, such as placing an order.
059         */
060        C, 
061        /**
062         * Read data, such as to print or display to a doctor.
063         */
064        R, 
065        /**
066         * Update data, such as revise patient information.
067         */
068        U, 
069        /**
070         * Delete items, such as a doctor master file record.
071         */
072        D, 
073        /**
074         * Perform a system or application function such as log-on, program execution or use of an object's method, or perform a query/search operation.
075         */
076        E, 
077        /**
078         * added to help the parsers with the generic types
079         */
080        NULL;
081        public static AuditEventAction fromCode(String codeString) throws FHIRException {
082            if (codeString == null || "".equals(codeString))
083                return null;
084        if ("C".equals(codeString))
085          return C;
086        if ("R".equals(codeString))
087          return R;
088        if ("U".equals(codeString))
089          return U;
090        if ("D".equals(codeString))
091          return D;
092        if ("E".equals(codeString))
093          return E;
094        if (Configuration.isAcceptInvalidEnums())
095          return null;
096        else
097          throw new FHIRException("Unknown AuditEventAction code '"+codeString+"'");
098        }
099        public String toCode() {
100          switch (this) {
101            case C: return "C";
102            case R: return "R";
103            case U: return "U";
104            case D: return "D";
105            case E: return "E";
106            case NULL: return null;
107            default: return "?";
108          }
109        }
110        public String getSystem() {
111          switch (this) {
112            case C: return "http://hl7.org/fhir/audit-event-action";
113            case R: return "http://hl7.org/fhir/audit-event-action";
114            case U: return "http://hl7.org/fhir/audit-event-action";
115            case D: return "http://hl7.org/fhir/audit-event-action";
116            case E: return "http://hl7.org/fhir/audit-event-action";
117            case NULL: return null;
118            default: return "?";
119          }
120        }
121        public String getDefinition() {
122          switch (this) {
123            case C: return "Create a new database object, such as placing an order.";
124            case R: return "Read data, such as to print or display to a doctor.";
125            case U: return "Update data, such as revise patient information.";
126            case D: return "Delete items, such as a doctor master file record.";
127            case E: return "Perform a system or application function such as log-on, program execution or use of an object's method, or perform a query/search operation.";
128            case NULL: return null;
129            default: return "?";
130          }
131        }
132        public String getDisplay() {
133          switch (this) {
134            case C: return "Create";
135            case R: return "Read";
136            case U: return "Update";
137            case D: return "Delete";
138            case E: return "Execute";
139            case NULL: return null;
140            default: return "?";
141          }
142        }
143    }
144
145  public static class AuditEventActionEnumFactory implements EnumFactory<AuditEventAction> {
146    public AuditEventAction fromCode(String codeString) throws IllegalArgumentException {
147      if (codeString == null || "".equals(codeString))
148            if (codeString == null || "".equals(codeString))
149                return null;
150        if ("C".equals(codeString))
151          return AuditEventAction.C;
152        if ("R".equals(codeString))
153          return AuditEventAction.R;
154        if ("U".equals(codeString))
155          return AuditEventAction.U;
156        if ("D".equals(codeString))
157          return AuditEventAction.D;
158        if ("E".equals(codeString))
159          return AuditEventAction.E;
160        throw new IllegalArgumentException("Unknown AuditEventAction code '"+codeString+"'");
161        }
162        public Enumeration<AuditEventAction> fromType(PrimitiveType<?> code) throws FHIRException {
163          if (code == null)
164            return null;
165          if (code.isEmpty())
166            return new Enumeration<AuditEventAction>(this, AuditEventAction.NULL, code);
167          String codeString = ((PrimitiveType) code).asStringValue();
168          if (codeString == null || "".equals(codeString))
169            return new Enumeration<AuditEventAction>(this, AuditEventAction.NULL, code);
170        if ("C".equals(codeString))
171          return new Enumeration<AuditEventAction>(this, AuditEventAction.C, code);
172        if ("R".equals(codeString))
173          return new Enumeration<AuditEventAction>(this, AuditEventAction.R, code);
174        if ("U".equals(codeString))
175          return new Enumeration<AuditEventAction>(this, AuditEventAction.U, code);
176        if ("D".equals(codeString))
177          return new Enumeration<AuditEventAction>(this, AuditEventAction.D, code);
178        if ("E".equals(codeString))
179          return new Enumeration<AuditEventAction>(this, AuditEventAction.E, code);
180        throw new FHIRException("Unknown AuditEventAction code '"+codeString+"'");
181        }
182    public String toCode(AuditEventAction code) {
183      if (code == AuditEventAction.C)
184        return "C";
185      if (code == AuditEventAction.R)
186        return "R";
187      if (code == AuditEventAction.U)
188        return "U";
189      if (code == AuditEventAction.D)
190        return "D";
191      if (code == AuditEventAction.E)
192        return "E";
193      return "?";
194      }
195    public String toSystem(AuditEventAction code) {
196      return code.getSystem();
197      }
198    }
199
200    public enum AuditEventSeverity {
201        /**
202         * System is unusable. e.g., This level should only be reported by infrastructure and should not be used by applications.
203         */
204        EMERGENCY, 
205        /**
206         * Notification should be sent to trigger action be taken. e.g., Loss of the primary network connection needing attention.
207         */
208        ALERT, 
209        /**
210         * Critical conditions. e.g., A failure in the system's primary application that will reset automatically.
211         */
212        CRITICAL, 
213        /**
214         * Error conditions. e.g., An application has exceeded its file storage limit and attempts to write are failing. 
215         */
216        ERROR, 
217        /**
218         * Warning conditions. May indicate that an error will occur if action is not taken. e.g., A non-root file system has only 2GB remaining.
219         */
220        WARNING, 
221        /**
222         * Notice messages. Normal but significant condition. Events that are unusual, but not error conditions.
223         */
224        NOTICE, 
225        /**
226         * Normal operational messages that require no action. e.g., An application has started, paused, or ended successfully.
227         */
228        INFORMATIONAL, 
229        /**
230         * Debug-level messages. Information useful to developers for debugging the application.
231         */
232        DEBUG, 
233        /**
234         * added to help the parsers with the generic types
235         */
236        NULL;
237        public static AuditEventSeverity fromCode(String codeString) throws FHIRException {
238            if (codeString == null || "".equals(codeString))
239                return null;
240        if ("emergency".equals(codeString))
241          return EMERGENCY;
242        if ("alert".equals(codeString))
243          return ALERT;
244        if ("critical".equals(codeString))
245          return CRITICAL;
246        if ("error".equals(codeString))
247          return ERROR;
248        if ("warning".equals(codeString))
249          return WARNING;
250        if ("notice".equals(codeString))
251          return NOTICE;
252        if ("informational".equals(codeString))
253          return INFORMATIONAL;
254        if ("debug".equals(codeString))
255          return DEBUG;
256        if (Configuration.isAcceptInvalidEnums())
257          return null;
258        else
259          throw new FHIRException("Unknown AuditEventSeverity code '"+codeString+"'");
260        }
261        public String toCode() {
262          switch (this) {
263            case EMERGENCY: return "emergency";
264            case ALERT: return "alert";
265            case CRITICAL: return "critical";
266            case ERROR: return "error";
267            case WARNING: return "warning";
268            case NOTICE: return "notice";
269            case INFORMATIONAL: return "informational";
270            case DEBUG: return "debug";
271            case NULL: return null;
272            default: return "?";
273          }
274        }
275        public String getSystem() {
276          switch (this) {
277            case EMERGENCY: return "http://hl7.org/fhir/audit-event-severity";
278            case ALERT: return "http://hl7.org/fhir/audit-event-severity";
279            case CRITICAL: return "http://hl7.org/fhir/audit-event-severity";
280            case ERROR: return "http://hl7.org/fhir/audit-event-severity";
281            case WARNING: return "http://hl7.org/fhir/audit-event-severity";
282            case NOTICE: return "http://hl7.org/fhir/audit-event-severity";
283            case INFORMATIONAL: return "http://hl7.org/fhir/audit-event-severity";
284            case DEBUG: return "http://hl7.org/fhir/audit-event-severity";
285            case NULL: return null;
286            default: return "?";
287          }
288        }
289        public String getDefinition() {
290          switch (this) {
291            case EMERGENCY: return "System is unusable. e.g., This level should only be reported by infrastructure and should not be used by applications.";
292            case ALERT: return "Notification should be sent to trigger action be taken. e.g., Loss of the primary network connection needing attention.";
293            case CRITICAL: return "Critical conditions. e.g., A failure in the system's primary application that will reset automatically.";
294            case ERROR: return "Error conditions. e.g., An application has exceeded its file storage limit and attempts to write are failing. ";
295            case WARNING: return "Warning conditions. May indicate that an error will occur if action is not taken. e.g., A non-root file system has only 2GB remaining.";
296            case NOTICE: return "Notice messages. Normal but significant condition. Events that are unusual, but not error conditions.";
297            case INFORMATIONAL: return "Normal operational messages that require no action. e.g., An application has started, paused, or ended successfully.";
298            case DEBUG: return "Debug-level messages. Information useful to developers for debugging the application.";
299            case NULL: return null;
300            default: return "?";
301          }
302        }
303        public String getDisplay() {
304          switch (this) {
305            case EMERGENCY: return "Emergency";
306            case ALERT: return "Alert";
307            case CRITICAL: return "Critical";
308            case ERROR: return "Error";
309            case WARNING: return "Warning";
310            case NOTICE: return "Notice";
311            case INFORMATIONAL: return "Informational";
312            case DEBUG: return "Debug";
313            case NULL: return null;
314            default: return "?";
315          }
316        }
317    }
318
319  public static class AuditEventSeverityEnumFactory implements EnumFactory<AuditEventSeverity> {
320    public AuditEventSeverity fromCode(String codeString) throws IllegalArgumentException {
321      if (codeString == null || "".equals(codeString))
322            if (codeString == null || "".equals(codeString))
323                return null;
324        if ("emergency".equals(codeString))
325          return AuditEventSeverity.EMERGENCY;
326        if ("alert".equals(codeString))
327          return AuditEventSeverity.ALERT;
328        if ("critical".equals(codeString))
329          return AuditEventSeverity.CRITICAL;
330        if ("error".equals(codeString))
331          return AuditEventSeverity.ERROR;
332        if ("warning".equals(codeString))
333          return AuditEventSeverity.WARNING;
334        if ("notice".equals(codeString))
335          return AuditEventSeverity.NOTICE;
336        if ("informational".equals(codeString))
337          return AuditEventSeverity.INFORMATIONAL;
338        if ("debug".equals(codeString))
339          return AuditEventSeverity.DEBUG;
340        throw new IllegalArgumentException("Unknown AuditEventSeverity code '"+codeString+"'");
341        }
342        public Enumeration<AuditEventSeverity> fromType(PrimitiveType<?> code) throws FHIRException {
343          if (code == null)
344            return null;
345          if (code.isEmpty())
346            return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.NULL, code);
347          String codeString = ((PrimitiveType) code).asStringValue();
348          if (codeString == null || "".equals(codeString))
349            return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.NULL, code);
350        if ("emergency".equals(codeString))
351          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.EMERGENCY, code);
352        if ("alert".equals(codeString))
353          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.ALERT, code);
354        if ("critical".equals(codeString))
355          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.CRITICAL, code);
356        if ("error".equals(codeString))
357          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.ERROR, code);
358        if ("warning".equals(codeString))
359          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.WARNING, code);
360        if ("notice".equals(codeString))
361          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.NOTICE, code);
362        if ("informational".equals(codeString))
363          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.INFORMATIONAL, code);
364        if ("debug".equals(codeString))
365          return new Enumeration<AuditEventSeverity>(this, AuditEventSeverity.DEBUG, code);
366        throw new FHIRException("Unknown AuditEventSeverity code '"+codeString+"'");
367        }
368    public String toCode(AuditEventSeverity code) {
369      if (code == AuditEventSeverity.EMERGENCY)
370        return "emergency";
371      if (code == AuditEventSeverity.ALERT)
372        return "alert";
373      if (code == AuditEventSeverity.CRITICAL)
374        return "critical";
375      if (code == AuditEventSeverity.ERROR)
376        return "error";
377      if (code == AuditEventSeverity.WARNING)
378        return "warning";
379      if (code == AuditEventSeverity.NOTICE)
380        return "notice";
381      if (code == AuditEventSeverity.INFORMATIONAL)
382        return "informational";
383      if (code == AuditEventSeverity.DEBUG)
384        return "debug";
385      return "?";
386      }
387    public String toSystem(AuditEventSeverity code) {
388      return code.getSystem();
389      }
390    }
391
392    @Block()
393    public static class AuditEventOutcomeComponent extends BackboneElement implements IBaseBackboneElement {
394        /**
395         * Indicates whether the event succeeded or failed.
396         */
397        @Child(name = "code", type = {Coding.class}, order=1, min=1, max=1, modifier=false, summary=true)
398        @Description(shortDefinition="Whether the event succeeded or failed", formalDefinition="Indicates whether the event succeeded or failed." )
399        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/audit-event-outcome")
400        protected Coding code;
401
402        /**
403         * Additional details about the error. This may be a text description of the error or a system code that identifies the error.
404         */
405        @Child(name = "detail", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
406        @Description(shortDefinition="Additional outcome detail", formalDefinition="Additional details about the error. This may be a text description of the error or a system code that identifies the error." )
407        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/audit-event-outcome-detail")
408        protected List<CodeableConcept> detail;
409
410        private static final long serialVersionUID = -1108329559L;
411
412    /**
413     * Constructor
414     */
415      public AuditEventOutcomeComponent() {
416        super();
417      }
418
419    /**
420     * Constructor
421     */
422      public AuditEventOutcomeComponent(Coding code) {
423        super();
424        this.setCode(code);
425      }
426
427        /**
428         * @return {@link #code} (Indicates whether the event succeeded or failed.)
429         */
430        public Coding getCode() { 
431          if (this.code == null)
432            if (Configuration.errorOnAutoCreate())
433              throw new Error("Attempt to auto-create AuditEventOutcomeComponent.code");
434            else if (Configuration.doAutoCreate())
435              this.code = new Coding(); // cc
436          return this.code;
437        }
438
439        public boolean hasCode() { 
440          return this.code != null && !this.code.isEmpty();
441        }
442
443        /**
444         * @param value {@link #code} (Indicates whether the event succeeded or failed.)
445         */
446        public AuditEventOutcomeComponent setCode(Coding value) { 
447          this.code = value;
448          return this;
449        }
450
451        /**
452         * @return {@link #detail} (Additional details about the error. This may be a text description of the error or a system code that identifies the error.)
453         */
454        public List<CodeableConcept> getDetail() { 
455          if (this.detail == null)
456            this.detail = new ArrayList<CodeableConcept>();
457          return this.detail;
458        }
459
460        /**
461         * @return Returns a reference to <code>this</code> for easy method chaining
462         */
463        public AuditEventOutcomeComponent setDetail(List<CodeableConcept> theDetail) { 
464          this.detail = theDetail;
465          return this;
466        }
467
468        public boolean hasDetail() { 
469          if (this.detail == null)
470            return false;
471          for (CodeableConcept item : this.detail)
472            if (!item.isEmpty())
473              return true;
474          return false;
475        }
476
477        public CodeableConcept addDetail() { //3
478          CodeableConcept t = new CodeableConcept();
479          if (this.detail == null)
480            this.detail = new ArrayList<CodeableConcept>();
481          this.detail.add(t);
482          return t;
483        }
484
485        public AuditEventOutcomeComponent addDetail(CodeableConcept t) { //3
486          if (t == null)
487            return this;
488          if (this.detail == null)
489            this.detail = new ArrayList<CodeableConcept>();
490          this.detail.add(t);
491          return this;
492        }
493
494        /**
495         * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist {3}
496         */
497        public CodeableConcept getDetailFirstRep() { 
498          if (getDetail().isEmpty()) {
499            addDetail();
500          }
501          return getDetail().get(0);
502        }
503
504        protected void listChildren(List<Property> children) {
505          super.listChildren(children);
506          children.add(new Property("code", "Coding", "Indicates whether the event succeeded or failed.", 0, 1, code));
507          children.add(new Property("detail", "CodeableConcept", "Additional details about the error. This may be a text description of the error or a system code that identifies the error.", 0, java.lang.Integer.MAX_VALUE, detail));
508        }
509
510        @Override
511        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
512          switch (_hash) {
513          case 3059181: /*code*/  return new Property("code", "Coding", "Indicates whether the event succeeded or failed.", 0, 1, code);
514          case -1335224239: /*detail*/  return new Property("detail", "CodeableConcept", "Additional details about the error. This may be a text description of the error or a system code that identifies the error.", 0, java.lang.Integer.MAX_VALUE, detail);
515          default: return super.getNamedProperty(_hash, _name, _checkValid);
516          }
517
518        }
519
520      @Override
521      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
522        switch (hash) {
523        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // Coding
524        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // CodeableConcept
525        default: return super.getProperty(hash, name, checkValid);
526        }
527
528      }
529
530      @Override
531      public Base setProperty(int hash, String name, Base value) throws FHIRException {
532        switch (hash) {
533        case 3059181: // code
534          this.code = TypeConvertor.castToCoding(value); // Coding
535          return value;
536        case -1335224239: // detail
537          this.getDetail().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
538          return value;
539        default: return super.setProperty(hash, name, value);
540        }
541
542      }
543
544      @Override
545      public Base setProperty(String name, Base value) throws FHIRException {
546        if (name.equals("code")) {
547          this.code = TypeConvertor.castToCoding(value); // Coding
548        } else if (name.equals("detail")) {
549          this.getDetail().add(TypeConvertor.castToCodeableConcept(value));
550        } else
551          return super.setProperty(name, value);
552        return value;
553      }
554
555  @Override
556  public void removeChild(String name, Base value) throws FHIRException {
557        if (name.equals("code")) {
558          this.code = null;
559        } else if (name.equals("detail")) {
560          this.getDetail().remove(value);
561        } else
562          super.removeChild(name, value);
563        
564      }
565
566      @Override
567      public Base makeProperty(int hash, String name) throws FHIRException {
568        switch (hash) {
569        case 3059181:  return getCode();
570        case -1335224239:  return addDetail(); 
571        default: return super.makeProperty(hash, name);
572        }
573
574      }
575
576      @Override
577      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
578        switch (hash) {
579        case 3059181: /*code*/ return new String[] {"Coding"};
580        case -1335224239: /*detail*/ return new String[] {"CodeableConcept"};
581        default: return super.getTypesForProperty(hash, name);
582        }
583
584      }
585
586      @Override
587      public Base addChild(String name) throws FHIRException {
588        if (name.equals("code")) {
589          this.code = new Coding();
590          return this.code;
591        }
592        else if (name.equals("detail")) {
593          return addDetail();
594        }
595        else
596          return super.addChild(name);
597      }
598
599      public AuditEventOutcomeComponent copy() {
600        AuditEventOutcomeComponent dst = new AuditEventOutcomeComponent();
601        copyValues(dst);
602        return dst;
603      }
604
605      public void copyValues(AuditEventOutcomeComponent dst) {
606        super.copyValues(dst);
607        dst.code = code == null ? null : code.copy();
608        if (detail != null) {
609          dst.detail = new ArrayList<CodeableConcept>();
610          for (CodeableConcept i : detail)
611            dst.detail.add(i.copy());
612        };
613      }
614
615      @Override
616      public boolean equalsDeep(Base other_) {
617        if (!super.equalsDeep(other_))
618          return false;
619        if (!(other_ instanceof AuditEventOutcomeComponent))
620          return false;
621        AuditEventOutcomeComponent o = (AuditEventOutcomeComponent) other_;
622        return compareDeep(code, o.code, true) && compareDeep(detail, o.detail, true);
623      }
624
625      @Override
626      public boolean equalsShallow(Base other_) {
627        if (!super.equalsShallow(other_))
628          return false;
629        if (!(other_ instanceof AuditEventOutcomeComponent))
630          return false;
631        AuditEventOutcomeComponent o = (AuditEventOutcomeComponent) other_;
632        return true;
633      }
634
635      public boolean isEmpty() {
636        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, detail);
637      }
638
639  public String fhirType() {
640    return "AuditEvent.outcome";
641
642  }
643
644  }
645
646    @Block()
647    public static class AuditEventAgentComponent extends BackboneElement implements IBaseBackboneElement {
648        /**
649         * The Functional Role of the user when performing the event.
650         */
651        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=0, max=1, modifier=false, summary=false)
652        @Description(shortDefinition="How agent participated", formalDefinition="The Functional Role of the user when performing the event." )
653        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/participation-role-type")
654        protected CodeableConcept type;
655
656        /**
657         * The structural roles of the agent indicating the agent's competency. The security role enabling the agent with respect to the activity.
658         */
659        @Child(name = "role", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
660        @Description(shortDefinition="Agent role in the event", formalDefinition="The structural roles of the agent indicating the agent's competency. The security role enabling the agent with respect to the activity." )
661        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/security-role-type")
662        protected List<CodeableConcept> role;
663
664        /**
665         * Reference to who this agent is that was involved in the event.
666         */
667        @Child(name = "who", type = {Practitioner.class, PractitionerRole.class, Organization.class, CareTeam.class, Patient.class, Device.class, RelatedPerson.class}, order=3, min=1, max=1, modifier=false, summary=true)
668        @Description(shortDefinition="Identifier of who", formalDefinition="Reference to who this agent is that was involved in the event." )
669        protected Reference who;
670
671        /**
672         * Indicator that the user is or is not the requestor, or initiator, for the event being audited.
673         */
674        @Child(name = "requestor", type = {BooleanType.class}, order=4, min=0, max=1, modifier=false, summary=true)
675        @Description(shortDefinition="Whether user is initiator", formalDefinition="Indicator that the user is or is not the requestor, or initiator, for the event being audited." )
676        protected BooleanType requestor;
677
678        /**
679         * Where the agent location is known, the agent location when the event occurred.
680         */
681        @Child(name = "location", type = {Location.class}, order=5, min=0, max=1, modifier=false, summary=false)
682        @Description(shortDefinition="The agent location when the event occurred", formalDefinition="Where the agent location is known, the agent location when the event occurred." )
683        protected Reference location;
684
685        /**
686         * Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.
687         */
688        @Child(name = "policy", type = {UriType.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
689        @Description(shortDefinition="Policy that authorized the agent participation in the event", formalDefinition="Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used." )
690        protected List<UriType> policy;
691
692        /**
693         * When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.
694         */
695        @Child(name = "network", type = {Endpoint.class, UriType.class, StringType.class}, order=7, min=0, max=1, modifier=false, summary=false)
696        @Description(shortDefinition="This agent network location for the activity", formalDefinition="When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details." )
697        protected DataType network;
698
699        /**
700         * The authorization (e.g., PurposeOfUse) that was used during the event being recorded.
701         */
702        @Child(name = "authorization", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
703        @Description(shortDefinition="Allowable authorization for this agent", formalDefinition="The authorization (e.g., PurposeOfUse) that was used during the event being recorded." )
704        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-PurposeOfUse")
705        protected List<CodeableConcept> authorization;
706
707        private static final long serialVersionUID = 509129255L;
708
709    /**
710     * Constructor
711     */
712      public AuditEventAgentComponent() {
713        super();
714      }
715
716    /**
717     * Constructor
718     */
719      public AuditEventAgentComponent(Reference who) {
720        super();
721        this.setWho(who);
722      }
723
724        /**
725         * @return {@link #type} (The Functional Role of the user when performing the event.)
726         */
727        public CodeableConcept getType() { 
728          if (this.type == null)
729            if (Configuration.errorOnAutoCreate())
730              throw new Error("Attempt to auto-create AuditEventAgentComponent.type");
731            else if (Configuration.doAutoCreate())
732              this.type = new CodeableConcept(); // cc
733          return this.type;
734        }
735
736        public boolean hasType() { 
737          return this.type != null && !this.type.isEmpty();
738        }
739
740        /**
741         * @param value {@link #type} (The Functional Role of the user when performing the event.)
742         */
743        public AuditEventAgentComponent setType(CodeableConcept value) { 
744          this.type = value;
745          return this;
746        }
747
748        /**
749         * @return {@link #role} (The structural roles of the agent indicating the agent's competency. The security role enabling the agent with respect to the activity.)
750         */
751        public List<CodeableConcept> getRole() { 
752          if (this.role == null)
753            this.role = new ArrayList<CodeableConcept>();
754          return this.role;
755        }
756
757        /**
758         * @return Returns a reference to <code>this</code> for easy method chaining
759         */
760        public AuditEventAgentComponent setRole(List<CodeableConcept> theRole) { 
761          this.role = theRole;
762          return this;
763        }
764
765        public boolean hasRole() { 
766          if (this.role == null)
767            return false;
768          for (CodeableConcept item : this.role)
769            if (!item.isEmpty())
770              return true;
771          return false;
772        }
773
774        public CodeableConcept addRole() { //3
775          CodeableConcept t = new CodeableConcept();
776          if (this.role == null)
777            this.role = new ArrayList<CodeableConcept>();
778          this.role.add(t);
779          return t;
780        }
781
782        public AuditEventAgentComponent addRole(CodeableConcept t) { //3
783          if (t == null)
784            return this;
785          if (this.role == null)
786            this.role = new ArrayList<CodeableConcept>();
787          this.role.add(t);
788          return this;
789        }
790
791        /**
792         * @return The first repetition of repeating field {@link #role}, creating it if it does not already exist {3}
793         */
794        public CodeableConcept getRoleFirstRep() { 
795          if (getRole().isEmpty()) {
796            addRole();
797          }
798          return getRole().get(0);
799        }
800
801        /**
802         * @return {@link #who} (Reference to who this agent is that was involved in the event.)
803         */
804        public Reference getWho() { 
805          if (this.who == null)
806            if (Configuration.errorOnAutoCreate())
807              throw new Error("Attempt to auto-create AuditEventAgentComponent.who");
808            else if (Configuration.doAutoCreate())
809              this.who = new Reference(); // cc
810          return this.who;
811        }
812
813        public boolean hasWho() { 
814          return this.who != null && !this.who.isEmpty();
815        }
816
817        /**
818         * @param value {@link #who} (Reference to who this agent is that was involved in the event.)
819         */
820        public AuditEventAgentComponent setWho(Reference value) { 
821          this.who = value;
822          return this;
823        }
824
825        /**
826         * @return {@link #requestor} (Indicator that the user is or is not the requestor, or initiator, for the event being audited.). This is the underlying object with id, value and extensions. The accessor "getRequestor" gives direct access to the value
827         */
828        public BooleanType getRequestorElement() { 
829          if (this.requestor == null)
830            if (Configuration.errorOnAutoCreate())
831              throw new Error("Attempt to auto-create AuditEventAgentComponent.requestor");
832            else if (Configuration.doAutoCreate())
833              this.requestor = new BooleanType(); // bb
834          return this.requestor;
835        }
836
837        public boolean hasRequestorElement() { 
838          return this.requestor != null && !this.requestor.isEmpty();
839        }
840
841        public boolean hasRequestor() { 
842          return this.requestor != null && !this.requestor.isEmpty();
843        }
844
845        /**
846         * @param value {@link #requestor} (Indicator that the user is or is not the requestor, or initiator, for the event being audited.). This is the underlying object with id, value and extensions. The accessor "getRequestor" gives direct access to the value
847         */
848        public AuditEventAgentComponent setRequestorElement(BooleanType value) { 
849          this.requestor = value;
850          return this;
851        }
852
853        /**
854         * @return Indicator that the user is or is not the requestor, or initiator, for the event being audited.
855         */
856        public boolean getRequestor() { 
857          return this.requestor == null || this.requestor.isEmpty() ? false : this.requestor.getValue();
858        }
859
860        /**
861         * @param value Indicator that the user is or is not the requestor, or initiator, for the event being audited.
862         */
863        public AuditEventAgentComponent setRequestor(boolean value) { 
864            if (this.requestor == null)
865              this.requestor = new BooleanType();
866            this.requestor.setValue(value);
867          return this;
868        }
869
870        /**
871         * @return {@link #location} (Where the agent location is known, the agent location when the event occurred.)
872         */
873        public Reference getLocation() { 
874          if (this.location == null)
875            if (Configuration.errorOnAutoCreate())
876              throw new Error("Attempt to auto-create AuditEventAgentComponent.location");
877            else if (Configuration.doAutoCreate())
878              this.location = new Reference(); // cc
879          return this.location;
880        }
881
882        public boolean hasLocation() { 
883          return this.location != null && !this.location.isEmpty();
884        }
885
886        /**
887         * @param value {@link #location} (Where the agent location is known, the agent location when the event occurred.)
888         */
889        public AuditEventAgentComponent setLocation(Reference value) { 
890          this.location = value;
891          return this;
892        }
893
894        /**
895         * @return {@link #policy} (Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.)
896         */
897        public List<UriType> getPolicy() { 
898          if (this.policy == null)
899            this.policy = new ArrayList<UriType>();
900          return this.policy;
901        }
902
903        /**
904         * @return Returns a reference to <code>this</code> for easy method chaining
905         */
906        public AuditEventAgentComponent setPolicy(List<UriType> thePolicy) { 
907          this.policy = thePolicy;
908          return this;
909        }
910
911        public boolean hasPolicy() { 
912          if (this.policy == null)
913            return false;
914          for (UriType item : this.policy)
915            if (!item.isEmpty())
916              return true;
917          return false;
918        }
919
920        /**
921         * @return {@link #policy} (Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.)
922         */
923        public UriType addPolicyElement() {//2 
924          UriType t = new UriType();
925          if (this.policy == null)
926            this.policy = new ArrayList<UriType>();
927          this.policy.add(t);
928          return t;
929        }
930
931        /**
932         * @param value {@link #policy} (Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.)
933         */
934        public AuditEventAgentComponent addPolicy(String value) { //1
935          UriType t = new UriType();
936          t.setValue(value);
937          if (this.policy == null)
938            this.policy = new ArrayList<UriType>();
939          this.policy.add(t);
940          return this;
941        }
942
943        /**
944         * @param value {@link #policy} (Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.)
945         */
946        public boolean hasPolicy(String value) { 
947          if (this.policy == null)
948            return false;
949          for (UriType v : this.policy)
950            if (v.getValue().equals(value)) // uri
951              return true;
952          return false;
953        }
954
955        /**
956         * @return {@link #network} (When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.)
957         */
958        public DataType getNetwork() { 
959          return this.network;
960        }
961
962        /**
963         * @return {@link #network} (When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.)
964         */
965        public Reference getNetworkReference() throws FHIRException { 
966          if (this.network == null)
967            this.network = new Reference();
968          if (!(this.network instanceof Reference))
969            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.network.getClass().getName()+" was encountered");
970          return (Reference) this.network;
971        }
972
973        public boolean hasNetworkReference() { 
974          return this != null && this.network instanceof Reference;
975        }
976
977        /**
978         * @return {@link #network} (When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.)
979         */
980        public UriType getNetworkUriType() throws FHIRException { 
981          if (this.network == null)
982            this.network = new UriType();
983          if (!(this.network instanceof UriType))
984            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.network.getClass().getName()+" was encountered");
985          return (UriType) this.network;
986        }
987
988        public boolean hasNetworkUriType() { 
989          return this != null && this.network instanceof UriType;
990        }
991
992        /**
993         * @return {@link #network} (When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.)
994         */
995        public StringType getNetworkStringType() throws FHIRException { 
996          if (this.network == null)
997            this.network = new StringType();
998          if (!(this.network instanceof StringType))
999            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.network.getClass().getName()+" was encountered");
1000          return (StringType) this.network;
1001        }
1002
1003        public boolean hasNetworkStringType() { 
1004          return this != null && this.network instanceof StringType;
1005        }
1006
1007        public boolean hasNetwork() { 
1008          return this.network != null && !this.network.isEmpty();
1009        }
1010
1011        /**
1012         * @param value {@link #network} (When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.)
1013         */
1014        public AuditEventAgentComponent setNetwork(DataType value) { 
1015          if (value != null && !(value instanceof Reference || value instanceof UriType || value instanceof StringType))
1016            throw new FHIRException("Not the right type for AuditEvent.agent.network[x]: "+value.fhirType());
1017          this.network = value;
1018          return this;
1019        }
1020
1021        /**
1022         * @return {@link #authorization} (The authorization (e.g., PurposeOfUse) that was used during the event being recorded.)
1023         */
1024        public List<CodeableConcept> getAuthorization() { 
1025          if (this.authorization == null)
1026            this.authorization = new ArrayList<CodeableConcept>();
1027          return this.authorization;
1028        }
1029
1030        /**
1031         * @return Returns a reference to <code>this</code> for easy method chaining
1032         */
1033        public AuditEventAgentComponent setAuthorization(List<CodeableConcept> theAuthorization) { 
1034          this.authorization = theAuthorization;
1035          return this;
1036        }
1037
1038        public boolean hasAuthorization() { 
1039          if (this.authorization == null)
1040            return false;
1041          for (CodeableConcept item : this.authorization)
1042            if (!item.isEmpty())
1043              return true;
1044          return false;
1045        }
1046
1047        public CodeableConcept addAuthorization() { //3
1048          CodeableConcept t = new CodeableConcept();
1049          if (this.authorization == null)
1050            this.authorization = new ArrayList<CodeableConcept>();
1051          this.authorization.add(t);
1052          return t;
1053        }
1054
1055        public AuditEventAgentComponent addAuthorization(CodeableConcept t) { //3
1056          if (t == null)
1057            return this;
1058          if (this.authorization == null)
1059            this.authorization = new ArrayList<CodeableConcept>();
1060          this.authorization.add(t);
1061          return this;
1062        }
1063
1064        /**
1065         * @return The first repetition of repeating field {@link #authorization}, creating it if it does not already exist {3}
1066         */
1067        public CodeableConcept getAuthorizationFirstRep() { 
1068          if (getAuthorization().isEmpty()) {
1069            addAuthorization();
1070          }
1071          return getAuthorization().get(0);
1072        }
1073
1074        protected void listChildren(List<Property> children) {
1075          super.listChildren(children);
1076          children.add(new Property("type", "CodeableConcept", "The Functional Role of the user when performing the event.", 0, 1, type));
1077          children.add(new Property("role", "CodeableConcept", "The structural roles of the agent indicating the agent's competency. The security role enabling the agent with respect to the activity.", 0, java.lang.Integer.MAX_VALUE, role));
1078          children.add(new Property("who", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|Device|RelatedPerson)", "Reference to who this agent is that was involved in the event.", 0, 1, who));
1079          children.add(new Property("requestor", "boolean", "Indicator that the user is or is not the requestor, or initiator, for the event being audited.", 0, 1, requestor));
1080          children.add(new Property("location", "Reference(Location)", "Where the agent location is known, the agent location when the event occurred.", 0, 1, location));
1081          children.add(new Property("policy", "uri", "Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.", 0, java.lang.Integer.MAX_VALUE, policy));
1082          children.add(new Property("network[x]", "Reference(Endpoint)|uri|string", "When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.", 0, 1, network));
1083          children.add(new Property("authorization", "CodeableConcept", "The authorization (e.g., PurposeOfUse) that was used during the event being recorded.", 0, java.lang.Integer.MAX_VALUE, authorization));
1084        }
1085
1086        @Override
1087        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1088          switch (_hash) {
1089          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The Functional Role of the user when performing the event.", 0, 1, type);
1090          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "The structural roles of the agent indicating the agent's competency. The security role enabling the agent with respect to the activity.", 0, java.lang.Integer.MAX_VALUE, role);
1091          case 117694: /*who*/  return new Property("who", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|Device|RelatedPerson)", "Reference to who this agent is that was involved in the event.", 0, 1, who);
1092          case 693934258: /*requestor*/  return new Property("requestor", "boolean", "Indicator that the user is or is not the requestor, or initiator, for the event being audited.", 0, 1, requestor);
1093          case 1901043637: /*location*/  return new Property("location", "Reference(Location)", "Where the agent location is known, the agent location when the event occurred.", 0, 1, location);
1094          case -982670030: /*policy*/  return new Property("policy", "uri", "Where the policy(ies) are known that authorized the agent participation in the event. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.", 0, java.lang.Integer.MAX_VALUE, policy);
1095          case -478235758: /*network[x]*/  return new Property("network[x]", "Reference(Endpoint)|uri|string", "When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.", 0, 1, network);
1096          case 1843485230: /*network*/  return new Property("network[x]", "Reference(Endpoint)|uri|string", "When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.", 0, 1, network);
1097          case -1769760579: /*networkReference*/  return new Property("network[x]", "Reference(Endpoint)", "When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.", 0, 1, network);
1098          case -478241698: /*networkUri*/  return new Property("network[x]", "uri", "When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.", 0, 1, network);
1099          case -946943009: /*networkString*/  return new Property("network[x]", "string", "When the event utilizes a network there should be an agent describing the local system, and an agent describing remote system, with the network interface details.", 0, 1, network);
1100          case -1385570183: /*authorization*/  return new Property("authorization", "CodeableConcept", "The authorization (e.g., PurposeOfUse) that was used during the event being recorded.", 0, java.lang.Integer.MAX_VALUE, authorization);
1101          default: return super.getNamedProperty(_hash, _name, _checkValid);
1102          }
1103
1104        }
1105
1106      @Override
1107      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1108        switch (hash) {
1109        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
1110        case 3506294: /*role*/ return this.role == null ? new Base[0] : this.role.toArray(new Base[this.role.size()]); // CodeableConcept
1111        case 117694: /*who*/ return this.who == null ? new Base[0] : new Base[] {this.who}; // Reference
1112        case 693934258: /*requestor*/ return this.requestor == null ? new Base[0] : new Base[] {this.requestor}; // BooleanType
1113        case 1901043637: /*location*/ return this.location == null ? new Base[0] : new Base[] {this.location}; // Reference
1114        case -982670030: /*policy*/ return this.policy == null ? new Base[0] : this.policy.toArray(new Base[this.policy.size()]); // UriType
1115        case 1843485230: /*network*/ return this.network == null ? new Base[0] : new Base[] {this.network}; // DataType
1116        case -1385570183: /*authorization*/ return this.authorization == null ? new Base[0] : this.authorization.toArray(new Base[this.authorization.size()]); // CodeableConcept
1117        default: return super.getProperty(hash, name, checkValid);
1118        }
1119
1120      }
1121
1122      @Override
1123      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1124        switch (hash) {
1125        case 3575610: // type
1126          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1127          return value;
1128        case 3506294: // role
1129          this.getRole().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1130          return value;
1131        case 117694: // who
1132          this.who = TypeConvertor.castToReference(value); // Reference
1133          return value;
1134        case 693934258: // requestor
1135          this.requestor = TypeConvertor.castToBoolean(value); // BooleanType
1136          return value;
1137        case 1901043637: // location
1138          this.location = TypeConvertor.castToReference(value); // Reference
1139          return value;
1140        case -982670030: // policy
1141          this.getPolicy().add(TypeConvertor.castToUri(value)); // UriType
1142          return value;
1143        case 1843485230: // network
1144          this.network = TypeConvertor.castToType(value); // DataType
1145          return value;
1146        case -1385570183: // authorization
1147          this.getAuthorization().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1148          return value;
1149        default: return super.setProperty(hash, name, value);
1150        }
1151
1152      }
1153
1154      @Override
1155      public Base setProperty(String name, Base value) throws FHIRException {
1156        if (name.equals("type")) {
1157          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1158        } else if (name.equals("role")) {
1159          this.getRole().add(TypeConvertor.castToCodeableConcept(value));
1160        } else if (name.equals("who")) {
1161          this.who = TypeConvertor.castToReference(value); // Reference
1162        } else if (name.equals("requestor")) {
1163          this.requestor = TypeConvertor.castToBoolean(value); // BooleanType
1164        } else if (name.equals("location")) {
1165          this.location = TypeConvertor.castToReference(value); // Reference
1166        } else if (name.equals("policy")) {
1167          this.getPolicy().add(TypeConvertor.castToUri(value));
1168        } else if (name.equals("network[x]")) {
1169          this.network = TypeConvertor.castToType(value); // DataType
1170        } else if (name.equals("authorization")) {
1171          this.getAuthorization().add(TypeConvertor.castToCodeableConcept(value));
1172        } else
1173          return super.setProperty(name, value);
1174        return value;
1175      }
1176
1177  @Override
1178  public void removeChild(String name, Base value) throws FHIRException {
1179        if (name.equals("type")) {
1180          this.type = null;
1181        } else if (name.equals("role")) {
1182          this.getRole().remove(value);
1183        } else if (name.equals("who")) {
1184          this.who = null;
1185        } else if (name.equals("requestor")) {
1186          this.requestor = null;
1187        } else if (name.equals("location")) {
1188          this.location = null;
1189        } else if (name.equals("policy")) {
1190          this.getPolicy().remove(value);
1191        } else if (name.equals("network[x]")) {
1192          this.network = null;
1193        } else if (name.equals("authorization")) {
1194          this.getAuthorization().remove(value);
1195        } else
1196          super.removeChild(name, value);
1197        
1198      }
1199
1200      @Override
1201      public Base makeProperty(int hash, String name) throws FHIRException {
1202        switch (hash) {
1203        case 3575610:  return getType();
1204        case 3506294:  return addRole(); 
1205        case 117694:  return getWho();
1206        case 693934258:  return getRequestorElement();
1207        case 1901043637:  return getLocation();
1208        case -982670030:  return addPolicyElement();
1209        case -478235758:  return getNetwork();
1210        case 1843485230:  return getNetwork();
1211        case -1385570183:  return addAuthorization(); 
1212        default: return super.makeProperty(hash, name);
1213        }
1214
1215      }
1216
1217      @Override
1218      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1219        switch (hash) {
1220        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1221        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
1222        case 117694: /*who*/ return new String[] {"Reference"};
1223        case 693934258: /*requestor*/ return new String[] {"boolean"};
1224        case 1901043637: /*location*/ return new String[] {"Reference"};
1225        case -982670030: /*policy*/ return new String[] {"uri"};
1226        case 1843485230: /*network*/ return new String[] {"Reference", "uri", "string"};
1227        case -1385570183: /*authorization*/ return new String[] {"CodeableConcept"};
1228        default: return super.getTypesForProperty(hash, name);
1229        }
1230
1231      }
1232
1233      @Override
1234      public Base addChild(String name) throws FHIRException {
1235        if (name.equals("type")) {
1236          this.type = new CodeableConcept();
1237          return this.type;
1238        }
1239        else if (name.equals("role")) {
1240          return addRole();
1241        }
1242        else if (name.equals("who")) {
1243          this.who = new Reference();
1244          return this.who;
1245        }
1246        else if (name.equals("requestor")) {
1247          throw new FHIRException("Cannot call addChild on a singleton property AuditEvent.agent.requestor");
1248        }
1249        else if (name.equals("location")) {
1250          this.location = new Reference();
1251          return this.location;
1252        }
1253        else if (name.equals("policy")) {
1254          throw new FHIRException("Cannot call addChild on a singleton property AuditEvent.agent.policy");
1255        }
1256        else if (name.equals("networkReference")) {
1257          this.network = new Reference();
1258          return this.network;
1259        }
1260        else if (name.equals("networkUri")) {
1261          this.network = new UriType();
1262          return this.network;
1263        }
1264        else if (name.equals("networkString")) {
1265          this.network = new StringType();
1266          return this.network;
1267        }
1268        else if (name.equals("authorization")) {
1269          return addAuthorization();
1270        }
1271        else
1272          return super.addChild(name);
1273      }
1274
1275      public AuditEventAgentComponent copy() {
1276        AuditEventAgentComponent dst = new AuditEventAgentComponent();
1277        copyValues(dst);
1278        return dst;
1279      }
1280
1281      public void copyValues(AuditEventAgentComponent dst) {
1282        super.copyValues(dst);
1283        dst.type = type == null ? null : type.copy();
1284        if (role != null) {
1285          dst.role = new ArrayList<CodeableConcept>();
1286          for (CodeableConcept i : role)
1287            dst.role.add(i.copy());
1288        };
1289        dst.who = who == null ? null : who.copy();
1290        dst.requestor = requestor == null ? null : requestor.copy();
1291        dst.location = location == null ? null : location.copy();
1292        if (policy != null) {
1293          dst.policy = new ArrayList<UriType>();
1294          for (UriType i : policy)
1295            dst.policy.add(i.copy());
1296        };
1297        dst.network = network == null ? null : network.copy();
1298        if (authorization != null) {
1299          dst.authorization = new ArrayList<CodeableConcept>();
1300          for (CodeableConcept i : authorization)
1301            dst.authorization.add(i.copy());
1302        };
1303      }
1304
1305      @Override
1306      public boolean equalsDeep(Base other_) {
1307        if (!super.equalsDeep(other_))
1308          return false;
1309        if (!(other_ instanceof AuditEventAgentComponent))
1310          return false;
1311        AuditEventAgentComponent o = (AuditEventAgentComponent) other_;
1312        return compareDeep(type, o.type, true) && compareDeep(role, o.role, true) && compareDeep(who, o.who, true)
1313           && compareDeep(requestor, o.requestor, true) && compareDeep(location, o.location, true) && compareDeep(policy, o.policy, true)
1314           && compareDeep(network, o.network, true) && compareDeep(authorization, o.authorization, true);
1315      }
1316
1317      @Override
1318      public boolean equalsShallow(Base other_) {
1319        if (!super.equalsShallow(other_))
1320          return false;
1321        if (!(other_ instanceof AuditEventAgentComponent))
1322          return false;
1323        AuditEventAgentComponent o = (AuditEventAgentComponent) other_;
1324        return compareValues(requestor, o.requestor, true) && compareValues(policy, o.policy, true);
1325      }
1326
1327      public boolean isEmpty() {
1328        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, role, who, requestor
1329          , location, policy, network, authorization);
1330      }
1331
1332  public String fhirType() {
1333    return "AuditEvent.agent";
1334
1335  }
1336
1337  }
1338
1339    @Block()
1340    public static class AuditEventSourceComponent extends BackboneElement implements IBaseBackboneElement {
1341        /**
1342         * Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group.
1343         */
1344        @Child(name = "site", type = {Location.class}, order=1, min=0, max=1, modifier=false, summary=false)
1345        @Description(shortDefinition="Logical source location within the enterprise", formalDefinition="Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group." )
1346        protected Reference site;
1347
1348        /**
1349         * Identifier of the source where the event was detected.
1350         */
1351        @Child(name = "observer", type = {Practitioner.class, PractitionerRole.class, Organization.class, CareTeam.class, Patient.class, Device.class, RelatedPerson.class}, order=2, min=1, max=1, modifier=false, summary=true)
1352        @Description(shortDefinition="The identity of source detecting the event", formalDefinition="Identifier of the source where the event was detected." )
1353        protected Reference observer;
1354
1355        /**
1356         * Code specifying the type of source where event originated.
1357         */
1358        @Child(name = "type", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1359        @Description(shortDefinition="The type of source where event originated", formalDefinition="Code specifying the type of source where event originated." )
1360        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/security-source-type")
1361        protected List<CodeableConcept> type;
1362
1363        private static final long serialVersionUID = -140005578L;
1364
1365    /**
1366     * Constructor
1367     */
1368      public AuditEventSourceComponent() {
1369        super();
1370      }
1371
1372    /**
1373     * Constructor
1374     */
1375      public AuditEventSourceComponent(Reference observer) {
1376        super();
1377        this.setObserver(observer);
1378      }
1379
1380        /**
1381         * @return {@link #site} (Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group.)
1382         */
1383        public Reference getSite() { 
1384          if (this.site == null)
1385            if (Configuration.errorOnAutoCreate())
1386              throw new Error("Attempt to auto-create AuditEventSourceComponent.site");
1387            else if (Configuration.doAutoCreate())
1388              this.site = new Reference(); // cc
1389          return this.site;
1390        }
1391
1392        public boolean hasSite() { 
1393          return this.site != null && !this.site.isEmpty();
1394        }
1395
1396        /**
1397         * @param value {@link #site} (Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group.)
1398         */
1399        public AuditEventSourceComponent setSite(Reference value) { 
1400          this.site = value;
1401          return this;
1402        }
1403
1404        /**
1405         * @return {@link #observer} (Identifier of the source where the event was detected.)
1406         */
1407        public Reference getObserver() { 
1408          if (this.observer == null)
1409            if (Configuration.errorOnAutoCreate())
1410              throw new Error("Attempt to auto-create AuditEventSourceComponent.observer");
1411            else if (Configuration.doAutoCreate())
1412              this.observer = new Reference(); // cc
1413          return this.observer;
1414        }
1415
1416        public boolean hasObserver() { 
1417          return this.observer != null && !this.observer.isEmpty();
1418        }
1419
1420        /**
1421         * @param value {@link #observer} (Identifier of the source where the event was detected.)
1422         */
1423        public AuditEventSourceComponent setObserver(Reference value) { 
1424          this.observer = value;
1425          return this;
1426        }
1427
1428        /**
1429         * @return {@link #type} (Code specifying the type of source where event originated.)
1430         */
1431        public List<CodeableConcept> getType() { 
1432          if (this.type == null)
1433            this.type = new ArrayList<CodeableConcept>();
1434          return this.type;
1435        }
1436
1437        /**
1438         * @return Returns a reference to <code>this</code> for easy method chaining
1439         */
1440        public AuditEventSourceComponent setType(List<CodeableConcept> theType) { 
1441          this.type = theType;
1442          return this;
1443        }
1444
1445        public boolean hasType() { 
1446          if (this.type == null)
1447            return false;
1448          for (CodeableConcept item : this.type)
1449            if (!item.isEmpty())
1450              return true;
1451          return false;
1452        }
1453
1454        public CodeableConcept addType() { //3
1455          CodeableConcept t = new CodeableConcept();
1456          if (this.type == null)
1457            this.type = new ArrayList<CodeableConcept>();
1458          this.type.add(t);
1459          return t;
1460        }
1461
1462        public AuditEventSourceComponent addType(CodeableConcept t) { //3
1463          if (t == null)
1464            return this;
1465          if (this.type == null)
1466            this.type = new ArrayList<CodeableConcept>();
1467          this.type.add(t);
1468          return this;
1469        }
1470
1471        /**
1472         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
1473         */
1474        public CodeableConcept getTypeFirstRep() { 
1475          if (getType().isEmpty()) {
1476            addType();
1477          }
1478          return getType().get(0);
1479        }
1480
1481        protected void listChildren(List<Property> children) {
1482          super.listChildren(children);
1483          children.add(new Property("site", "Reference(Location)", "Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group.", 0, 1, site));
1484          children.add(new Property("observer", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|Device|RelatedPerson)", "Identifier of the source where the event was detected.", 0, 1, observer));
1485          children.add(new Property("type", "CodeableConcept", "Code specifying the type of source where event originated.", 0, java.lang.Integer.MAX_VALUE, type));
1486        }
1487
1488        @Override
1489        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1490          switch (_hash) {
1491          case 3530567: /*site*/  return new Property("site", "Reference(Location)", "Logical source location within the healthcare enterprise network.  For example, a hospital or other provider location within a multi-entity provider group.", 0, 1, site);
1492          case 348607190: /*observer*/  return new Property("observer", "Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|Device|RelatedPerson)", "Identifier of the source where the event was detected.", 0, 1, observer);
1493          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Code specifying the type of source where event originated.", 0, java.lang.Integer.MAX_VALUE, type);
1494          default: return super.getNamedProperty(_hash, _name, _checkValid);
1495          }
1496
1497        }
1498
1499      @Override
1500      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1501        switch (hash) {
1502        case 3530567: /*site*/ return this.site == null ? new Base[0] : new Base[] {this.site}; // Reference
1503        case 348607190: /*observer*/ return this.observer == null ? new Base[0] : new Base[] {this.observer}; // Reference
1504        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
1505        default: return super.getProperty(hash, name, checkValid);
1506        }
1507
1508      }
1509
1510      @Override
1511      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1512        switch (hash) {
1513        case 3530567: // site
1514          this.site = TypeConvertor.castToReference(value); // Reference
1515          return value;
1516        case 348607190: // observer
1517          this.observer = TypeConvertor.castToReference(value); // Reference
1518          return value;
1519        case 3575610: // type
1520          this.getType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1521          return value;
1522        default: return super.setProperty(hash, name, value);
1523        }
1524
1525      }
1526
1527      @Override
1528      public Base setProperty(String name, Base value) throws FHIRException {
1529        if (name.equals("site")) {
1530          this.site = TypeConvertor.castToReference(value); // Reference
1531        } else if (name.equals("observer")) {
1532          this.observer = TypeConvertor.castToReference(value); // Reference
1533        } else if (name.equals("type")) {
1534          this.getType().add(TypeConvertor.castToCodeableConcept(value));
1535        } else
1536          return super.setProperty(name, value);
1537        return value;
1538      }
1539
1540  @Override
1541  public void removeChild(String name, Base value) throws FHIRException {
1542        if (name.equals("site")) {
1543          this.site = null;
1544        } else if (name.equals("observer")) {
1545          this.observer = null;
1546        } else if (name.equals("type")) {
1547          this.getType().remove(value);
1548        } else
1549          super.removeChild(name, value);
1550        
1551      }
1552
1553      @Override
1554      public Base makeProperty(int hash, String name) throws FHIRException {
1555        switch (hash) {
1556        case 3530567:  return getSite();
1557        case 348607190:  return getObserver();
1558        case 3575610:  return addType(); 
1559        default: return super.makeProperty(hash, name);
1560        }
1561
1562      }
1563
1564      @Override
1565      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1566        switch (hash) {
1567        case 3530567: /*site*/ return new String[] {"Reference"};
1568        case 348607190: /*observer*/ return new String[] {"Reference"};
1569        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
1570        default: return super.getTypesForProperty(hash, name);
1571        }
1572
1573      }
1574
1575      @Override
1576      public Base addChild(String name) throws FHIRException {
1577        if (name.equals("site")) {
1578          this.site = new Reference();
1579          return this.site;
1580        }
1581        else if (name.equals("observer")) {
1582          this.observer = new Reference();
1583          return this.observer;
1584        }
1585        else if (name.equals("type")) {
1586          return addType();
1587        }
1588        else
1589          return super.addChild(name);
1590      }
1591
1592      public AuditEventSourceComponent copy() {
1593        AuditEventSourceComponent dst = new AuditEventSourceComponent();
1594        copyValues(dst);
1595        return dst;
1596      }
1597
1598      public void copyValues(AuditEventSourceComponent dst) {
1599        super.copyValues(dst);
1600        dst.site = site == null ? null : site.copy();
1601        dst.observer = observer == null ? null : observer.copy();
1602        if (type != null) {
1603          dst.type = new ArrayList<CodeableConcept>();
1604          for (CodeableConcept i : type)
1605            dst.type.add(i.copy());
1606        };
1607      }
1608
1609      @Override
1610      public boolean equalsDeep(Base other_) {
1611        if (!super.equalsDeep(other_))
1612          return false;
1613        if (!(other_ instanceof AuditEventSourceComponent))
1614          return false;
1615        AuditEventSourceComponent o = (AuditEventSourceComponent) other_;
1616        return compareDeep(site, o.site, true) && compareDeep(observer, o.observer, true) && compareDeep(type, o.type, true)
1617          ;
1618      }
1619
1620      @Override
1621      public boolean equalsShallow(Base other_) {
1622        if (!super.equalsShallow(other_))
1623          return false;
1624        if (!(other_ instanceof AuditEventSourceComponent))
1625          return false;
1626        AuditEventSourceComponent o = (AuditEventSourceComponent) other_;
1627        return true;
1628      }
1629
1630      public boolean isEmpty() {
1631        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(site, observer, type);
1632      }
1633
1634  public String fhirType() {
1635    return "AuditEvent.source";
1636
1637  }
1638
1639  }
1640
1641    @Block()
1642    public static class AuditEventEntityComponent extends BackboneElement implements IBaseBackboneElement {
1643        /**
1644         * Identifies a specific instance of the entity. The reference should be version specific. This is allowed to be a Parameters resource.
1645         */
1646        @Child(name = "what", type = {Reference.class}, order=1, min=0, max=1, modifier=false, summary=true)
1647        @Description(shortDefinition="Specific instance of resource", formalDefinition="Identifies a specific instance of the entity. The reference should be version specific. This is allowed to be a Parameters resource." )
1648        protected Reference what;
1649
1650        /**
1651         * Code representing the role the entity played in the event being audited.
1652         */
1653        @Child(name = "role", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1654        @Description(shortDefinition="What role the entity played", formalDefinition="Code representing the role the entity played in the event being audited." )
1655        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/object-role")
1656        protected CodeableConcept role;
1657
1658        /**
1659         * Security labels for the identified entity.
1660         */
1661        @Child(name = "securityLabel", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1662        @Description(shortDefinition="Security labels on the entity", formalDefinition="Security labels for the identified entity." )
1663        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/security-label-examples")
1664        protected List<CodeableConcept> securityLabel;
1665
1666        /**
1667         * The query parameters for a query-type entities.
1668         */
1669        @Child(name = "query", type = {Base64BinaryType.class}, order=4, min=0, max=1, modifier=false, summary=true)
1670        @Description(shortDefinition="Query parameters", formalDefinition="The query parameters for a query-type entities." )
1671        protected Base64BinaryType query;
1672
1673        /**
1674         * Tagged value pairs for conveying additional information about the entity.
1675         */
1676        @Child(name = "detail", type = {}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1677        @Description(shortDefinition="Additional Information about the entity", formalDefinition="Tagged value pairs for conveying additional information about the entity." )
1678        protected List<AuditEventEntityDetailComponent> detail;
1679
1680        /**
1681         * The entity is attributed to an agent to express the agent's responsibility for that entity in the activity. This is most used to indicate when persistence media (the entity) are used by an agent. For example when importing data from a device, the device would be described in an entity, and the user importing data from that media would be indicated as the entity.agent.
1682         */
1683        @Child(name = "agent", type = {AuditEventAgentComponent.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1684        @Description(shortDefinition="Entity is attributed to this agent", formalDefinition="The entity is attributed to an agent to express the agent's responsibility for that entity in the activity. This is most used to indicate when persistence media (the entity) are used by an agent. For example when importing data from a device, the device would be described in an entity, and the user importing data from that media would be indicated as the entity.agent." )
1685        protected List<AuditEventAgentComponent> agent;
1686
1687        private static final long serialVersionUID = -711898650L;
1688
1689    /**
1690     * Constructor
1691     */
1692      public AuditEventEntityComponent() {
1693        super();
1694      }
1695
1696        /**
1697         * @return {@link #what} (Identifies a specific instance of the entity. The reference should be version specific. This is allowed to be a Parameters resource.)
1698         */
1699        public Reference getWhat() { 
1700          if (this.what == null)
1701            if (Configuration.errorOnAutoCreate())
1702              throw new Error("Attempt to auto-create AuditEventEntityComponent.what");
1703            else if (Configuration.doAutoCreate())
1704              this.what = new Reference(); // cc
1705          return this.what;
1706        }
1707
1708        public boolean hasWhat() { 
1709          return this.what != null && !this.what.isEmpty();
1710        }
1711
1712        /**
1713         * @param value {@link #what} (Identifies a specific instance of the entity. The reference should be version specific. This is allowed to be a Parameters resource.)
1714         */
1715        public AuditEventEntityComponent setWhat(Reference value) { 
1716          this.what = value;
1717          return this;
1718        }
1719
1720        /**
1721         * @return {@link #role} (Code representing the role the entity played in the event being audited.)
1722         */
1723        public CodeableConcept getRole() { 
1724          if (this.role == null)
1725            if (Configuration.errorOnAutoCreate())
1726              throw new Error("Attempt to auto-create AuditEventEntityComponent.role");
1727            else if (Configuration.doAutoCreate())
1728              this.role = new CodeableConcept(); // cc
1729          return this.role;
1730        }
1731
1732        public boolean hasRole() { 
1733          return this.role != null && !this.role.isEmpty();
1734        }
1735
1736        /**
1737         * @param value {@link #role} (Code representing the role the entity played in the event being audited.)
1738         */
1739        public AuditEventEntityComponent setRole(CodeableConcept value) { 
1740          this.role = value;
1741          return this;
1742        }
1743
1744        /**
1745         * @return {@link #securityLabel} (Security labels for the identified entity.)
1746         */
1747        public List<CodeableConcept> getSecurityLabel() { 
1748          if (this.securityLabel == null)
1749            this.securityLabel = new ArrayList<CodeableConcept>();
1750          return this.securityLabel;
1751        }
1752
1753        /**
1754         * @return Returns a reference to <code>this</code> for easy method chaining
1755         */
1756        public AuditEventEntityComponent setSecurityLabel(List<CodeableConcept> theSecurityLabel) { 
1757          this.securityLabel = theSecurityLabel;
1758          return this;
1759        }
1760
1761        public boolean hasSecurityLabel() { 
1762          if (this.securityLabel == null)
1763            return false;
1764          for (CodeableConcept item : this.securityLabel)
1765            if (!item.isEmpty())
1766              return true;
1767          return false;
1768        }
1769
1770        public CodeableConcept addSecurityLabel() { //3
1771          CodeableConcept t = new CodeableConcept();
1772          if (this.securityLabel == null)
1773            this.securityLabel = new ArrayList<CodeableConcept>();
1774          this.securityLabel.add(t);
1775          return t;
1776        }
1777
1778        public AuditEventEntityComponent addSecurityLabel(CodeableConcept t) { //3
1779          if (t == null)
1780            return this;
1781          if (this.securityLabel == null)
1782            this.securityLabel = new ArrayList<CodeableConcept>();
1783          this.securityLabel.add(t);
1784          return this;
1785        }
1786
1787        /**
1788         * @return The first repetition of repeating field {@link #securityLabel}, creating it if it does not already exist {3}
1789         */
1790        public CodeableConcept getSecurityLabelFirstRep() { 
1791          if (getSecurityLabel().isEmpty()) {
1792            addSecurityLabel();
1793          }
1794          return getSecurityLabel().get(0);
1795        }
1796
1797        /**
1798         * @return {@link #query} (The query parameters for a query-type entities.). This is the underlying object with id, value and extensions. The accessor "getQuery" gives direct access to the value
1799         */
1800        public Base64BinaryType getQueryElement() { 
1801          if (this.query == null)
1802            if (Configuration.errorOnAutoCreate())
1803              throw new Error("Attempt to auto-create AuditEventEntityComponent.query");
1804            else if (Configuration.doAutoCreate())
1805              this.query = new Base64BinaryType(); // bb
1806          return this.query;
1807        }
1808
1809        public boolean hasQueryElement() { 
1810          return this.query != null && !this.query.isEmpty();
1811        }
1812
1813        public boolean hasQuery() { 
1814          return this.query != null && !this.query.isEmpty();
1815        }
1816
1817        /**
1818         * @param value {@link #query} (The query parameters for a query-type entities.). This is the underlying object with id, value and extensions. The accessor "getQuery" gives direct access to the value
1819         */
1820        public AuditEventEntityComponent setQueryElement(Base64BinaryType value) { 
1821          this.query = value;
1822          return this;
1823        }
1824
1825        /**
1826         * @return The query parameters for a query-type entities.
1827         */
1828        public byte[] getQuery() { 
1829          return this.query == null ? null : this.query.getValue();
1830        }
1831
1832        /**
1833         * @param value The query parameters for a query-type entities.
1834         */
1835        public AuditEventEntityComponent setQuery(byte[] value) { 
1836          if (value == null)
1837            this.query = null;
1838          else {
1839            if (this.query == null)
1840              this.query = new Base64BinaryType();
1841            this.query.setValue(value);
1842          }
1843          return this;
1844        }
1845
1846        /**
1847         * @return {@link #detail} (Tagged value pairs for conveying additional information about the entity.)
1848         */
1849        public List<AuditEventEntityDetailComponent> getDetail() { 
1850          if (this.detail == null)
1851            this.detail = new ArrayList<AuditEventEntityDetailComponent>();
1852          return this.detail;
1853        }
1854
1855        /**
1856         * @return Returns a reference to <code>this</code> for easy method chaining
1857         */
1858        public AuditEventEntityComponent setDetail(List<AuditEventEntityDetailComponent> theDetail) { 
1859          this.detail = theDetail;
1860          return this;
1861        }
1862
1863        public boolean hasDetail() { 
1864          if (this.detail == null)
1865            return false;
1866          for (AuditEventEntityDetailComponent item : this.detail)
1867            if (!item.isEmpty())
1868              return true;
1869          return false;
1870        }
1871
1872        public AuditEventEntityDetailComponent addDetail() { //3
1873          AuditEventEntityDetailComponent t = new AuditEventEntityDetailComponent();
1874          if (this.detail == null)
1875            this.detail = new ArrayList<AuditEventEntityDetailComponent>();
1876          this.detail.add(t);
1877          return t;
1878        }
1879
1880        public AuditEventEntityComponent addDetail(AuditEventEntityDetailComponent t) { //3
1881          if (t == null)
1882            return this;
1883          if (this.detail == null)
1884            this.detail = new ArrayList<AuditEventEntityDetailComponent>();
1885          this.detail.add(t);
1886          return this;
1887        }
1888
1889        /**
1890         * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist {3}
1891         */
1892        public AuditEventEntityDetailComponent getDetailFirstRep() { 
1893          if (getDetail().isEmpty()) {
1894            addDetail();
1895          }
1896          return getDetail().get(0);
1897        }
1898
1899        /**
1900         * @return {@link #agent} (The entity is attributed to an agent to express the agent's responsibility for that entity in the activity. This is most used to indicate when persistence media (the entity) are used by an agent. For example when importing data from a device, the device would be described in an entity, and the user importing data from that media would be indicated as the entity.agent.)
1901         */
1902        public List<AuditEventAgentComponent> getAgent() { 
1903          if (this.agent == null)
1904            this.agent = new ArrayList<AuditEventAgentComponent>();
1905          return this.agent;
1906        }
1907
1908        /**
1909         * @return Returns a reference to <code>this</code> for easy method chaining
1910         */
1911        public AuditEventEntityComponent setAgent(List<AuditEventAgentComponent> theAgent) { 
1912          this.agent = theAgent;
1913          return this;
1914        }
1915
1916        public boolean hasAgent() { 
1917          if (this.agent == null)
1918            return false;
1919          for (AuditEventAgentComponent item : this.agent)
1920            if (!item.isEmpty())
1921              return true;
1922          return false;
1923        }
1924
1925        public AuditEventAgentComponent addAgent() { //3
1926          AuditEventAgentComponent t = new AuditEventAgentComponent();
1927          if (this.agent == null)
1928            this.agent = new ArrayList<AuditEventAgentComponent>();
1929          this.agent.add(t);
1930          return t;
1931        }
1932
1933        public AuditEventEntityComponent addAgent(AuditEventAgentComponent t) { //3
1934          if (t == null)
1935            return this;
1936          if (this.agent == null)
1937            this.agent = new ArrayList<AuditEventAgentComponent>();
1938          this.agent.add(t);
1939          return this;
1940        }
1941
1942        /**
1943         * @return The first repetition of repeating field {@link #agent}, creating it if it does not already exist {3}
1944         */
1945        public AuditEventAgentComponent getAgentFirstRep() { 
1946          if (getAgent().isEmpty()) {
1947            addAgent();
1948          }
1949          return getAgent().get(0);
1950        }
1951
1952        protected void listChildren(List<Property> children) {
1953          super.listChildren(children);
1954          children.add(new Property("what", "Reference(Any)", "Identifies a specific instance of the entity. The reference should be version specific. This is allowed to be a Parameters resource.", 0, 1, what));
1955          children.add(new Property("role", "CodeableConcept", "Code representing the role the entity played in the event being audited.", 0, 1, role));
1956          children.add(new Property("securityLabel", "CodeableConcept", "Security labels for the identified entity.", 0, java.lang.Integer.MAX_VALUE, securityLabel));
1957          children.add(new Property("query", "base64Binary", "The query parameters for a query-type entities.", 0, 1, query));
1958          children.add(new Property("detail", "", "Tagged value pairs for conveying additional information about the entity.", 0, java.lang.Integer.MAX_VALUE, detail));
1959          children.add(new Property("agent", "@AuditEvent.agent", "The entity is attributed to an agent to express the agent's responsibility for that entity in the activity. This is most used to indicate when persistence media (the entity) are used by an agent. For example when importing data from a device, the device would be described in an entity, and the user importing data from that media would be indicated as the entity.agent.", 0, java.lang.Integer.MAX_VALUE, agent));
1960        }
1961
1962        @Override
1963        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1964          switch (_hash) {
1965          case 3648196: /*what*/  return new Property("what", "Reference(Any)", "Identifies a specific instance of the entity. The reference should be version specific. This is allowed to be a Parameters resource.", 0, 1, what);
1966          case 3506294: /*role*/  return new Property("role", "CodeableConcept", "Code representing the role the entity played in the event being audited.", 0, 1, role);
1967          case -722296940: /*securityLabel*/  return new Property("securityLabel", "CodeableConcept", "Security labels for the identified entity.", 0, java.lang.Integer.MAX_VALUE, securityLabel);
1968          case 107944136: /*query*/  return new Property("query", "base64Binary", "The query parameters for a query-type entities.", 0, 1, query);
1969          case -1335224239: /*detail*/  return new Property("detail", "", "Tagged value pairs for conveying additional information about the entity.", 0, java.lang.Integer.MAX_VALUE, detail);
1970          case 92750597: /*agent*/  return new Property("agent", "@AuditEvent.agent", "The entity is attributed to an agent to express the agent's responsibility for that entity in the activity. This is most used to indicate when persistence media (the entity) are used by an agent. For example when importing data from a device, the device would be described in an entity, and the user importing data from that media would be indicated as the entity.agent.", 0, java.lang.Integer.MAX_VALUE, agent);
1971          default: return super.getNamedProperty(_hash, _name, _checkValid);
1972          }
1973
1974        }
1975
1976      @Override
1977      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1978        switch (hash) {
1979        case 3648196: /*what*/ return this.what == null ? new Base[0] : new Base[] {this.what}; // Reference
1980        case 3506294: /*role*/ return this.role == null ? new Base[0] : new Base[] {this.role}; // CodeableConcept
1981        case -722296940: /*securityLabel*/ return this.securityLabel == null ? new Base[0] : this.securityLabel.toArray(new Base[this.securityLabel.size()]); // CodeableConcept
1982        case 107944136: /*query*/ return this.query == null ? new Base[0] : new Base[] {this.query}; // Base64BinaryType
1983        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // AuditEventEntityDetailComponent
1984        case 92750597: /*agent*/ return this.agent == null ? new Base[0] : this.agent.toArray(new Base[this.agent.size()]); // AuditEventAgentComponent
1985        default: return super.getProperty(hash, name, checkValid);
1986        }
1987
1988      }
1989
1990      @Override
1991      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1992        switch (hash) {
1993        case 3648196: // what
1994          this.what = TypeConvertor.castToReference(value); // Reference
1995          return value;
1996        case 3506294: // role
1997          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1998          return value;
1999        case -722296940: // securityLabel
2000          this.getSecurityLabel().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2001          return value;
2002        case 107944136: // query
2003          this.query = TypeConvertor.castToBase64Binary(value); // Base64BinaryType
2004          return value;
2005        case -1335224239: // detail
2006          this.getDetail().add((AuditEventEntityDetailComponent) value); // AuditEventEntityDetailComponent
2007          return value;
2008        case 92750597: // agent
2009          this.getAgent().add((AuditEventAgentComponent) value); // AuditEventAgentComponent
2010          return value;
2011        default: return super.setProperty(hash, name, value);
2012        }
2013
2014      }
2015
2016      @Override
2017      public Base setProperty(String name, Base value) throws FHIRException {
2018        if (name.equals("what")) {
2019          this.what = TypeConvertor.castToReference(value); // Reference
2020        } else if (name.equals("role")) {
2021          this.role = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2022        } else if (name.equals("securityLabel")) {
2023          this.getSecurityLabel().add(TypeConvertor.castToCodeableConcept(value));
2024        } else if (name.equals("query")) {
2025          this.query = TypeConvertor.castToBase64Binary(value); // Base64BinaryType
2026        } else if (name.equals("detail")) {
2027          this.getDetail().add((AuditEventEntityDetailComponent) value);
2028        } else if (name.equals("agent")) {
2029          this.getAgent().add((AuditEventAgentComponent) value);
2030        } else
2031          return super.setProperty(name, value);
2032        return value;
2033      }
2034
2035  @Override
2036  public void removeChild(String name, Base value) throws FHIRException {
2037        if (name.equals("what")) {
2038          this.what = null;
2039        } else if (name.equals("role")) {
2040          this.role = null;
2041        } else if (name.equals("securityLabel")) {
2042          this.getSecurityLabel().remove(value);
2043        } else if (name.equals("query")) {
2044          this.query = null;
2045        } else if (name.equals("detail")) {
2046          this.getDetail().remove((AuditEventEntityDetailComponent) value);
2047        } else if (name.equals("agent")) {
2048          this.getAgent().remove((AuditEventAgentComponent) value);
2049        } else
2050          super.removeChild(name, value);
2051        
2052      }
2053
2054      @Override
2055      public Base makeProperty(int hash, String name) throws FHIRException {
2056        switch (hash) {
2057        case 3648196:  return getWhat();
2058        case 3506294:  return getRole();
2059        case -722296940:  return addSecurityLabel(); 
2060        case 107944136:  return getQueryElement();
2061        case -1335224239:  return addDetail(); 
2062        case 92750597:  return addAgent(); 
2063        default: return super.makeProperty(hash, name);
2064        }
2065
2066      }
2067
2068      @Override
2069      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2070        switch (hash) {
2071        case 3648196: /*what*/ return new String[] {"Reference"};
2072        case 3506294: /*role*/ return new String[] {"CodeableConcept"};
2073        case -722296940: /*securityLabel*/ return new String[] {"CodeableConcept"};
2074        case 107944136: /*query*/ return new String[] {"base64Binary"};
2075        case -1335224239: /*detail*/ return new String[] {};
2076        case 92750597: /*agent*/ return new String[] {"@AuditEvent.agent"};
2077        default: return super.getTypesForProperty(hash, name);
2078        }
2079
2080      }
2081
2082      @Override
2083      public Base addChild(String name) throws FHIRException {
2084        if (name.equals("what")) {
2085          this.what = new Reference();
2086          return this.what;
2087        }
2088        else if (name.equals("role")) {
2089          this.role = new CodeableConcept();
2090          return this.role;
2091        }
2092        else if (name.equals("securityLabel")) {
2093          return addSecurityLabel();
2094        }
2095        else if (name.equals("query")) {
2096          throw new FHIRException("Cannot call addChild on a singleton property AuditEvent.entity.query");
2097        }
2098        else if (name.equals("detail")) {
2099          return addDetail();
2100        }
2101        else if (name.equals("agent")) {
2102          return addAgent();
2103        }
2104        else
2105          return super.addChild(name);
2106      }
2107
2108      public AuditEventEntityComponent copy() {
2109        AuditEventEntityComponent dst = new AuditEventEntityComponent();
2110        copyValues(dst);
2111        return dst;
2112      }
2113
2114      public void copyValues(AuditEventEntityComponent dst) {
2115        super.copyValues(dst);
2116        dst.what = what == null ? null : what.copy();
2117        dst.role = role == null ? null : role.copy();
2118        if (securityLabel != null) {
2119          dst.securityLabel = new ArrayList<CodeableConcept>();
2120          for (CodeableConcept i : securityLabel)
2121            dst.securityLabel.add(i.copy());
2122        };
2123        dst.query = query == null ? null : query.copy();
2124        if (detail != null) {
2125          dst.detail = new ArrayList<AuditEventEntityDetailComponent>();
2126          for (AuditEventEntityDetailComponent i : detail)
2127            dst.detail.add(i.copy());
2128        };
2129        if (agent != null) {
2130          dst.agent = new ArrayList<AuditEventAgentComponent>();
2131          for (AuditEventAgentComponent i : agent)
2132            dst.agent.add(i.copy());
2133        };
2134      }
2135
2136      @Override
2137      public boolean equalsDeep(Base other_) {
2138        if (!super.equalsDeep(other_))
2139          return false;
2140        if (!(other_ instanceof AuditEventEntityComponent))
2141          return false;
2142        AuditEventEntityComponent o = (AuditEventEntityComponent) other_;
2143        return compareDeep(what, o.what, true) && compareDeep(role, o.role, true) && compareDeep(securityLabel, o.securityLabel, true)
2144           && compareDeep(query, o.query, true) && compareDeep(detail, o.detail, true) && compareDeep(agent, o.agent, true)
2145          ;
2146      }
2147
2148      @Override
2149      public boolean equalsShallow(Base other_) {
2150        if (!super.equalsShallow(other_))
2151          return false;
2152        if (!(other_ instanceof AuditEventEntityComponent))
2153          return false;
2154        AuditEventEntityComponent o = (AuditEventEntityComponent) other_;
2155        return compareValues(query, o.query, true);
2156      }
2157
2158      public boolean isEmpty() {
2159        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(what, role, securityLabel
2160          , query, detail, agent);
2161      }
2162
2163  public String fhirType() {
2164    return "AuditEvent.entity";
2165
2166  }
2167
2168  }
2169
2170    @Block()
2171    public static class AuditEventEntityDetailComponent extends BackboneElement implements IBaseBackboneElement {
2172        /**
2173         * The type of extra detail provided in the value.
2174         */
2175        @Child(name = "type", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
2176        @Description(shortDefinition="Name of the property", formalDefinition="The type of extra detail provided in the value." )
2177        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/audit-event-type")
2178        protected CodeableConcept type;
2179
2180        /**
2181         * The  value of the extra detail.
2182         */
2183        @Child(name = "value", type = {Quantity.class, CodeableConcept.class, StringType.class, BooleanType.class, IntegerType.class, Range.class, Ratio.class, TimeType.class, DateTimeType.class, Period.class, Base64BinaryType.class}, order=2, min=1, max=1, modifier=false, summary=false)
2184        @Description(shortDefinition="Property value", formalDefinition="The  value of the extra detail." )
2185        protected DataType value;
2186
2187        private static final long serialVersionUID = -1659186716L;
2188
2189    /**
2190     * Constructor
2191     */
2192      public AuditEventEntityDetailComponent() {
2193        super();
2194      }
2195
2196    /**
2197     * Constructor
2198     */
2199      public AuditEventEntityDetailComponent(CodeableConcept type, DataType value) {
2200        super();
2201        this.setType(type);
2202        this.setValue(value);
2203      }
2204
2205        /**
2206         * @return {@link #type} (The type of extra detail provided in the value.)
2207         */
2208        public CodeableConcept getType() { 
2209          if (this.type == null)
2210            if (Configuration.errorOnAutoCreate())
2211              throw new Error("Attempt to auto-create AuditEventEntityDetailComponent.type");
2212            else if (Configuration.doAutoCreate())
2213              this.type = new CodeableConcept(); // cc
2214          return this.type;
2215        }
2216
2217        public boolean hasType() { 
2218          return this.type != null && !this.type.isEmpty();
2219        }
2220
2221        /**
2222         * @param value {@link #type} (The type of extra detail provided in the value.)
2223         */
2224        public AuditEventEntityDetailComponent setType(CodeableConcept value) { 
2225          this.type = value;
2226          return this;
2227        }
2228
2229        /**
2230         * @return {@link #value} (The  value of the extra detail.)
2231         */
2232        public DataType getValue() { 
2233          return this.value;
2234        }
2235
2236        /**
2237         * @return {@link #value} (The  value of the extra detail.)
2238         */
2239        public Quantity getValueQuantity() throws FHIRException { 
2240          if (this.value == null)
2241            this.value = new Quantity();
2242          if (!(this.value instanceof Quantity))
2243            throw new FHIRException("Type mismatch: the type Quantity was expected, but "+this.value.getClass().getName()+" was encountered");
2244          return (Quantity) this.value;
2245        }
2246
2247        public boolean hasValueQuantity() { 
2248          return this != null && this.value instanceof Quantity;
2249        }
2250
2251        /**
2252         * @return {@link #value} (The  value of the extra detail.)
2253         */
2254        public CodeableConcept getValueCodeableConcept() throws FHIRException { 
2255          if (this.value == null)
2256            this.value = new CodeableConcept();
2257          if (!(this.value instanceof CodeableConcept))
2258            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.value.getClass().getName()+" was encountered");
2259          return (CodeableConcept) this.value;
2260        }
2261
2262        public boolean hasValueCodeableConcept() { 
2263          return this != null && this.value instanceof CodeableConcept;
2264        }
2265
2266        /**
2267         * @return {@link #value} (The  value of the extra detail.)
2268         */
2269        public StringType getValueStringType() throws FHIRException { 
2270          if (this.value == null)
2271            this.value = new StringType();
2272          if (!(this.value instanceof StringType))
2273            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.value.getClass().getName()+" was encountered");
2274          return (StringType) this.value;
2275        }
2276
2277        public boolean hasValueStringType() { 
2278          return this != null && this.value instanceof StringType;
2279        }
2280
2281        /**
2282         * @return {@link #value} (The  value of the extra detail.)
2283         */
2284        public BooleanType getValueBooleanType() throws FHIRException { 
2285          if (this.value == null)
2286            this.value = new BooleanType();
2287          if (!(this.value instanceof BooleanType))
2288            throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.value.getClass().getName()+" was encountered");
2289          return (BooleanType) this.value;
2290        }
2291
2292        public boolean hasValueBooleanType() { 
2293          return this != null && this.value instanceof BooleanType;
2294        }
2295
2296        /**
2297         * @return {@link #value} (The  value of the extra detail.)
2298         */
2299        public IntegerType getValueIntegerType() throws FHIRException { 
2300          if (this.value == null)
2301            this.value = new IntegerType();
2302          if (!(this.value instanceof IntegerType))
2303            throw new FHIRException("Type mismatch: the type IntegerType was expected, but "+this.value.getClass().getName()+" was encountered");
2304          return (IntegerType) this.value;
2305        }
2306
2307        public boolean hasValueIntegerType() { 
2308          return this != null && this.value instanceof IntegerType;
2309        }
2310
2311        /**
2312         * @return {@link #value} (The  value of the extra detail.)
2313         */
2314        public Range getValueRange() throws FHIRException { 
2315          if (this.value == null)
2316            this.value = new Range();
2317          if (!(this.value instanceof Range))
2318            throw new FHIRException("Type mismatch: the type Range was expected, but "+this.value.getClass().getName()+" was encountered");
2319          return (Range) this.value;
2320        }
2321
2322        public boolean hasValueRange() { 
2323          return this != null && this.value instanceof Range;
2324        }
2325
2326        /**
2327         * @return {@link #value} (The  value of the extra detail.)
2328         */
2329        public Ratio getValueRatio() throws FHIRException { 
2330          if (this.value == null)
2331            this.value = new Ratio();
2332          if (!(this.value instanceof Ratio))
2333            throw new FHIRException("Type mismatch: the type Ratio was expected, but "+this.value.getClass().getName()+" was encountered");
2334          return (Ratio) this.value;
2335        }
2336
2337        public boolean hasValueRatio() { 
2338          return this != null && this.value instanceof Ratio;
2339        }
2340
2341        /**
2342         * @return {@link #value} (The  value of the extra detail.)
2343         */
2344        public TimeType getValueTimeType() throws FHIRException { 
2345          if (this.value == null)
2346            this.value = new TimeType();
2347          if (!(this.value instanceof TimeType))
2348            throw new FHIRException("Type mismatch: the type TimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2349          return (TimeType) this.value;
2350        }
2351
2352        public boolean hasValueTimeType() { 
2353          return this != null && this.value instanceof TimeType;
2354        }
2355
2356        /**
2357         * @return {@link #value} (The  value of the extra detail.)
2358         */
2359        public DateTimeType getValueDateTimeType() throws FHIRException { 
2360          if (this.value == null)
2361            this.value = new DateTimeType();
2362          if (!(this.value instanceof DateTimeType))
2363            throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.value.getClass().getName()+" was encountered");
2364          return (DateTimeType) this.value;
2365        }
2366
2367        public boolean hasValueDateTimeType() { 
2368          return this != null && this.value instanceof DateTimeType;
2369        }
2370
2371        /**
2372         * @return {@link #value} (The  value of the extra detail.)
2373         */
2374        public Period getValuePeriod() throws FHIRException { 
2375          if (this.value == null)
2376            this.value = new Period();
2377          if (!(this.value instanceof Period))
2378            throw new FHIRException("Type mismatch: the type Period was expected, but "+this.value.getClass().getName()+" was encountered");
2379          return (Period) this.value;
2380        }
2381
2382        public boolean hasValuePeriod() { 
2383          return this != null && this.value instanceof Period;
2384        }
2385
2386        /**
2387         * @return {@link #value} (The  value of the extra detail.)
2388         */
2389        public Base64BinaryType getValueBase64BinaryType() throws FHIRException { 
2390          if (this.value == null)
2391            this.value = new Base64BinaryType();
2392          if (!(this.value instanceof Base64BinaryType))
2393            throw new FHIRException("Type mismatch: the type Base64BinaryType was expected, but "+this.value.getClass().getName()+" was encountered");
2394          return (Base64BinaryType) this.value;
2395        }
2396
2397        public boolean hasValueBase64BinaryType() { 
2398          return this != null && this.value instanceof Base64BinaryType;
2399        }
2400
2401        public boolean hasValue() { 
2402          return this.value != null && !this.value.isEmpty();
2403        }
2404
2405        /**
2406         * @param value {@link #value} (The  value of the extra detail.)
2407         */
2408        public AuditEventEntityDetailComponent setValue(DataType value) { 
2409          if (value != null && !(value instanceof Quantity || value instanceof CodeableConcept || value instanceof StringType || value instanceof BooleanType || value instanceof IntegerType || value instanceof Range || value instanceof Ratio || value instanceof TimeType || value instanceof DateTimeType || value instanceof Period || value instanceof Base64BinaryType))
2410            throw new FHIRException("Not the right type for AuditEvent.entity.detail.value[x]: "+value.fhirType());
2411          this.value = value;
2412          return this;
2413        }
2414
2415        protected void listChildren(List<Property> children) {
2416          super.listChildren(children);
2417          children.add(new Property("type", "CodeableConcept", "The type of extra detail provided in the value.", 0, 1, type));
2418          children.add(new Property("value[x]", "Quantity|CodeableConcept|string|boolean|integer|Range|Ratio|time|dateTime|Period|base64Binary", "The  value of the extra detail.", 0, 1, value));
2419        }
2420
2421        @Override
2422        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2423          switch (_hash) {
2424          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "The type of extra detail provided in the value.", 0, 1, type);
2425          case -1410166417: /*value[x]*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|integer|Range|Ratio|time|dateTime|Period|base64Binary", "The  value of the extra detail.", 0, 1, value);
2426          case 111972721: /*value*/  return new Property("value[x]", "Quantity|CodeableConcept|string|boolean|integer|Range|Ratio|time|dateTime|Period|base64Binary", "The  value of the extra detail.", 0, 1, value);
2427          case -2029823716: /*valueQuantity*/  return new Property("value[x]", "Quantity", "The  value of the extra detail.", 0, 1, value);
2428          case 924902896: /*valueCodeableConcept*/  return new Property("value[x]", "CodeableConcept", "The  value of the extra detail.", 0, 1, value);
2429          case -1424603934: /*valueString*/  return new Property("value[x]", "string", "The  value of the extra detail.", 0, 1, value);
2430          case 733421943: /*valueBoolean*/  return new Property("value[x]", "boolean", "The  value of the extra detail.", 0, 1, value);
2431          case -1668204915: /*valueInteger*/  return new Property("value[x]", "integer", "The  value of the extra detail.", 0, 1, value);
2432          case 2030761548: /*valueRange*/  return new Property("value[x]", "Range", "The  value of the extra detail.", 0, 1, value);
2433          case 2030767386: /*valueRatio*/  return new Property("value[x]", "Ratio", "The  value of the extra detail.", 0, 1, value);
2434          case -765708322: /*valueTime*/  return new Property("value[x]", "time", "The  value of the extra detail.", 0, 1, value);
2435          case 1047929900: /*valueDateTime*/  return new Property("value[x]", "dateTime", "The  value of the extra detail.", 0, 1, value);
2436          case -1524344174: /*valuePeriod*/  return new Property("value[x]", "Period", "The  value of the extra detail.", 0, 1, value);
2437          case -1535024575: /*valueBase64Binary*/  return new Property("value[x]", "base64Binary", "The  value of the extra detail.", 0, 1, value);
2438          default: return super.getNamedProperty(_hash, _name, _checkValid);
2439          }
2440
2441        }
2442
2443      @Override
2444      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2445        switch (hash) {
2446        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
2447        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // DataType
2448        default: return super.getProperty(hash, name, checkValid);
2449        }
2450
2451      }
2452
2453      @Override
2454      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2455        switch (hash) {
2456        case 3575610: // type
2457          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2458          return value;
2459        case 111972721: // value
2460          this.value = TypeConvertor.castToType(value); // DataType
2461          return value;
2462        default: return super.setProperty(hash, name, value);
2463        }
2464
2465      }
2466
2467      @Override
2468      public Base setProperty(String name, Base value) throws FHIRException {
2469        if (name.equals("type")) {
2470          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2471        } else if (name.equals("value[x]")) {
2472          this.value = TypeConvertor.castToType(value); // DataType
2473        } else
2474          return super.setProperty(name, value);
2475        return value;
2476      }
2477
2478  @Override
2479  public void removeChild(String name, Base value) throws FHIRException {
2480        if (name.equals("type")) {
2481          this.type = null;
2482        } else if (name.equals("value[x]")) {
2483          this.value = null;
2484        } else
2485          super.removeChild(name, value);
2486        
2487      }
2488
2489      @Override
2490      public Base makeProperty(int hash, String name) throws FHIRException {
2491        switch (hash) {
2492        case 3575610:  return getType();
2493        case -1410166417:  return getValue();
2494        case 111972721:  return getValue();
2495        default: return super.makeProperty(hash, name);
2496        }
2497
2498      }
2499
2500      @Override
2501      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2502        switch (hash) {
2503        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2504        case 111972721: /*value*/ return new String[] {"Quantity", "CodeableConcept", "string", "boolean", "integer", "Range", "Ratio", "time", "dateTime", "Period", "base64Binary"};
2505        default: return super.getTypesForProperty(hash, name);
2506        }
2507
2508      }
2509
2510      @Override
2511      public Base addChild(String name) throws FHIRException {
2512        if (name.equals("type")) {
2513          this.type = new CodeableConcept();
2514          return this.type;
2515        }
2516        else if (name.equals("valueQuantity")) {
2517          this.value = new Quantity();
2518          return this.value;
2519        }
2520        else if (name.equals("valueCodeableConcept")) {
2521          this.value = new CodeableConcept();
2522          return this.value;
2523        }
2524        else if (name.equals("valueString")) {
2525          this.value = new StringType();
2526          return this.value;
2527        }
2528        else if (name.equals("valueBoolean")) {
2529          this.value = new BooleanType();
2530          return this.value;
2531        }
2532        else if (name.equals("valueInteger")) {
2533          this.value = new IntegerType();
2534          return this.value;
2535        }
2536        else if (name.equals("valueRange")) {
2537          this.value = new Range();
2538          return this.value;
2539        }
2540        else if (name.equals("valueRatio")) {
2541          this.value = new Ratio();
2542          return this.value;
2543        }
2544        else if (name.equals("valueTime")) {
2545          this.value = new TimeType();
2546          return this.value;
2547        }
2548        else if (name.equals("valueDateTime")) {
2549          this.value = new DateTimeType();
2550          return this.value;
2551        }
2552        else if (name.equals("valuePeriod")) {
2553          this.value = new Period();
2554          return this.value;
2555        }
2556        else if (name.equals("valueBase64Binary")) {
2557          this.value = new Base64BinaryType();
2558          return this.value;
2559        }
2560        else
2561          return super.addChild(name);
2562      }
2563
2564      public AuditEventEntityDetailComponent copy() {
2565        AuditEventEntityDetailComponent dst = new AuditEventEntityDetailComponent();
2566        copyValues(dst);
2567        return dst;
2568      }
2569
2570      public void copyValues(AuditEventEntityDetailComponent dst) {
2571        super.copyValues(dst);
2572        dst.type = type == null ? null : type.copy();
2573        dst.value = value == null ? null : value.copy();
2574      }
2575
2576      @Override
2577      public boolean equalsDeep(Base other_) {
2578        if (!super.equalsDeep(other_))
2579          return false;
2580        if (!(other_ instanceof AuditEventEntityDetailComponent))
2581          return false;
2582        AuditEventEntityDetailComponent o = (AuditEventEntityDetailComponent) other_;
2583        return compareDeep(type, o.type, true) && compareDeep(value, o.value, true);
2584      }
2585
2586      @Override
2587      public boolean equalsShallow(Base other_) {
2588        if (!super.equalsShallow(other_))
2589          return false;
2590        if (!(other_ instanceof AuditEventEntityDetailComponent))
2591          return false;
2592        AuditEventEntityDetailComponent o = (AuditEventEntityDetailComponent) other_;
2593        return true;
2594      }
2595
2596      public boolean isEmpty() {
2597        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, value);
2598      }
2599
2600  public String fhirType() {
2601    return "AuditEvent.entity.detail";
2602
2603  }
2604
2605  }
2606
2607    /**
2608     * Classification of the type of event.
2609     */
2610    @Child(name = "category", type = {CodeableConcept.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2611    @Description(shortDefinition="Type/identifier of event", formalDefinition="Classification of the type of event." )
2612    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/audit-event-type")
2613    protected List<CodeableConcept> category;
2614
2615    /**
2616     * Describes what happened. The most specific code for the event.
2617     */
2618    @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=true)
2619    @Description(shortDefinition="Specific type of event", formalDefinition="Describes what happened. The most specific code for the event." )
2620    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/audit-event-sub-type")
2621    protected CodeableConcept code;
2622
2623    /**
2624     * Indicator for type of action performed during the event that generated the audit.
2625     */
2626    @Child(name = "action", type = {CodeType.class}, order=2, min=0, max=1, modifier=false, summary=true)
2627    @Description(shortDefinition="Type of action performed during the event", formalDefinition="Indicator for type of action performed during the event that generated the audit." )
2628    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/audit-event-action")
2629    protected Enumeration<AuditEventAction> action;
2630
2631    /**
2632     * Indicates and enables segmentation of various severity including debugging from critical.
2633     */
2634    @Child(name = "severity", type = {CodeType.class}, order=3, min=0, max=1, modifier=false, summary=true)
2635    @Description(shortDefinition="emergency | alert | critical | error | warning | notice | informational | debug", formalDefinition="Indicates and enables segmentation of various severity including debugging from critical." )
2636    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/audit-event-severity")
2637    protected Enumeration<AuditEventSeverity> severity;
2638
2639    /**
2640     * The time or period during which the activity occurred.
2641     */
2642    @Child(name = "occurred", type = {Period.class, DateTimeType.class}, order=4, min=0, max=1, modifier=false, summary=false)
2643    @Description(shortDefinition="When the activity occurred", formalDefinition="The time or period during which the activity occurred." )
2644    protected DataType occurred;
2645
2646    /**
2647     * The time when the event was recorded.
2648     */
2649    @Child(name = "recorded", type = {InstantType.class}, order=5, min=1, max=1, modifier=false, summary=true)
2650    @Description(shortDefinition="Time when the event was recorded", formalDefinition="The time when the event was recorded." )
2651    protected InstantType recorded;
2652
2653    /**
2654     * Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.text.
2655     */
2656    @Child(name = "outcome", type = {}, order=6, min=0, max=1, modifier=false, summary=true)
2657    @Description(shortDefinition="Whether the event succeeded or failed", formalDefinition="Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.text." )
2658    protected AuditEventOutcomeComponent outcome;
2659
2660    /**
2661     * The authorization (e.g., PurposeOfUse) that was used during the event being recorded.
2662     */
2663    @Child(name = "authorization", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2664    @Description(shortDefinition="Authorization related to the event", formalDefinition="The authorization (e.g., PurposeOfUse) that was used during the event being recorded." )
2665    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-PurposeOfUse")
2666    protected List<CodeableConcept> authorization;
2667
2668    /**
2669     * Allows tracing of authorizatino for the events and tracking whether proposals/recommendations were acted upon.
2670     */
2671    @Child(name = "basedOn", type = {CarePlan.class, DeviceRequest.class, ImmunizationRecommendation.class, MedicationRequest.class, NutritionOrder.class, ServiceRequest.class, Task.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2672    @Description(shortDefinition="Workflow authorization within which this event occurred", formalDefinition="Allows tracing of authorizatino for the events and tracking whether proposals/recommendations were acted upon." )
2673    protected List<Reference> basedOn;
2674
2675    /**
2676     * The patient element is available to enable deterministic tracking of activities that involve the patient as the subject of the data used in an activity.
2677     */
2678    @Child(name = "patient", type = {Patient.class}, order=9, min=0, max=1, modifier=false, summary=false)
2679    @Description(shortDefinition="The patient is the subject of the data used/created/updated/deleted during the activity", formalDefinition="The patient element is available to enable deterministic tracking of activities that involve the patient as the subject of the data used in an activity." )
2680    protected Reference patient;
2681
2682    /**
2683     * This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests).
2684     */
2685    @Child(name = "encounter", type = {Encounter.class}, order=10, min=0, max=1, modifier=false, summary=false)
2686    @Description(shortDefinition="Encounter within which this event occurred or which the event is tightly associated", formalDefinition="This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests)." )
2687    protected Reference encounter;
2688
2689    /**
2690     * An actor taking an active role in the event or activity that is logged.
2691     */
2692    @Child(name = "agent", type = {}, order=11, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2693    @Description(shortDefinition="Actor involved in the event", formalDefinition="An actor taking an active role in the event or activity that is logged." )
2694    protected List<AuditEventAgentComponent> agent;
2695
2696    /**
2697     * The actor that is reporting the event.
2698     */
2699    @Child(name = "source", type = {}, order=12, min=1, max=1, modifier=false, summary=true)
2700    @Description(shortDefinition="Audit Event Reporter", formalDefinition="The actor that is reporting the event." )
2701    protected AuditEventSourceComponent source;
2702
2703    /**
2704     * Specific instances of data or objects that have been accessed.
2705     */
2706    @Child(name = "entity", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
2707    @Description(shortDefinition="Data or objects used", formalDefinition="Specific instances of data or objects that have been accessed." )
2708    protected List<AuditEventEntityComponent> entity;
2709
2710    private static final long serialVersionUID = -1335832480L;
2711
2712  /**
2713   * Constructor
2714   */
2715    public AuditEvent() {
2716      super();
2717    }
2718
2719  /**
2720   * Constructor
2721   */
2722    public AuditEvent(CodeableConcept code, Date recorded, AuditEventAgentComponent agent, AuditEventSourceComponent source) {
2723      super();
2724      this.setCode(code);
2725      this.setRecorded(recorded);
2726      this.addAgent(agent);
2727      this.setSource(source);
2728    }
2729
2730    /**
2731     * @return {@link #category} (Classification of the type of event.)
2732     */
2733    public List<CodeableConcept> getCategory() { 
2734      if (this.category == null)
2735        this.category = new ArrayList<CodeableConcept>();
2736      return this.category;
2737    }
2738
2739    /**
2740     * @return Returns a reference to <code>this</code> for easy method chaining
2741     */
2742    public AuditEvent setCategory(List<CodeableConcept> theCategory) { 
2743      this.category = theCategory;
2744      return this;
2745    }
2746
2747    public boolean hasCategory() { 
2748      if (this.category == null)
2749        return false;
2750      for (CodeableConcept item : this.category)
2751        if (!item.isEmpty())
2752          return true;
2753      return false;
2754    }
2755
2756    public CodeableConcept addCategory() { //3
2757      CodeableConcept t = new CodeableConcept();
2758      if (this.category == null)
2759        this.category = new ArrayList<CodeableConcept>();
2760      this.category.add(t);
2761      return t;
2762    }
2763
2764    public AuditEvent addCategory(CodeableConcept t) { //3
2765      if (t == null)
2766        return this;
2767      if (this.category == null)
2768        this.category = new ArrayList<CodeableConcept>();
2769      this.category.add(t);
2770      return this;
2771    }
2772
2773    /**
2774     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist {3}
2775     */
2776    public CodeableConcept getCategoryFirstRep() { 
2777      if (getCategory().isEmpty()) {
2778        addCategory();
2779      }
2780      return getCategory().get(0);
2781    }
2782
2783    /**
2784     * @return {@link #code} (Describes what happened. The most specific code for the event.)
2785     */
2786    public CodeableConcept getCode() { 
2787      if (this.code == null)
2788        if (Configuration.errorOnAutoCreate())
2789          throw new Error("Attempt to auto-create AuditEvent.code");
2790        else if (Configuration.doAutoCreate())
2791          this.code = new CodeableConcept(); // cc
2792      return this.code;
2793    }
2794
2795    public boolean hasCode() { 
2796      return this.code != null && !this.code.isEmpty();
2797    }
2798
2799    /**
2800     * @param value {@link #code} (Describes what happened. The most specific code for the event.)
2801     */
2802    public AuditEvent setCode(CodeableConcept value) { 
2803      this.code = value;
2804      return this;
2805    }
2806
2807    /**
2808     * @return {@link #action} (Indicator for type of action performed during the event that generated the audit.). This is the underlying object with id, value and extensions. The accessor "getAction" gives direct access to the value
2809     */
2810    public Enumeration<AuditEventAction> getActionElement() { 
2811      if (this.action == null)
2812        if (Configuration.errorOnAutoCreate())
2813          throw new Error("Attempt to auto-create AuditEvent.action");
2814        else if (Configuration.doAutoCreate())
2815          this.action = new Enumeration<AuditEventAction>(new AuditEventActionEnumFactory()); // bb
2816      return this.action;
2817    }
2818
2819    public boolean hasActionElement() { 
2820      return this.action != null && !this.action.isEmpty();
2821    }
2822
2823    public boolean hasAction() { 
2824      return this.action != null && !this.action.isEmpty();
2825    }
2826
2827    /**
2828     * @param value {@link #action} (Indicator for type of action performed during the event that generated the audit.). This is the underlying object with id, value and extensions. The accessor "getAction" gives direct access to the value
2829     */
2830    public AuditEvent setActionElement(Enumeration<AuditEventAction> value) { 
2831      this.action = value;
2832      return this;
2833    }
2834
2835    /**
2836     * @return Indicator for type of action performed during the event that generated the audit.
2837     */
2838    public AuditEventAction getAction() { 
2839      return this.action == null ? null : this.action.getValue();
2840    }
2841
2842    /**
2843     * @param value Indicator for type of action performed during the event that generated the audit.
2844     */
2845    public AuditEvent setAction(AuditEventAction value) { 
2846      if (value == null)
2847        this.action = null;
2848      else {
2849        if (this.action == null)
2850          this.action = new Enumeration<AuditEventAction>(new AuditEventActionEnumFactory());
2851        this.action.setValue(value);
2852      }
2853      return this;
2854    }
2855
2856    /**
2857     * @return {@link #severity} (Indicates and enables segmentation of various severity including debugging from critical.). This is the underlying object with id, value and extensions. The accessor "getSeverity" gives direct access to the value
2858     */
2859    public Enumeration<AuditEventSeverity> getSeverityElement() { 
2860      if (this.severity == null)
2861        if (Configuration.errorOnAutoCreate())
2862          throw new Error("Attempt to auto-create AuditEvent.severity");
2863        else if (Configuration.doAutoCreate())
2864          this.severity = new Enumeration<AuditEventSeverity>(new AuditEventSeverityEnumFactory()); // bb
2865      return this.severity;
2866    }
2867
2868    public boolean hasSeverityElement() { 
2869      return this.severity != null && !this.severity.isEmpty();
2870    }
2871
2872    public boolean hasSeverity() { 
2873      return this.severity != null && !this.severity.isEmpty();
2874    }
2875
2876    /**
2877     * @param value {@link #severity} (Indicates and enables segmentation of various severity including debugging from critical.). This is the underlying object with id, value and extensions. The accessor "getSeverity" gives direct access to the value
2878     */
2879    public AuditEvent setSeverityElement(Enumeration<AuditEventSeverity> value) { 
2880      this.severity = value;
2881      return this;
2882    }
2883
2884    /**
2885     * @return Indicates and enables segmentation of various severity including debugging from critical.
2886     */
2887    public AuditEventSeverity getSeverity() { 
2888      return this.severity == null ? null : this.severity.getValue();
2889    }
2890
2891    /**
2892     * @param value Indicates and enables segmentation of various severity including debugging from critical.
2893     */
2894    public AuditEvent setSeverity(AuditEventSeverity value) { 
2895      if (value == null)
2896        this.severity = null;
2897      else {
2898        if (this.severity == null)
2899          this.severity = new Enumeration<AuditEventSeverity>(new AuditEventSeverityEnumFactory());
2900        this.severity.setValue(value);
2901      }
2902      return this;
2903    }
2904
2905    /**
2906     * @return {@link #occurred} (The time or period during which the activity occurred.)
2907     */
2908    public DataType getOccurred() { 
2909      return this.occurred;
2910    }
2911
2912    /**
2913     * @return {@link #occurred} (The time or period during which the activity occurred.)
2914     */
2915    public Period getOccurredPeriod() throws FHIRException { 
2916      if (this.occurred == null)
2917        this.occurred = new Period();
2918      if (!(this.occurred instanceof Period))
2919        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.occurred.getClass().getName()+" was encountered");
2920      return (Period) this.occurred;
2921    }
2922
2923    public boolean hasOccurredPeriod() { 
2924      return this != null && this.occurred instanceof Period;
2925    }
2926
2927    /**
2928     * @return {@link #occurred} (The time or period during which the activity occurred.)
2929     */
2930    public DateTimeType getOccurredDateTimeType() throws FHIRException { 
2931      if (this.occurred == null)
2932        this.occurred = new DateTimeType();
2933      if (!(this.occurred instanceof DateTimeType))
2934        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.occurred.getClass().getName()+" was encountered");
2935      return (DateTimeType) this.occurred;
2936    }
2937
2938    public boolean hasOccurredDateTimeType() { 
2939      return this != null && this.occurred instanceof DateTimeType;
2940    }
2941
2942    public boolean hasOccurred() { 
2943      return this.occurred != null && !this.occurred.isEmpty();
2944    }
2945
2946    /**
2947     * @param value {@link #occurred} (The time or period during which the activity occurred.)
2948     */
2949    public AuditEvent setOccurred(DataType value) { 
2950      if (value != null && !(value instanceof Period || value instanceof DateTimeType))
2951        throw new FHIRException("Not the right type for AuditEvent.occurred[x]: "+value.fhirType());
2952      this.occurred = value;
2953      return this;
2954    }
2955
2956    /**
2957     * @return {@link #recorded} (The time when the event was recorded.). This is the underlying object with id, value and extensions. The accessor "getRecorded" gives direct access to the value
2958     */
2959    public InstantType getRecordedElement() { 
2960      if (this.recorded == null)
2961        if (Configuration.errorOnAutoCreate())
2962          throw new Error("Attempt to auto-create AuditEvent.recorded");
2963        else if (Configuration.doAutoCreate())
2964          this.recorded = new InstantType(); // bb
2965      return this.recorded;
2966    }
2967
2968    public boolean hasRecordedElement() { 
2969      return this.recorded != null && !this.recorded.isEmpty();
2970    }
2971
2972    public boolean hasRecorded() { 
2973      return this.recorded != null && !this.recorded.isEmpty();
2974    }
2975
2976    /**
2977     * @param value {@link #recorded} (The time when the event was recorded.). This is the underlying object with id, value and extensions. The accessor "getRecorded" gives direct access to the value
2978     */
2979    public AuditEvent setRecordedElement(InstantType value) { 
2980      this.recorded = value;
2981      return this;
2982    }
2983
2984    /**
2985     * @return The time when the event was recorded.
2986     */
2987    public Date getRecorded() { 
2988      return this.recorded == null ? null : this.recorded.getValue();
2989    }
2990
2991    /**
2992     * @param value The time when the event was recorded.
2993     */
2994    public AuditEvent setRecorded(Date value) { 
2995        if (this.recorded == null)
2996          this.recorded = new InstantType();
2997        this.recorded.setValue(value);
2998      return this;
2999    }
3000
3001    /**
3002     * @return {@link #outcome} (Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.text.)
3003     */
3004    public AuditEventOutcomeComponent getOutcome() { 
3005      if (this.outcome == null)
3006        if (Configuration.errorOnAutoCreate())
3007          throw new Error("Attempt to auto-create AuditEvent.outcome");
3008        else if (Configuration.doAutoCreate())
3009          this.outcome = new AuditEventOutcomeComponent(); // cc
3010      return this.outcome;
3011    }
3012
3013    public boolean hasOutcome() { 
3014      return this.outcome != null && !this.outcome.isEmpty();
3015    }
3016
3017    /**
3018     * @param value {@link #outcome} (Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.text.)
3019     */
3020    public AuditEvent setOutcome(AuditEventOutcomeComponent value) { 
3021      this.outcome = value;
3022      return this;
3023    }
3024
3025    /**
3026     * @return {@link #authorization} (The authorization (e.g., PurposeOfUse) that was used during the event being recorded.)
3027     */
3028    public List<CodeableConcept> getAuthorization() { 
3029      if (this.authorization == null)
3030        this.authorization = new ArrayList<CodeableConcept>();
3031      return this.authorization;
3032    }
3033
3034    /**
3035     * @return Returns a reference to <code>this</code> for easy method chaining
3036     */
3037    public AuditEvent setAuthorization(List<CodeableConcept> theAuthorization) { 
3038      this.authorization = theAuthorization;
3039      return this;
3040    }
3041
3042    public boolean hasAuthorization() { 
3043      if (this.authorization == null)
3044        return false;
3045      for (CodeableConcept item : this.authorization)
3046        if (!item.isEmpty())
3047          return true;
3048      return false;
3049    }
3050
3051    public CodeableConcept addAuthorization() { //3
3052      CodeableConcept t = new CodeableConcept();
3053      if (this.authorization == null)
3054        this.authorization = new ArrayList<CodeableConcept>();
3055      this.authorization.add(t);
3056      return t;
3057    }
3058
3059    public AuditEvent addAuthorization(CodeableConcept t) { //3
3060      if (t == null)
3061        return this;
3062      if (this.authorization == null)
3063        this.authorization = new ArrayList<CodeableConcept>();
3064      this.authorization.add(t);
3065      return this;
3066    }
3067
3068    /**
3069     * @return The first repetition of repeating field {@link #authorization}, creating it if it does not already exist {3}
3070     */
3071    public CodeableConcept getAuthorizationFirstRep() { 
3072      if (getAuthorization().isEmpty()) {
3073        addAuthorization();
3074      }
3075      return getAuthorization().get(0);
3076    }
3077
3078    /**
3079     * @return {@link #basedOn} (Allows tracing of authorizatino for the events and tracking whether proposals/recommendations were acted upon.)
3080     */
3081    public List<Reference> getBasedOn() { 
3082      if (this.basedOn == null)
3083        this.basedOn = new ArrayList<Reference>();
3084      return this.basedOn;
3085    }
3086
3087    /**
3088     * @return Returns a reference to <code>this</code> for easy method chaining
3089     */
3090    public AuditEvent setBasedOn(List<Reference> theBasedOn) { 
3091      this.basedOn = theBasedOn;
3092      return this;
3093    }
3094
3095    public boolean hasBasedOn() { 
3096      if (this.basedOn == null)
3097        return false;
3098      for (Reference item : this.basedOn)
3099        if (!item.isEmpty())
3100          return true;
3101      return false;
3102    }
3103
3104    public Reference addBasedOn() { //3
3105      Reference t = new Reference();
3106      if (this.basedOn == null)
3107        this.basedOn = new ArrayList<Reference>();
3108      this.basedOn.add(t);
3109      return t;
3110    }
3111
3112    public AuditEvent addBasedOn(Reference t) { //3
3113      if (t == null)
3114        return this;
3115      if (this.basedOn == null)
3116        this.basedOn = new ArrayList<Reference>();
3117      this.basedOn.add(t);
3118      return this;
3119    }
3120
3121    /**
3122     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist {3}
3123     */
3124    public Reference getBasedOnFirstRep() { 
3125      if (getBasedOn().isEmpty()) {
3126        addBasedOn();
3127      }
3128      return getBasedOn().get(0);
3129    }
3130
3131    /**
3132     * @return {@link #patient} (The patient element is available to enable deterministic tracking of activities that involve the patient as the subject of the data used in an activity.)
3133     */
3134    public Reference getPatient() { 
3135      if (this.patient == null)
3136        if (Configuration.errorOnAutoCreate())
3137          throw new Error("Attempt to auto-create AuditEvent.patient");
3138        else if (Configuration.doAutoCreate())
3139          this.patient = new Reference(); // cc
3140      return this.patient;
3141    }
3142
3143    public boolean hasPatient() { 
3144      return this.patient != null && !this.patient.isEmpty();
3145    }
3146
3147    /**
3148     * @param value {@link #patient} (The patient element is available to enable deterministic tracking of activities that involve the patient as the subject of the data used in an activity.)
3149     */
3150    public AuditEvent setPatient(Reference value) { 
3151      this.patient = value;
3152      return this;
3153    }
3154
3155    /**
3156     * @return {@link #encounter} (This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests).)
3157     */
3158    public Reference getEncounter() { 
3159      if (this.encounter == null)
3160        if (Configuration.errorOnAutoCreate())
3161          throw new Error("Attempt to auto-create AuditEvent.encounter");
3162        else if (Configuration.doAutoCreate())
3163          this.encounter = new Reference(); // cc
3164      return this.encounter;
3165    }
3166
3167    public boolean hasEncounter() { 
3168      return this.encounter != null && !this.encounter.isEmpty();
3169    }
3170
3171    /**
3172     * @param value {@link #encounter} (This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests).)
3173     */
3174    public AuditEvent setEncounter(Reference value) { 
3175      this.encounter = value;
3176      return this;
3177    }
3178
3179    /**
3180     * @return {@link #agent} (An actor taking an active role in the event or activity that is logged.)
3181     */
3182    public List<AuditEventAgentComponent> getAgent() { 
3183      if (this.agent == null)
3184        this.agent = new ArrayList<AuditEventAgentComponent>();
3185      return this.agent;
3186    }
3187
3188    /**
3189     * @return Returns a reference to <code>this</code> for easy method chaining
3190     */
3191    public AuditEvent setAgent(List<AuditEventAgentComponent> theAgent) { 
3192      this.agent = theAgent;
3193      return this;
3194    }
3195
3196    public boolean hasAgent() { 
3197      if (this.agent == null)
3198        return false;
3199      for (AuditEventAgentComponent item : this.agent)
3200        if (!item.isEmpty())
3201          return true;
3202      return false;
3203    }
3204
3205    public AuditEventAgentComponent addAgent() { //3
3206      AuditEventAgentComponent t = new AuditEventAgentComponent();
3207      if (this.agent == null)
3208        this.agent = new ArrayList<AuditEventAgentComponent>();
3209      this.agent.add(t);
3210      return t;
3211    }
3212
3213    public AuditEvent addAgent(AuditEventAgentComponent t) { //3
3214      if (t == null)
3215        return this;
3216      if (this.agent == null)
3217        this.agent = new ArrayList<AuditEventAgentComponent>();
3218      this.agent.add(t);
3219      return this;
3220    }
3221
3222    /**
3223     * @return The first repetition of repeating field {@link #agent}, creating it if it does not already exist {3}
3224     */
3225    public AuditEventAgentComponent getAgentFirstRep() { 
3226      if (getAgent().isEmpty()) {
3227        addAgent();
3228      }
3229      return getAgent().get(0);
3230    }
3231
3232    /**
3233     * @return {@link #source} (The actor that is reporting the event.)
3234     */
3235    public AuditEventSourceComponent getSource() { 
3236      if (this.source == null)
3237        if (Configuration.errorOnAutoCreate())
3238          throw new Error("Attempt to auto-create AuditEvent.source");
3239        else if (Configuration.doAutoCreate())
3240          this.source = new AuditEventSourceComponent(); // cc
3241      return this.source;
3242    }
3243
3244    public boolean hasSource() { 
3245      return this.source != null && !this.source.isEmpty();
3246    }
3247
3248    /**
3249     * @param value {@link #source} (The actor that is reporting the event.)
3250     */
3251    public AuditEvent setSource(AuditEventSourceComponent value) { 
3252      this.source = value;
3253      return this;
3254    }
3255
3256    /**
3257     * @return {@link #entity} (Specific instances of data or objects that have been accessed.)
3258     */
3259    public List<AuditEventEntityComponent> getEntity() { 
3260      if (this.entity == null)
3261        this.entity = new ArrayList<AuditEventEntityComponent>();
3262      return this.entity;
3263    }
3264
3265    /**
3266     * @return Returns a reference to <code>this</code> for easy method chaining
3267     */
3268    public AuditEvent setEntity(List<AuditEventEntityComponent> theEntity) { 
3269      this.entity = theEntity;
3270      return this;
3271    }
3272
3273    public boolean hasEntity() { 
3274      if (this.entity == null)
3275        return false;
3276      for (AuditEventEntityComponent item : this.entity)
3277        if (!item.isEmpty())
3278          return true;
3279      return false;
3280    }
3281
3282    public AuditEventEntityComponent addEntity() { //3
3283      AuditEventEntityComponent t = new AuditEventEntityComponent();
3284      if (this.entity == null)
3285        this.entity = new ArrayList<AuditEventEntityComponent>();
3286      this.entity.add(t);
3287      return t;
3288    }
3289
3290    public AuditEvent addEntity(AuditEventEntityComponent t) { //3
3291      if (t == null)
3292        return this;
3293      if (this.entity == null)
3294        this.entity = new ArrayList<AuditEventEntityComponent>();
3295      this.entity.add(t);
3296      return this;
3297    }
3298
3299    /**
3300     * @return The first repetition of repeating field {@link #entity}, creating it if it does not already exist {3}
3301     */
3302    public AuditEventEntityComponent getEntityFirstRep() { 
3303      if (getEntity().isEmpty()) {
3304        addEntity();
3305      }
3306      return getEntity().get(0);
3307    }
3308
3309      protected void listChildren(List<Property> children) {
3310        super.listChildren(children);
3311        children.add(new Property("category", "CodeableConcept", "Classification of the type of event.", 0, java.lang.Integer.MAX_VALUE, category));
3312        children.add(new Property("code", "CodeableConcept", "Describes what happened. The most specific code for the event.", 0, 1, code));
3313        children.add(new Property("action", "code", "Indicator for type of action performed during the event that generated the audit.", 0, 1, action));
3314        children.add(new Property("severity", "code", "Indicates and enables segmentation of various severity including debugging from critical.", 0, 1, severity));
3315        children.add(new Property("occurred[x]", "Period|dateTime", "The time or period during which the activity occurred.", 0, 1, occurred));
3316        children.add(new Property("recorded", "instant", "The time when the event was recorded.", 0, 1, recorded));
3317        children.add(new Property("outcome", "", "Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.text.", 0, 1, outcome));
3318        children.add(new Property("authorization", "CodeableConcept", "The authorization (e.g., PurposeOfUse) that was used during the event being recorded.", 0, java.lang.Integer.MAX_VALUE, authorization));
3319        children.add(new Property("basedOn", "Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest|NutritionOrder|ServiceRequest|Task)", "Allows tracing of authorizatino for the events and tracking whether proposals/recommendations were acted upon.", 0, java.lang.Integer.MAX_VALUE, basedOn));
3320        children.add(new Property("patient", "Reference(Patient)", "The patient element is available to enable deterministic tracking of activities that involve the patient as the subject of the data used in an activity.", 0, 1, patient));
3321        children.add(new Property("encounter", "Reference(Encounter)", "This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests).", 0, 1, encounter));
3322        children.add(new Property("agent", "", "An actor taking an active role in the event or activity that is logged.", 0, java.lang.Integer.MAX_VALUE, agent));
3323        children.add(new Property("source", "", "The actor that is reporting the event.", 0, 1, source));
3324        children.add(new Property("entity", "", "Specific instances of data or objects that have been accessed.", 0, java.lang.Integer.MAX_VALUE, entity));
3325      }
3326
3327      @Override
3328      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3329        switch (_hash) {
3330        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "Classification of the type of event.", 0, java.lang.Integer.MAX_VALUE, category);
3331        case 3059181: /*code*/  return new Property("code", "CodeableConcept", "Describes what happened. The most specific code for the event.", 0, 1, code);
3332        case -1422950858: /*action*/  return new Property("action", "code", "Indicator for type of action performed during the event that generated the audit.", 0, 1, action);
3333        case 1478300413: /*severity*/  return new Property("severity", "code", "Indicates and enables segmentation of various severity including debugging from critical.", 0, 1, severity);
3334        case 784181563: /*occurred[x]*/  return new Property("occurred[x]", "Period|dateTime", "The time or period during which the activity occurred.", 0, 1, occurred);
3335        case 792816933: /*occurred*/  return new Property("occurred[x]", "Period|dateTime", "The time or period during which the activity occurred.", 0, 1, occurred);
3336        case 894082886: /*occurredPeriod*/  return new Property("occurred[x]", "Period", "The time or period during which the activity occurred.", 0, 1, occurred);
3337        case 1579027424: /*occurredDateTime*/  return new Property("occurred[x]", "dateTime", "The time or period during which the activity occurred.", 0, 1, occurred);
3338        case -799233872: /*recorded*/  return new Property("recorded", "instant", "The time when the event was recorded.", 0, 1, recorded);
3339        case -1106507950: /*outcome*/  return new Property("outcome", "", "Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.text.", 0, 1, outcome);
3340        case -1385570183: /*authorization*/  return new Property("authorization", "CodeableConcept", "The authorization (e.g., PurposeOfUse) that was used during the event being recorded.", 0, java.lang.Integer.MAX_VALUE, authorization);
3341        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest|NutritionOrder|ServiceRequest|Task)", "Allows tracing of authorizatino for the events and tracking whether proposals/recommendations were acted upon.", 0, java.lang.Integer.MAX_VALUE, basedOn);
3342        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "The patient element is available to enable deterministic tracking of activities that involve the patient as the subject of the data used in an activity.", 0, 1, patient);
3343        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests).", 0, 1, encounter);
3344        case 92750597: /*agent*/  return new Property("agent", "", "An actor taking an active role in the event or activity that is logged.", 0, java.lang.Integer.MAX_VALUE, agent);
3345        case -896505829: /*source*/  return new Property("source", "", "The actor that is reporting the event.", 0, 1, source);
3346        case -1298275357: /*entity*/  return new Property("entity", "", "Specific instances of data or objects that have been accessed.", 0, java.lang.Integer.MAX_VALUE, entity);
3347        default: return super.getNamedProperty(_hash, _name, _checkValid);
3348        }
3349
3350      }
3351
3352      @Override
3353      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3354        switch (hash) {
3355        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
3356        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
3357        case -1422950858: /*action*/ return this.action == null ? new Base[0] : new Base[] {this.action}; // Enumeration<AuditEventAction>
3358        case 1478300413: /*severity*/ return this.severity == null ? new Base[0] : new Base[] {this.severity}; // Enumeration<AuditEventSeverity>
3359        case 792816933: /*occurred*/ return this.occurred == null ? new Base[0] : new Base[] {this.occurred}; // DataType
3360        case -799233872: /*recorded*/ return this.recorded == null ? new Base[0] : new Base[] {this.recorded}; // InstantType
3361        case -1106507950: /*outcome*/ return this.outcome == null ? new Base[0] : new Base[] {this.outcome}; // AuditEventOutcomeComponent
3362        case -1385570183: /*authorization*/ return this.authorization == null ? new Base[0] : this.authorization.toArray(new Base[this.authorization.size()]); // CodeableConcept
3363        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
3364        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
3365        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
3366        case 92750597: /*agent*/ return this.agent == null ? new Base[0] : this.agent.toArray(new Base[this.agent.size()]); // AuditEventAgentComponent
3367        case -896505829: /*source*/ return this.source == null ? new Base[0] : new Base[] {this.source}; // AuditEventSourceComponent
3368        case -1298275357: /*entity*/ return this.entity == null ? new Base[0] : this.entity.toArray(new Base[this.entity.size()]); // AuditEventEntityComponent
3369        default: return super.getProperty(hash, name, checkValid);
3370        }
3371
3372      }
3373
3374      @Override
3375      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3376        switch (hash) {
3377        case 50511102: // category
3378          this.getCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3379          return value;
3380        case 3059181: // code
3381          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3382          return value;
3383        case -1422950858: // action
3384          value = new AuditEventActionEnumFactory().fromType(TypeConvertor.castToCode(value));
3385          this.action = (Enumeration) value; // Enumeration<AuditEventAction>
3386          return value;
3387        case 1478300413: // severity
3388          value = new AuditEventSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
3389          this.severity = (Enumeration) value; // Enumeration<AuditEventSeverity>
3390          return value;
3391        case 792816933: // occurred
3392          this.occurred = TypeConvertor.castToType(value); // DataType
3393          return value;
3394        case -799233872: // recorded
3395          this.recorded = TypeConvertor.castToInstant(value); // InstantType
3396          return value;
3397        case -1106507950: // outcome
3398          this.outcome = (AuditEventOutcomeComponent) value; // AuditEventOutcomeComponent
3399          return value;
3400        case -1385570183: // authorization
3401          this.getAuthorization().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
3402          return value;
3403        case -332612366: // basedOn
3404          this.getBasedOn().add(TypeConvertor.castToReference(value)); // Reference
3405          return value;
3406        case -791418107: // patient
3407          this.patient = TypeConvertor.castToReference(value); // Reference
3408          return value;
3409        case 1524132147: // encounter
3410          this.encounter = TypeConvertor.castToReference(value); // Reference
3411          return value;
3412        case 92750597: // agent
3413          this.getAgent().add((AuditEventAgentComponent) value); // AuditEventAgentComponent
3414          return value;
3415        case -896505829: // source
3416          this.source = (AuditEventSourceComponent) value; // AuditEventSourceComponent
3417          return value;
3418        case -1298275357: // entity
3419          this.getEntity().add((AuditEventEntityComponent) value); // AuditEventEntityComponent
3420          return value;
3421        default: return super.setProperty(hash, name, value);
3422        }
3423
3424      }
3425
3426      @Override
3427      public Base setProperty(String name, Base value) throws FHIRException {
3428        if (name.equals("category")) {
3429          this.getCategory().add(TypeConvertor.castToCodeableConcept(value));
3430        } else if (name.equals("code")) {
3431          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3432        } else if (name.equals("action")) {
3433          value = new AuditEventActionEnumFactory().fromType(TypeConvertor.castToCode(value));
3434          this.action = (Enumeration) value; // Enumeration<AuditEventAction>
3435        } else if (name.equals("severity")) {
3436          value = new AuditEventSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
3437          this.severity = (Enumeration) value; // Enumeration<AuditEventSeverity>
3438        } else if (name.equals("occurred[x]")) {
3439          this.occurred = TypeConvertor.castToType(value); // DataType
3440        } else if (name.equals("recorded")) {
3441          this.recorded = TypeConvertor.castToInstant(value); // InstantType
3442        } else if (name.equals("outcome")) {
3443          this.outcome = (AuditEventOutcomeComponent) value; // AuditEventOutcomeComponent
3444        } else if (name.equals("authorization")) {
3445          this.getAuthorization().add(TypeConvertor.castToCodeableConcept(value));
3446        } else if (name.equals("basedOn")) {
3447          this.getBasedOn().add(TypeConvertor.castToReference(value));
3448        } else if (name.equals("patient")) {
3449          this.patient = TypeConvertor.castToReference(value); // Reference
3450        } else if (name.equals("encounter")) {
3451          this.encounter = TypeConvertor.castToReference(value); // Reference
3452        } else if (name.equals("agent")) {
3453          this.getAgent().add((AuditEventAgentComponent) value);
3454        } else if (name.equals("source")) {
3455          this.source = (AuditEventSourceComponent) value; // AuditEventSourceComponent
3456        } else if (name.equals("entity")) {
3457          this.getEntity().add((AuditEventEntityComponent) value);
3458        } else
3459          return super.setProperty(name, value);
3460        return value;
3461      }
3462
3463  @Override
3464  public void removeChild(String name, Base value) throws FHIRException {
3465        if (name.equals("category")) {
3466          this.getCategory().remove(value);
3467        } else if (name.equals("code")) {
3468          this.code = null;
3469        } else if (name.equals("action")) {
3470          value = new AuditEventActionEnumFactory().fromType(TypeConvertor.castToCode(value));
3471          this.action = (Enumeration) value; // Enumeration<AuditEventAction>
3472        } else if (name.equals("severity")) {
3473          value = new AuditEventSeverityEnumFactory().fromType(TypeConvertor.castToCode(value));
3474          this.severity = (Enumeration) value; // Enumeration<AuditEventSeverity>
3475        } else if (name.equals("occurred[x]")) {
3476          this.occurred = null;
3477        } else if (name.equals("recorded")) {
3478          this.recorded = null;
3479        } else if (name.equals("outcome")) {
3480          this.outcome = (AuditEventOutcomeComponent) value; // AuditEventOutcomeComponent
3481        } else if (name.equals("authorization")) {
3482          this.getAuthorization().remove(value);
3483        } else if (name.equals("basedOn")) {
3484          this.getBasedOn().remove(value);
3485        } else if (name.equals("patient")) {
3486          this.patient = null;
3487        } else if (name.equals("encounter")) {
3488          this.encounter = null;
3489        } else if (name.equals("agent")) {
3490          this.getAgent().remove((AuditEventAgentComponent) value);
3491        } else if (name.equals("source")) {
3492          this.source = (AuditEventSourceComponent) value; // AuditEventSourceComponent
3493        } else if (name.equals("entity")) {
3494          this.getEntity().remove((AuditEventEntityComponent) value);
3495        } else
3496          super.removeChild(name, value);
3497        
3498      }
3499
3500      @Override
3501      public Base makeProperty(int hash, String name) throws FHIRException {
3502        switch (hash) {
3503        case 50511102:  return addCategory(); 
3504        case 3059181:  return getCode();
3505        case -1422950858:  return getActionElement();
3506        case 1478300413:  return getSeverityElement();
3507        case 784181563:  return getOccurred();
3508        case 792816933:  return getOccurred();
3509        case -799233872:  return getRecordedElement();
3510        case -1106507950:  return getOutcome();
3511        case -1385570183:  return addAuthorization(); 
3512        case -332612366:  return addBasedOn(); 
3513        case -791418107:  return getPatient();
3514        case 1524132147:  return getEncounter();
3515        case 92750597:  return addAgent(); 
3516        case -896505829:  return getSource();
3517        case -1298275357:  return addEntity(); 
3518        default: return super.makeProperty(hash, name);
3519        }
3520
3521      }
3522
3523      @Override
3524      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3525        switch (hash) {
3526        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
3527        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
3528        case -1422950858: /*action*/ return new String[] {"code"};
3529        case 1478300413: /*severity*/ return new String[] {"code"};
3530        case 792816933: /*occurred*/ return new String[] {"Period", "dateTime"};
3531        case -799233872: /*recorded*/ return new String[] {"instant"};
3532        case -1106507950: /*outcome*/ return new String[] {};
3533        case -1385570183: /*authorization*/ return new String[] {"CodeableConcept"};
3534        case -332612366: /*basedOn*/ return new String[] {"Reference"};
3535        case -791418107: /*patient*/ return new String[] {"Reference"};
3536        case 1524132147: /*encounter*/ return new String[] {"Reference"};
3537        case 92750597: /*agent*/ return new String[] {};
3538        case -896505829: /*source*/ return new String[] {};
3539        case -1298275357: /*entity*/ return new String[] {};
3540        default: return super.getTypesForProperty(hash, name);
3541        }
3542
3543      }
3544
3545      @Override
3546      public Base addChild(String name) throws FHIRException {
3547        if (name.equals("category")) {
3548          return addCategory();
3549        }
3550        else if (name.equals("code")) {
3551          this.code = new CodeableConcept();
3552          return this.code;
3553        }
3554        else if (name.equals("action")) {
3555          throw new FHIRException("Cannot call addChild on a singleton property AuditEvent.action");
3556        }
3557        else if (name.equals("severity")) {
3558          throw new FHIRException("Cannot call addChild on a singleton property AuditEvent.severity");
3559        }
3560        else if (name.equals("occurredPeriod")) {
3561          this.occurred = new Period();
3562          return this.occurred;
3563        }
3564        else if (name.equals("occurredDateTime")) {
3565          this.occurred = new DateTimeType();
3566          return this.occurred;
3567        }
3568        else if (name.equals("recorded")) {
3569          throw new FHIRException("Cannot call addChild on a singleton property AuditEvent.recorded");
3570        }
3571        else if (name.equals("outcome")) {
3572          this.outcome = new AuditEventOutcomeComponent();
3573          return this.outcome;
3574        }
3575        else if (name.equals("authorization")) {
3576          return addAuthorization();
3577        }
3578        else if (name.equals("basedOn")) {
3579          return addBasedOn();
3580        }
3581        else if (name.equals("patient")) {
3582          this.patient = new Reference();
3583          return this.patient;
3584        }
3585        else if (name.equals("encounter")) {
3586          this.encounter = new Reference();
3587          return this.encounter;
3588        }
3589        else if (name.equals("agent")) {
3590          return addAgent();
3591        }
3592        else if (name.equals("source")) {
3593          this.source = new AuditEventSourceComponent();
3594          return this.source;
3595        }
3596        else if (name.equals("entity")) {
3597          return addEntity();
3598        }
3599        else
3600          return super.addChild(name);
3601      }
3602
3603  public String fhirType() {
3604    return "AuditEvent";
3605
3606  }
3607
3608      public AuditEvent copy() {
3609        AuditEvent dst = new AuditEvent();
3610        copyValues(dst);
3611        return dst;
3612      }
3613
3614      public void copyValues(AuditEvent dst) {
3615        super.copyValues(dst);
3616        if (category != null) {
3617          dst.category = new ArrayList<CodeableConcept>();
3618          for (CodeableConcept i : category)
3619            dst.category.add(i.copy());
3620        };
3621        dst.code = code == null ? null : code.copy();
3622        dst.action = action == null ? null : action.copy();
3623        dst.severity = severity == null ? null : severity.copy();
3624        dst.occurred = occurred == null ? null : occurred.copy();
3625        dst.recorded = recorded == null ? null : recorded.copy();
3626        dst.outcome = outcome == null ? null : outcome.copy();
3627        if (authorization != null) {
3628          dst.authorization = new ArrayList<CodeableConcept>();
3629          for (CodeableConcept i : authorization)
3630            dst.authorization.add(i.copy());
3631        };
3632        if (basedOn != null) {
3633          dst.basedOn = new ArrayList<Reference>();
3634          for (Reference i : basedOn)
3635            dst.basedOn.add(i.copy());
3636        };
3637        dst.patient = patient == null ? null : patient.copy();
3638        dst.encounter = encounter == null ? null : encounter.copy();
3639        if (agent != null) {
3640          dst.agent = new ArrayList<AuditEventAgentComponent>();
3641          for (AuditEventAgentComponent i : agent)
3642            dst.agent.add(i.copy());
3643        };
3644        dst.source = source == null ? null : source.copy();
3645        if (entity != null) {
3646          dst.entity = new ArrayList<AuditEventEntityComponent>();
3647          for (AuditEventEntityComponent i : entity)
3648            dst.entity.add(i.copy());
3649        };
3650      }
3651
3652      protected AuditEvent typedCopy() {
3653        return copy();
3654      }
3655
3656      @Override
3657      public boolean equalsDeep(Base other_) {
3658        if (!super.equalsDeep(other_))
3659          return false;
3660        if (!(other_ instanceof AuditEvent))
3661          return false;
3662        AuditEvent o = (AuditEvent) other_;
3663        return compareDeep(category, o.category, true) && compareDeep(code, o.code, true) && compareDeep(action, o.action, true)
3664           && compareDeep(severity, o.severity, true) && compareDeep(occurred, o.occurred, true) && compareDeep(recorded, o.recorded, true)
3665           && compareDeep(outcome, o.outcome, true) && compareDeep(authorization, o.authorization, true) && compareDeep(basedOn, o.basedOn, true)
3666           && compareDeep(patient, o.patient, true) && compareDeep(encounter, o.encounter, true) && compareDeep(agent, o.agent, true)
3667           && compareDeep(source, o.source, true) && compareDeep(entity, o.entity, true);
3668      }
3669
3670      @Override
3671      public boolean equalsShallow(Base other_) {
3672        if (!super.equalsShallow(other_))
3673          return false;
3674        if (!(other_ instanceof AuditEvent))
3675          return false;
3676        AuditEvent o = (AuditEvent) other_;
3677        return compareValues(action, o.action, true) && compareValues(severity, o.severity, true) && compareValues(recorded, o.recorded, true)
3678          ;
3679      }
3680
3681      public boolean isEmpty() {
3682        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(category, code, action, severity
3683          , occurred, recorded, outcome, authorization, basedOn, patient, encounter, agent
3684          , source, entity);
3685      }
3686
3687  @Override
3688  public ResourceType getResourceType() {
3689    return ResourceType.AuditEvent;
3690   }
3691
3692 /**
3693   * Search parameter: <b>action</b>
3694   * <p>
3695   * Description: <b>Type of action performed during the event</b><br>
3696   * Type: <b>token</b><br>
3697   * Path: <b>AuditEvent.action</b><br>
3698   * </p>
3699   */
3700  @SearchParamDefinition(name="action", path="AuditEvent.action", description="Type of action performed during the event", type="token" )
3701  public static final String SP_ACTION = "action";
3702 /**
3703   * <b>Fluent Client</b> search parameter constant for <b>action</b>
3704   * <p>
3705   * Description: <b>Type of action performed during the event</b><br>
3706   * Type: <b>token</b><br>
3707   * Path: <b>AuditEvent.action</b><br>
3708   * </p>
3709   */
3710  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTION);
3711
3712 /**
3713   * Search parameter: <b>agent-role</b>
3714   * <p>
3715   * Description: <b>Agent role in the event</b><br>
3716   * Type: <b>token</b><br>
3717   * Path: <b>AuditEvent.agent.role</b><br>
3718   * </p>
3719   */
3720  @SearchParamDefinition(name="agent-role", path="AuditEvent.agent.role", description="Agent role in the event", type="token" )
3721  public static final String SP_AGENT_ROLE = "agent-role";
3722 /**
3723   * <b>Fluent Client</b> search parameter constant for <b>agent-role</b>
3724   * <p>
3725   * Description: <b>Agent role in the event</b><br>
3726   * Type: <b>token</b><br>
3727   * Path: <b>AuditEvent.agent.role</b><br>
3728   * </p>
3729   */
3730  public static final ca.uhn.fhir.rest.gclient.TokenClientParam AGENT_ROLE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_AGENT_ROLE);
3731
3732 /**
3733   * Search parameter: <b>agent</b>
3734   * <p>
3735   * Description: <b>Identifier of who</b><br>
3736   * Type: <b>reference</b><br>
3737   * Path: <b>AuditEvent.agent.who</b><br>
3738   * </p>
3739   */
3740  @SearchParamDefinition(name="agent", path="AuditEvent.agent.who", description="Identifier of who", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={CareTeam.class, Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
3741  public static final String SP_AGENT = "agent";
3742 /**
3743   * <b>Fluent Client</b> search parameter constant for <b>agent</b>
3744   * <p>
3745   * Description: <b>Identifier of who</b><br>
3746   * Type: <b>reference</b><br>
3747   * Path: <b>AuditEvent.agent.who</b><br>
3748   * </p>
3749   */
3750  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam AGENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_AGENT);
3751
3752/**
3753   * Constant for fluent queries to be used to add include statements. Specifies
3754   * the path value of "<b>AuditEvent:agent</b>".
3755   */
3756  public static final ca.uhn.fhir.model.api.Include INCLUDE_AGENT = new ca.uhn.fhir.model.api.Include("AuditEvent:agent").toLocked();
3757
3758 /**
3759   * Search parameter: <b>based-on</b>
3760   * <p>
3761   * Description: <b>Reference to the service request.</b><br>
3762   * Type: <b>reference</b><br>
3763   * Path: <b>AuditEvent.basedOn</b><br>
3764   * </p>
3765   */
3766  @SearchParamDefinition(name="based-on", path="AuditEvent.basedOn", description="Reference to the service request.", type="reference", target={CarePlan.class, DeviceRequest.class, ImmunizationRecommendation.class, MedicationRequest.class, NutritionOrder.class, ServiceRequest.class, Task.class } )
3767  public static final String SP_BASED_ON = "based-on";
3768 /**
3769   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
3770   * <p>
3771   * Description: <b>Reference to the service request.</b><br>
3772   * Type: <b>reference</b><br>
3773   * Path: <b>AuditEvent.basedOn</b><br>
3774   * </p>
3775   */
3776  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
3777
3778/**
3779   * Constant for fluent queries to be used to add include statements. Specifies
3780   * the path value of "<b>AuditEvent:based-on</b>".
3781   */
3782  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("AuditEvent:based-on").toLocked();
3783
3784 /**
3785   * Search parameter: <b>category</b>
3786   * <p>
3787   * Description: <b>Category of event</b><br>
3788   * Type: <b>token</b><br>
3789   * Path: <b>AuditEvent.category</b><br>
3790   * </p>
3791   */
3792  @SearchParamDefinition(name="category", path="AuditEvent.category", description="Category of event", type="token" )
3793  public static final String SP_CATEGORY = "category";
3794 /**
3795   * <b>Fluent Client</b> search parameter constant for <b>category</b>
3796   * <p>
3797   * Description: <b>Category of event</b><br>
3798   * Type: <b>token</b><br>
3799   * Path: <b>AuditEvent.category</b><br>
3800   * </p>
3801   */
3802  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
3803
3804 /**
3805   * Search parameter: <b>entity-role</b>
3806   * <p>
3807   * Description: <b>What role the entity played</b><br>
3808   * Type: <b>token</b><br>
3809   * Path: <b>AuditEvent.entity.role</b><br>
3810   * </p>
3811   */
3812  @SearchParamDefinition(name="entity-role", path="AuditEvent.entity.role", description="What role the entity played", type="token" )
3813  public static final String SP_ENTITY_ROLE = "entity-role";
3814 /**
3815   * <b>Fluent Client</b> search parameter constant for <b>entity-role</b>
3816   * <p>
3817   * Description: <b>What role the entity played</b><br>
3818   * Type: <b>token</b><br>
3819   * Path: <b>AuditEvent.entity.role</b><br>
3820   * </p>
3821   */
3822  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ENTITY_ROLE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ENTITY_ROLE);
3823
3824 /**
3825   * Search parameter: <b>entity</b>
3826   * <p>
3827   * Description: <b>Specific instance of resource</b><br>
3828   * Type: <b>reference</b><br>
3829   * Path: <b>AuditEvent.entity.what</b><br>
3830   * </p>
3831   */
3832  @SearchParamDefinition(name="entity", path="AuditEvent.entity.what", description="Specific instance of resource", 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, BiologicallyDerivedProductDispense.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, DeviceAssociation.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentReference.class, Encounter.class, EncounterHistory.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, InventoryItem.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, MedicationStatement.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, Parameters.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, TestPlan.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3833  public static final String SP_ENTITY = "entity";
3834 /**
3835   * <b>Fluent Client</b> search parameter constant for <b>entity</b>
3836   * <p>
3837   * Description: <b>Specific instance of resource</b><br>
3838   * Type: <b>reference</b><br>
3839   * Path: <b>AuditEvent.entity.what</b><br>
3840   * </p>
3841   */
3842  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENTITY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENTITY);
3843
3844/**
3845   * Constant for fluent queries to be used to add include statements. Specifies
3846   * the path value of "<b>AuditEvent:entity</b>".
3847   */
3848  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENTITY = new ca.uhn.fhir.model.api.Include("AuditEvent:entity").toLocked();
3849
3850 /**
3851   * Search parameter: <b>outcome</b>
3852   * <p>
3853   * Description: <b>Whether the event succeeded or failed</b><br>
3854   * Type: <b>token</b><br>
3855   * Path: <b>AuditEvent.outcome.code</b><br>
3856   * </p>
3857   */
3858  @SearchParamDefinition(name="outcome", path="AuditEvent.outcome.code", description="Whether the event succeeded or failed", type="token" )
3859  public static final String SP_OUTCOME = "outcome";
3860 /**
3861   * <b>Fluent Client</b> search parameter constant for <b>outcome</b>
3862   * <p>
3863   * Description: <b>Whether the event succeeded or failed</b><br>
3864   * Type: <b>token</b><br>
3865   * Path: <b>AuditEvent.outcome.code</b><br>
3866   * </p>
3867   */
3868  public static final ca.uhn.fhir.rest.gclient.TokenClientParam OUTCOME = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_OUTCOME);
3869
3870 /**
3871   * Search parameter: <b>policy</b>
3872   * <p>
3873   * Description: <b>Policy that authorized event</b><br>
3874   * Type: <b>uri</b><br>
3875   * Path: <b>AuditEvent.agent.policy</b><br>
3876   * </p>
3877   */
3878  @SearchParamDefinition(name="policy", path="AuditEvent.agent.policy", description="Policy that authorized event", type="uri" )
3879  public static final String SP_POLICY = "policy";
3880 /**
3881   * <b>Fluent Client</b> search parameter constant for <b>policy</b>
3882   * <p>
3883   * Description: <b>Policy that authorized event</b><br>
3884   * Type: <b>uri</b><br>
3885   * Path: <b>AuditEvent.agent.policy</b><br>
3886   * </p>
3887   */
3888  public static final ca.uhn.fhir.rest.gclient.UriClientParam POLICY = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_POLICY);
3889
3890 /**
3891   * Search parameter: <b>purpose</b>
3892   * <p>
3893   * Description: <b>The authorization (purposeOfUse) of the event</b><br>
3894   * Type: <b>token</b><br>
3895   * Path: <b>AuditEvent.authorization | AuditEvent.agent.authorization</b><br>
3896   * </p>
3897   */
3898  @SearchParamDefinition(name="purpose", path="AuditEvent.authorization | AuditEvent.agent.authorization", description="The authorization (purposeOfUse) of the event", type="token" )
3899  public static final String SP_PURPOSE = "purpose";
3900 /**
3901   * <b>Fluent Client</b> search parameter constant for <b>purpose</b>
3902   * <p>
3903   * Description: <b>The authorization (purposeOfUse) of the event</b><br>
3904   * Type: <b>token</b><br>
3905   * Path: <b>AuditEvent.authorization | AuditEvent.agent.authorization</b><br>
3906   * </p>
3907   */
3908  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PURPOSE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PURPOSE);
3909
3910 /**
3911   * Search parameter: <b>source</b>
3912   * <p>
3913   * Description: <b>The identity of source detecting the event</b><br>
3914   * Type: <b>reference</b><br>
3915   * Path: <b>AuditEvent.source.observer</b><br>
3916   * </p>
3917   */
3918  @SearchParamDefinition(name="source", path="AuditEvent.source.observer", description="The identity of source detecting the event", type="reference", target={CareTeam.class, Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
3919  public static final String SP_SOURCE = "source";
3920 /**
3921   * <b>Fluent Client</b> search parameter constant for <b>source</b>
3922   * <p>
3923   * Description: <b>The identity of source detecting the event</b><br>
3924   * Type: <b>reference</b><br>
3925   * Path: <b>AuditEvent.source.observer</b><br>
3926   * </p>
3927   */
3928  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SOURCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SOURCE);
3929
3930/**
3931   * Constant for fluent queries to be used to add include statements. Specifies
3932   * the path value of "<b>AuditEvent:source</b>".
3933   */
3934  public static final ca.uhn.fhir.model.api.Include INCLUDE_SOURCE = new ca.uhn.fhir.model.api.Include("AuditEvent:source").toLocked();
3935
3936 /**
3937   * Search parameter: <b>code</b>
3938   * <p>
3939   * Description: <b>Multiple Resources: 
3940
3941* [AdverseEvent](adverseevent.html): Event or incident that occurred or was averted
3942* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance
3943* [AuditEvent](auditevent.html): More specific code for the event
3944* [Basic](basic.html): Kind of Resource
3945* [ChargeItem](chargeitem.html): A code that identifies the charge, like a billing code
3946* [Condition](condition.html): Code for the condition
3947* [DetectedIssue](detectedissue.html): Issue Type, e.g. drug-drug, duplicate therapy, etc.
3948* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered
3949* [DiagnosticReport](diagnosticreport.html): The code for the report, as opposed to codes for the atomic results, which are the names on the observation resource referred to from the result
3950* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code
3951* [ImagingSelection](imagingselection.html): The imaging selection status
3952* [List](list.html): What the purpose of this list is
3953* [Medication](medication.html): Returns medications for a specific code
3954* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code
3955* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code
3956* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code
3957* [MedicationStatement](medicationstatement.html): Return statements of this medication code
3958* [NutritionIntake](nutritionintake.html): Returns statements of this code of NutritionIntake
3959* [Observation](observation.html): The code of the observation type
3960* [Procedure](procedure.html): A code to identify a  procedure
3961* [RequestOrchestration](requestorchestration.html): The code of the request orchestration
3962* [Task](task.html): Search by task code
3963</b><br>
3964   * Type: <b>token</b><br>
3965   * Path: <b>AdverseEvent.code | AllergyIntolerance.code | AllergyIntolerance.reaction.substance | AuditEvent.code | Basic.code | ChargeItem.code | Condition.code | DetectedIssue.code | DeviceRequest.code.concept | DiagnosticReport.code | FamilyMemberHistory.condition.code | ImagingSelection.status | List.code | Medication.code | MedicationAdministration.medication.concept | MedicationDispense.medication.concept | MedicationRequest.medication.concept | MedicationStatement.medication.concept | NutritionIntake.code | Observation.code | Procedure.code | RequestOrchestration.code | Task.code</b><br>
3966   * </p>
3967   */
3968  @SearchParamDefinition(name="code", path="AdverseEvent.code | AllergyIntolerance.code | AllergyIntolerance.reaction.substance | AuditEvent.code | Basic.code | ChargeItem.code | Condition.code | DetectedIssue.code | DeviceRequest.code.concept | DiagnosticReport.code | FamilyMemberHistory.condition.code | ImagingSelection.status | List.code | Medication.code | MedicationAdministration.medication.concept | MedicationDispense.medication.concept | MedicationRequest.medication.concept | MedicationStatement.medication.concept | NutritionIntake.code | Observation.code | Procedure.code | RequestOrchestration.code | Task.code", description="Multiple Resources: \r\n\r\n* [AdverseEvent](adverseevent.html): Event or incident that occurred or was averted\r\n* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance\r\n* [AuditEvent](auditevent.html): More specific code for the event\r\n* [Basic](basic.html): Kind of Resource\r\n* [ChargeItem](chargeitem.html): A code that identifies the charge, like a billing code\r\n* [Condition](condition.html): Code for the condition\r\n* [DetectedIssue](detectedissue.html): Issue Type, e.g. drug-drug, duplicate therapy, etc.\r\n* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered\r\n* [DiagnosticReport](diagnosticreport.html): The code for the report, as opposed to codes for the atomic results, which are the names on the observation resource referred to from the result\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code\r\n* [ImagingSelection](imagingselection.html): The imaging selection status\r\n* [List](list.html): What the purpose of this list is\r\n* [Medication](medication.html): Returns medications for a specific code\r\n* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code\r\n* [MedicationStatement](medicationstatement.html): Return statements of this medication code\r\n* [NutritionIntake](nutritionintake.html): Returns statements of this code of NutritionIntake\r\n* [Observation](observation.html): The code of the observation type\r\n* [Procedure](procedure.html): A code to identify a  procedure\r\n* [RequestOrchestration](requestorchestration.html): The code of the request orchestration\r\n* [Task](task.html): Search by task code\r\n", type="token" )
3969  public static final String SP_CODE = "code";
3970 /**
3971   * <b>Fluent Client</b> search parameter constant for <b>code</b>
3972   * <p>
3973   * Description: <b>Multiple Resources: 
3974
3975* [AdverseEvent](adverseevent.html): Event or incident that occurred or was averted
3976* [AllergyIntolerance](allergyintolerance.html): Code that identifies the allergy or intolerance
3977* [AuditEvent](auditevent.html): More specific code for the event
3978* [Basic](basic.html): Kind of Resource
3979* [ChargeItem](chargeitem.html): A code that identifies the charge, like a billing code
3980* [Condition](condition.html): Code for the condition
3981* [DetectedIssue](detectedissue.html): Issue Type, e.g. drug-drug, duplicate therapy, etc.
3982* [DeviceRequest](devicerequest.html): Code for what is being requested/ordered
3983* [DiagnosticReport](diagnosticreport.html): The code for the report, as opposed to codes for the atomic results, which are the names on the observation resource referred to from the result
3984* [FamilyMemberHistory](familymemberhistory.html): A search by a condition code
3985* [ImagingSelection](imagingselection.html): The imaging selection status
3986* [List](list.html): What the purpose of this list is
3987* [Medication](medication.html): Returns medications for a specific code
3988* [MedicationAdministration](medicationadministration.html): Return administrations of this medication code
3989* [MedicationDispense](medicationdispense.html): Returns dispenses of this medicine code
3990* [MedicationRequest](medicationrequest.html): Return prescriptions of this medication code
3991* [MedicationStatement](medicationstatement.html): Return statements of this medication code
3992* [NutritionIntake](nutritionintake.html): Returns statements of this code of NutritionIntake
3993* [Observation](observation.html): The code of the observation type
3994* [Procedure](procedure.html): A code to identify a  procedure
3995* [RequestOrchestration](requestorchestration.html): The code of the request orchestration
3996* [Task](task.html): Search by task code
3997</b><br>
3998   * Type: <b>token</b><br>
3999   * Path: <b>AdverseEvent.code | AllergyIntolerance.code | AllergyIntolerance.reaction.substance | AuditEvent.code | Basic.code | ChargeItem.code | Condition.code | DetectedIssue.code | DeviceRequest.code.concept | DiagnosticReport.code | FamilyMemberHistory.condition.code | ImagingSelection.status | List.code | Medication.code | MedicationAdministration.medication.concept | MedicationDispense.medication.concept | MedicationRequest.medication.concept | MedicationStatement.medication.concept | NutritionIntake.code | Observation.code | Procedure.code | RequestOrchestration.code | Task.code</b><br>
4000   * </p>
4001   */
4002  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
4003
4004 /**
4005   * Search parameter: <b>date</b>
4006   * <p>
4007   * Description: <b>Multiple Resources: 
4008
4009* [AdverseEvent](adverseevent.html): When the event occurred
4010* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
4011* [Appointment](appointment.html): Appointment date/time.
4012* [AuditEvent](auditevent.html): Time when the event was recorded
4013* [CarePlan](careplan.html): Time period plan covers
4014* [CareTeam](careteam.html): A date within the coverage time period.
4015* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
4016* [Composition](composition.html): Composition editing time
4017* [Consent](consent.html): When consent was agreed to
4018* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
4019* [DocumentReference](documentreference.html): When this document reference was created
4020* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
4021* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
4022* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
4023* [Flag](flag.html): Time period when flag is active
4024* [Immunization](immunization.html): Vaccination  (non)-Administration Date
4025* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated
4026* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created
4027* [Invoice](invoice.html): Invoice date / posting date
4028* [List](list.html): When the list was prepared
4029* [MeasureReport](measurereport.html): The date of the measure report
4030* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication
4031* [Observation](observation.html): Clinically relevant time/time-period for observation
4032* [Procedure](procedure.html): When the procedure occurred or is occurring
4033* [ResearchSubject](researchsubject.html): Start and end of participation
4034* [RiskAssessment](riskassessment.html): When was assessment made?
4035* [SupplyRequest](supplyrequest.html): When the request was made
4036</b><br>
4037   * Type: <b>date</b><br>
4038   * Path: <b>AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn</b><br>
4039   * </p>
4040   */
4041  @SearchParamDefinition(name="date", path="AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn", description="Multiple Resources: \r\n\r\n* [AdverseEvent](adverseevent.html): When the event occurred\r\n* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded\r\n* [Appointment](appointment.html): Appointment date/time.\r\n* [AuditEvent](auditevent.html): Time when the event 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* [DocumentReference](documentreference.html): When this document reference was created\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* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created\r\n* [Invoice](invoice.html): Invoice date / posting date\r\n* [List](list.html): When the list was prepared\r\n* [MeasureReport](measurereport.html): The date of the measure report\r\n* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication\r\n* [Observation](observation.html): Clinically relevant time/time-period for observation\r\n* [Procedure](procedure.html): When the procedure occurred or is occurring\r\n* [ResearchSubject](researchsubject.html): Start and end of participation\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
4042  public static final String SP_DATE = "date";
4043 /**
4044   * <b>Fluent Client</b> search parameter constant for <b>date</b>
4045   * <p>
4046   * Description: <b>Multiple Resources: 
4047
4048* [AdverseEvent](adverseevent.html): When the event occurred
4049* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
4050* [Appointment](appointment.html): Appointment date/time.
4051* [AuditEvent](auditevent.html): Time when the event was recorded
4052* [CarePlan](careplan.html): Time period plan covers
4053* [CareTeam](careteam.html): A date within the coverage time period.
4054* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
4055* [Composition](composition.html): Composition editing time
4056* [Consent](consent.html): When consent was agreed to
4057* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
4058* [DocumentReference](documentreference.html): When this document reference was created
4059* [Encounter](encounter.html): A date within the actualPeriod the Encounter lasted
4060* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
4061* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
4062* [Flag](flag.html): Time period when flag is active
4063* [Immunization](immunization.html): Vaccination  (non)-Administration Date
4064* [ImmunizationEvaluation](immunizationevaluation.html): Date the evaluation was generated
4065* [ImmunizationRecommendation](immunizationrecommendation.html): Date recommendation(s) created
4066* [Invoice](invoice.html): Invoice date / posting date
4067* [List](list.html): When the list was prepared
4068* [MeasureReport](measurereport.html): The date of the measure report
4069* [NutritionIntake](nutritionintake.html): Date when patient was taking (or not taking) the medication
4070* [Observation](observation.html): Clinically relevant time/time-period for observation
4071* [Procedure](procedure.html): When the procedure occurred or is occurring
4072* [ResearchSubject](researchsubject.html): Start and end of participation
4073* [RiskAssessment](riskassessment.html): When was assessment made?
4074* [SupplyRequest](supplyrequest.html): When the request was made
4075</b><br>
4076   * Type: <b>date</b><br>
4077   * Path: <b>AdverseEvent.occurrence.ofType(dateTime) | AdverseEvent.occurrence.ofType(Period) | AdverseEvent.occurrence.ofType(Timing) | AllergyIntolerance.recordedDate | (start | requestedPeriod.start).first() | AuditEvent.recorded | CarePlan.period | ClinicalImpression.date | Composition.date | Consent.date | DiagnosticReport.effective.ofType(dateTime) | DiagnosticReport.effective.ofType(Period) | DocumentReference.date | Encounter.actualPeriod | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | (Immunization.occurrence.ofType(dateTime)) | ImmunizationEvaluation.date | ImmunizationRecommendation.date | Invoice.date | List.date | MeasureReport.date | NutritionIntake.occurrence.ofType(dateTime) | NutritionIntake.occurrence.ofType(Period) | Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) | Procedure.occurrence.ofType(dateTime) | Procedure.occurrence.ofType(Period) | Procedure.occurrence.ofType(Timing) | ResearchSubject.period | (RiskAssessment.occurrence.ofType(dateTime)) | SupplyRequest.authoredOn</b><br>
4078   * </p>
4079   */
4080  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
4081
4082 /**
4083   * Search parameter: <b>encounter</b>
4084   * <p>
4085   * Description: <b>Multiple Resources: 
4086
4087* [AuditEvent](auditevent.html): Encounter related to the activity recorded in the AuditEvent
4088* [CarePlan](careplan.html): The Encounter during which this CarePlan was created
4089* [ChargeItem](chargeitem.html): Encounter associated with event
4090* [Claim](claim.html): Encounters associated with a billed line item
4091* [ClinicalImpression](clinicalimpression.html): The Encounter during which this ClinicalImpression was created
4092* [Communication](communication.html): The Encounter during which this Communication was created
4093* [CommunicationRequest](communicationrequest.html): The Encounter during which this CommunicationRequest was created
4094* [Composition](composition.html): Context of the Composition
4095* [Condition](condition.html): The Encounter during which this Condition was created
4096* [DeviceRequest](devicerequest.html): Encounter during which request was created
4097* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
4098* [EncounterHistory](encounterhistory.html): The Encounter associated with this set of history values
4099* [ExplanationOfBenefit](explanationofbenefit.html): Encounters associated with a billed line item
4100* [Flag](flag.html): Alert relevant during encounter
4101* [ImagingStudy](imagingstudy.html): The context of the study
4102* [List](list.html): Context in which list created
4103* [MedicationDispense](medicationdispense.html): Returns dispenses with a specific encounter
4104* [MedicationStatement](medicationstatement.html): Returns statements for a specific encounter
4105* [NutritionIntake](nutritionintake.html): Returns statements for a specific encounter
4106* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
4107* [Observation](observation.html): Encounter related to the observation
4108* [Procedure](procedure.html): The Encounter during which this Procedure was created
4109* [Provenance](provenance.html): Encounter related to the Provenance
4110* [QuestionnaireResponse](questionnaireresponse.html): Encounter associated with the questionnaire response
4111* [RequestOrchestration](requestorchestration.html): The encounter the request orchestration applies to
4112* [RiskAssessment](riskassessment.html): Where was assessment performed?
4113* [ServiceRequest](servicerequest.html): An encounter in which this request is made
4114* [Task](task.html): Search by encounter
4115* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
4116</b><br>
4117   * Type: <b>reference</b><br>
4118   * Path: <b>AuditEvent.encounter | CarePlan.encounter | ChargeItem.encounter | Claim.item.encounter | ClinicalImpression.encounter | Communication.encounter | CommunicationRequest.encounter | Composition.encounter | Condition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | EncounterHistory.encounter | ExplanationOfBenefit.item.encounter | Flag.encounter | ImagingStudy.encounter | List.encounter | MedicationDispense.encounter | MedicationStatement.encounter | NutritionIntake.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | Provenance.encounter | QuestionnaireResponse.encounter | RequestOrchestration.encounter | RiskAssessment.encounter | ServiceRequest.encounter | Task.encounter | VisionPrescription.encounter</b><br>
4119   * </p>
4120   */
4121  @SearchParamDefinition(name="encounter", path="AuditEvent.encounter | CarePlan.encounter | ChargeItem.encounter | Claim.item.encounter | ClinicalImpression.encounter | Communication.encounter | CommunicationRequest.encounter | Composition.encounter | Condition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | EncounterHistory.encounter | ExplanationOfBenefit.item.encounter | Flag.encounter | ImagingStudy.encounter | List.encounter | MedicationDispense.encounter | MedicationStatement.encounter | NutritionIntake.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | Provenance.encounter | QuestionnaireResponse.encounter | RequestOrchestration.encounter | RiskAssessment.encounter | ServiceRequest.encounter | Task.encounter | VisionPrescription.encounter", description="Multiple Resources: \r\n\r\n* [AuditEvent](auditevent.html): Encounter related to the activity recorded in the AuditEvent\r\n* [CarePlan](careplan.html): The Encounter during which this CarePlan was created\r\n* [ChargeItem](chargeitem.html): Encounter associated with event\r\n* [Claim](claim.html): Encounters associated with a billed line item\r\n* [ClinicalImpression](clinicalimpression.html): The Encounter during which this ClinicalImpression was created\r\n* [Communication](communication.html): The Encounter during which this Communication was created\r\n* [CommunicationRequest](communicationrequest.html): The Encounter during which this CommunicationRequest was created\r\n* [Composition](composition.html): Context of the Composition\r\n* [Condition](condition.html): The Encounter during which this Condition was created\r\n* [DeviceRequest](devicerequest.html): Encounter during which request was created\r\n* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made\r\n* [EncounterHistory](encounterhistory.html): The Encounter associated with this set of history values\r\n* [ExplanationOfBenefit](explanationofbenefit.html): Encounters associated with a billed line item\r\n* [Flag](flag.html): Alert relevant during encounter\r\n* [ImagingStudy](imagingstudy.html): The context of the study\r\n* [List](list.html): Context in which list created\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses with a specific encounter\r\n* [MedicationStatement](medicationstatement.html): Returns statements for a specific encounter\r\n* [NutritionIntake](nutritionintake.html): Returns statements for a specific encounter\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier\r\n* [Observation](observation.html): Encounter related to the observation\r\n* [Procedure](procedure.html): The Encounter during which this Procedure was created\r\n* [Provenance](provenance.html): Encounter related to the Provenance\r\n* [QuestionnaireResponse](questionnaireresponse.html): Encounter associated with the questionnaire response\r\n* [RequestOrchestration](requestorchestration.html): The encounter the request orchestration applies to\r\n* [RiskAssessment](riskassessment.html): Where was assessment performed?\r\n* [ServiceRequest](servicerequest.html): An encounter in which this request is made\r\n* [Task](task.html): Search by encounter\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier\r\n", type="reference", target={Encounter.class } )
4122  public static final String SP_ENCOUNTER = "encounter";
4123 /**
4124   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
4125   * <p>
4126   * Description: <b>Multiple Resources: 
4127
4128* [AuditEvent](auditevent.html): Encounter related to the activity recorded in the AuditEvent
4129* [CarePlan](careplan.html): The Encounter during which this CarePlan was created
4130* [ChargeItem](chargeitem.html): Encounter associated with event
4131* [Claim](claim.html): Encounters associated with a billed line item
4132* [ClinicalImpression](clinicalimpression.html): The Encounter during which this ClinicalImpression was created
4133* [Communication](communication.html): The Encounter during which this Communication was created
4134* [CommunicationRequest](communicationrequest.html): The Encounter during which this CommunicationRequest was created
4135* [Composition](composition.html): Context of the Composition
4136* [Condition](condition.html): The Encounter during which this Condition was created
4137* [DeviceRequest](devicerequest.html): Encounter during which request was created
4138* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
4139* [EncounterHistory](encounterhistory.html): The Encounter associated with this set of history values
4140* [ExplanationOfBenefit](explanationofbenefit.html): Encounters associated with a billed line item
4141* [Flag](flag.html): Alert relevant during encounter
4142* [ImagingStudy](imagingstudy.html): The context of the study
4143* [List](list.html): Context in which list created
4144* [MedicationDispense](medicationdispense.html): Returns dispenses with a specific encounter
4145* [MedicationStatement](medicationstatement.html): Returns statements for a specific encounter
4146* [NutritionIntake](nutritionintake.html): Returns statements for a specific encounter
4147* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
4148* [Observation](observation.html): Encounter related to the observation
4149* [Procedure](procedure.html): The Encounter during which this Procedure was created
4150* [Provenance](provenance.html): Encounter related to the Provenance
4151* [QuestionnaireResponse](questionnaireresponse.html): Encounter associated with the questionnaire response
4152* [RequestOrchestration](requestorchestration.html): The encounter the request orchestration applies to
4153* [RiskAssessment](riskassessment.html): Where was assessment performed?
4154* [ServiceRequest](servicerequest.html): An encounter in which this request is made
4155* [Task](task.html): Search by encounter
4156* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
4157</b><br>
4158   * Type: <b>reference</b><br>
4159   * Path: <b>AuditEvent.encounter | CarePlan.encounter | ChargeItem.encounter | Claim.item.encounter | ClinicalImpression.encounter | Communication.encounter | CommunicationRequest.encounter | Composition.encounter | Condition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | EncounterHistory.encounter | ExplanationOfBenefit.item.encounter | Flag.encounter | ImagingStudy.encounter | List.encounter | MedicationDispense.encounter | MedicationStatement.encounter | NutritionIntake.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | Provenance.encounter | QuestionnaireResponse.encounter | RequestOrchestration.encounter | RiskAssessment.encounter | ServiceRequest.encounter | Task.encounter | VisionPrescription.encounter</b><br>
4160   * </p>
4161   */
4162  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
4163
4164/**
4165   * Constant for fluent queries to be used to add include statements. Specifies
4166   * the path value of "<b>AuditEvent:encounter</b>".
4167   */
4168  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("AuditEvent:encounter").toLocked();
4169
4170 /**
4171   * Search parameter: <b>patient</b>
4172   * <p>
4173   * Description: <b>Multiple Resources: 
4174
4175* [Account](account.html): The entity that caused the expenses
4176* [AdverseEvent](adverseevent.html): Subject impacted by event
4177* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
4178* [Appointment](appointment.html): One of the individuals of the appointment is this patient
4179* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient
4180* [AuditEvent](auditevent.html): Where the activity involved patient data
4181* [Basic](basic.html): Identifies the focus of this resource
4182* [BodyStructure](bodystructure.html): Who this is about
4183* [CarePlan](careplan.html): Who the care plan is for
4184* [CareTeam](careteam.html): Who care team is for
4185* [ChargeItem](chargeitem.html): Individual service was done for/to
4186* [Claim](claim.html): Patient receiving the products or services
4187* [ClaimResponse](claimresponse.html): The subject of care
4188* [ClinicalImpression](clinicalimpression.html): Patient assessed
4189* [Communication](communication.html): Focus of message
4190* [CommunicationRequest](communicationrequest.html): Focus of message
4191* [Composition](composition.html): Who and/or what the composition is about
4192* [Condition](condition.html): Who has the condition?
4193* [Consent](consent.html): Who the consent applies to
4194* [Contract](contract.html): The identity of the subject of the contract (if a patient)
4195* [Coverage](coverage.html): Retrieve coverages for a patient
4196* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient
4197* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient
4198* [DetectedIssue](detectedissue.html): Associated patient
4199* [DeviceRequest](devicerequest.html): Individual the service is ordered for
4200* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
4201* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
4202* [DocumentReference](documentreference.html): Who/what is the subject of the document
4203* [Encounter](encounter.html): The patient present at the encounter
4204* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled
4205* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
4206* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient
4207* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
4208* [Flag](flag.html): The identity of a subject to list flags for
4209* [Goal](goal.html): Who this goal is intended for
4210* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results
4211* [ImagingSelection](imagingselection.html): Who the study is about
4212* [ImagingStudy](imagingstudy.html): Who the study is about
4213* [Immunization](immunization.html): The patient for the vaccination record
4214* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated
4215* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for
4216* [Invoice](invoice.html): Recipient(s) of goods and services
4217* [List](list.html): If all resources have the same subject
4218* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for
4219* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
4220* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
4221* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
4222* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
4223* [MolecularSequence](molecularsequence.html): The subject that the sequence is about
4224* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.
4225* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
4226* [Observation](observation.html): The subject that the observation is about (if patient)
4227* [Person](person.html): The Person links to this Patient
4228* [Procedure](procedure.html): Search by subject - a patient
4229* [Provenance](provenance.html): Where the activity involved patient data
4230* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response
4231* [RelatedPerson](relatedperson.html): The patient this related person is related to
4232* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations
4233* [ResearchSubject](researchsubject.html): Who or what is part of study
4234* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
4235* [ServiceRequest](servicerequest.html): Search by subject - a patient
4236* [Specimen](specimen.html): The patient the specimen comes from
4237* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
4238* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined
4239* [Task](task.html): Search by patient
4240* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
4241</b><br>
4242   * Type: <b>reference</b><br>
4243   * Path: <b>Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient</b><br>
4244   * </p>
4245   */
4246  @SearchParamDefinition(name="patient", path="Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient", description="Multiple Resources: \r\n\r\n* [Account](account.html): The entity that caused the expenses\r\n* [AdverseEvent](adverseevent.html): Subject impacted by event\r\n* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for\r\n* [Appointment](appointment.html): One of the individuals of the appointment is this patient\r\n* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient\r\n* [AuditEvent](auditevent.html): Where the activity involved patient data\r\n* [Basic](basic.html): Identifies the focus of this resource\r\n* [BodyStructure](bodystructure.html): Who this is about\r\n* [CarePlan](careplan.html): Who the care plan is for\r\n* [CareTeam](careteam.html): Who care team is for\r\n* [ChargeItem](chargeitem.html): Individual service was done for/to\r\n* [Claim](claim.html): Patient receiving the products or services\r\n* [ClaimResponse](claimresponse.html): The subject of care\r\n* [ClinicalImpression](clinicalimpression.html): Patient assessed\r\n* [Communication](communication.html): Focus of message\r\n* [CommunicationRequest](communicationrequest.html): Focus of message\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* [Contract](contract.html): The identity of the subject of the contract (if a patient)\r\n* [Coverage](coverage.html): Retrieve coverages for a patient\r\n* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient\r\n* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient\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* [DocumentReference](documentreference.html): Who/what is the subject of the document\r\n* [Encounter](encounter.html): The patient present at the encounter\r\n* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled\r\n* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care\r\n* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient\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* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results\r\n* [ImagingSelection](imagingselection.html): Who the study is about\r\n* [ImagingStudy](imagingstudy.html): Who the study is about\r\n* [Immunization](immunization.html): The patient for the vaccination record\r\n* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated\r\n* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for\r\n* [Invoice](invoice.html): Recipient(s) of goods and services\r\n* [List](list.html): If all resources have the same subject\r\n* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for\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* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.\r\n* [MolecularSequence](molecularsequence.html): The subject that the sequence is about\r\n* [NutritionIntake](nutritionintake.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* [Person](person.html): The Person links to this Patient\r\n* [Procedure](procedure.html): Search by subject - a patient\r\n* [Provenance](provenance.html): Where the activity involved patient data\r\n* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response\r\n* [RelatedPerson](relatedperson.html): The patient this related person is related to\r\n* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations\r\n* [ResearchSubject](researchsubject.html): Who or what is part of study\r\n* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?\r\n* [ServiceRequest](servicerequest.html): Search by subject - a patient\r\n* [Specimen](specimen.html): The patient the specimen comes from\r\n* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied\r\n* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined\r\n* [Task](task.html): Search by patient\r\n* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for\r\n", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Patient.class } )
4247  public static final String SP_PATIENT = "patient";
4248 /**
4249   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
4250   * <p>
4251   * Description: <b>Multiple Resources: 
4252
4253* [Account](account.html): The entity that caused the expenses
4254* [AdverseEvent](adverseevent.html): Subject impacted by event
4255* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
4256* [Appointment](appointment.html): One of the individuals of the appointment is this patient
4257* [AppointmentResponse](appointmentresponse.html): This Response is for this Patient
4258* [AuditEvent](auditevent.html): Where the activity involved patient data
4259* [Basic](basic.html): Identifies the focus of this resource
4260* [BodyStructure](bodystructure.html): Who this is about
4261* [CarePlan](careplan.html): Who the care plan is for
4262* [CareTeam](careteam.html): Who care team is for
4263* [ChargeItem](chargeitem.html): Individual service was done for/to
4264* [Claim](claim.html): Patient receiving the products or services
4265* [ClaimResponse](claimresponse.html): The subject of care
4266* [ClinicalImpression](clinicalimpression.html): Patient assessed
4267* [Communication](communication.html): Focus of message
4268* [CommunicationRequest](communicationrequest.html): Focus of message
4269* [Composition](composition.html): Who and/or what the composition is about
4270* [Condition](condition.html): Who has the condition?
4271* [Consent](consent.html): Who the consent applies to
4272* [Contract](contract.html): The identity of the subject of the contract (if a patient)
4273* [Coverage](coverage.html): Retrieve coverages for a patient
4274* [CoverageEligibilityRequest](coverageeligibilityrequest.html): The reference to the patient
4275* [CoverageEligibilityResponse](coverageeligibilityresponse.html): The reference to the patient
4276* [DetectedIssue](detectedissue.html): Associated patient
4277* [DeviceRequest](devicerequest.html): Individual the service is ordered for
4278* [DeviceUsage](deviceusage.html): Search by patient who used / uses the device
4279* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
4280* [DocumentReference](documentreference.html): Who/what is the subject of the document
4281* [Encounter](encounter.html): The patient present at the encounter
4282* [EnrollmentRequest](enrollmentrequest.html): The party to be enrolled
4283* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
4284* [ExplanationOfBenefit](explanationofbenefit.html): The reference to the patient
4285* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
4286* [Flag](flag.html): The identity of a subject to list flags for
4287* [Goal](goal.html): Who this goal is intended for
4288* [GuidanceResponse](guidanceresponse.html): The identity of a patient to search for guidance response results
4289* [ImagingSelection](imagingselection.html): Who the study is about
4290* [ImagingStudy](imagingstudy.html): Who the study is about
4291* [Immunization](immunization.html): The patient for the vaccination record
4292* [ImmunizationEvaluation](immunizationevaluation.html): The patient being evaluated
4293* [ImmunizationRecommendation](immunizationrecommendation.html): Who this profile is for
4294* [Invoice](invoice.html): Recipient(s) of goods and services
4295* [List](list.html): If all resources have the same subject
4296* [MeasureReport](measurereport.html): The identity of a patient to search for individual measure report results for
4297* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
4298* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
4299* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
4300* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
4301* [MolecularSequence](molecularsequence.html): The subject that the sequence is about
4302* [NutritionIntake](nutritionintake.html): Returns statements for a specific patient.
4303* [NutritionOrder](nutritionorder.html): The identity of the individual or set of individuals who requires the diet, formula or nutritional supplement
4304* [Observation](observation.html): The subject that the observation is about (if patient)
4305* [Person](person.html): The Person links to this Patient
4306* [Procedure](procedure.html): Search by subject - a patient
4307* [Provenance](provenance.html): Where the activity involved patient data
4308* [QuestionnaireResponse](questionnaireresponse.html): The patient that is the subject of the questionnaire response
4309* [RelatedPerson](relatedperson.html): The patient this related person is related to
4310* [RequestOrchestration](requestorchestration.html): The identity of a patient to search for request orchestrations
4311* [ResearchSubject](researchsubject.html): Who or what is part of study
4312* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
4313* [ServiceRequest](servicerequest.html): Search by subject - a patient
4314* [Specimen](specimen.html): The patient the specimen comes from
4315* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
4316* [SupplyRequest](supplyrequest.html): The patient or subject for whom the supply is destined
4317* [Task](task.html): Search by patient
4318* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
4319</b><br>
4320   * Type: <b>reference</b><br>
4321   * Path: <b>Account.subject.where(resolve() is Patient) | AdverseEvent.subject.where(resolve() is Patient) | AllergyIntolerance.patient | Appointment.participant.actor.where(resolve() is Patient) | Appointment.subject.where(resolve() is Patient) | AppointmentResponse.actor.where(resolve() is Patient) | AuditEvent.patient | Basic.subject.where(resolve() is Patient) | BodyStructure.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ChargeItem.subject.where(resolve() is Patient) | Claim.patient | ClaimResponse.patient | ClinicalImpression.subject.where(resolve() is Patient) | Communication.subject.where(resolve() is Patient) | CommunicationRequest.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.subject.where(resolve() is Patient) | Contract.subject.where(resolve() is Patient) | Coverage.beneficiary | CoverageEligibilityRequest.patient | CoverageEligibilityResponse.patient | DetectedIssue.subject.where(resolve() is Patient) | DeviceRequest.subject.where(resolve() is Patient) | DeviceUsage.patient | DiagnosticReport.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EnrollmentRequest.candidate | EpisodeOfCare.patient | ExplanationOfBenefit.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | GuidanceResponse.subject.where(resolve() is Patient) | ImagingSelection.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | ImmunizationEvaluation.patient | ImmunizationRecommendation.patient | Invoice.subject.where(resolve() is Patient) | List.subject.where(resolve() is Patient) | MeasureReport.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | MolecularSequence.subject.where(resolve() is Patient) | NutritionIntake.subject.where(resolve() is Patient) | NutritionOrder.subject.where(resolve() is Patient) | Observation.subject.where(resolve() is Patient) | Person.link.target.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | Provenance.patient | QuestionnaireResponse.subject.where(resolve() is Patient) | RelatedPerson.patient | RequestOrchestration.subject.where(resolve() is Patient) | ResearchSubject.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | Specimen.subject.where(resolve() is Patient) | SupplyDelivery.patient | SupplyRequest.deliverFor | Task.for.where(resolve() is Patient) | VisionPrescription.patient</b><br>
4322   * </p>
4323   */
4324  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
4325
4326/**
4327   * Constant for fluent queries to be used to add include statements. Specifies
4328   * the path value of "<b>AuditEvent:patient</b>".
4329   */
4330  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("AuditEvent:patient").toLocked();
4331
4332
4333}
4334