001package org.hl7.fhir.r4b.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 Fri, Dec 31, 2021 05:58+1100 for FHIR v4.3.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r4b.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 set of healthcare-related information that is assembled together into a single logical package that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type=document, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).
052 */
053@ResourceDef(name="Composition", profile="http://hl7.org/fhir/StructureDefinition/Composition")
054public class Composition extends DomainResource {
055
056    public enum CompositionAttestationMode {
057        /**
058         * The person authenticated the content in their personal capacity.
059         */
060        PERSONAL, 
061        /**
062         * The person authenticated the content in their professional capacity.
063         */
064        PROFESSIONAL, 
065        /**
066         * The person authenticated the content and accepted legal responsibility for its content.
067         */
068        LEGAL, 
069        /**
070         * The organization authenticated the content as consistent with their policies and procedures.
071         */
072        OFFICIAL, 
073        /**
074         * added to help the parsers with the generic types
075         */
076        NULL;
077        public static CompositionAttestationMode fromCode(String codeString) throws FHIRException {
078            if (codeString == null || "".equals(codeString))
079                return null;
080        if ("personal".equals(codeString))
081          return PERSONAL;
082        if ("professional".equals(codeString))
083          return PROFESSIONAL;
084        if ("legal".equals(codeString))
085          return LEGAL;
086        if ("official".equals(codeString))
087          return OFFICIAL;
088        if (Configuration.isAcceptInvalidEnums())
089          return null;
090        else
091          throw new FHIRException("Unknown CompositionAttestationMode code '"+codeString+"'");
092        }
093        public String toCode() {
094          switch (this) {
095            case PERSONAL: return "personal";
096            case PROFESSIONAL: return "professional";
097            case LEGAL: return "legal";
098            case OFFICIAL: return "official";
099            case NULL: return null;
100            default: return "?";
101          }
102        }
103        public String getSystem() {
104          switch (this) {
105            case PERSONAL: return "http://hl7.org/fhir/composition-attestation-mode";
106            case PROFESSIONAL: return "http://hl7.org/fhir/composition-attestation-mode";
107            case LEGAL: return "http://hl7.org/fhir/composition-attestation-mode";
108            case OFFICIAL: return "http://hl7.org/fhir/composition-attestation-mode";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113        public String getDefinition() {
114          switch (this) {
115            case PERSONAL: return "The person authenticated the content in their personal capacity.";
116            case PROFESSIONAL: return "The person authenticated the content in their professional capacity.";
117            case LEGAL: return "The person authenticated the content and accepted legal responsibility for its content.";
118            case OFFICIAL: return "The organization authenticated the content as consistent with their policies and procedures.";
119            case NULL: return null;
120            default: return "?";
121          }
122        }
123        public String getDisplay() {
124          switch (this) {
125            case PERSONAL: return "Personal";
126            case PROFESSIONAL: return "Professional";
127            case LEGAL: return "Legal";
128            case OFFICIAL: return "Official";
129            case NULL: return null;
130            default: return "?";
131          }
132        }
133    }
134
135  public static class CompositionAttestationModeEnumFactory implements EnumFactory<CompositionAttestationMode> {
136    public CompositionAttestationMode fromCode(String codeString) throws IllegalArgumentException {
137      if (codeString == null || "".equals(codeString))
138            if (codeString == null || "".equals(codeString))
139                return null;
140        if ("personal".equals(codeString))
141          return CompositionAttestationMode.PERSONAL;
142        if ("professional".equals(codeString))
143          return CompositionAttestationMode.PROFESSIONAL;
144        if ("legal".equals(codeString))
145          return CompositionAttestationMode.LEGAL;
146        if ("official".equals(codeString))
147          return CompositionAttestationMode.OFFICIAL;
148        throw new IllegalArgumentException("Unknown CompositionAttestationMode code '"+codeString+"'");
149        }
150        public Enumeration<CompositionAttestationMode> fromType(Base code) throws FHIRException {
151          if (code == null)
152            return null;
153          if (code.isEmpty())
154            return new Enumeration<CompositionAttestationMode>(this);
155          String codeString = ((PrimitiveType) code).asStringValue();
156          if (codeString == null || "".equals(codeString))
157            return null;
158        if ("personal".equals(codeString))
159          return new Enumeration<CompositionAttestationMode>(this, CompositionAttestationMode.PERSONAL);
160        if ("professional".equals(codeString))
161          return new Enumeration<CompositionAttestationMode>(this, CompositionAttestationMode.PROFESSIONAL);
162        if ("legal".equals(codeString))
163          return new Enumeration<CompositionAttestationMode>(this, CompositionAttestationMode.LEGAL);
164        if ("official".equals(codeString))
165          return new Enumeration<CompositionAttestationMode>(this, CompositionAttestationMode.OFFICIAL);
166        throw new FHIRException("Unknown CompositionAttestationMode code '"+codeString+"'");
167        }
168    public String toCode(CompositionAttestationMode code) {
169      if (code == CompositionAttestationMode.PERSONAL)
170        return "personal";
171      if (code == CompositionAttestationMode.PROFESSIONAL)
172        return "professional";
173      if (code == CompositionAttestationMode.LEGAL)
174        return "legal";
175      if (code == CompositionAttestationMode.OFFICIAL)
176        return "official";
177      return "?";
178      }
179    public String toSystem(CompositionAttestationMode code) {
180      return code.getSystem();
181      }
182    }
183
184    @Block()
185    public static class CompositionAttesterComponent extends BackboneElement implements IBaseBackboneElement {
186        /**
187         * The type of attestation the authenticator offers.
188         */
189        @Child(name = "mode", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
190        @Description(shortDefinition="personal | professional | legal | official", formalDefinition="The type of attestation the authenticator offers." )
191        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/composition-attestation-mode")
192        protected Enumeration<CompositionAttestationMode> mode;
193
194        /**
195         * When the composition was attested by the party.
196         */
197        @Child(name = "time", type = {DateTimeType.class}, order=2, min=0, max=1, modifier=false, summary=false)
198        @Description(shortDefinition="When the composition was attested", formalDefinition="When the composition was attested by the party." )
199        protected DateTimeType time;
200
201        /**
202         * Who attested the composition in the specified way.
203         */
204        @Child(name = "party", type = {Patient.class, RelatedPerson.class, Practitioner.class, PractitionerRole.class, Organization.class}, order=3, min=0, max=1, modifier=false, summary=false)
205        @Description(shortDefinition="Who attested the composition", formalDefinition="Who attested the composition in the specified way." )
206        protected Reference party;
207
208        private static final long serialVersionUID = 1917167918L;
209
210    /**
211     * Constructor
212     */
213      public CompositionAttesterComponent() {
214        super();
215      }
216
217    /**
218     * Constructor
219     */
220      public CompositionAttesterComponent(CompositionAttestationMode mode) {
221        super();
222        this.setMode(mode);
223      }
224
225        /**
226         * @return {@link #mode} (The type of attestation the authenticator offers.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
227         */
228        public Enumeration<CompositionAttestationMode> getModeElement() { 
229          if (this.mode == null)
230            if (Configuration.errorOnAutoCreate())
231              throw new Error("Attempt to auto-create CompositionAttesterComponent.mode");
232            else if (Configuration.doAutoCreate())
233              this.mode = new Enumeration<CompositionAttestationMode>(new CompositionAttestationModeEnumFactory()); // bb
234          return this.mode;
235        }
236
237        public boolean hasModeElement() { 
238          return this.mode != null && !this.mode.isEmpty();
239        }
240
241        public boolean hasMode() { 
242          return this.mode != null && !this.mode.isEmpty();
243        }
244
245        /**
246         * @param value {@link #mode} (The type of attestation the authenticator offers.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
247         */
248        public CompositionAttesterComponent setModeElement(Enumeration<CompositionAttestationMode> value) { 
249          this.mode = value;
250          return this;
251        }
252
253        /**
254         * @return The type of attestation the authenticator offers.
255         */
256        public CompositionAttestationMode getMode() { 
257          return this.mode == null ? null : this.mode.getValue();
258        }
259
260        /**
261         * @param value The type of attestation the authenticator offers.
262         */
263        public CompositionAttesterComponent setMode(CompositionAttestationMode value) { 
264            if (this.mode == null)
265              this.mode = new Enumeration<CompositionAttestationMode>(new CompositionAttestationModeEnumFactory());
266            this.mode.setValue(value);
267          return this;
268        }
269
270        /**
271         * @return {@link #time} (When the composition was attested by the party.). This is the underlying object with id, value and extensions. The accessor "getTime" gives direct access to the value
272         */
273        public DateTimeType getTimeElement() { 
274          if (this.time == null)
275            if (Configuration.errorOnAutoCreate())
276              throw new Error("Attempt to auto-create CompositionAttesterComponent.time");
277            else if (Configuration.doAutoCreate())
278              this.time = new DateTimeType(); // bb
279          return this.time;
280        }
281
282        public boolean hasTimeElement() { 
283          return this.time != null && !this.time.isEmpty();
284        }
285
286        public boolean hasTime() { 
287          return this.time != null && !this.time.isEmpty();
288        }
289
290        /**
291         * @param value {@link #time} (When the composition was attested by the party.). This is the underlying object with id, value and extensions. The accessor "getTime" gives direct access to the value
292         */
293        public CompositionAttesterComponent setTimeElement(DateTimeType value) { 
294          this.time = value;
295          return this;
296        }
297
298        /**
299         * @return When the composition was attested by the party.
300         */
301        public Date getTime() { 
302          return this.time == null ? null : this.time.getValue();
303        }
304
305        /**
306         * @param value When the composition was attested by the party.
307         */
308        public CompositionAttesterComponent setTime(Date value) { 
309          if (value == null)
310            this.time = null;
311          else {
312            if (this.time == null)
313              this.time = new DateTimeType();
314            this.time.setValue(value);
315          }
316          return this;
317        }
318
319        /**
320         * @return {@link #party} (Who attested the composition in the specified way.)
321         */
322        public Reference getParty() { 
323          if (this.party == null)
324            if (Configuration.errorOnAutoCreate())
325              throw new Error("Attempt to auto-create CompositionAttesterComponent.party");
326            else if (Configuration.doAutoCreate())
327              this.party = new Reference(); // cc
328          return this.party;
329        }
330
331        public boolean hasParty() { 
332          return this.party != null && !this.party.isEmpty();
333        }
334
335        /**
336         * @param value {@link #party} (Who attested the composition in the specified way.)
337         */
338        public CompositionAttesterComponent setParty(Reference value) { 
339          this.party = value;
340          return this;
341        }
342
343        protected void listChildren(List<Property> children) {
344          super.listChildren(children);
345          children.add(new Property("mode", "code", "The type of attestation the authenticator offers.", 0, 1, mode));
346          children.add(new Property("time", "dateTime", "When the composition was attested by the party.", 0, 1, time));
347          children.add(new Property("party", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole|Organization)", "Who attested the composition in the specified way.", 0, 1, party));
348        }
349
350        @Override
351        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
352          switch (_hash) {
353          case 3357091: /*mode*/  return new Property("mode", "code", "The type of attestation the authenticator offers.", 0, 1, mode);
354          case 3560141: /*time*/  return new Property("time", "dateTime", "When the composition was attested by the party.", 0, 1, time);
355          case 106437350: /*party*/  return new Property("party", "Reference(Patient|RelatedPerson|Practitioner|PractitionerRole|Organization)", "Who attested the composition in the specified way.", 0, 1, party);
356          default: return super.getNamedProperty(_hash, _name, _checkValid);
357          }
358
359        }
360
361      @Override
362      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
363        switch (hash) {
364        case 3357091: /*mode*/ return this.mode == null ? new Base[0] : new Base[] {this.mode}; // Enumeration<CompositionAttestationMode>
365        case 3560141: /*time*/ return this.time == null ? new Base[0] : new Base[] {this.time}; // DateTimeType
366        case 106437350: /*party*/ return this.party == null ? new Base[0] : new Base[] {this.party}; // Reference
367        default: return super.getProperty(hash, name, checkValid);
368        }
369
370      }
371
372      @Override
373      public Base setProperty(int hash, String name, Base value) throws FHIRException {
374        switch (hash) {
375        case 3357091: // mode
376          value = new CompositionAttestationModeEnumFactory().fromType(TypeConvertor.castToCode(value));
377          this.mode = (Enumeration) value; // Enumeration<CompositionAttestationMode>
378          return value;
379        case 3560141: // time
380          this.time = TypeConvertor.castToDateTime(value); // DateTimeType
381          return value;
382        case 106437350: // party
383          this.party = TypeConvertor.castToReference(value); // Reference
384          return value;
385        default: return super.setProperty(hash, name, value);
386        }
387
388      }
389
390      @Override
391      public Base setProperty(String name, Base value) throws FHIRException {
392        if (name.equals("mode")) {
393          value = new CompositionAttestationModeEnumFactory().fromType(TypeConvertor.castToCode(value));
394          this.mode = (Enumeration) value; // Enumeration<CompositionAttestationMode>
395        } else if (name.equals("time")) {
396          this.time = TypeConvertor.castToDateTime(value); // DateTimeType
397        } else if (name.equals("party")) {
398          this.party = TypeConvertor.castToReference(value); // Reference
399        } else
400          return super.setProperty(name, value);
401        return value;
402      }
403
404      @Override
405      public Base makeProperty(int hash, String name) throws FHIRException {
406        switch (hash) {
407        case 3357091:  return getModeElement();
408        case 3560141:  return getTimeElement();
409        case 106437350:  return getParty();
410        default: return super.makeProperty(hash, name);
411        }
412
413      }
414
415      @Override
416      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
417        switch (hash) {
418        case 3357091: /*mode*/ return new String[] {"code"};
419        case 3560141: /*time*/ return new String[] {"dateTime"};
420        case 106437350: /*party*/ return new String[] {"Reference"};
421        default: return super.getTypesForProperty(hash, name);
422        }
423
424      }
425
426      @Override
427      public Base addChild(String name) throws FHIRException {
428        if (name.equals("mode")) {
429          throw new FHIRException("Cannot call addChild on a primitive type Composition.attester.mode");
430        }
431        else if (name.equals("time")) {
432          throw new FHIRException("Cannot call addChild on a primitive type Composition.attester.time");
433        }
434        else if (name.equals("party")) {
435          this.party = new Reference();
436          return this.party;
437        }
438        else
439          return super.addChild(name);
440      }
441
442      public CompositionAttesterComponent copy() {
443        CompositionAttesterComponent dst = new CompositionAttesterComponent();
444        copyValues(dst);
445        return dst;
446      }
447
448      public void copyValues(CompositionAttesterComponent dst) {
449        super.copyValues(dst);
450        dst.mode = mode == null ? null : mode.copy();
451        dst.time = time == null ? null : time.copy();
452        dst.party = party == null ? null : party.copy();
453      }
454
455      @Override
456      public boolean equalsDeep(Base other_) {
457        if (!super.equalsDeep(other_))
458          return false;
459        if (!(other_ instanceof CompositionAttesterComponent))
460          return false;
461        CompositionAttesterComponent o = (CompositionAttesterComponent) other_;
462        return compareDeep(mode, o.mode, true) && compareDeep(time, o.time, true) && compareDeep(party, o.party, true)
463          ;
464      }
465
466      @Override
467      public boolean equalsShallow(Base other_) {
468        if (!super.equalsShallow(other_))
469          return false;
470        if (!(other_ instanceof CompositionAttesterComponent))
471          return false;
472        CompositionAttesterComponent o = (CompositionAttesterComponent) other_;
473        return compareValues(mode, o.mode, true) && compareValues(time, o.time, true);
474      }
475
476      public boolean isEmpty() {
477        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(mode, time, party);
478      }
479
480  public String fhirType() {
481    return "Composition.attester";
482
483  }
484
485  }
486
487    @Block()
488    public static class CompositionRelatesToComponent extends BackboneElement implements IBaseBackboneElement {
489        /**
490         * The type of relationship that this composition has with anther composition or document.
491         */
492        @Child(name = "code", type = {CodeType.class}, order=1, min=1, max=1, modifier=false, summary=false)
493        @Description(shortDefinition="replaces | transforms | signs | appends", formalDefinition="The type of relationship that this composition has with anther composition or document." )
494        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/document-relationship-type")
495        protected Enumeration<DocumentRelationshipType> code;
496
497        /**
498         * The target composition/document of this relationship.
499         */
500        @Child(name = "target", type = {Identifier.class, Composition.class}, order=2, min=1, max=1, modifier=false, summary=false)
501        @Description(shortDefinition="Target of the relationship", formalDefinition="The target composition/document of this relationship." )
502        protected DataType target;
503
504        private static final long serialVersionUID = -897077070L;
505
506    /**
507     * Constructor
508     */
509      public CompositionRelatesToComponent() {
510        super();
511      }
512
513    /**
514     * Constructor
515     */
516      public CompositionRelatesToComponent(DocumentRelationshipType code, DataType target) {
517        super();
518        this.setCode(code);
519        this.setTarget(target);
520      }
521
522        /**
523         * @return {@link #code} (The type of relationship that this composition has with anther composition or document.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
524         */
525        public Enumeration<DocumentRelationshipType> getCodeElement() { 
526          if (this.code == null)
527            if (Configuration.errorOnAutoCreate())
528              throw new Error("Attempt to auto-create CompositionRelatesToComponent.code");
529            else if (Configuration.doAutoCreate())
530              this.code = new Enumeration<DocumentRelationshipType>(new DocumentRelationshipTypeEnumFactory()); // bb
531          return this.code;
532        }
533
534        public boolean hasCodeElement() { 
535          return this.code != null && !this.code.isEmpty();
536        }
537
538        public boolean hasCode() { 
539          return this.code != null && !this.code.isEmpty();
540        }
541
542        /**
543         * @param value {@link #code} (The type of relationship that this composition has with anther composition or document.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
544         */
545        public CompositionRelatesToComponent setCodeElement(Enumeration<DocumentRelationshipType> value) { 
546          this.code = value;
547          return this;
548        }
549
550        /**
551         * @return The type of relationship that this composition has with anther composition or document.
552         */
553        public DocumentRelationshipType getCode() { 
554          return this.code == null ? null : this.code.getValue();
555        }
556
557        /**
558         * @param value The type of relationship that this composition has with anther composition or document.
559         */
560        public CompositionRelatesToComponent setCode(DocumentRelationshipType value) { 
561            if (this.code == null)
562              this.code = new Enumeration<DocumentRelationshipType>(new DocumentRelationshipTypeEnumFactory());
563            this.code.setValue(value);
564          return this;
565        }
566
567        /**
568         * @return {@link #target} (The target composition/document of this relationship.)
569         */
570        public DataType getTarget() { 
571          return this.target;
572        }
573
574        /**
575         * @return {@link #target} (The target composition/document of this relationship.)
576         */
577        public Identifier getTargetIdentifier() throws FHIRException { 
578          if (this.target == null)
579            this.target = new Identifier();
580          if (!(this.target instanceof Identifier))
581            throw new FHIRException("Type mismatch: the type Identifier was expected, but "+this.target.getClass().getName()+" was encountered");
582          return (Identifier) this.target;
583        }
584
585        public boolean hasTargetIdentifier() { 
586          return this != null && this.target instanceof Identifier;
587        }
588
589        /**
590         * @return {@link #target} (The target composition/document of this relationship.)
591         */
592        public Reference getTargetReference() throws FHIRException { 
593          if (this.target == null)
594            this.target = new Reference();
595          if (!(this.target instanceof Reference))
596            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.target.getClass().getName()+" was encountered");
597          return (Reference) this.target;
598        }
599
600        public boolean hasTargetReference() { 
601          return this != null && this.target instanceof Reference;
602        }
603
604        public boolean hasTarget() { 
605          return this.target != null && !this.target.isEmpty();
606        }
607
608        /**
609         * @param value {@link #target} (The target composition/document of this relationship.)
610         */
611        public CompositionRelatesToComponent setTarget(DataType value) { 
612          if (value != null && !(value instanceof Identifier || value instanceof Reference))
613            throw new Error("Not the right type for Composition.relatesTo.target[x]: "+value.fhirType());
614          this.target = value;
615          return this;
616        }
617
618        protected void listChildren(List<Property> children) {
619          super.listChildren(children);
620          children.add(new Property("code", "code", "The type of relationship that this composition has with anther composition or document.", 0, 1, code));
621          children.add(new Property("target[x]", "Identifier|Reference(Composition)", "The target composition/document of this relationship.", 0, 1, target));
622        }
623
624        @Override
625        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
626          switch (_hash) {
627          case 3059181: /*code*/  return new Property("code", "code", "The type of relationship that this composition has with anther composition or document.", 0, 1, code);
628          case -815579825: /*target[x]*/  return new Property("target[x]", "Identifier|Reference(Composition)", "The target composition/document of this relationship.", 0, 1, target);
629          case -880905839: /*target*/  return new Property("target[x]", "Identifier|Reference(Composition)", "The target composition/document of this relationship.", 0, 1, target);
630          case 1690892570: /*targetIdentifier*/  return new Property("target[x]", "Identifier", "The target composition/document of this relationship.", 0, 1, target);
631          case 1259806906: /*targetReference*/  return new Property("target[x]", "Reference(Composition)", "The target composition/document of this relationship.", 0, 1, target);
632          default: return super.getNamedProperty(_hash, _name, _checkValid);
633          }
634
635        }
636
637      @Override
638      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
639        switch (hash) {
640        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // Enumeration<DocumentRelationshipType>
641        case -880905839: /*target*/ return this.target == null ? new Base[0] : new Base[] {this.target}; // DataType
642        default: return super.getProperty(hash, name, checkValid);
643        }
644
645      }
646
647      @Override
648      public Base setProperty(int hash, String name, Base value) throws FHIRException {
649        switch (hash) {
650        case 3059181: // code
651          value = new DocumentRelationshipTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
652          this.code = (Enumeration) value; // Enumeration<DocumentRelationshipType>
653          return value;
654        case -880905839: // target
655          this.target = TypeConvertor.castToType(value); // DataType
656          return value;
657        default: return super.setProperty(hash, name, value);
658        }
659
660      }
661
662      @Override
663      public Base setProperty(String name, Base value) throws FHIRException {
664        if (name.equals("code")) {
665          value = new DocumentRelationshipTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
666          this.code = (Enumeration) value; // Enumeration<DocumentRelationshipType>
667        } else if (name.equals("target[x]")) {
668          this.target = TypeConvertor.castToType(value); // DataType
669        } else
670          return super.setProperty(name, value);
671        return value;
672      }
673
674      @Override
675      public Base makeProperty(int hash, String name) throws FHIRException {
676        switch (hash) {
677        case 3059181:  return getCodeElement();
678        case -815579825:  return getTarget();
679        case -880905839:  return getTarget();
680        default: return super.makeProperty(hash, name);
681        }
682
683      }
684
685      @Override
686      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
687        switch (hash) {
688        case 3059181: /*code*/ return new String[] {"code"};
689        case -880905839: /*target*/ return new String[] {"Identifier", "Reference"};
690        default: return super.getTypesForProperty(hash, name);
691        }
692
693      }
694
695      @Override
696      public Base addChild(String name) throws FHIRException {
697        if (name.equals("code")) {
698          throw new FHIRException("Cannot call addChild on a primitive type Composition.relatesTo.code");
699        }
700        else if (name.equals("targetIdentifier")) {
701          this.target = new Identifier();
702          return this.target;
703        }
704        else if (name.equals("targetReference")) {
705          this.target = new Reference();
706          return this.target;
707        }
708        else
709          return super.addChild(name);
710      }
711
712      public CompositionRelatesToComponent copy() {
713        CompositionRelatesToComponent dst = new CompositionRelatesToComponent();
714        copyValues(dst);
715        return dst;
716      }
717
718      public void copyValues(CompositionRelatesToComponent dst) {
719        super.copyValues(dst);
720        dst.code = code == null ? null : code.copy();
721        dst.target = target == null ? null : target.copy();
722      }
723
724      @Override
725      public boolean equalsDeep(Base other_) {
726        if (!super.equalsDeep(other_))
727          return false;
728        if (!(other_ instanceof CompositionRelatesToComponent))
729          return false;
730        CompositionRelatesToComponent o = (CompositionRelatesToComponent) other_;
731        return compareDeep(code, o.code, true) && compareDeep(target, o.target, true);
732      }
733
734      @Override
735      public boolean equalsShallow(Base other_) {
736        if (!super.equalsShallow(other_))
737          return false;
738        if (!(other_ instanceof CompositionRelatesToComponent))
739          return false;
740        CompositionRelatesToComponent o = (CompositionRelatesToComponent) other_;
741        return compareValues(code, o.code, true);
742      }
743
744      public boolean isEmpty() {
745        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, target);
746      }
747
748  public String fhirType() {
749    return "Composition.relatesTo";
750
751  }
752
753  }
754
755    @Block()
756    public static class CompositionEventComponent extends BackboneElement implements IBaseBackboneElement {
757        /**
758         * This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a "History and Physical Report" in which the procedure being documented is necessarily a "History and Physical" act.
759         */
760        @Child(name = "code", type = {CodeableConcept.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
761        @Description(shortDefinition="Code(s) that apply to the event being documented", formalDefinition="This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a \"History and Physical Report\" in which the procedure being documented is necessarily a \"History and Physical\" act." )
762        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-ActCode")
763        protected List<CodeableConcept> code;
764
765        /**
766         * The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time.
767         */
768        @Child(name = "period", type = {Period.class}, order=2, min=0, max=1, modifier=false, summary=true)
769        @Description(shortDefinition="The period covered by the documentation", formalDefinition="The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time." )
770        protected Period period;
771
772        /**
773         * The description and/or reference of the event(s) being documented. For example, this could be used to document such a colonoscopy or an appendectomy.
774         */
775        @Child(name = "detail", type = {Reference.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
776        @Description(shortDefinition="The event(s) being documented", formalDefinition="The description and/or reference of the event(s) being documented. For example, this could be used to document such a colonoscopy or an appendectomy." )
777        protected List<Reference> detail;
778
779        private static final long serialVersionUID = 1593079240L;
780
781    /**
782     * Constructor
783     */
784      public CompositionEventComponent() {
785        super();
786      }
787
788        /**
789         * @return {@link #code} (This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a "History and Physical Report" in which the procedure being documented is necessarily a "History and Physical" act.)
790         */
791        public List<CodeableConcept> getCode() { 
792          if (this.code == null)
793            this.code = new ArrayList<CodeableConcept>();
794          return this.code;
795        }
796
797        /**
798         * @return Returns a reference to <code>this</code> for easy method chaining
799         */
800        public CompositionEventComponent setCode(List<CodeableConcept> theCode) { 
801          this.code = theCode;
802          return this;
803        }
804
805        public boolean hasCode() { 
806          if (this.code == null)
807            return false;
808          for (CodeableConcept item : this.code)
809            if (!item.isEmpty())
810              return true;
811          return false;
812        }
813
814        public CodeableConcept addCode() { //3
815          CodeableConcept t = new CodeableConcept();
816          if (this.code == null)
817            this.code = new ArrayList<CodeableConcept>();
818          this.code.add(t);
819          return t;
820        }
821
822        public CompositionEventComponent addCode(CodeableConcept t) { //3
823          if (t == null)
824            return this;
825          if (this.code == null)
826            this.code = new ArrayList<CodeableConcept>();
827          this.code.add(t);
828          return this;
829        }
830
831        /**
832         * @return The first repetition of repeating field {@link #code}, creating it if it does not already exist {3}
833         */
834        public CodeableConcept getCodeFirstRep() { 
835          if (getCode().isEmpty()) {
836            addCode();
837          }
838          return getCode().get(0);
839        }
840
841        /**
842         * @return {@link #period} (The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time.)
843         */
844        public Period getPeriod() { 
845          if (this.period == null)
846            if (Configuration.errorOnAutoCreate())
847              throw new Error("Attempt to auto-create CompositionEventComponent.period");
848            else if (Configuration.doAutoCreate())
849              this.period = new Period(); // cc
850          return this.period;
851        }
852
853        public boolean hasPeriod() { 
854          return this.period != null && !this.period.isEmpty();
855        }
856
857        /**
858         * @param value {@link #period} (The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time.)
859         */
860        public CompositionEventComponent setPeriod(Period value) { 
861          this.period = value;
862          return this;
863        }
864
865        /**
866         * @return {@link #detail} (The description and/or reference of the event(s) being documented. For example, this could be used to document such a colonoscopy or an appendectomy.)
867         */
868        public List<Reference> getDetail() { 
869          if (this.detail == null)
870            this.detail = new ArrayList<Reference>();
871          return this.detail;
872        }
873
874        /**
875         * @return Returns a reference to <code>this</code> for easy method chaining
876         */
877        public CompositionEventComponent setDetail(List<Reference> theDetail) { 
878          this.detail = theDetail;
879          return this;
880        }
881
882        public boolean hasDetail() { 
883          if (this.detail == null)
884            return false;
885          for (Reference item : this.detail)
886            if (!item.isEmpty())
887              return true;
888          return false;
889        }
890
891        public Reference addDetail() { //3
892          Reference t = new Reference();
893          if (this.detail == null)
894            this.detail = new ArrayList<Reference>();
895          this.detail.add(t);
896          return t;
897        }
898
899        public CompositionEventComponent addDetail(Reference t) { //3
900          if (t == null)
901            return this;
902          if (this.detail == null)
903            this.detail = new ArrayList<Reference>();
904          this.detail.add(t);
905          return this;
906        }
907
908        /**
909         * @return The first repetition of repeating field {@link #detail}, creating it if it does not already exist {3}
910         */
911        public Reference getDetailFirstRep() { 
912          if (getDetail().isEmpty()) {
913            addDetail();
914          }
915          return getDetail().get(0);
916        }
917
918        protected void listChildren(List<Property> children) {
919          super.listChildren(children);
920          children.add(new Property("code", "CodeableConcept", "This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a \"History and Physical Report\" in which the procedure being documented is necessarily a \"History and Physical\" act.", 0, java.lang.Integer.MAX_VALUE, code));
921          children.add(new Property("period", "Period", "The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time.", 0, 1, period));
922          children.add(new Property("detail", "Reference(Any)", "The description and/or reference of the event(s) being documented. For example, this could be used to document such a colonoscopy or an appendectomy.", 0, java.lang.Integer.MAX_VALUE, detail));
923        }
924
925        @Override
926        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
927          switch (_hash) {
928          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a \"History and Physical Report\" in which the procedure being documented is necessarily a \"History and Physical\" act.", 0, java.lang.Integer.MAX_VALUE, code);
929          case -991726143: /*period*/  return new Property("period", "Period", "The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time.", 0, 1, period);
930          case -1335224239: /*detail*/  return new Property("detail", "Reference(Any)", "The description and/or reference of the event(s) being documented. For example, this could be used to document such a colonoscopy or an appendectomy.", 0, java.lang.Integer.MAX_VALUE, detail);
931          default: return super.getNamedProperty(_hash, _name, _checkValid);
932          }
933
934        }
935
936      @Override
937      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
938        switch (hash) {
939        case 3059181: /*code*/ return this.code == null ? new Base[0] : this.code.toArray(new Base[this.code.size()]); // CodeableConcept
940        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
941        case -1335224239: /*detail*/ return this.detail == null ? new Base[0] : this.detail.toArray(new Base[this.detail.size()]); // Reference
942        default: return super.getProperty(hash, name, checkValid);
943        }
944
945      }
946
947      @Override
948      public Base setProperty(int hash, String name, Base value) throws FHIRException {
949        switch (hash) {
950        case 3059181: // code
951          this.getCode().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
952          return value;
953        case -991726143: // period
954          this.period = TypeConvertor.castToPeriod(value); // Period
955          return value;
956        case -1335224239: // detail
957          this.getDetail().add(TypeConvertor.castToReference(value)); // Reference
958          return value;
959        default: return super.setProperty(hash, name, value);
960        }
961
962      }
963
964      @Override
965      public Base setProperty(String name, Base value) throws FHIRException {
966        if (name.equals("code")) {
967          this.getCode().add(TypeConvertor.castToCodeableConcept(value));
968        } else if (name.equals("period")) {
969          this.period = TypeConvertor.castToPeriod(value); // Period
970        } else if (name.equals("detail")) {
971          this.getDetail().add(TypeConvertor.castToReference(value));
972        } else
973          return super.setProperty(name, value);
974        return value;
975      }
976
977      @Override
978      public Base makeProperty(int hash, String name) throws FHIRException {
979        switch (hash) {
980        case 3059181:  return addCode(); 
981        case -991726143:  return getPeriod();
982        case -1335224239:  return addDetail(); 
983        default: return super.makeProperty(hash, name);
984        }
985
986      }
987
988      @Override
989      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
990        switch (hash) {
991        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
992        case -991726143: /*period*/ return new String[] {"Period"};
993        case -1335224239: /*detail*/ return new String[] {"Reference"};
994        default: return super.getTypesForProperty(hash, name);
995        }
996
997      }
998
999      @Override
1000      public Base addChild(String name) throws FHIRException {
1001        if (name.equals("code")) {
1002          return addCode();
1003        }
1004        else if (name.equals("period")) {
1005          this.period = new Period();
1006          return this.period;
1007        }
1008        else if (name.equals("detail")) {
1009          return addDetail();
1010        }
1011        else
1012          return super.addChild(name);
1013      }
1014
1015      public CompositionEventComponent copy() {
1016        CompositionEventComponent dst = new CompositionEventComponent();
1017        copyValues(dst);
1018        return dst;
1019      }
1020
1021      public void copyValues(CompositionEventComponent dst) {
1022        super.copyValues(dst);
1023        if (code != null) {
1024          dst.code = new ArrayList<CodeableConcept>();
1025          for (CodeableConcept i : code)
1026            dst.code.add(i.copy());
1027        };
1028        dst.period = period == null ? null : period.copy();
1029        if (detail != null) {
1030          dst.detail = new ArrayList<Reference>();
1031          for (Reference i : detail)
1032            dst.detail.add(i.copy());
1033        };
1034      }
1035
1036      @Override
1037      public boolean equalsDeep(Base other_) {
1038        if (!super.equalsDeep(other_))
1039          return false;
1040        if (!(other_ instanceof CompositionEventComponent))
1041          return false;
1042        CompositionEventComponent o = (CompositionEventComponent) other_;
1043        return compareDeep(code, o.code, true) && compareDeep(period, o.period, true) && compareDeep(detail, o.detail, true)
1044          ;
1045      }
1046
1047      @Override
1048      public boolean equalsShallow(Base other_) {
1049        if (!super.equalsShallow(other_))
1050          return false;
1051        if (!(other_ instanceof CompositionEventComponent))
1052          return false;
1053        CompositionEventComponent o = (CompositionEventComponent) other_;
1054        return true;
1055      }
1056
1057      public boolean isEmpty() {
1058        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, period, detail);
1059      }
1060
1061  public String fhirType() {
1062    return "Composition.event";
1063
1064  }
1065
1066  }
1067
1068    @Block()
1069    public static class SectionComponent extends BackboneElement implements IBaseBackboneElement {
1070        /**
1071         * The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.
1072         */
1073        @Child(name = "title", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
1074        @Description(shortDefinition="Label for section (e.g. for ToC)", formalDefinition="The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents." )
1075        protected StringType title;
1076
1077        /**
1078         * A code identifying the kind of content contained within the section. This must be consistent with the section title.
1079         */
1080        @Child(name = "code", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
1081        @Description(shortDefinition="Classification of section (recommended)", formalDefinition="A code identifying the kind of content contained within the section. This must be consistent with the section title." )
1082        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/doc-section-codes")
1083        protected CodeableConcept code;
1084
1085        /**
1086         * Identifies who is responsible for the information in this section, not necessarily who typed it in.
1087         */
1088        @Child(name = "author", type = {Practitioner.class, PractitionerRole.class, Device.class, Patient.class, RelatedPerson.class, Organization.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1089        @Description(shortDefinition="Who and/or what authored the section", formalDefinition="Identifies who is responsible for the information in this section, not necessarily who typed it in." )
1090        protected List<Reference> author;
1091
1092        /**
1093         * The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources).
1094         */
1095        @Child(name = "focus", type = {Reference.class}, order=4, min=0, max=1, modifier=false, summary=false)
1096        @Description(shortDefinition="Who/what the section is about, when it is not about the subject of composition", formalDefinition="The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources)." )
1097        protected Reference focus;
1098
1099        /**
1100         * A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative.
1101         */
1102        @Child(name = "text", type = {Narrative.class}, order=5, min=0, max=1, modifier=false, summary=false)
1103        @Description(shortDefinition="Text summary of the section, for human interpretation", formalDefinition="A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative." )
1104        protected Narrative text;
1105
1106        /**
1107         * How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
1108         */
1109        @Child(name = "mode", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=false)
1110        @Description(shortDefinition="working | snapshot | changes", formalDefinition="How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted." )
1111        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/list-mode")
1112        protected Enumeration<ListMode> mode;
1113
1114        /**
1115         * Specifies the order applied to the items in the section entries.
1116         */
1117        @Child(name = "orderedBy", type = {CodeableConcept.class}, order=7, min=0, max=1, modifier=false, summary=false)
1118        @Description(shortDefinition="Order of section entries", formalDefinition="Specifies the order applied to the items in the section entries." )
1119        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/list-order")
1120        protected CodeableConcept orderedBy;
1121
1122        /**
1123         * A reference to the actual resource from which the narrative in the section is derived.
1124         */
1125        @Child(name = "entry", type = {Reference.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1126        @Description(shortDefinition="A reference to data that supports this section", formalDefinition="A reference to the actual resource from which the narrative in the section is derived." )
1127        protected List<Reference> entry;
1128
1129        /**
1130         * If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.
1131         */
1132        @Child(name = "emptyReason", type = {CodeableConcept.class}, order=9, min=0, max=1, modifier=false, summary=false)
1133        @Description(shortDefinition="Why the section is empty", formalDefinition="If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason." )
1134        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/list-empty-reason")
1135        protected CodeableConcept emptyReason;
1136
1137        /**
1138         * A nested sub-section within this section.
1139         */
1140        @Child(name = "section", type = {SectionComponent.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1141        @Description(shortDefinition="Nested Section", formalDefinition="A nested sub-section within this section." )
1142        protected List<SectionComponent> section;
1143
1144        private static final long serialVersionUID = 911563193L;
1145
1146    /**
1147     * Constructor
1148     */
1149      public SectionComponent() {
1150        super();
1151      }
1152
1153        /**
1154         * @return {@link #title} (The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1155         */
1156        public StringType getTitleElement() { 
1157          if (this.title == null)
1158            if (Configuration.errorOnAutoCreate())
1159              throw new Error("Attempt to auto-create SectionComponent.title");
1160            else if (Configuration.doAutoCreate())
1161              this.title = new StringType(); // bb
1162          return this.title;
1163        }
1164
1165        public boolean hasTitleElement() { 
1166          return this.title != null && !this.title.isEmpty();
1167        }
1168
1169        public boolean hasTitle() { 
1170          return this.title != null && !this.title.isEmpty();
1171        }
1172
1173        /**
1174         * @param value {@link #title} (The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
1175         */
1176        public SectionComponent setTitleElement(StringType value) { 
1177          this.title = value;
1178          return this;
1179        }
1180
1181        /**
1182         * @return The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.
1183         */
1184        public String getTitle() { 
1185          return this.title == null ? null : this.title.getValue();
1186        }
1187
1188        /**
1189         * @param value The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.
1190         */
1191        public SectionComponent setTitle(String value) { 
1192          if (Utilities.noString(value))
1193            this.title = null;
1194          else {
1195            if (this.title == null)
1196              this.title = new StringType();
1197            this.title.setValue(value);
1198          }
1199          return this;
1200        }
1201
1202        /**
1203         * @return {@link #code} (A code identifying the kind of content contained within the section. This must be consistent with the section title.)
1204         */
1205        public CodeableConcept getCode() { 
1206          if (this.code == null)
1207            if (Configuration.errorOnAutoCreate())
1208              throw new Error("Attempt to auto-create SectionComponent.code");
1209            else if (Configuration.doAutoCreate())
1210              this.code = new CodeableConcept(); // cc
1211          return this.code;
1212        }
1213
1214        public boolean hasCode() { 
1215          return this.code != null && !this.code.isEmpty();
1216        }
1217
1218        /**
1219         * @param value {@link #code} (A code identifying the kind of content contained within the section. This must be consistent with the section title.)
1220         */
1221        public SectionComponent setCode(CodeableConcept value) { 
1222          this.code = value;
1223          return this;
1224        }
1225
1226        /**
1227         * @return {@link #author} (Identifies who is responsible for the information in this section, not necessarily who typed it in.)
1228         */
1229        public List<Reference> getAuthor() { 
1230          if (this.author == null)
1231            this.author = new ArrayList<Reference>();
1232          return this.author;
1233        }
1234
1235        /**
1236         * @return Returns a reference to <code>this</code> for easy method chaining
1237         */
1238        public SectionComponent setAuthor(List<Reference> theAuthor) { 
1239          this.author = theAuthor;
1240          return this;
1241        }
1242
1243        public boolean hasAuthor() { 
1244          if (this.author == null)
1245            return false;
1246          for (Reference item : this.author)
1247            if (!item.isEmpty())
1248              return true;
1249          return false;
1250        }
1251
1252        public Reference addAuthor() { //3
1253          Reference t = new Reference();
1254          if (this.author == null)
1255            this.author = new ArrayList<Reference>();
1256          this.author.add(t);
1257          return t;
1258        }
1259
1260        public SectionComponent addAuthor(Reference t) { //3
1261          if (t == null)
1262            return this;
1263          if (this.author == null)
1264            this.author = new ArrayList<Reference>();
1265          this.author.add(t);
1266          return this;
1267        }
1268
1269        /**
1270         * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {3}
1271         */
1272        public Reference getAuthorFirstRep() { 
1273          if (getAuthor().isEmpty()) {
1274            addAuthor();
1275          }
1276          return getAuthor().get(0);
1277        }
1278
1279        /**
1280         * @return {@link #focus} (The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources).)
1281         */
1282        public Reference getFocus() { 
1283          if (this.focus == null)
1284            if (Configuration.errorOnAutoCreate())
1285              throw new Error("Attempt to auto-create SectionComponent.focus");
1286            else if (Configuration.doAutoCreate())
1287              this.focus = new Reference(); // cc
1288          return this.focus;
1289        }
1290
1291        public boolean hasFocus() { 
1292          return this.focus != null && !this.focus.isEmpty();
1293        }
1294
1295        /**
1296         * @param value {@link #focus} (The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources).)
1297         */
1298        public SectionComponent setFocus(Reference value) { 
1299          this.focus = value;
1300          return this;
1301        }
1302
1303        /**
1304         * @return {@link #text} (A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative.)
1305         */
1306        public Narrative getText() { 
1307          if (this.text == null)
1308            if (Configuration.errorOnAutoCreate())
1309              throw new Error("Attempt to auto-create SectionComponent.text");
1310            else if (Configuration.doAutoCreate())
1311              this.text = new Narrative(); // cc
1312          return this.text;
1313        }
1314
1315        public boolean hasText() { 
1316          return this.text != null && !this.text.isEmpty();
1317        }
1318
1319        /**
1320         * @param value {@link #text} (A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative.)
1321         */
1322        public SectionComponent setText(Narrative value) { 
1323          this.text = value;
1324          return this;
1325        }
1326
1327        /**
1328         * @return {@link #mode} (How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
1329         */
1330        public Enumeration<ListMode> getModeElement() { 
1331          if (this.mode == null)
1332            if (Configuration.errorOnAutoCreate())
1333              throw new Error("Attempt to auto-create SectionComponent.mode");
1334            else if (Configuration.doAutoCreate())
1335              this.mode = new Enumeration<ListMode>(new ListModeEnumFactory()); // bb
1336          return this.mode;
1337        }
1338
1339        public boolean hasModeElement() { 
1340          return this.mode != null && !this.mode.isEmpty();
1341        }
1342
1343        public boolean hasMode() { 
1344          return this.mode != null && !this.mode.isEmpty();
1345        }
1346
1347        /**
1348         * @param value {@link #mode} (How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.). This is the underlying object with id, value and extensions. The accessor "getMode" gives direct access to the value
1349         */
1350        public SectionComponent setModeElement(Enumeration<ListMode> value) { 
1351          this.mode = value;
1352          return this;
1353        }
1354
1355        /**
1356         * @return How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
1357         */
1358        public ListMode getMode() { 
1359          return this.mode == null ? null : this.mode.getValue();
1360        }
1361
1362        /**
1363         * @param value How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.
1364         */
1365        public SectionComponent setMode(ListMode value) { 
1366          if (value == null)
1367            this.mode = null;
1368          else {
1369            if (this.mode == null)
1370              this.mode = new Enumeration<ListMode>(new ListModeEnumFactory());
1371            this.mode.setValue(value);
1372          }
1373          return this;
1374        }
1375
1376        /**
1377         * @return {@link #orderedBy} (Specifies the order applied to the items in the section entries.)
1378         */
1379        public CodeableConcept getOrderedBy() { 
1380          if (this.orderedBy == null)
1381            if (Configuration.errorOnAutoCreate())
1382              throw new Error("Attempt to auto-create SectionComponent.orderedBy");
1383            else if (Configuration.doAutoCreate())
1384              this.orderedBy = new CodeableConcept(); // cc
1385          return this.orderedBy;
1386        }
1387
1388        public boolean hasOrderedBy() { 
1389          return this.orderedBy != null && !this.orderedBy.isEmpty();
1390        }
1391
1392        /**
1393         * @param value {@link #orderedBy} (Specifies the order applied to the items in the section entries.)
1394         */
1395        public SectionComponent setOrderedBy(CodeableConcept value) { 
1396          this.orderedBy = value;
1397          return this;
1398        }
1399
1400        /**
1401         * @return {@link #entry} (A reference to the actual resource from which the narrative in the section is derived.)
1402         */
1403        public List<Reference> getEntry() { 
1404          if (this.entry == null)
1405            this.entry = new ArrayList<Reference>();
1406          return this.entry;
1407        }
1408
1409        /**
1410         * @return Returns a reference to <code>this</code> for easy method chaining
1411         */
1412        public SectionComponent setEntry(List<Reference> theEntry) { 
1413          this.entry = theEntry;
1414          return this;
1415        }
1416
1417        public boolean hasEntry() { 
1418          if (this.entry == null)
1419            return false;
1420          for (Reference item : this.entry)
1421            if (!item.isEmpty())
1422              return true;
1423          return false;
1424        }
1425
1426        public Reference addEntry() { //3
1427          Reference t = new Reference();
1428          if (this.entry == null)
1429            this.entry = new ArrayList<Reference>();
1430          this.entry.add(t);
1431          return t;
1432        }
1433
1434        public SectionComponent addEntry(Reference t) { //3
1435          if (t == null)
1436            return this;
1437          if (this.entry == null)
1438            this.entry = new ArrayList<Reference>();
1439          this.entry.add(t);
1440          return this;
1441        }
1442
1443        /**
1444         * @return The first repetition of repeating field {@link #entry}, creating it if it does not already exist {3}
1445         */
1446        public Reference getEntryFirstRep() { 
1447          if (getEntry().isEmpty()) {
1448            addEntry();
1449          }
1450          return getEntry().get(0);
1451        }
1452
1453        /**
1454         * @return {@link #emptyReason} (If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.)
1455         */
1456        public CodeableConcept getEmptyReason() { 
1457          if (this.emptyReason == null)
1458            if (Configuration.errorOnAutoCreate())
1459              throw new Error("Attempt to auto-create SectionComponent.emptyReason");
1460            else if (Configuration.doAutoCreate())
1461              this.emptyReason = new CodeableConcept(); // cc
1462          return this.emptyReason;
1463        }
1464
1465        public boolean hasEmptyReason() { 
1466          return this.emptyReason != null && !this.emptyReason.isEmpty();
1467        }
1468
1469        /**
1470         * @param value {@link #emptyReason} (If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.)
1471         */
1472        public SectionComponent setEmptyReason(CodeableConcept value) { 
1473          this.emptyReason = value;
1474          return this;
1475        }
1476
1477        /**
1478         * @return {@link #section} (A nested sub-section within this section.)
1479         */
1480        public List<SectionComponent> getSection() { 
1481          if (this.section == null)
1482            this.section = new ArrayList<SectionComponent>();
1483          return this.section;
1484        }
1485
1486        /**
1487         * @return Returns a reference to <code>this</code> for easy method chaining
1488         */
1489        public SectionComponent setSection(List<SectionComponent> theSection) { 
1490          this.section = theSection;
1491          return this;
1492        }
1493
1494        public boolean hasSection() { 
1495          if (this.section == null)
1496            return false;
1497          for (SectionComponent item : this.section)
1498            if (!item.isEmpty())
1499              return true;
1500          return false;
1501        }
1502
1503        public SectionComponent addSection() { //3
1504          SectionComponent t = new SectionComponent();
1505          if (this.section == null)
1506            this.section = new ArrayList<SectionComponent>();
1507          this.section.add(t);
1508          return t;
1509        }
1510
1511        public SectionComponent addSection(SectionComponent t) { //3
1512          if (t == null)
1513            return this;
1514          if (this.section == null)
1515            this.section = new ArrayList<SectionComponent>();
1516          this.section.add(t);
1517          return this;
1518        }
1519
1520        /**
1521         * @return The first repetition of repeating field {@link #section}, creating it if it does not already exist {3}
1522         */
1523        public SectionComponent getSectionFirstRep() { 
1524          if (getSection().isEmpty()) {
1525            addSection();
1526          }
1527          return getSection().get(0);
1528        }
1529
1530        protected void listChildren(List<Property> children) {
1531          super.listChildren(children);
1532          children.add(new Property("title", "string", "The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.", 0, 1, title));
1533          children.add(new Property("code", "CodeableConcept", "A code identifying the kind of content contained within the section. This must be consistent with the section title.", 0, 1, code));
1534          children.add(new Property("author", "Reference(Practitioner|PractitionerRole|Device|Patient|RelatedPerson|Organization)", "Identifies who is responsible for the information in this section, not necessarily who typed it in.", 0, java.lang.Integer.MAX_VALUE, author));
1535          children.add(new Property("focus", "Reference(Any)", "The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources).", 0, 1, focus));
1536          children.add(new Property("text", "Narrative", "A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative.", 0, 1, text));
1537          children.add(new Property("mode", "code", "How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.", 0, 1, mode));
1538          children.add(new Property("orderedBy", "CodeableConcept", "Specifies the order applied to the items in the section entries.", 0, 1, orderedBy));
1539          children.add(new Property("entry", "Reference(Any)", "A reference to the actual resource from which the narrative in the section is derived.", 0, java.lang.Integer.MAX_VALUE, entry));
1540          children.add(new Property("emptyReason", "CodeableConcept", "If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.", 0, 1, emptyReason));
1541          children.add(new Property("section", "@Composition.section", "A nested sub-section within this section.", 0, java.lang.Integer.MAX_VALUE, section));
1542        }
1543
1544        @Override
1545        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1546          switch (_hash) {
1547          case 110371416: /*title*/  return new Property("title", "string", "The label for this particular section.  This will be part of the rendered content for the document, and is often used to build a table of contents.", 0, 1, title);
1548          case 3059181: /*code*/  return new Property("code", "CodeableConcept", "A code identifying the kind of content contained within the section. This must be consistent with the section title.", 0, 1, code);
1549          case -1406328437: /*author*/  return new Property("author", "Reference(Practitioner|PractitionerRole|Device|Patient|RelatedPerson|Organization)", "Identifies who is responsible for the information in this section, not necessarily who typed it in.", 0, java.lang.Integer.MAX_VALUE, author);
1550          case 97604824: /*focus*/  return new Property("focus", "Reference(Any)", "The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources).", 0, 1, focus);
1551          case 3556653: /*text*/  return new Property("text", "Narrative", "A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative.", 0, 1, text);
1552          case 3357091: /*mode*/  return new Property("mode", "code", "How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.", 0, 1, mode);
1553          case -391079516: /*orderedBy*/  return new Property("orderedBy", "CodeableConcept", "Specifies the order applied to the items in the section entries.", 0, 1, orderedBy);
1554          case 96667762: /*entry*/  return new Property("entry", "Reference(Any)", "A reference to the actual resource from which the narrative in the section is derived.", 0, java.lang.Integer.MAX_VALUE, entry);
1555          case 1140135409: /*emptyReason*/  return new Property("emptyReason", "CodeableConcept", "If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.", 0, 1, emptyReason);
1556          case 1970241253: /*section*/  return new Property("section", "@Composition.section", "A nested sub-section within this section.", 0, java.lang.Integer.MAX_VALUE, section);
1557          default: return super.getNamedProperty(_hash, _name, _checkValid);
1558          }
1559
1560        }
1561
1562      @Override
1563      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1564        switch (hash) {
1565        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
1566        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
1567        case -1406328437: /*author*/ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // Reference
1568        case 97604824: /*focus*/ return this.focus == null ? new Base[0] : new Base[] {this.focus}; // Reference
1569        case 3556653: /*text*/ return this.text == null ? new Base[0] : new Base[] {this.text}; // Narrative
1570        case 3357091: /*mode*/ return this.mode == null ? new Base[0] : new Base[] {this.mode}; // Enumeration<ListMode>
1571        case -391079516: /*orderedBy*/ return this.orderedBy == null ? new Base[0] : new Base[] {this.orderedBy}; // CodeableConcept
1572        case 96667762: /*entry*/ return this.entry == null ? new Base[0] : this.entry.toArray(new Base[this.entry.size()]); // Reference
1573        case 1140135409: /*emptyReason*/ return this.emptyReason == null ? new Base[0] : new Base[] {this.emptyReason}; // CodeableConcept
1574        case 1970241253: /*section*/ return this.section == null ? new Base[0] : this.section.toArray(new Base[this.section.size()]); // SectionComponent
1575        default: return super.getProperty(hash, name, checkValid);
1576        }
1577
1578      }
1579
1580      @Override
1581      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1582        switch (hash) {
1583        case 110371416: // title
1584          this.title = TypeConvertor.castToString(value); // StringType
1585          return value;
1586        case 3059181: // code
1587          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1588          return value;
1589        case -1406328437: // author
1590          this.getAuthor().add(TypeConvertor.castToReference(value)); // Reference
1591          return value;
1592        case 97604824: // focus
1593          this.focus = TypeConvertor.castToReference(value); // Reference
1594          return value;
1595        case 3556653: // text
1596          this.text = TypeConvertor.castToNarrative(value); // Narrative
1597          return value;
1598        case 3357091: // mode
1599          value = new ListModeEnumFactory().fromType(TypeConvertor.castToCode(value));
1600          this.mode = (Enumeration) value; // Enumeration<ListMode>
1601          return value;
1602        case -391079516: // orderedBy
1603          this.orderedBy = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1604          return value;
1605        case 96667762: // entry
1606          this.getEntry().add(TypeConvertor.castToReference(value)); // Reference
1607          return value;
1608        case 1140135409: // emptyReason
1609          this.emptyReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1610          return value;
1611        case 1970241253: // section
1612          this.getSection().add((SectionComponent) value); // SectionComponent
1613          return value;
1614        default: return super.setProperty(hash, name, value);
1615        }
1616
1617      }
1618
1619      @Override
1620      public Base setProperty(String name, Base value) throws FHIRException {
1621        if (name.equals("title")) {
1622          this.title = TypeConvertor.castToString(value); // StringType
1623        } else if (name.equals("code")) {
1624          this.code = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1625        } else if (name.equals("author")) {
1626          this.getAuthor().add(TypeConvertor.castToReference(value));
1627        } else if (name.equals("focus")) {
1628          this.focus = TypeConvertor.castToReference(value); // Reference
1629        } else if (name.equals("text")) {
1630          this.text = TypeConvertor.castToNarrative(value); // Narrative
1631        } else if (name.equals("mode")) {
1632          value = new ListModeEnumFactory().fromType(TypeConvertor.castToCode(value));
1633          this.mode = (Enumeration) value; // Enumeration<ListMode>
1634        } else if (name.equals("orderedBy")) {
1635          this.orderedBy = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1636        } else if (name.equals("entry")) {
1637          this.getEntry().add(TypeConvertor.castToReference(value));
1638        } else if (name.equals("emptyReason")) {
1639          this.emptyReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1640        } else if (name.equals("section")) {
1641          this.getSection().add((SectionComponent) value);
1642        } else
1643          return super.setProperty(name, value);
1644        return value;
1645      }
1646
1647      @Override
1648      public Base makeProperty(int hash, String name) throws FHIRException {
1649        switch (hash) {
1650        case 110371416:  return getTitleElement();
1651        case 3059181:  return getCode();
1652        case -1406328437:  return addAuthor(); 
1653        case 97604824:  return getFocus();
1654        case 3556653:  return getText();
1655        case 3357091:  return getModeElement();
1656        case -391079516:  return getOrderedBy();
1657        case 96667762:  return addEntry(); 
1658        case 1140135409:  return getEmptyReason();
1659        case 1970241253:  return addSection(); 
1660        default: return super.makeProperty(hash, name);
1661        }
1662
1663      }
1664
1665      @Override
1666      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1667        switch (hash) {
1668        case 110371416: /*title*/ return new String[] {"string"};
1669        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
1670        case -1406328437: /*author*/ return new String[] {"Reference"};
1671        case 97604824: /*focus*/ return new String[] {"Reference"};
1672        case 3556653: /*text*/ return new String[] {"Narrative"};
1673        case 3357091: /*mode*/ return new String[] {"code"};
1674        case -391079516: /*orderedBy*/ return new String[] {"CodeableConcept"};
1675        case 96667762: /*entry*/ return new String[] {"Reference"};
1676        case 1140135409: /*emptyReason*/ return new String[] {"CodeableConcept"};
1677        case 1970241253: /*section*/ return new String[] {"@Composition.section"};
1678        default: return super.getTypesForProperty(hash, name);
1679        }
1680
1681      }
1682
1683      @Override
1684      public Base addChild(String name) throws FHIRException {
1685        if (name.equals("title")) {
1686          throw new FHIRException("Cannot call addChild on a primitive type Composition.section.title");
1687        }
1688        else if (name.equals("code")) {
1689          this.code = new CodeableConcept();
1690          return this.code;
1691        }
1692        else if (name.equals("author")) {
1693          return addAuthor();
1694        }
1695        else if (name.equals("focus")) {
1696          this.focus = new Reference();
1697          return this.focus;
1698        }
1699        else if (name.equals("text")) {
1700          this.text = new Narrative();
1701          return this.text;
1702        }
1703        else if (name.equals("mode")) {
1704          throw new FHIRException("Cannot call addChild on a primitive type Composition.section.mode");
1705        }
1706        else if (name.equals("orderedBy")) {
1707          this.orderedBy = new CodeableConcept();
1708          return this.orderedBy;
1709        }
1710        else if (name.equals("entry")) {
1711          return addEntry();
1712        }
1713        else if (name.equals("emptyReason")) {
1714          this.emptyReason = new CodeableConcept();
1715          return this.emptyReason;
1716        }
1717        else if (name.equals("section")) {
1718          return addSection();
1719        }
1720        else
1721          return super.addChild(name);
1722      }
1723
1724      public SectionComponent copy() {
1725        SectionComponent dst = new SectionComponent();
1726        copyValues(dst);
1727        return dst;
1728      }
1729
1730      public void copyValues(SectionComponent dst) {
1731        super.copyValues(dst);
1732        dst.title = title == null ? null : title.copy();
1733        dst.code = code == null ? null : code.copy();
1734        if (author != null) {
1735          dst.author = new ArrayList<Reference>();
1736          for (Reference i : author)
1737            dst.author.add(i.copy());
1738        };
1739        dst.focus = focus == null ? null : focus.copy();
1740        dst.text = text == null ? null : text.copy();
1741        dst.mode = mode == null ? null : mode.copy();
1742        dst.orderedBy = orderedBy == null ? null : orderedBy.copy();
1743        if (entry != null) {
1744          dst.entry = new ArrayList<Reference>();
1745          for (Reference i : entry)
1746            dst.entry.add(i.copy());
1747        };
1748        dst.emptyReason = emptyReason == null ? null : emptyReason.copy();
1749        if (section != null) {
1750          dst.section = new ArrayList<SectionComponent>();
1751          for (SectionComponent i : section)
1752            dst.section.add(i.copy());
1753        };
1754      }
1755
1756      @Override
1757      public boolean equalsDeep(Base other_) {
1758        if (!super.equalsDeep(other_))
1759          return false;
1760        if (!(other_ instanceof SectionComponent))
1761          return false;
1762        SectionComponent o = (SectionComponent) other_;
1763        return compareDeep(title, o.title, true) && compareDeep(code, o.code, true) && compareDeep(author, o.author, true)
1764           && compareDeep(focus, o.focus, true) && compareDeep(text, o.text, true) && compareDeep(mode, o.mode, true)
1765           && compareDeep(orderedBy, o.orderedBy, true) && compareDeep(entry, o.entry, true) && compareDeep(emptyReason, o.emptyReason, true)
1766           && compareDeep(section, o.section, true);
1767      }
1768
1769      @Override
1770      public boolean equalsShallow(Base other_) {
1771        if (!super.equalsShallow(other_))
1772          return false;
1773        if (!(other_ instanceof SectionComponent))
1774          return false;
1775        SectionComponent o = (SectionComponent) other_;
1776        return compareValues(title, o.title, true) && compareValues(mode, o.mode, true);
1777      }
1778
1779      public boolean isEmpty() {
1780        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(title, code, author, focus
1781          , text, mode, orderedBy, entry, emptyReason, section);
1782      }
1783
1784  public String fhirType() {
1785    return "Composition.section";
1786
1787  }
1788
1789  }
1790
1791    /**
1792     * A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.
1793     */
1794    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=1, modifier=false, summary=true)
1795    @Description(shortDefinition="Version-independent identifier for the Composition", formalDefinition="A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time." )
1796    protected Identifier identifier;
1797
1798    /**
1799     * The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.
1800     */
1801    @Child(name = "status", type = {CodeType.class}, order=1, min=1, max=1, modifier=true, summary=true)
1802    @Description(shortDefinition="preliminary | final | amended | entered-in-error", formalDefinition="The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document." )
1803    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/composition-status")
1804    protected Enumeration<CompositionStatus> status;
1805
1806    /**
1807     * Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.
1808     */
1809    @Child(name = "type", type = {CodeableConcept.class}, order=2, min=1, max=1, modifier=false, summary=true)
1810    @Description(shortDefinition="Kind of composition (LOINC if possible)", formalDefinition="Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition." )
1811    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/doc-typecodes")
1812    protected CodeableConcept type;
1813
1814    /**
1815     * A categorization for the type of the composition - helps for indexing and searching. This may be implied by or derived from the code specified in the Composition Type.
1816     */
1817    @Child(name = "category", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1818    @Description(shortDefinition="Categorization of Composition", formalDefinition="A categorization for the type of the composition - helps for indexing and searching. This may be implied by or derived from the code specified in the Composition Type." )
1819    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/document-classcodes")
1820    protected List<CodeableConcept> category;
1821
1822    /**
1823     * Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).
1824     */
1825    @Child(name = "subject", type = {Reference.class}, order=4, min=0, max=1, modifier=false, summary=true)
1826    @Description(shortDefinition="Who and/or what the composition is about", formalDefinition="Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure)." )
1827    protected Reference subject;
1828
1829    /**
1830     * Describes the clinical encounter or type of care this documentation is associated with.
1831     */
1832    @Child(name = "encounter", type = {Encounter.class}, order=5, min=0, max=1, modifier=false, summary=true)
1833    @Description(shortDefinition="Context of the Composition", formalDefinition="Describes the clinical encounter or type of care this documentation is associated with." )
1834    protected Reference encounter;
1835
1836    /**
1837     * The composition editing time, when the composition was last logically changed by the author.
1838     */
1839    @Child(name = "date", type = {DateTimeType.class}, order=6, min=1, max=1, modifier=false, summary=true)
1840    @Description(shortDefinition="Composition editing time", formalDefinition="The composition editing time, when the composition was last logically changed by the author." )
1841    protected DateTimeType date;
1842
1843    /**
1844     * Identifies who is responsible for the information in the composition, not necessarily who typed it in.
1845     */
1846    @Child(name = "author", type = {Practitioner.class, PractitionerRole.class, Device.class, Patient.class, RelatedPerson.class, Organization.class}, order=7, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1847    @Description(shortDefinition="Who and/or what authored the composition", formalDefinition="Identifies who is responsible for the information in the composition, not necessarily who typed it in." )
1848    protected List<Reference> author;
1849
1850    /**
1851     * Official human-readable label for the composition.
1852     */
1853    @Child(name = "title", type = {StringType.class}, order=8, min=1, max=1, modifier=false, summary=true)
1854    @Description(shortDefinition="Human Readable name/title", formalDefinition="Official human-readable label for the composition." )
1855    protected StringType title;
1856
1857    /**
1858     * The code specifying the level of confidentiality of the Composition.
1859     */
1860    @Child(name = "confidentiality", type = {CodeType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1861    @Description(shortDefinition="As defined by affinity domain", formalDefinition="The code specifying the level of confidentiality of the Composition." )
1862    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-Confidentiality")
1863    protected CodeType confidentiality;
1864
1865    /**
1866     * A participant who has attested to the accuracy of the composition/document.
1867     */
1868    @Child(name = "attester", type = {}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1869    @Description(shortDefinition="Attests to accuracy of composition", formalDefinition="A participant who has attested to the accuracy of the composition/document." )
1870    protected List<CompositionAttesterComponent> attester;
1871
1872    /**
1873     * Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.
1874     */
1875    @Child(name = "custodian", type = {Organization.class}, order=11, min=0, max=1, modifier=false, summary=true)
1876    @Description(shortDefinition="Organization which maintains the composition", formalDefinition="Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information." )
1877    protected Reference custodian;
1878
1879    /**
1880     * Relationships that this composition has with other compositions or documents that already exist.
1881     */
1882    @Child(name = "relatesTo", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1883    @Description(shortDefinition="Relationships to other compositions/documents", formalDefinition="Relationships that this composition has with other compositions or documents that already exist." )
1884    protected List<CompositionRelatesToComponent> relatesTo;
1885
1886    /**
1887     * The clinical service, such as a colonoscopy or an appendectomy, being documented.
1888     */
1889    @Child(name = "event", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1890    @Description(shortDefinition="The clinical service(s) being documented", formalDefinition="The clinical service, such as a colonoscopy or an appendectomy, being documented." )
1891    protected List<CompositionEventComponent> event;
1892
1893    /**
1894     * The root of the sections that make up the composition.
1895     */
1896    @Child(name = "section", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1897    @Description(shortDefinition="Composition is broken into sections", formalDefinition="The root of the sections that make up the composition." )
1898    protected List<SectionComponent> section;
1899
1900    private static final long serialVersionUID = 1733513890L;
1901
1902  /**
1903   * Constructor
1904   */
1905    public Composition() {
1906      super();
1907    }
1908
1909  /**
1910   * Constructor
1911   */
1912    public Composition(CompositionStatus status, CodeableConcept type, Date date, Reference author, String title) {
1913      super();
1914      this.setStatus(status);
1915      this.setType(type);
1916      this.setDate(date);
1917      this.addAuthor(author);
1918      this.setTitle(title);
1919    }
1920
1921    /**
1922     * @return {@link #identifier} (A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.)
1923     */
1924    public Identifier getIdentifier() { 
1925      if (this.identifier == null)
1926        if (Configuration.errorOnAutoCreate())
1927          throw new Error("Attempt to auto-create Composition.identifier");
1928        else if (Configuration.doAutoCreate())
1929          this.identifier = new Identifier(); // cc
1930      return this.identifier;
1931    }
1932
1933    public boolean hasIdentifier() { 
1934      return this.identifier != null && !this.identifier.isEmpty();
1935    }
1936
1937    /**
1938     * @param value {@link #identifier} (A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.)
1939     */
1940    public Composition setIdentifier(Identifier value) { 
1941      this.identifier = value;
1942      return this;
1943    }
1944
1945    /**
1946     * @return {@link #status} (The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1947     */
1948    public Enumeration<CompositionStatus> getStatusElement() { 
1949      if (this.status == null)
1950        if (Configuration.errorOnAutoCreate())
1951          throw new Error("Attempt to auto-create Composition.status");
1952        else if (Configuration.doAutoCreate())
1953          this.status = new Enumeration<CompositionStatus>(new CompositionStatusEnumFactory()); // bb
1954      return this.status;
1955    }
1956
1957    public boolean hasStatusElement() { 
1958      return this.status != null && !this.status.isEmpty();
1959    }
1960
1961    public boolean hasStatus() { 
1962      return this.status != null && !this.status.isEmpty();
1963    }
1964
1965    /**
1966     * @param value {@link #status} (The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1967     */
1968    public Composition setStatusElement(Enumeration<CompositionStatus> value) { 
1969      this.status = value;
1970      return this;
1971    }
1972
1973    /**
1974     * @return The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.
1975     */
1976    public CompositionStatus getStatus() { 
1977      return this.status == null ? null : this.status.getValue();
1978    }
1979
1980    /**
1981     * @param value The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.
1982     */
1983    public Composition setStatus(CompositionStatus value) { 
1984        if (this.status == null)
1985          this.status = new Enumeration<CompositionStatus>(new CompositionStatusEnumFactory());
1986        this.status.setValue(value);
1987      return this;
1988    }
1989
1990    /**
1991     * @return {@link #type} (Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.)
1992     */
1993    public CodeableConcept getType() { 
1994      if (this.type == null)
1995        if (Configuration.errorOnAutoCreate())
1996          throw new Error("Attempt to auto-create Composition.type");
1997        else if (Configuration.doAutoCreate())
1998          this.type = new CodeableConcept(); // cc
1999      return this.type;
2000    }
2001
2002    public boolean hasType() { 
2003      return this.type != null && !this.type.isEmpty();
2004    }
2005
2006    /**
2007     * @param value {@link #type} (Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.)
2008     */
2009    public Composition setType(CodeableConcept value) { 
2010      this.type = value;
2011      return this;
2012    }
2013
2014    /**
2015     * @return {@link #category} (A categorization for the type of the composition - helps for indexing and searching. This may be implied by or derived from the code specified in the Composition Type.)
2016     */
2017    public List<CodeableConcept> getCategory() { 
2018      if (this.category == null)
2019        this.category = new ArrayList<CodeableConcept>();
2020      return this.category;
2021    }
2022
2023    /**
2024     * @return Returns a reference to <code>this</code> for easy method chaining
2025     */
2026    public Composition setCategory(List<CodeableConcept> theCategory) { 
2027      this.category = theCategory;
2028      return this;
2029    }
2030
2031    public boolean hasCategory() { 
2032      if (this.category == null)
2033        return false;
2034      for (CodeableConcept item : this.category)
2035        if (!item.isEmpty())
2036          return true;
2037      return false;
2038    }
2039
2040    public CodeableConcept addCategory() { //3
2041      CodeableConcept t = new CodeableConcept();
2042      if (this.category == null)
2043        this.category = new ArrayList<CodeableConcept>();
2044      this.category.add(t);
2045      return t;
2046    }
2047
2048    public Composition addCategory(CodeableConcept t) { //3
2049      if (t == null)
2050        return this;
2051      if (this.category == null)
2052        this.category = new ArrayList<CodeableConcept>();
2053      this.category.add(t);
2054      return this;
2055    }
2056
2057    /**
2058     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist {3}
2059     */
2060    public CodeableConcept getCategoryFirstRep() { 
2061      if (getCategory().isEmpty()) {
2062        addCategory();
2063      }
2064      return getCategory().get(0);
2065    }
2066
2067    /**
2068     * @return {@link #subject} (Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).)
2069     */
2070    public Reference getSubject() { 
2071      if (this.subject == null)
2072        if (Configuration.errorOnAutoCreate())
2073          throw new Error("Attempt to auto-create Composition.subject");
2074        else if (Configuration.doAutoCreate())
2075          this.subject = new Reference(); // cc
2076      return this.subject;
2077    }
2078
2079    public boolean hasSubject() { 
2080      return this.subject != null && !this.subject.isEmpty();
2081    }
2082
2083    /**
2084     * @param value {@link #subject} (Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).)
2085     */
2086    public Composition setSubject(Reference value) { 
2087      this.subject = value;
2088      return this;
2089    }
2090
2091    /**
2092     * @return {@link #encounter} (Describes the clinical encounter or type of care this documentation is associated with.)
2093     */
2094    public Reference getEncounter() { 
2095      if (this.encounter == null)
2096        if (Configuration.errorOnAutoCreate())
2097          throw new Error("Attempt to auto-create Composition.encounter");
2098        else if (Configuration.doAutoCreate())
2099          this.encounter = new Reference(); // cc
2100      return this.encounter;
2101    }
2102
2103    public boolean hasEncounter() { 
2104      return this.encounter != null && !this.encounter.isEmpty();
2105    }
2106
2107    /**
2108     * @param value {@link #encounter} (Describes the clinical encounter or type of care this documentation is associated with.)
2109     */
2110    public Composition setEncounter(Reference value) { 
2111      this.encounter = value;
2112      return this;
2113    }
2114
2115    /**
2116     * @return {@link #date} (The composition editing time, when the composition was last logically changed by the author.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2117     */
2118    public DateTimeType getDateElement() { 
2119      if (this.date == null)
2120        if (Configuration.errorOnAutoCreate())
2121          throw new Error("Attempt to auto-create Composition.date");
2122        else if (Configuration.doAutoCreate())
2123          this.date = new DateTimeType(); // bb
2124      return this.date;
2125    }
2126
2127    public boolean hasDateElement() { 
2128      return this.date != null && !this.date.isEmpty();
2129    }
2130
2131    public boolean hasDate() { 
2132      return this.date != null && !this.date.isEmpty();
2133    }
2134
2135    /**
2136     * @param value {@link #date} (The composition editing time, when the composition was last logically changed by the author.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
2137     */
2138    public Composition setDateElement(DateTimeType value) { 
2139      this.date = value;
2140      return this;
2141    }
2142
2143    /**
2144     * @return The composition editing time, when the composition was last logically changed by the author.
2145     */
2146    public Date getDate() { 
2147      return this.date == null ? null : this.date.getValue();
2148    }
2149
2150    /**
2151     * @param value The composition editing time, when the composition was last logically changed by the author.
2152     */
2153    public Composition setDate(Date value) { 
2154        if (this.date == null)
2155          this.date = new DateTimeType();
2156        this.date.setValue(value);
2157      return this;
2158    }
2159
2160    /**
2161     * @return {@link #author} (Identifies who is responsible for the information in the composition, not necessarily who typed it in.)
2162     */
2163    public List<Reference> getAuthor() { 
2164      if (this.author == null)
2165        this.author = new ArrayList<Reference>();
2166      return this.author;
2167    }
2168
2169    /**
2170     * @return Returns a reference to <code>this</code> for easy method chaining
2171     */
2172    public Composition setAuthor(List<Reference> theAuthor) { 
2173      this.author = theAuthor;
2174      return this;
2175    }
2176
2177    public boolean hasAuthor() { 
2178      if (this.author == null)
2179        return false;
2180      for (Reference item : this.author)
2181        if (!item.isEmpty())
2182          return true;
2183      return false;
2184    }
2185
2186    public Reference addAuthor() { //3
2187      Reference t = new Reference();
2188      if (this.author == null)
2189        this.author = new ArrayList<Reference>();
2190      this.author.add(t);
2191      return t;
2192    }
2193
2194    public Composition addAuthor(Reference t) { //3
2195      if (t == null)
2196        return this;
2197      if (this.author == null)
2198        this.author = new ArrayList<Reference>();
2199      this.author.add(t);
2200      return this;
2201    }
2202
2203    /**
2204     * @return The first repetition of repeating field {@link #author}, creating it if it does not already exist {3}
2205     */
2206    public Reference getAuthorFirstRep() { 
2207      if (getAuthor().isEmpty()) {
2208        addAuthor();
2209      }
2210      return getAuthor().get(0);
2211    }
2212
2213    /**
2214     * @return {@link #title} (Official human-readable label for the composition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2215     */
2216    public StringType getTitleElement() { 
2217      if (this.title == null)
2218        if (Configuration.errorOnAutoCreate())
2219          throw new Error("Attempt to auto-create Composition.title");
2220        else if (Configuration.doAutoCreate())
2221          this.title = new StringType(); // bb
2222      return this.title;
2223    }
2224
2225    public boolean hasTitleElement() { 
2226      return this.title != null && !this.title.isEmpty();
2227    }
2228
2229    public boolean hasTitle() { 
2230      return this.title != null && !this.title.isEmpty();
2231    }
2232
2233    /**
2234     * @param value {@link #title} (Official human-readable label for the composition.). This is the underlying object with id, value and extensions. The accessor "getTitle" gives direct access to the value
2235     */
2236    public Composition setTitleElement(StringType value) { 
2237      this.title = value;
2238      return this;
2239    }
2240
2241    /**
2242     * @return Official human-readable label for the composition.
2243     */
2244    public String getTitle() { 
2245      return this.title == null ? null : this.title.getValue();
2246    }
2247
2248    /**
2249     * @param value Official human-readable label for the composition.
2250     */
2251    public Composition setTitle(String value) { 
2252        if (this.title == null)
2253          this.title = new StringType();
2254        this.title.setValue(value);
2255      return this;
2256    }
2257
2258    /**
2259     * @return {@link #confidentiality} (The code specifying the level of confidentiality of the Composition.). This is the underlying object with id, value and extensions. The accessor "getConfidentiality" gives direct access to the value
2260     */
2261    public CodeType getConfidentialityElement() { 
2262      if (this.confidentiality == null)
2263        if (Configuration.errorOnAutoCreate())
2264          throw new Error("Attempt to auto-create Composition.confidentiality");
2265        else if (Configuration.doAutoCreate())
2266          this.confidentiality = new CodeType(); // bb
2267      return this.confidentiality;
2268    }
2269
2270    public boolean hasConfidentialityElement() { 
2271      return this.confidentiality != null && !this.confidentiality.isEmpty();
2272    }
2273
2274    public boolean hasConfidentiality() { 
2275      return this.confidentiality != null && !this.confidentiality.isEmpty();
2276    }
2277
2278    /**
2279     * @param value {@link #confidentiality} (The code specifying the level of confidentiality of the Composition.). This is the underlying object with id, value and extensions. The accessor "getConfidentiality" gives direct access to the value
2280     */
2281    public Composition setConfidentialityElement(CodeType value) { 
2282      this.confidentiality = value;
2283      return this;
2284    }
2285
2286    /**
2287     * @return The code specifying the level of confidentiality of the Composition.
2288     */
2289    public String getConfidentiality() { 
2290      return this.confidentiality == null ? null : this.confidentiality.getValue();
2291    }
2292
2293    /**
2294     * @param value The code specifying the level of confidentiality of the Composition.
2295     */
2296    public Composition setConfidentiality(String value) { 
2297      if (Utilities.noString(value))
2298        this.confidentiality = null;
2299      else {
2300        if (this.confidentiality == null)
2301          this.confidentiality = new CodeType();
2302        this.confidentiality.setValue(value);
2303      }
2304      return this;
2305    }
2306
2307    /**
2308     * @return {@link #attester} (A participant who has attested to the accuracy of the composition/document.)
2309     */
2310    public List<CompositionAttesterComponent> getAttester() { 
2311      if (this.attester == null)
2312        this.attester = new ArrayList<CompositionAttesterComponent>();
2313      return this.attester;
2314    }
2315
2316    /**
2317     * @return Returns a reference to <code>this</code> for easy method chaining
2318     */
2319    public Composition setAttester(List<CompositionAttesterComponent> theAttester) { 
2320      this.attester = theAttester;
2321      return this;
2322    }
2323
2324    public boolean hasAttester() { 
2325      if (this.attester == null)
2326        return false;
2327      for (CompositionAttesterComponent item : this.attester)
2328        if (!item.isEmpty())
2329          return true;
2330      return false;
2331    }
2332
2333    public CompositionAttesterComponent addAttester() { //3
2334      CompositionAttesterComponent t = new CompositionAttesterComponent();
2335      if (this.attester == null)
2336        this.attester = new ArrayList<CompositionAttesterComponent>();
2337      this.attester.add(t);
2338      return t;
2339    }
2340
2341    public Composition addAttester(CompositionAttesterComponent t) { //3
2342      if (t == null)
2343        return this;
2344      if (this.attester == null)
2345        this.attester = new ArrayList<CompositionAttesterComponent>();
2346      this.attester.add(t);
2347      return this;
2348    }
2349
2350    /**
2351     * @return The first repetition of repeating field {@link #attester}, creating it if it does not already exist {3}
2352     */
2353    public CompositionAttesterComponent getAttesterFirstRep() { 
2354      if (getAttester().isEmpty()) {
2355        addAttester();
2356      }
2357      return getAttester().get(0);
2358    }
2359
2360    /**
2361     * @return {@link #custodian} (Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.)
2362     */
2363    public Reference getCustodian() { 
2364      if (this.custodian == null)
2365        if (Configuration.errorOnAutoCreate())
2366          throw new Error("Attempt to auto-create Composition.custodian");
2367        else if (Configuration.doAutoCreate())
2368          this.custodian = new Reference(); // cc
2369      return this.custodian;
2370    }
2371
2372    public boolean hasCustodian() { 
2373      return this.custodian != null && !this.custodian.isEmpty();
2374    }
2375
2376    /**
2377     * @param value {@link #custodian} (Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.)
2378     */
2379    public Composition setCustodian(Reference value) { 
2380      this.custodian = value;
2381      return this;
2382    }
2383
2384    /**
2385     * @return {@link #relatesTo} (Relationships that this composition has with other compositions or documents that already exist.)
2386     */
2387    public List<CompositionRelatesToComponent> getRelatesTo() { 
2388      if (this.relatesTo == null)
2389        this.relatesTo = new ArrayList<CompositionRelatesToComponent>();
2390      return this.relatesTo;
2391    }
2392
2393    /**
2394     * @return Returns a reference to <code>this</code> for easy method chaining
2395     */
2396    public Composition setRelatesTo(List<CompositionRelatesToComponent> theRelatesTo) { 
2397      this.relatesTo = theRelatesTo;
2398      return this;
2399    }
2400
2401    public boolean hasRelatesTo() { 
2402      if (this.relatesTo == null)
2403        return false;
2404      for (CompositionRelatesToComponent item : this.relatesTo)
2405        if (!item.isEmpty())
2406          return true;
2407      return false;
2408    }
2409
2410    public CompositionRelatesToComponent addRelatesTo() { //3
2411      CompositionRelatesToComponent t = new CompositionRelatesToComponent();
2412      if (this.relatesTo == null)
2413        this.relatesTo = new ArrayList<CompositionRelatesToComponent>();
2414      this.relatesTo.add(t);
2415      return t;
2416    }
2417
2418    public Composition addRelatesTo(CompositionRelatesToComponent t) { //3
2419      if (t == null)
2420        return this;
2421      if (this.relatesTo == null)
2422        this.relatesTo = new ArrayList<CompositionRelatesToComponent>();
2423      this.relatesTo.add(t);
2424      return this;
2425    }
2426
2427    /**
2428     * @return The first repetition of repeating field {@link #relatesTo}, creating it if it does not already exist {3}
2429     */
2430    public CompositionRelatesToComponent getRelatesToFirstRep() { 
2431      if (getRelatesTo().isEmpty()) {
2432        addRelatesTo();
2433      }
2434      return getRelatesTo().get(0);
2435    }
2436
2437    /**
2438     * @return {@link #event} (The clinical service, such as a colonoscopy or an appendectomy, being documented.)
2439     */
2440    public List<CompositionEventComponent> getEvent() { 
2441      if (this.event == null)
2442        this.event = new ArrayList<CompositionEventComponent>();
2443      return this.event;
2444    }
2445
2446    /**
2447     * @return Returns a reference to <code>this</code> for easy method chaining
2448     */
2449    public Composition setEvent(List<CompositionEventComponent> theEvent) { 
2450      this.event = theEvent;
2451      return this;
2452    }
2453
2454    public boolean hasEvent() { 
2455      if (this.event == null)
2456        return false;
2457      for (CompositionEventComponent item : this.event)
2458        if (!item.isEmpty())
2459          return true;
2460      return false;
2461    }
2462
2463    public CompositionEventComponent addEvent() { //3
2464      CompositionEventComponent t = new CompositionEventComponent();
2465      if (this.event == null)
2466        this.event = new ArrayList<CompositionEventComponent>();
2467      this.event.add(t);
2468      return t;
2469    }
2470
2471    public Composition addEvent(CompositionEventComponent t) { //3
2472      if (t == null)
2473        return this;
2474      if (this.event == null)
2475        this.event = new ArrayList<CompositionEventComponent>();
2476      this.event.add(t);
2477      return this;
2478    }
2479
2480    /**
2481     * @return The first repetition of repeating field {@link #event}, creating it if it does not already exist {3}
2482     */
2483    public CompositionEventComponent getEventFirstRep() { 
2484      if (getEvent().isEmpty()) {
2485        addEvent();
2486      }
2487      return getEvent().get(0);
2488    }
2489
2490    /**
2491     * @return {@link #section} (The root of the sections that make up the composition.)
2492     */
2493    public List<SectionComponent> getSection() { 
2494      if (this.section == null)
2495        this.section = new ArrayList<SectionComponent>();
2496      return this.section;
2497    }
2498
2499    /**
2500     * @return Returns a reference to <code>this</code> for easy method chaining
2501     */
2502    public Composition setSection(List<SectionComponent> theSection) { 
2503      this.section = theSection;
2504      return this;
2505    }
2506
2507    public boolean hasSection() { 
2508      if (this.section == null)
2509        return false;
2510      for (SectionComponent item : this.section)
2511        if (!item.isEmpty())
2512          return true;
2513      return false;
2514    }
2515
2516    public SectionComponent addSection() { //3
2517      SectionComponent t = new SectionComponent();
2518      if (this.section == null)
2519        this.section = new ArrayList<SectionComponent>();
2520      this.section.add(t);
2521      return t;
2522    }
2523
2524    public Composition addSection(SectionComponent t) { //3
2525      if (t == null)
2526        return this;
2527      if (this.section == null)
2528        this.section = new ArrayList<SectionComponent>();
2529      this.section.add(t);
2530      return this;
2531    }
2532
2533    /**
2534     * @return The first repetition of repeating field {@link #section}, creating it if it does not already exist {3}
2535     */
2536    public SectionComponent getSectionFirstRep() { 
2537      if (getSection().isEmpty()) {
2538        addSection();
2539      }
2540      return getSection().get(0);
2541    }
2542
2543      protected void listChildren(List<Property> children) {
2544        super.listChildren(children);
2545        children.add(new Property("identifier", "Identifier", "A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.", 0, 1, identifier));
2546        children.add(new Property("status", "code", "The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.", 0, 1, status));
2547        children.add(new Property("type", "CodeableConcept", "Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.", 0, 1, type));
2548        children.add(new Property("category", "CodeableConcept", "A categorization for the type of the composition - helps for indexing and searching. This may be implied by or derived from the code specified in the Composition Type.", 0, java.lang.Integer.MAX_VALUE, category));
2549        children.add(new Property("subject", "Reference(Any)", "Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).", 0, 1, subject));
2550        children.add(new Property("encounter", "Reference(Encounter)", "Describes the clinical encounter or type of care this documentation is associated with.", 0, 1, encounter));
2551        children.add(new Property("date", "dateTime", "The composition editing time, when the composition was last logically changed by the author.", 0, 1, date));
2552        children.add(new Property("author", "Reference(Practitioner|PractitionerRole|Device|Patient|RelatedPerson|Organization)", "Identifies who is responsible for the information in the composition, not necessarily who typed it in.", 0, java.lang.Integer.MAX_VALUE, author));
2553        children.add(new Property("title", "string", "Official human-readable label for the composition.", 0, 1, title));
2554        children.add(new Property("confidentiality", "code", "The code specifying the level of confidentiality of the Composition.", 0, 1, confidentiality));
2555        children.add(new Property("attester", "", "A participant who has attested to the accuracy of the composition/document.", 0, java.lang.Integer.MAX_VALUE, attester));
2556        children.add(new Property("custodian", "Reference(Organization)", "Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.", 0, 1, custodian));
2557        children.add(new Property("relatesTo", "", "Relationships that this composition has with other compositions or documents that already exist.", 0, java.lang.Integer.MAX_VALUE, relatesTo));
2558        children.add(new Property("event", "", "The clinical service, such as a colonoscopy or an appendectomy, being documented.", 0, java.lang.Integer.MAX_VALUE, event));
2559        children.add(new Property("section", "", "The root of the sections that make up the composition.", 0, java.lang.Integer.MAX_VALUE, section));
2560      }
2561
2562      @Override
2563      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2564        switch (_hash) {
2565        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.", 0, 1, identifier);
2566        case -892481550: /*status*/  return new Property("status", "code", "The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.", 0, 1, status);
2567        case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.", 0, 1, type);
2568        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "A categorization for the type of the composition - helps for indexing and searching. This may be implied by or derived from the code specified in the Composition Type.", 0, java.lang.Integer.MAX_VALUE, category);
2569        case -1867885268: /*subject*/  return new Property("subject", "Reference(Any)", "Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).", 0, 1, subject);
2570        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "Describes the clinical encounter or type of care this documentation is associated with.", 0, 1, encounter);
2571        case 3076014: /*date*/  return new Property("date", "dateTime", "The composition editing time, when the composition was last logically changed by the author.", 0, 1, date);
2572        case -1406328437: /*author*/  return new Property("author", "Reference(Practitioner|PractitionerRole|Device|Patient|RelatedPerson|Organization)", "Identifies who is responsible for the information in the composition, not necessarily who typed it in.", 0, java.lang.Integer.MAX_VALUE, author);
2573        case 110371416: /*title*/  return new Property("title", "string", "Official human-readable label for the composition.", 0, 1, title);
2574        case -1923018202: /*confidentiality*/  return new Property("confidentiality", "code", "The code specifying the level of confidentiality of the Composition.", 0, 1, confidentiality);
2575        case 542920370: /*attester*/  return new Property("attester", "", "A participant who has attested to the accuracy of the composition/document.", 0, java.lang.Integer.MAX_VALUE, attester);
2576        case 1611297262: /*custodian*/  return new Property("custodian", "Reference(Organization)", "Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.", 0, 1, custodian);
2577        case -7765931: /*relatesTo*/  return new Property("relatesTo", "", "Relationships that this composition has with other compositions or documents that already exist.", 0, java.lang.Integer.MAX_VALUE, relatesTo);
2578        case 96891546: /*event*/  return new Property("event", "", "The clinical service, such as a colonoscopy or an appendectomy, being documented.", 0, java.lang.Integer.MAX_VALUE, event);
2579        case 1970241253: /*section*/  return new Property("section", "", "The root of the sections that make up the composition.", 0, java.lang.Integer.MAX_VALUE, section);
2580        default: return super.getNamedProperty(_hash, _name, _checkValid);
2581        }
2582
2583      }
2584
2585      @Override
2586      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2587        switch (hash) {
2588        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
2589        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<CompositionStatus>
2590        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // CodeableConcept
2591        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
2592        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
2593        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
2594        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2595        case -1406328437: /*author*/ return this.author == null ? new Base[0] : this.author.toArray(new Base[this.author.size()]); // Reference
2596        case 110371416: /*title*/ return this.title == null ? new Base[0] : new Base[] {this.title}; // StringType
2597        case -1923018202: /*confidentiality*/ return this.confidentiality == null ? new Base[0] : new Base[] {this.confidentiality}; // CodeType
2598        case 542920370: /*attester*/ return this.attester == null ? new Base[0] : this.attester.toArray(new Base[this.attester.size()]); // CompositionAttesterComponent
2599        case 1611297262: /*custodian*/ return this.custodian == null ? new Base[0] : new Base[] {this.custodian}; // Reference
2600        case -7765931: /*relatesTo*/ return this.relatesTo == null ? new Base[0] : this.relatesTo.toArray(new Base[this.relatesTo.size()]); // CompositionRelatesToComponent
2601        case 96891546: /*event*/ return this.event == null ? new Base[0] : this.event.toArray(new Base[this.event.size()]); // CompositionEventComponent
2602        case 1970241253: /*section*/ return this.section == null ? new Base[0] : this.section.toArray(new Base[this.section.size()]); // SectionComponent
2603        default: return super.getProperty(hash, name, checkValid);
2604        }
2605
2606      }
2607
2608      @Override
2609      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2610        switch (hash) {
2611        case -1618432855: // identifier
2612          this.identifier = TypeConvertor.castToIdentifier(value); // Identifier
2613          return value;
2614        case -892481550: // status
2615          value = new CompositionStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2616          this.status = (Enumeration) value; // Enumeration<CompositionStatus>
2617          return value;
2618        case 3575610: // type
2619          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2620          return value;
2621        case 50511102: // category
2622          this.getCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2623          return value;
2624        case -1867885268: // subject
2625          this.subject = TypeConvertor.castToReference(value); // Reference
2626          return value;
2627        case 1524132147: // encounter
2628          this.encounter = TypeConvertor.castToReference(value); // Reference
2629          return value;
2630        case 3076014: // date
2631          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2632          return value;
2633        case -1406328437: // author
2634          this.getAuthor().add(TypeConvertor.castToReference(value)); // Reference
2635          return value;
2636        case 110371416: // title
2637          this.title = TypeConvertor.castToString(value); // StringType
2638          return value;
2639        case -1923018202: // confidentiality
2640          this.confidentiality = TypeConvertor.castToCode(value); // CodeType
2641          return value;
2642        case 542920370: // attester
2643          this.getAttester().add((CompositionAttesterComponent) value); // CompositionAttesterComponent
2644          return value;
2645        case 1611297262: // custodian
2646          this.custodian = TypeConvertor.castToReference(value); // Reference
2647          return value;
2648        case -7765931: // relatesTo
2649          this.getRelatesTo().add((CompositionRelatesToComponent) value); // CompositionRelatesToComponent
2650          return value;
2651        case 96891546: // event
2652          this.getEvent().add((CompositionEventComponent) value); // CompositionEventComponent
2653          return value;
2654        case 1970241253: // section
2655          this.getSection().add((SectionComponent) value); // SectionComponent
2656          return value;
2657        default: return super.setProperty(hash, name, value);
2658        }
2659
2660      }
2661
2662      @Override
2663      public Base setProperty(String name, Base value) throws FHIRException {
2664        if (name.equals("identifier")) {
2665          this.identifier = TypeConvertor.castToIdentifier(value); // Identifier
2666        } else if (name.equals("status")) {
2667          value = new CompositionStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2668          this.status = (Enumeration) value; // Enumeration<CompositionStatus>
2669        } else if (name.equals("type")) {
2670          this.type = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2671        } else if (name.equals("category")) {
2672          this.getCategory().add(TypeConvertor.castToCodeableConcept(value));
2673        } else if (name.equals("subject")) {
2674          this.subject = TypeConvertor.castToReference(value); // Reference
2675        } else if (name.equals("encounter")) {
2676          this.encounter = TypeConvertor.castToReference(value); // Reference
2677        } else if (name.equals("date")) {
2678          this.date = TypeConvertor.castToDateTime(value); // DateTimeType
2679        } else if (name.equals("author")) {
2680          this.getAuthor().add(TypeConvertor.castToReference(value));
2681        } else if (name.equals("title")) {
2682          this.title = TypeConvertor.castToString(value); // StringType
2683        } else if (name.equals("confidentiality")) {
2684          this.confidentiality = TypeConvertor.castToCode(value); // CodeType
2685        } else if (name.equals("attester")) {
2686          this.getAttester().add((CompositionAttesterComponent) value);
2687        } else if (name.equals("custodian")) {
2688          this.custodian = TypeConvertor.castToReference(value); // Reference
2689        } else if (name.equals("relatesTo")) {
2690          this.getRelatesTo().add((CompositionRelatesToComponent) value);
2691        } else if (name.equals("event")) {
2692          this.getEvent().add((CompositionEventComponent) value);
2693        } else if (name.equals("section")) {
2694          this.getSection().add((SectionComponent) value);
2695        } else
2696          return super.setProperty(name, value);
2697        return value;
2698      }
2699
2700      @Override
2701      public Base makeProperty(int hash, String name) throws FHIRException {
2702        switch (hash) {
2703        case -1618432855:  return getIdentifier();
2704        case -892481550:  return getStatusElement();
2705        case 3575610:  return getType();
2706        case 50511102:  return addCategory(); 
2707        case -1867885268:  return getSubject();
2708        case 1524132147:  return getEncounter();
2709        case 3076014:  return getDateElement();
2710        case -1406328437:  return addAuthor(); 
2711        case 110371416:  return getTitleElement();
2712        case -1923018202:  return getConfidentialityElement();
2713        case 542920370:  return addAttester(); 
2714        case 1611297262:  return getCustodian();
2715        case -7765931:  return addRelatesTo(); 
2716        case 96891546:  return addEvent(); 
2717        case 1970241253:  return addSection(); 
2718        default: return super.makeProperty(hash, name);
2719        }
2720
2721      }
2722
2723      @Override
2724      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2725        switch (hash) {
2726        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
2727        case -892481550: /*status*/ return new String[] {"code"};
2728        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
2729        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
2730        case -1867885268: /*subject*/ return new String[] {"Reference"};
2731        case 1524132147: /*encounter*/ return new String[] {"Reference"};
2732        case 3076014: /*date*/ return new String[] {"dateTime"};
2733        case -1406328437: /*author*/ return new String[] {"Reference"};
2734        case 110371416: /*title*/ return new String[] {"string"};
2735        case -1923018202: /*confidentiality*/ return new String[] {"code"};
2736        case 542920370: /*attester*/ return new String[] {};
2737        case 1611297262: /*custodian*/ return new String[] {"Reference"};
2738        case -7765931: /*relatesTo*/ return new String[] {};
2739        case 96891546: /*event*/ return new String[] {};
2740        case 1970241253: /*section*/ return new String[] {};
2741        default: return super.getTypesForProperty(hash, name);
2742        }
2743
2744      }
2745
2746      @Override
2747      public Base addChild(String name) throws FHIRException {
2748        if (name.equals("identifier")) {
2749          this.identifier = new Identifier();
2750          return this.identifier;
2751        }
2752        else if (name.equals("status")) {
2753          throw new FHIRException("Cannot call addChild on a primitive type Composition.status");
2754        }
2755        else if (name.equals("type")) {
2756          this.type = new CodeableConcept();
2757          return this.type;
2758        }
2759        else if (name.equals("category")) {
2760          return addCategory();
2761        }
2762        else if (name.equals("subject")) {
2763          this.subject = new Reference();
2764          return this.subject;
2765        }
2766        else if (name.equals("encounter")) {
2767          this.encounter = new Reference();
2768          return this.encounter;
2769        }
2770        else if (name.equals("date")) {
2771          throw new FHIRException("Cannot call addChild on a primitive type Composition.date");
2772        }
2773        else if (name.equals("author")) {
2774          return addAuthor();
2775        }
2776        else if (name.equals("title")) {
2777          throw new FHIRException("Cannot call addChild on a primitive type Composition.title");
2778        }
2779        else if (name.equals("confidentiality")) {
2780          throw new FHIRException("Cannot call addChild on a primitive type Composition.confidentiality");
2781        }
2782        else if (name.equals("attester")) {
2783          return addAttester();
2784        }
2785        else if (name.equals("custodian")) {
2786          this.custodian = new Reference();
2787          return this.custodian;
2788        }
2789        else if (name.equals("relatesTo")) {
2790          return addRelatesTo();
2791        }
2792        else if (name.equals("event")) {
2793          return addEvent();
2794        }
2795        else if (name.equals("section")) {
2796          return addSection();
2797        }
2798        else
2799          return super.addChild(name);
2800      }
2801
2802  public String fhirType() {
2803    return "Composition";
2804
2805  }
2806
2807      public Composition copy() {
2808        Composition dst = new Composition();
2809        copyValues(dst);
2810        return dst;
2811      }
2812
2813      public void copyValues(Composition dst) {
2814        super.copyValues(dst);
2815        dst.identifier = identifier == null ? null : identifier.copy();
2816        dst.status = status == null ? null : status.copy();
2817        dst.type = type == null ? null : type.copy();
2818        if (category != null) {
2819          dst.category = new ArrayList<CodeableConcept>();
2820          for (CodeableConcept i : category)
2821            dst.category.add(i.copy());
2822        };
2823        dst.subject = subject == null ? null : subject.copy();
2824        dst.encounter = encounter == null ? null : encounter.copy();
2825        dst.date = date == null ? null : date.copy();
2826        if (author != null) {
2827          dst.author = new ArrayList<Reference>();
2828          for (Reference i : author)
2829            dst.author.add(i.copy());
2830        };
2831        dst.title = title == null ? null : title.copy();
2832        dst.confidentiality = confidentiality == null ? null : confidentiality.copy();
2833        if (attester != null) {
2834          dst.attester = new ArrayList<CompositionAttesterComponent>();
2835          for (CompositionAttesterComponent i : attester)
2836            dst.attester.add(i.copy());
2837        };
2838        dst.custodian = custodian == null ? null : custodian.copy();
2839        if (relatesTo != null) {
2840          dst.relatesTo = new ArrayList<CompositionRelatesToComponent>();
2841          for (CompositionRelatesToComponent i : relatesTo)
2842            dst.relatesTo.add(i.copy());
2843        };
2844        if (event != null) {
2845          dst.event = new ArrayList<CompositionEventComponent>();
2846          for (CompositionEventComponent i : event)
2847            dst.event.add(i.copy());
2848        };
2849        if (section != null) {
2850          dst.section = new ArrayList<SectionComponent>();
2851          for (SectionComponent i : section)
2852            dst.section.add(i.copy());
2853        };
2854      }
2855
2856      protected Composition typedCopy() {
2857        return copy();
2858      }
2859
2860      @Override
2861      public boolean equalsDeep(Base other_) {
2862        if (!super.equalsDeep(other_))
2863          return false;
2864        if (!(other_ instanceof Composition))
2865          return false;
2866        Composition o = (Composition) other_;
2867        return compareDeep(identifier, o.identifier, true) && compareDeep(status, o.status, true) && compareDeep(type, o.type, true)
2868           && compareDeep(category, o.category, true) && compareDeep(subject, o.subject, true) && compareDeep(encounter, o.encounter, true)
2869           && compareDeep(date, o.date, true) && compareDeep(author, o.author, true) && compareDeep(title, o.title, true)
2870           && compareDeep(confidentiality, o.confidentiality, true) && compareDeep(attester, o.attester, true)
2871           && compareDeep(custodian, o.custodian, true) && compareDeep(relatesTo, o.relatesTo, true) && compareDeep(event, o.event, true)
2872           && compareDeep(section, o.section, true);
2873      }
2874
2875      @Override
2876      public boolean equalsShallow(Base other_) {
2877        if (!super.equalsShallow(other_))
2878          return false;
2879        if (!(other_ instanceof Composition))
2880          return false;
2881        Composition o = (Composition) other_;
2882        return compareValues(status, o.status, true) && compareValues(date, o.date, true) && compareValues(title, o.title, true)
2883           && compareValues(confidentiality, o.confidentiality, true);
2884      }
2885
2886      public boolean isEmpty() {
2887        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, status, type
2888          , category, subject, encounter, date, author, title, confidentiality, attester
2889          , custodian, relatesTo, event, section);
2890      }
2891
2892  @Override
2893  public ResourceType getResourceType() {
2894    return ResourceType.Composition;
2895   }
2896
2897 /**
2898   * Search parameter: <b>attester</b>
2899   * <p>
2900   * Description: <b>Who attested the composition</b><br>
2901   * Type: <b>reference</b><br>
2902   * Path: <b>Composition.attester.party</b><br>
2903   * </p>
2904   */
2905  @SearchParamDefinition(name="attester", path="Composition.attester.party", description="Who attested the composition", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2906  public static final String SP_ATTESTER = "attester";
2907 /**
2908   * <b>Fluent Client</b> search parameter constant for <b>attester</b>
2909   * <p>
2910   * Description: <b>Who attested the composition</b><br>
2911   * Type: <b>reference</b><br>
2912   * Path: <b>Composition.attester.party</b><br>
2913   * </p>
2914   */
2915  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ATTESTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ATTESTER);
2916
2917/**
2918   * Constant for fluent queries to be used to add include statements. Specifies
2919   * the path value of "<b>Composition:attester</b>".
2920   */
2921  public static final ca.uhn.fhir.model.api.Include INCLUDE_ATTESTER = new ca.uhn.fhir.model.api.Include("Composition:attester").toLocked();
2922
2923 /**
2924   * Search parameter: <b>author</b>
2925   * <p>
2926   * Description: <b>Who and/or what authored the composition</b><br>
2927   * Type: <b>reference</b><br>
2928   * Path: <b>Composition.author</b><br>
2929   * </p>
2930   */
2931  @SearchParamDefinition(name="author", path="Composition.author", description="Who and/or what authored the composition", 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 Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2932  public static final String SP_AUTHOR = "author";
2933 /**
2934   * <b>Fluent Client</b> search parameter constant for <b>author</b>
2935   * <p>
2936   * Description: <b>Who and/or what authored the composition</b><br>
2937   * Type: <b>reference</b><br>
2938   * Path: <b>Composition.author</b><br>
2939   * </p>
2940   */
2941  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam AUTHOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_AUTHOR);
2942
2943/**
2944   * Constant for fluent queries to be used to add include statements. Specifies
2945   * the path value of "<b>Composition:author</b>".
2946   */
2947  public static final ca.uhn.fhir.model.api.Include INCLUDE_AUTHOR = new ca.uhn.fhir.model.api.Include("Composition:author").toLocked();
2948
2949 /**
2950   * Search parameter: <b>category</b>
2951   * <p>
2952   * Description: <b>Categorization of Composition</b><br>
2953   * Type: <b>token</b><br>
2954   * Path: <b>Composition.category</b><br>
2955   * </p>
2956   */
2957  @SearchParamDefinition(name="category", path="Composition.category", description="Categorization of Composition", type="token" )
2958  public static final String SP_CATEGORY = "category";
2959 /**
2960   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2961   * <p>
2962   * Description: <b>Categorization of Composition</b><br>
2963   * Type: <b>token</b><br>
2964   * Path: <b>Composition.category</b><br>
2965   * </p>
2966   */
2967  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2968
2969 /**
2970   * Search parameter: <b>confidentiality</b>
2971   * <p>
2972   * Description: <b>As defined by affinity domain</b><br>
2973   * Type: <b>token</b><br>
2974   * Path: <b>Composition.confidentiality</b><br>
2975   * </p>
2976   */
2977  @SearchParamDefinition(name="confidentiality", path="Composition.confidentiality", description="As defined by affinity domain", type="token" )
2978  public static final String SP_CONFIDENTIALITY = "confidentiality";
2979 /**
2980   * <b>Fluent Client</b> search parameter constant for <b>confidentiality</b>
2981   * <p>
2982   * Description: <b>As defined by affinity domain</b><br>
2983   * Type: <b>token</b><br>
2984   * Path: <b>Composition.confidentiality</b><br>
2985   * </p>
2986   */
2987  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONFIDENTIALITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONFIDENTIALITY);
2988
2989 /**
2990   * Search parameter: <b>context</b>
2991   * <p>
2992   * Description: <b>Code(s) that apply to the event being documented</b><br>
2993   * Type: <b>token</b><br>
2994   * Path: <b>Composition.event.code</b><br>
2995   * </p>
2996   */
2997  @SearchParamDefinition(name="context", path="Composition.event.code", description="Code(s) that apply to the event being documented", type="token" )
2998  public static final String SP_CONTEXT = "context";
2999 /**
3000   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3001   * <p>
3002   * Description: <b>Code(s) that apply to the event being documented</b><br>
3003   * Type: <b>token</b><br>
3004   * Path: <b>Composition.event.code</b><br>
3005   * </p>
3006   */
3007  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
3008
3009 /**
3010   * Search parameter: <b>entry</b>
3011   * <p>
3012   * Description: <b>A reference to data that supports this section</b><br>
3013   * Type: <b>reference</b><br>
3014   * Path: <b>Composition.section.entry</b><br>
3015   * </p>
3016   */
3017  @SearchParamDefinition(name="entry", path="Composition.section.entry", description="A reference to data that supports this section", type="reference", target={Account.class, ActivityDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, CatalogEntry.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, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceMetric.class, DeviceRequest.class, DeviceUseStatement.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Media.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestGroup.class, ResearchDefinition.class, ResearchElementDefinition.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, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3018  public static final String SP_ENTRY = "entry";
3019 /**
3020   * <b>Fluent Client</b> search parameter constant for <b>entry</b>
3021   * <p>
3022   * Description: <b>A reference to data that supports this section</b><br>
3023   * Type: <b>reference</b><br>
3024   * Path: <b>Composition.section.entry</b><br>
3025   * </p>
3026   */
3027  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENTRY = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENTRY);
3028
3029/**
3030   * Constant for fluent queries to be used to add include statements. Specifies
3031   * the path value of "<b>Composition:entry</b>".
3032   */
3033  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENTRY = new ca.uhn.fhir.model.api.Include("Composition:entry").toLocked();
3034
3035 /**
3036   * Search parameter: <b>period</b>
3037   * <p>
3038   * Description: <b>The period covered by the documentation</b><br>
3039   * Type: <b>date</b><br>
3040   * Path: <b>Composition.event.period</b><br>
3041   * </p>
3042   */
3043  @SearchParamDefinition(name="period", path="Composition.event.period", description="The period covered by the documentation", type="date" )
3044  public static final String SP_PERIOD = "period";
3045 /**
3046   * <b>Fluent Client</b> search parameter constant for <b>period</b>
3047   * <p>
3048   * Description: <b>The period covered by the documentation</b><br>
3049   * Type: <b>date</b><br>
3050   * Path: <b>Composition.event.period</b><br>
3051   * </p>
3052   */
3053  public static final ca.uhn.fhir.rest.gclient.DateClientParam PERIOD = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_PERIOD);
3054
3055 /**
3056   * Search parameter: <b>related-id</b>
3057   * <p>
3058   * Description: <b>Target of the relationship</b><br>
3059   * Type: <b>token</b><br>
3060   * Path: <b>(Composition.relatesTo.target as Identifier)</b><br>
3061   * </p>
3062   */
3063  @SearchParamDefinition(name="related-id", path="(Composition.relatesTo.target as Identifier)", description="Target of the relationship", type="token" )
3064  public static final String SP_RELATED_ID = "related-id";
3065 /**
3066   * <b>Fluent Client</b> search parameter constant for <b>related-id</b>
3067   * <p>
3068   * Description: <b>Target of the relationship</b><br>
3069   * Type: <b>token</b><br>
3070   * Path: <b>(Composition.relatesTo.target as Identifier)</b><br>
3071   * </p>
3072   */
3073  public static final ca.uhn.fhir.rest.gclient.TokenClientParam RELATED_ID = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_RELATED_ID);
3074
3075 /**
3076   * Search parameter: <b>related-ref</b>
3077   * <p>
3078   * Description: <b>Target of the relationship</b><br>
3079   * Type: <b>reference</b><br>
3080   * Path: <b>(Composition.relatesTo.target as Reference)</b><br>
3081   * </p>
3082   */
3083  @SearchParamDefinition(name="related-ref", path="(Composition.relatesTo.target as Reference)", description="Target of the relationship", type="reference", target={Composition.class } )
3084  public static final String SP_RELATED_REF = "related-ref";
3085 /**
3086   * <b>Fluent Client</b> search parameter constant for <b>related-ref</b>
3087   * <p>
3088   * Description: <b>Target of the relationship</b><br>
3089   * Type: <b>reference</b><br>
3090   * Path: <b>(Composition.relatesTo.target as Reference)</b><br>
3091   * </p>
3092   */
3093  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam RELATED_REF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_RELATED_REF);
3094
3095/**
3096   * Constant for fluent queries to be used to add include statements. Specifies
3097   * the path value of "<b>Composition:related-ref</b>".
3098   */
3099  public static final ca.uhn.fhir.model.api.Include INCLUDE_RELATED_REF = new ca.uhn.fhir.model.api.Include("Composition:related-ref").toLocked();
3100
3101 /**
3102   * Search parameter: <b>section</b>
3103   * <p>
3104   * Description: <b>Classification of section (recommended)</b><br>
3105   * Type: <b>token</b><br>
3106   * Path: <b>Composition.section.code</b><br>
3107   * </p>
3108   */
3109  @SearchParamDefinition(name="section", path="Composition.section.code", description="Classification of section (recommended)", type="token" )
3110  public static final String SP_SECTION = "section";
3111 /**
3112   * <b>Fluent Client</b> search parameter constant for <b>section</b>
3113   * <p>
3114   * Description: <b>Classification of section (recommended)</b><br>
3115   * Type: <b>token</b><br>
3116   * Path: <b>Composition.section.code</b><br>
3117   * </p>
3118   */
3119  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SECTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SECTION);
3120
3121 /**
3122   * Search parameter: <b>status</b>
3123   * <p>
3124   * Description: <b>preliminary | final | amended | entered-in-error</b><br>
3125   * Type: <b>token</b><br>
3126   * Path: <b>Composition.status</b><br>
3127   * </p>
3128   */
3129  @SearchParamDefinition(name="status", path="Composition.status", description="preliminary | final | amended | entered-in-error", type="token" )
3130  public static final String SP_STATUS = "status";
3131 /**
3132   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3133   * <p>
3134   * Description: <b>preliminary | final | amended | entered-in-error</b><br>
3135   * Type: <b>token</b><br>
3136   * Path: <b>Composition.status</b><br>
3137   * </p>
3138   */
3139  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
3140
3141 /**
3142   * Search parameter: <b>subject</b>
3143   * <p>
3144   * Description: <b>Who and/or what the composition is about</b><br>
3145   * Type: <b>reference</b><br>
3146   * Path: <b>Composition.subject</b><br>
3147   * </p>
3148   */
3149  @SearchParamDefinition(name="subject", path="Composition.subject", description="Who and/or what the composition is about", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Account.class, ActivityDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, CatalogEntry.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, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceMetric.class, DeviceRequest.class, DeviceUseStatement.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Media.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestGroup.class, ResearchDefinition.class, ResearchElementDefinition.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, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3150  public static final String SP_SUBJECT = "subject";
3151 /**
3152   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
3153   * <p>
3154   * Description: <b>Who and/or what the composition is about</b><br>
3155   * Type: <b>reference</b><br>
3156   * Path: <b>Composition.subject</b><br>
3157   * </p>
3158   */
3159  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
3160
3161/**
3162   * Constant for fluent queries to be used to add include statements. Specifies
3163   * the path value of "<b>Composition:subject</b>".
3164   */
3165  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Composition:subject").toLocked();
3166
3167 /**
3168   * Search parameter: <b>title</b>
3169   * <p>
3170   * Description: <b>Human Readable name/title</b><br>
3171   * Type: <b>string</b><br>
3172   * Path: <b>Composition.title</b><br>
3173   * </p>
3174   */
3175  @SearchParamDefinition(name="title", path="Composition.title", description="Human Readable name/title", type="string" )
3176  public static final String SP_TITLE = "title";
3177 /**
3178   * <b>Fluent Client</b> search parameter constant for <b>title</b>
3179   * <p>
3180   * Description: <b>Human Readable name/title</b><br>
3181   * Type: <b>string</b><br>
3182   * Path: <b>Composition.title</b><br>
3183   * </p>
3184   */
3185  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_TITLE);
3186
3187 /**
3188   * Search parameter: <b>date</b>
3189   * <p>
3190   * Description: <b>Multiple Resources: 
3191
3192* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3193* [CarePlan](careplan.html): Time period plan covers
3194* [CareTeam](careteam.html): Time period team covers
3195* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3196* [Composition](composition.html): Composition editing time
3197* [Consent](consent.html): When this Consent was created or indexed
3198* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3199* [Encounter](encounter.html): A date within the period the Encounter lasted
3200* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3201* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3202* [Flag](flag.html): Time period when flag is active
3203* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3204* [List](list.html): When the list was prepared
3205* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3206* [Procedure](procedure.html): When the procedure was performed
3207* [RiskAssessment](riskassessment.html): When was assessment made?
3208* [SupplyRequest](supplyrequest.html): When the request was made
3209</b><br>
3210   * Type: <b>date</b><br>
3211   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3212   * </p>
3213   */
3214  @SearchParamDefinition(name="date", path="AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded\r\n* [CarePlan](careplan.html): Time period plan covers\r\n* [CareTeam](careteam.html): Time period team covers\r\n* [ClinicalImpression](clinicalimpression.html): When the assessment was documented\r\n* [Composition](composition.html): Composition editing time\r\n* [Consent](consent.html): When this Consent was created or indexed\r\n* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report\r\n* [Encounter](encounter.html): A date within the period the Encounter lasted\r\n* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period\r\n* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated\r\n* [Flag](flag.html): Time period when flag is active\r\n* [Immunization](immunization.html): Vaccination  (non)-Administration Date\r\n* [List](list.html): When the list was prepared\r\n* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period\r\n* [Procedure](procedure.html): When the procedure was performed\r\n* [RiskAssessment](riskassessment.html): When was assessment made?\r\n* [SupplyRequest](supplyrequest.html): When the request was made\r\n", type="date" )
3215  public static final String SP_DATE = "date";
3216 /**
3217   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3218   * <p>
3219   * Description: <b>Multiple Resources: 
3220
3221* [AllergyIntolerance](allergyintolerance.html): Date first version of the resource instance was recorded
3222* [CarePlan](careplan.html): Time period plan covers
3223* [CareTeam](careteam.html): Time period team covers
3224* [ClinicalImpression](clinicalimpression.html): When the assessment was documented
3225* [Composition](composition.html): Composition editing time
3226* [Consent](consent.html): When this Consent was created or indexed
3227* [DiagnosticReport](diagnosticreport.html): The clinically relevant time of the report
3228* [Encounter](encounter.html): A date within the period the Encounter lasted
3229* [EpisodeOfCare](episodeofcare.html): The provided date search value falls within the episode of care's period
3230* [FamilyMemberHistory](familymemberhistory.html): When history was recorded or last updated
3231* [Flag](flag.html): Time period when flag is active
3232* [Immunization](immunization.html): Vaccination  (non)-Administration Date
3233* [List](list.html): When the list was prepared
3234* [Observation](observation.html): Obtained date/time. If the obtained element is a period, a date that falls in the period
3235* [Procedure](procedure.html): When the procedure was performed
3236* [RiskAssessment](riskassessment.html): When was assessment made?
3237* [SupplyRequest](supplyrequest.html): When the request was made
3238</b><br>
3239   * Type: <b>date</b><br>
3240   * Path: <b>AllergyIntolerance.recordedDate | CarePlan.period | CareTeam.period | ClinicalImpression.date | Composition.date | Consent.dateTime | DiagnosticReport.effective | Encounter.period | EpisodeOfCare.period | FamilyMemberHistory.date | Flag.period | Immunization.occurrence | List.date | Observation.effective | Procedure.performed | (RiskAssessment.occurrence as dateTime) | SupplyRequest.authoredOn</b><br>
3241   * </p>
3242   */
3243  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
3244
3245 /**
3246   * Search parameter: <b>encounter</b>
3247   * <p>
3248   * Description: <b>Multiple Resources: 
3249
3250* [Composition](composition.html): Context of the Composition
3251* [DeviceRequest](devicerequest.html): Encounter during which request was created
3252* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
3253* [DocumentReference](documentreference.html): Context of the document  content
3254* [Flag](flag.html): Alert relevant during encounter
3255* [List](list.html): Context in which list created
3256* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
3257* [Observation](observation.html): Encounter related to the observation
3258* [Procedure](procedure.html): Encounter created as part of
3259* [RiskAssessment](riskassessment.html): Where was assessment performed?
3260* [ServiceRequest](servicerequest.html): An encounter in which this request is made
3261* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
3262</b><br>
3263   * Type: <b>reference</b><br>
3264   * Path: <b>Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | DocumentReference.context.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter</b><br>
3265   * </p>
3266   */
3267  @SearchParamDefinition(name="encounter", path="Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | DocumentReference.context.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter", description="Multiple Resources: \r\n\r\n* [Composition](composition.html): Context of the Composition\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* [DocumentReference](documentreference.html): Context of the document  content\r\n* [Flag](flag.html): Alert relevant during encounter\r\n* [List](list.html): Context in which list created\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): Encounter created as part of\r\n* [RiskAssessment](riskassessment.html): Where was assessment performed?\r\n* [ServiceRequest](servicerequest.html): An encounter in which this request is made\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier\r\n", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Encounter") }, target={Encounter.class, EpisodeOfCare.class } )
3268  public static final String SP_ENCOUNTER = "encounter";
3269 /**
3270   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
3271   * <p>
3272   * Description: <b>Multiple Resources: 
3273
3274* [Composition](composition.html): Context of the Composition
3275* [DeviceRequest](devicerequest.html): Encounter during which request was created
3276* [DiagnosticReport](diagnosticreport.html): The Encounter when the order was made
3277* [DocumentReference](documentreference.html): Context of the document  content
3278* [Flag](flag.html): Alert relevant during encounter
3279* [List](list.html): Context in which list created
3280* [NutritionOrder](nutritionorder.html): Return nutrition orders with this encounter identifier
3281* [Observation](observation.html): Encounter related to the observation
3282* [Procedure](procedure.html): Encounter created as part of
3283* [RiskAssessment](riskassessment.html): Where was assessment performed?
3284* [ServiceRequest](servicerequest.html): An encounter in which this request is made
3285* [VisionPrescription](visionprescription.html): Return prescriptions with this encounter identifier
3286</b><br>
3287   * Type: <b>reference</b><br>
3288   * Path: <b>Composition.encounter | DeviceRequest.encounter | DiagnosticReport.encounter | DocumentReference.context.encounter | Flag.encounter | List.encounter | NutritionOrder.encounter | Observation.encounter | Procedure.encounter | RiskAssessment.encounter | ServiceRequest.encounter | VisionPrescription.encounter</b><br>
3289   * </p>
3290   */
3291  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
3292
3293/**
3294   * Constant for fluent queries to be used to add include statements. Specifies
3295   * the path value of "<b>Composition:encounter</b>".
3296   */
3297  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Composition:encounter").toLocked();
3298
3299 /**
3300   * Search parameter: <b>identifier</b>
3301   * <p>
3302   * Description: <b>Multiple Resources: 
3303
3304* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3305* [CarePlan](careplan.html): External Ids for this plan
3306* [CareTeam](careteam.html): External Ids for this team
3307* [Composition](composition.html): Version-independent identifier for the Composition
3308* [Condition](condition.html): A unique identifier of the condition record
3309* [Consent](consent.html): Identifier for this record (external references)
3310* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3311* [DeviceRequest](devicerequest.html): Business identifier for request/order
3312* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3313* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3314* [DocumentReference](documentreference.html): Master Version Specific Identifier
3315* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3316* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3317* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3318* [Goal](goal.html): External Ids for this goal
3319* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number
3320* [Immunization](immunization.html): Business identifier
3321* [List](list.html): Business identifier
3322* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3323* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3324* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3325* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
3326* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3327* [Observation](observation.html): The unique id for a particular observation
3328* [Procedure](procedure.html): A unique identifier for a procedure
3329* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3330* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3331* [SupplyDelivery](supplydelivery.html): External identifier
3332* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3333* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3334</b><br>
3335   * Type: <b>token</b><br>
3336   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3337   * </p>
3338   */
3339  @SearchParamDefinition(name="identifier", path="AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): External ids for this item\r\n* [CarePlan](careplan.html): External Ids for this plan\r\n* [CareTeam](careteam.html): External Ids for this team\r\n* [Composition](composition.html): Version-independent identifier for the Composition\r\n* [Condition](condition.html): A unique identifier of the condition record\r\n* [Consent](consent.html): Identifier for this record (external references)\r\n* [DetectedIssue](detectedissue.html): Unique id for the detected issue\r\n* [DeviceRequest](devicerequest.html): Business identifier for request/order\r\n* [DiagnosticReport](diagnosticreport.html): An identifier for the report\r\n* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents\r\n* [DocumentReference](documentreference.html): Master Version Specific Identifier\r\n* [Encounter](encounter.html): Identifier(s) by which this encounter is known\r\n* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare\r\n* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier\r\n* [Goal](goal.html): External Ids for this goal\r\n* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number\r\n* [Immunization](immunization.html): Business identifier\r\n* [List](list.html): Business identifier\r\n* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier\r\n* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier\r\n* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier\r\n* [MedicationStatement](medicationstatement.html): Return statements with this external identifier\r\n* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier\r\n* [Observation](observation.html): The unique id for a particular observation\r\n* [Procedure](procedure.html): A unique identifier for a procedure\r\n* [RiskAssessment](riskassessment.html): Unique identifier for the assessment\r\n* [ServiceRequest](servicerequest.html): Identifiers assigned to this order\r\n* [SupplyDelivery](supplydelivery.html): External identifier\r\n* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest\r\n* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier\r\n", type="token" )
3340  public static final String SP_IDENTIFIER = "identifier";
3341 /**
3342   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3343   * <p>
3344   * Description: <b>Multiple Resources: 
3345
3346* [AllergyIntolerance](allergyintolerance.html): External ids for this item
3347* [CarePlan](careplan.html): External Ids for this plan
3348* [CareTeam](careteam.html): External Ids for this team
3349* [Composition](composition.html): Version-independent identifier for the Composition
3350* [Condition](condition.html): A unique identifier of the condition record
3351* [Consent](consent.html): Identifier for this record (external references)
3352* [DetectedIssue](detectedissue.html): Unique id for the detected issue
3353* [DeviceRequest](devicerequest.html): Business identifier for request/order
3354* [DiagnosticReport](diagnosticreport.html): An identifier for the report
3355* [DocumentManifest](documentmanifest.html): Unique Identifier for the set of documents
3356* [DocumentReference](documentreference.html): Master Version Specific Identifier
3357* [Encounter](encounter.html): Identifier(s) by which this encounter is known
3358* [EpisodeOfCare](episodeofcare.html): Business Identifier(s) relevant for this EpisodeOfCare
3359* [FamilyMemberHistory](familymemberhistory.html): A search by a record identifier
3360* [Goal](goal.html): External Ids for this goal
3361* [ImagingStudy](imagingstudy.html): Identifiers for the Study, such as DICOM Study Instance UID and Accession number
3362* [Immunization](immunization.html): Business identifier
3363* [List](list.html): Business identifier
3364* [MedicationAdministration](medicationadministration.html): Return administrations with this external identifier
3365* [MedicationDispense](medicationdispense.html): Returns dispenses with this external identifier
3366* [MedicationRequest](medicationrequest.html): Return prescriptions with this external identifier
3367* [MedicationStatement](medicationstatement.html): Return statements with this external identifier
3368* [NutritionOrder](nutritionorder.html): Return nutrition orders with this external identifier
3369* [Observation](observation.html): The unique id for a particular observation
3370* [Procedure](procedure.html): A unique identifier for a procedure
3371* [RiskAssessment](riskassessment.html): Unique identifier for the assessment
3372* [ServiceRequest](servicerequest.html): Identifiers assigned to this order
3373* [SupplyDelivery](supplydelivery.html): External identifier
3374* [SupplyRequest](supplyrequest.html): Business Identifier for SupplyRequest
3375* [VisionPrescription](visionprescription.html): Return prescriptions with this external identifier
3376</b><br>
3377   * Type: <b>token</b><br>
3378   * Path: <b>AllergyIntolerance.identifier | CarePlan.identifier | CareTeam.identifier | Composition.identifier | Condition.identifier | Consent.identifier | DetectedIssue.identifier | DeviceRequest.identifier | DiagnosticReport.identifier | DocumentManifest.masterIdentifier | DocumentManifest.identifier | DocumentReference.masterIdentifier | DocumentReference.identifier | Encounter.identifier | EpisodeOfCare.identifier | FamilyMemberHistory.identifier | Goal.identifier | ImagingStudy.identifier | Immunization.identifier | List.identifier | MedicationAdministration.identifier | MedicationDispense.identifier | MedicationRequest.identifier | MedicationStatement.identifier | NutritionOrder.identifier | Observation.identifier | Procedure.identifier | RiskAssessment.identifier | ServiceRequest.identifier | SupplyDelivery.identifier | SupplyRequest.identifier | VisionPrescription.identifier</b><br>
3379   * </p>
3380   */
3381  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3382
3383 /**
3384   * Search parameter: <b>patient</b>
3385   * <p>
3386   * Description: <b>Multiple Resources: 
3387
3388* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3389* [CarePlan](careplan.html): Who the care plan is for
3390* [CareTeam](careteam.html): Who care team is for
3391* [ClinicalImpression](clinicalimpression.html): Patient or group assessed
3392* [Composition](composition.html): Who and/or what the composition is about
3393* [Condition](condition.html): Who has the condition?
3394* [Consent](consent.html): Who the consent applies to
3395* [DetectedIssue](detectedissue.html): Associated patient
3396* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3397* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient
3398* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3399* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3400* [DocumentReference](documentreference.html): Who/what is the subject of the document
3401* [Encounter](encounter.html): The patient or group present at the encounter
3402* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3403* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3404* [Flag](flag.html): The identity of a subject to list flags for
3405* [Goal](goal.html): Who this goal is intended for
3406* [ImagingStudy](imagingstudy.html): Who the study is about
3407* [Immunization](immunization.html): The patient for the vaccination record
3408* [List](list.html): If all resources have the same subject
3409* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3410* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3411* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3412* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
3413* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3414* [Observation](observation.html): The subject that the observation is about (if patient)
3415* [Procedure](procedure.html): Search by subject - a patient
3416* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3417* [ServiceRequest](servicerequest.html): Search by subject - a patient
3418* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3419* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3420</b><br>
3421   * Type: <b>reference</b><br>
3422   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
3423   * </p>
3424   */
3425  @SearchParamDefinition(name="patient", path="AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for\r\n* [CarePlan](careplan.html): Who the care plan is for\r\n* [CareTeam](careteam.html): Who care team is for\r\n* [ClinicalImpression](clinicalimpression.html): Patient or group assessed\r\n* [Composition](composition.html): Who and/or what the composition is about\r\n* [Condition](condition.html): Who has the condition?\r\n* [Consent](consent.html): Who the consent applies to\r\n* [DetectedIssue](detectedissue.html): Associated patient\r\n* [DeviceRequest](devicerequest.html): Individual the service is ordered for\r\n* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient\r\n* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient\r\n* [DocumentManifest](documentmanifest.html): The subject of the set of documents\r\n* [DocumentReference](documentreference.html): Who/what is the subject of the document\r\n* [Encounter](encounter.html): The patient or group present at the encounter\r\n* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care\r\n* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for\r\n* [Flag](flag.html): The identity of a subject to list flags for\r\n* [Goal](goal.html): Who this goal is intended for\r\n* [ImagingStudy](imagingstudy.html): Who the study is about\r\n* [Immunization](immunization.html): The patient for the vaccination record\r\n* [List](list.html): If all resources have the same subject\r\n* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for\r\n* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for\r\n* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient\r\n* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.\r\n* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement\r\n* [Observation](observation.html): The subject that the observation is about (if patient)\r\n* [Procedure](procedure.html): Search by subject - a patient\r\n* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?\r\n* [ServiceRequest](servicerequest.html): Search by subject - a patient\r\n* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied\r\n* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for\r\n", type="reference", target={Account.class, ActivityDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, CatalogEntry.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, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceMetric.class, DeviceRequest.class, DeviceUseStatement.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Media.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestGroup.class, ResearchDefinition.class, ResearchElementDefinition.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, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
3426  public static final String SP_PATIENT = "patient";
3427 /**
3428   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
3429   * <p>
3430   * Description: <b>Multiple Resources: 
3431
3432* [AllergyIntolerance](allergyintolerance.html): Who the sensitivity is for
3433* [CarePlan](careplan.html): Who the care plan is for
3434* [CareTeam](careteam.html): Who care team is for
3435* [ClinicalImpression](clinicalimpression.html): Patient or group assessed
3436* [Composition](composition.html): Who and/or what the composition is about
3437* [Condition](condition.html): Who has the condition?
3438* [Consent](consent.html): Who the consent applies to
3439* [DetectedIssue](detectedissue.html): Associated patient
3440* [DeviceRequest](devicerequest.html): Individual the service is ordered for
3441* [DeviceUseStatement](deviceusestatement.html): Search by subject - a patient
3442* [DiagnosticReport](diagnosticreport.html): The subject of the report if a patient
3443* [DocumentManifest](documentmanifest.html): The subject of the set of documents
3444* [DocumentReference](documentreference.html): Who/what is the subject of the document
3445* [Encounter](encounter.html): The patient or group present at the encounter
3446* [EpisodeOfCare](episodeofcare.html): The patient who is the focus of this episode of care
3447* [FamilyMemberHistory](familymemberhistory.html): The identity of a subject to list family member history items for
3448* [Flag](flag.html): The identity of a subject to list flags for
3449* [Goal](goal.html): Who this goal is intended for
3450* [ImagingStudy](imagingstudy.html): Who the study is about
3451* [Immunization](immunization.html): The patient for the vaccination record
3452* [List](list.html): If all resources have the same subject
3453* [MedicationAdministration](medicationadministration.html): The identity of a patient to list administrations  for
3454* [MedicationDispense](medicationdispense.html): The identity of a patient to list dispenses  for
3455* [MedicationRequest](medicationrequest.html): Returns prescriptions for a specific patient
3456* [MedicationStatement](medicationstatement.html): Returns statements for a specific patient.
3457* [NutritionOrder](nutritionorder.html): The identity of the person who requires the diet, formula or nutritional supplement
3458* [Observation](observation.html): The subject that the observation is about (if patient)
3459* [Procedure](procedure.html): Search by subject - a patient
3460* [RiskAssessment](riskassessment.html): Who/what does assessment apply to?
3461* [ServiceRequest](servicerequest.html): Search by subject - a patient
3462* [SupplyDelivery](supplydelivery.html): Patient for whom the item is supplied
3463* [VisionPrescription](visionprescription.html): The identity of a patient to list dispenses for
3464</b><br>
3465   * Type: <b>reference</b><br>
3466   * Path: <b>AllergyIntolerance.patient | CarePlan.subject.where(resolve() is Patient) | CareTeam.subject.where(resolve() is Patient) | ClinicalImpression.subject.where(resolve() is Patient) | Composition.subject.where(resolve() is Patient) | Condition.subject.where(resolve() is Patient) | Consent.patient | DetectedIssue.patient | DeviceRequest.subject.where(resolve() is Patient) | DeviceUseStatement.subject.where(resolve() is Patient) | DiagnosticReport.subject.where(resolve() is Patient) | DocumentManifest.subject.where(resolve() is Patient) | DocumentReference.subject.where(resolve() is Patient) | Encounter.subject.where(resolve() is Patient) | EpisodeOfCare.patient | FamilyMemberHistory.patient | Flag.subject.where(resolve() is Patient) | Goal.subject.where(resolve() is Patient) | ImagingStudy.subject.where(resolve() is Patient) | Immunization.patient | List.subject.where(resolve() is Patient) | MedicationAdministration.subject.where(resolve() is Patient) | MedicationDispense.subject.where(resolve() is Patient) | MedicationRequest.subject.where(resolve() is Patient) | MedicationStatement.subject.where(resolve() is Patient) | NutritionOrder.patient | Observation.subject.where(resolve() is Patient) | Procedure.subject.where(resolve() is Patient) | RiskAssessment.subject.where(resolve() is Patient) | ServiceRequest.subject.where(resolve() is Patient) | SupplyDelivery.patient | VisionPrescription.patient</b><br>
3467   * </p>
3468   */
3469  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
3470
3471/**
3472   * Constant for fluent queries to be used to add include statements. Specifies
3473   * the path value of "<b>Composition:patient</b>".
3474   */
3475  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Composition:patient").toLocked();
3476
3477 /**
3478   * Search parameter: <b>type</b>
3479   * <p>
3480   * Description: <b>Multiple Resources: 
3481
3482* [AllergyIntolerance](allergyintolerance.html): allergy | intolerance - Underlying mechanism (if known)
3483* [Composition](composition.html): Kind of composition (LOINC if possible)
3484* [DocumentManifest](documentmanifest.html): Kind of document set
3485* [DocumentReference](documentreference.html): Kind of document (LOINC if possible)
3486* [Encounter](encounter.html): Specific type of encounter
3487* [EpisodeOfCare](episodeofcare.html): Type/class  - e.g. specialist referral, disease management
3488</b><br>
3489   * Type: <b>token</b><br>
3490   * Path: <b>AllergyIntolerance.type | Composition.type | DocumentManifest.type | DocumentReference.type | Encounter.type | EpisodeOfCare.type</b><br>
3491   * </p>
3492   */
3493  @SearchParamDefinition(name="type", path="AllergyIntolerance.type | Composition.type | DocumentManifest.type | DocumentReference.type | Encounter.type | EpisodeOfCare.type", description="Multiple Resources: \r\n\r\n* [AllergyIntolerance](allergyintolerance.html): allergy | intolerance - Underlying mechanism (if known)\r\n* [Composition](composition.html): Kind of composition (LOINC if possible)\r\n* [DocumentManifest](documentmanifest.html): Kind of document set\r\n* [DocumentReference](documentreference.html): Kind of document (LOINC if possible)\r\n* [Encounter](encounter.html): Specific type of encounter\r\n* [EpisodeOfCare](episodeofcare.html): Type/class  - e.g. specialist referral, disease management\r\n", type="token" )
3494  public static final String SP_TYPE = "type";
3495 /**
3496   * <b>Fluent Client</b> search parameter constant for <b>type</b>
3497   * <p>
3498   * Description: <b>Multiple Resources: 
3499
3500* [AllergyIntolerance](allergyintolerance.html): allergy | intolerance - Underlying mechanism (if known)
3501* [Composition](composition.html): Kind of composition (LOINC if possible)
3502* [DocumentManifest](documentmanifest.html): Kind of document set
3503* [DocumentReference](documentreference.html): Kind of document (LOINC if possible)
3504* [Encounter](encounter.html): Specific type of encounter
3505* [EpisodeOfCare](episodeofcare.html): Type/class  - e.g. specialist referral, disease management
3506</b><br>
3507   * Type: <b>token</b><br>
3508   * Path: <b>AllergyIntolerance.type | Composition.type | DocumentManifest.type | DocumentReference.type | Encounter.type | EpisodeOfCare.type</b><br>
3509   * </p>
3510   */
3511  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TYPE);
3512
3513
3514}
3515