001package org.hl7.fhir.dstu3.model;
002
003
004
005/*
006  Copyright (c) 2011+, HL7, Inc.
007  All rights reserved.
008  
009  Redistribution and use in source and binary forms, with or without modification, 
010  are permitted provided that the following conditions are met:
011  
012   * Redistributions of source code must retain the above copyright notice, this 
013     list of conditions and the following disclaimer.
014   * Redistributions in binary form must reproduce the above copyright notice, 
015     this list of conditions and the following disclaimer in the documentation 
016     and/or other materials provided with the distribution.
017   * Neither the name of HL7 nor the names of its contributors may be used to 
018     endorse or promote products derived from this software without specific 
019     prior written permission.
020  
021  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
022  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
023  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
024  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
025  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
026  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
027  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
028  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
029  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
030  POSSIBILITY OF SUCH DAMAGE.
031  
032*/
033
034// Generated on Fri, Mar 16, 2018 15:21+1100 for FHIR v3.0.x
035import java.util.ArrayList;
036import java.util.Date;
037import java.util.List;
038
039import org.hl7.fhir.exceptions.FHIRException;
040import org.hl7.fhir.exceptions.FHIRFormatError;
041import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
042
043import ca.uhn.fhir.model.api.annotation.Block;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.Description;
046import ca.uhn.fhir.model.api.annotation.ResourceDef;
047import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
048/**
049 * An occurrence of information being transmitted; e.g. an alert that was sent to a responsible provider, a public health agency was notified about a reportable condition.
050 */
051@ResourceDef(name="Communication", profile="http://hl7.org/fhir/Profile/Communication")
052public class Communication extends DomainResource {
053
054    public enum CommunicationStatus {
055        /**
056         * The core event has not started yet, but some staging activities have begun (e.g. surgical suite preparation).  Preparation stages may be tracked for billing purposes.
057         */
058        PREPARATION, 
059        /**
060         * The event is currently occurring
061         */
062        INPROGRESS, 
063        /**
064         * The event has been temporarily stopped but is expected to resume in the future
065         */
066        SUSPENDED, 
067        /**
068         * The event was  prior to the full completion of the intended actions
069         */
070        ABORTED, 
071        /**
072         * The event has now concluded
073         */
074        COMPLETED, 
075        /**
076         * This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be "cancelled" rather than "entered-in-error".)
077         */
078        ENTEREDINERROR, 
079        /**
080         * The authoring system does not know which of the status values currently applies for this request.  Note: This concept is not to be used for "other" - one of the listed statuses is presumed to apply, it's just not known which one.
081         */
082        UNKNOWN, 
083        /**
084         * added to help the parsers with the generic types
085         */
086        NULL;
087        public static CommunicationStatus fromCode(String codeString) throws FHIRException {
088            if (codeString == null || "".equals(codeString))
089                return null;
090        if ("preparation".equals(codeString))
091          return PREPARATION;
092        if ("in-progress".equals(codeString))
093          return INPROGRESS;
094        if ("suspended".equals(codeString))
095          return SUSPENDED;
096        if ("aborted".equals(codeString))
097          return ABORTED;
098        if ("completed".equals(codeString))
099          return COMPLETED;
100        if ("entered-in-error".equals(codeString))
101          return ENTEREDINERROR;
102        if ("unknown".equals(codeString))
103          return UNKNOWN;
104        if (Configuration.isAcceptInvalidEnums())
105          return null;
106        else
107          throw new FHIRException("Unknown CommunicationStatus code '"+codeString+"'");
108        }
109        public String toCode() {
110          switch (this) {
111            case PREPARATION: return "preparation";
112            case INPROGRESS: return "in-progress";
113            case SUSPENDED: return "suspended";
114            case ABORTED: return "aborted";
115            case COMPLETED: return "completed";
116            case ENTEREDINERROR: return "entered-in-error";
117            case UNKNOWN: return "unknown";
118            case NULL: return null;
119            default: return "?";
120          }
121        }
122        public String getSystem() {
123          switch (this) {
124            case PREPARATION: return "http://hl7.org/fhir/event-status";
125            case INPROGRESS: return "http://hl7.org/fhir/event-status";
126            case SUSPENDED: return "http://hl7.org/fhir/event-status";
127            case ABORTED: return "http://hl7.org/fhir/event-status";
128            case COMPLETED: return "http://hl7.org/fhir/event-status";
129            case ENTEREDINERROR: return "http://hl7.org/fhir/event-status";
130            case UNKNOWN: return "http://hl7.org/fhir/event-status";
131            case NULL: return null;
132            default: return "?";
133          }
134        }
135        public String getDefinition() {
136          switch (this) {
137            case PREPARATION: return "The core event has not started yet, but some staging activities have begun (e.g. surgical suite preparation).  Preparation stages may be tracked for billing purposes.";
138            case INPROGRESS: return "The event is currently occurring";
139            case SUSPENDED: return "The event has been temporarily stopped but is expected to resume in the future";
140            case ABORTED: return "The event was  prior to the full completion of the intended actions";
141            case COMPLETED: return "The event has now concluded";
142            case ENTEREDINERROR: return "This electronic record should never have existed, though it is possible that real-world decisions were based on it.  (If real-world activity has occurred, the status should be \"cancelled\" rather than \"entered-in-error\".)";
143            case UNKNOWN: return "The authoring system does not know which of the status values currently applies for this request.  Note: This concept is not to be used for \"other\" - one of the listed statuses is presumed to apply, it's just not known which one.";
144            case NULL: return null;
145            default: return "?";
146          }
147        }
148        public String getDisplay() {
149          switch (this) {
150            case PREPARATION: return "Preparation";
151            case INPROGRESS: return "In Progress";
152            case SUSPENDED: return "Suspended";
153            case ABORTED: return "Aborted";
154            case COMPLETED: return "Completed";
155            case ENTEREDINERROR: return "Entered in Error";
156            case UNKNOWN: return "Unknown";
157            case NULL: return null;
158            default: return "?";
159          }
160        }
161    }
162
163  public static class CommunicationStatusEnumFactory implements EnumFactory<CommunicationStatus> {
164    public CommunicationStatus fromCode(String codeString) throws IllegalArgumentException {
165      if (codeString == null || "".equals(codeString))
166            if (codeString == null || "".equals(codeString))
167                return null;
168        if ("preparation".equals(codeString))
169          return CommunicationStatus.PREPARATION;
170        if ("in-progress".equals(codeString))
171          return CommunicationStatus.INPROGRESS;
172        if ("suspended".equals(codeString))
173          return CommunicationStatus.SUSPENDED;
174        if ("aborted".equals(codeString))
175          return CommunicationStatus.ABORTED;
176        if ("completed".equals(codeString))
177          return CommunicationStatus.COMPLETED;
178        if ("entered-in-error".equals(codeString))
179          return CommunicationStatus.ENTEREDINERROR;
180        if ("unknown".equals(codeString))
181          return CommunicationStatus.UNKNOWN;
182        throw new IllegalArgumentException("Unknown CommunicationStatus code '"+codeString+"'");
183        }
184        public Enumeration<CommunicationStatus> fromType(PrimitiveType<?> code) throws FHIRException {
185          if (code == null)
186            return null;
187          if (code.isEmpty())
188            return new Enumeration<CommunicationStatus>(this);
189          String codeString = code.asStringValue();
190          if (codeString == null || "".equals(codeString))
191            return null;
192        if ("preparation".equals(codeString))
193          return new Enumeration<CommunicationStatus>(this, CommunicationStatus.PREPARATION);
194        if ("in-progress".equals(codeString))
195          return new Enumeration<CommunicationStatus>(this, CommunicationStatus.INPROGRESS);
196        if ("suspended".equals(codeString))
197          return new Enumeration<CommunicationStatus>(this, CommunicationStatus.SUSPENDED);
198        if ("aborted".equals(codeString))
199          return new Enumeration<CommunicationStatus>(this, CommunicationStatus.ABORTED);
200        if ("completed".equals(codeString))
201          return new Enumeration<CommunicationStatus>(this, CommunicationStatus.COMPLETED);
202        if ("entered-in-error".equals(codeString))
203          return new Enumeration<CommunicationStatus>(this, CommunicationStatus.ENTEREDINERROR);
204        if ("unknown".equals(codeString))
205          return new Enumeration<CommunicationStatus>(this, CommunicationStatus.UNKNOWN);
206        throw new FHIRException("Unknown CommunicationStatus code '"+codeString+"'");
207        }
208    public String toCode(CommunicationStatus code) {
209      if (code == CommunicationStatus.PREPARATION)
210        return "preparation";
211      if (code == CommunicationStatus.INPROGRESS)
212        return "in-progress";
213      if (code == CommunicationStatus.SUSPENDED)
214        return "suspended";
215      if (code == CommunicationStatus.ABORTED)
216        return "aborted";
217      if (code == CommunicationStatus.COMPLETED)
218        return "completed";
219      if (code == CommunicationStatus.ENTEREDINERROR)
220        return "entered-in-error";
221      if (code == CommunicationStatus.UNKNOWN)
222        return "unknown";
223      return "?";
224      }
225    public String toSystem(CommunicationStatus code) {
226      return code.getSystem();
227      }
228    }
229
230    @Block()
231    public static class CommunicationPayloadComponent extends BackboneElement implements IBaseBackboneElement {
232        /**
233         * A communicated content (or for multi-part communications, one portion of the communication).
234         */
235        @Child(name = "content", type = {StringType.class, Attachment.class, Reference.class}, order=1, min=1, max=1, modifier=false, summary=false)
236        @Description(shortDefinition="Message part content", formalDefinition="A communicated content (or for multi-part communications, one portion of the communication)." )
237        protected Type content;
238
239        private static final long serialVersionUID = -1763459053L;
240
241    /**
242     * Constructor
243     */
244      public CommunicationPayloadComponent() {
245        super();
246      }
247
248    /**
249     * Constructor
250     */
251      public CommunicationPayloadComponent(Type content) {
252        super();
253        this.content = content;
254      }
255
256        /**
257         * @return {@link #content} (A communicated content (or for multi-part communications, one portion of the communication).)
258         */
259        public Type getContent() { 
260          return this.content;
261        }
262
263        /**
264         * @return {@link #content} (A communicated content (or for multi-part communications, one portion of the communication).)
265         */
266        public StringType getContentStringType() throws FHIRException { 
267          if (this.content == null)
268            return null;
269          if (!(this.content instanceof StringType))
270            throw new FHIRException("Type mismatch: the type StringType was expected, but "+this.content.getClass().getName()+" was encountered");
271          return (StringType) this.content;
272        }
273
274        public boolean hasContentStringType() { 
275          return this != null && this.content instanceof StringType;
276        }
277
278        /**
279         * @return {@link #content} (A communicated content (or for multi-part communications, one portion of the communication).)
280         */
281        public Attachment getContentAttachment() throws FHIRException { 
282          if (this.content == null)
283            return null;
284          if (!(this.content instanceof Attachment))
285            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.content.getClass().getName()+" was encountered");
286          return (Attachment) this.content;
287        }
288
289        public boolean hasContentAttachment() { 
290          return this != null && this.content instanceof Attachment;
291        }
292
293        /**
294         * @return {@link #content} (A communicated content (or for multi-part communications, one portion of the communication).)
295         */
296        public Reference getContentReference() throws FHIRException { 
297          if (this.content == null)
298            return null;
299          if (!(this.content instanceof Reference))
300            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.content.getClass().getName()+" was encountered");
301          return (Reference) this.content;
302        }
303
304        public boolean hasContentReference() { 
305          return this != null && this.content instanceof Reference;
306        }
307
308        public boolean hasContent() { 
309          return this.content != null && !this.content.isEmpty();
310        }
311
312        /**
313         * @param value {@link #content} (A communicated content (or for multi-part communications, one portion of the communication).)
314         */
315        public CommunicationPayloadComponent setContent(Type value) throws FHIRFormatError { 
316          if (value != null && !(value instanceof StringType || value instanceof Attachment || value instanceof Reference))
317            throw new FHIRFormatError("Not the right type for Communication.payload.content[x]: "+value.fhirType());
318          this.content = value;
319          return this;
320        }
321
322        protected void listChildren(List<Property> children) {
323          super.listChildren(children);
324          children.add(new Property("content[x]", "string|Attachment|Reference(Any)", "A communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content));
325        }
326
327        @Override
328        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
329          switch (_hash) {
330          case 264548711: /*content[x]*/  return new Property("content[x]", "string|Attachment|Reference(Any)", "A communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
331          case 951530617: /*content*/  return new Property("content[x]", "string|Attachment|Reference(Any)", "A communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
332          case -326336022: /*contentString*/  return new Property("content[x]", "string|Attachment|Reference(Any)", "A communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
333          case -702028164: /*contentAttachment*/  return new Property("content[x]", "string|Attachment|Reference(Any)", "A communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
334          case 1193747154: /*contentReference*/  return new Property("content[x]", "string|Attachment|Reference(Any)", "A communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
335          default: return super.getNamedProperty(_hash, _name, _checkValid);
336          }
337
338        }
339
340      @Override
341      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
342        switch (hash) {
343        case 951530617: /*content*/ return this.content == null ? new Base[0] : new Base[] {this.content}; // Type
344        default: return super.getProperty(hash, name, checkValid);
345        }
346
347      }
348
349      @Override
350      public Base setProperty(int hash, String name, Base value) throws FHIRException {
351        switch (hash) {
352        case 951530617: // content
353          this.content = castToType(value); // Type
354          return value;
355        default: return super.setProperty(hash, name, value);
356        }
357
358      }
359
360      @Override
361      public Base setProperty(String name, Base value) throws FHIRException {
362        if (name.equals("content[x]")) {
363          this.content = castToType(value); // Type
364        } else
365          return super.setProperty(name, value);
366        return value;
367      }
368
369      @Override
370      public Base makeProperty(int hash, String name) throws FHIRException {
371        switch (hash) {
372        case 264548711:  return getContent(); 
373        case 951530617:  return getContent(); 
374        default: return super.makeProperty(hash, name);
375        }
376
377      }
378
379      @Override
380      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
381        switch (hash) {
382        case 951530617: /*content*/ return new String[] {"string", "Attachment", "Reference"};
383        default: return super.getTypesForProperty(hash, name);
384        }
385
386      }
387
388      @Override
389      public Base addChild(String name) throws FHIRException {
390        if (name.equals("contentString")) {
391          this.content = new StringType();
392          return this.content;
393        }
394        else if (name.equals("contentAttachment")) {
395          this.content = new Attachment();
396          return this.content;
397        }
398        else if (name.equals("contentReference")) {
399          this.content = new Reference();
400          return this.content;
401        }
402        else
403          return super.addChild(name);
404      }
405
406      public CommunicationPayloadComponent copy() {
407        CommunicationPayloadComponent dst = new CommunicationPayloadComponent();
408        copyValues(dst);
409        dst.content = content == null ? null : content.copy();
410        return dst;
411      }
412
413      @Override
414      public boolean equalsDeep(Base other_) {
415        if (!super.equalsDeep(other_))
416          return false;
417        if (!(other_ instanceof CommunicationPayloadComponent))
418          return false;
419        CommunicationPayloadComponent o = (CommunicationPayloadComponent) other_;
420        return compareDeep(content, o.content, true);
421      }
422
423      @Override
424      public boolean equalsShallow(Base other_) {
425        if (!super.equalsShallow(other_))
426          return false;
427        if (!(other_ instanceof CommunicationPayloadComponent))
428          return false;
429        CommunicationPayloadComponent o = (CommunicationPayloadComponent) other_;
430        return true;
431      }
432
433      public boolean isEmpty() {
434        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(content);
435      }
436
437  public String fhirType() {
438    return "Communication.payload";
439
440  }
441
442  }
443
444    /**
445     * Identifiers associated with this Communication that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).
446     */
447    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
448    @Description(shortDefinition="Unique identifier", formalDefinition="Identifiers associated with this Communication that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation)." )
449    protected List<Identifier> identifier;
450
451    /**
452     * A protocol, guideline, or other definition that was adhered to in whole or in part by this communication event.
453     */
454    @Child(name = "definition", type = {PlanDefinition.class, ActivityDefinition.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
455    @Description(shortDefinition="Instantiates protocol or definition", formalDefinition="A protocol, guideline, or other definition that was adhered to in whole or in part by this communication event." )
456    protected List<Reference> definition;
457    /**
458     * The actual objects that are the target of the reference (A protocol, guideline, or other definition that was adhered to in whole or in part by this communication event.)
459     */
460    protected List<Resource> definitionTarget;
461
462
463    /**
464     * An order, proposal or plan fulfilled in whole or in part by this Communication.
465     */
466    @Child(name = "basedOn", type = {Reference.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
467    @Description(shortDefinition="Request fulfilled by this communication", formalDefinition="An order, proposal or plan fulfilled in whole or in part by this Communication." )
468    protected List<Reference> basedOn;
469    /**
470     * The actual objects that are the target of the reference (An order, proposal or plan fulfilled in whole or in part by this Communication.)
471     */
472    protected List<Resource> basedOnTarget;
473
474
475    /**
476     * Part of this action.
477     */
478    @Child(name = "partOf", type = {Reference.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
479    @Description(shortDefinition="Part of this action", formalDefinition="Part of this action." )
480    protected List<Reference> partOf;
481    /**
482     * The actual objects that are the target of the reference (Part of this action.)
483     */
484    protected List<Resource> partOfTarget;
485
486
487    /**
488     * The status of the transmission.
489     */
490    @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=true, summary=true)
491    @Description(shortDefinition="preparation | in-progress | suspended | aborted | completed | entered-in-error", formalDefinition="The status of the transmission." )
492    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/event-status")
493    protected Enumeration<CommunicationStatus> status;
494
495    /**
496     * If true, indicates that the described communication event did not actually occur.
497     */
498    @Child(name = "notDone", type = {BooleanType.class}, order=5, min=0, max=1, modifier=true, summary=true)
499    @Description(shortDefinition="Communication did not occur", formalDefinition="If true, indicates that the described communication event did not actually occur." )
500    protected BooleanType notDone;
501
502    /**
503     * Describes why the communication event did not occur in coded and/or textual form.
504     */
505    @Child(name = "notDoneReason", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=true)
506    @Description(shortDefinition="Why communication did not occur", formalDefinition="Describes why the communication event did not occur in coded and/or textual form." )
507    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/communication-not-done-reason")
508    protected CodeableConcept notDoneReason;
509
510    /**
511     * The type of message conveyed such as alert, notification, reminder, instruction, etc.
512     */
513    @Child(name = "category", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
514    @Description(shortDefinition="Message category", formalDefinition="The type of message conveyed such as alert, notification, reminder, instruction, etc." )
515    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/communication-category")
516    protected List<CodeableConcept> category;
517
518    /**
519     * A channel that was used for this communication (e.g. email, fax).
520     */
521    @Child(name = "medium", type = {CodeableConcept.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
522    @Description(shortDefinition="A channel of communication", formalDefinition="A channel that was used for this communication (e.g. email, fax)." )
523    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/v3-ParticipationMode")
524    protected List<CodeableConcept> medium;
525
526    /**
527     * The patient or group that was the focus of this communication.
528     */
529    @Child(name = "subject", type = {Patient.class, Group.class}, order=9, min=0, max=1, modifier=false, summary=true)
530    @Description(shortDefinition="Focus of message", formalDefinition="The patient or group that was the focus of this communication." )
531    protected Reference subject;
532
533    /**
534     * The actual object that is the target of the reference (The patient or group that was the focus of this communication.)
535     */
536    protected Resource subjectTarget;
537
538    /**
539     * The entity (e.g. person, organization, clinical information system, or device) which was the target of the communication. If receipts need to be tracked by individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either a receipt(s) is not tracked (e.g. a mass mail-out) or is captured in aggregate (all emails confirmed received by a particular time).
540     */
541    @Child(name = "recipient", type = {Device.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class, Group.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
542    @Description(shortDefinition="Message recipient", formalDefinition="The entity (e.g. person, organization, clinical information system, or device) which was the target of the communication. If receipts need to be tracked by individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either a receipt(s) is not tracked (e.g. a mass mail-out) or is captured in aggregate (all emails confirmed received by a particular time)." )
543    protected List<Reference> recipient;
544    /**
545     * The actual objects that are the target of the reference (The entity (e.g. person, organization, clinical information system, or device) which was the target of the communication. If receipts need to be tracked by individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either a receipt(s) is not tracked (e.g. a mass mail-out) or is captured in aggregate (all emails confirmed received by a particular time).)
546     */
547    protected List<Resource> recipientTarget;
548
549
550    /**
551     * The resources which were responsible for or related to producing this communication.
552     */
553    @Child(name = "topic", type = {Reference.class}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
554    @Description(shortDefinition="Focal resources", formalDefinition="The resources which were responsible for or related to producing this communication." )
555    protected List<Reference> topic;
556    /**
557     * The actual objects that are the target of the reference (The resources which were responsible for or related to producing this communication.)
558     */
559    protected List<Resource> topicTarget;
560
561
562    /**
563     * The encounter within which the communication was sent.
564     */
565    @Child(name = "context", type = {Encounter.class, EpisodeOfCare.class}, order=12, min=0, max=1, modifier=false, summary=true)
566    @Description(shortDefinition="Encounter or episode leading to message", formalDefinition="The encounter within which the communication was sent." )
567    protected Reference context;
568
569    /**
570     * The actual object that is the target of the reference (The encounter within which the communication was sent.)
571     */
572    protected Resource contextTarget;
573
574    /**
575     * The time when this communication was sent.
576     */
577    @Child(name = "sent", type = {DateTimeType.class}, order=13, min=0, max=1, modifier=false, summary=false)
578    @Description(shortDefinition="When sent", formalDefinition="The time when this communication was sent." )
579    protected DateTimeType sent;
580
581    /**
582     * The time when this communication arrived at the destination.
583     */
584    @Child(name = "received", type = {DateTimeType.class}, order=14, min=0, max=1, modifier=false, summary=false)
585    @Description(shortDefinition="When received", formalDefinition="The time when this communication arrived at the destination." )
586    protected DateTimeType received;
587
588    /**
589     * The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.
590     */
591    @Child(name = "sender", type = {Device.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class}, order=15, min=0, max=1, modifier=false, summary=false)
592    @Description(shortDefinition="Message sender", formalDefinition="The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication." )
593    protected Reference sender;
594
595    /**
596     * The actual object that is the target of the reference (The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.)
597     */
598    protected Resource senderTarget;
599
600    /**
601     * The reason or justification for the communication.
602     */
603    @Child(name = "reasonCode", type = {CodeableConcept.class}, order=16, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
604    @Description(shortDefinition="Indication for message", formalDefinition="The reason or justification for the communication." )
605    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/clinical-findings")
606    protected List<CodeableConcept> reasonCode;
607
608    /**
609     * Indicates another resource whose existence justifies this communication.
610     */
611    @Child(name = "reasonReference", type = {Condition.class, Observation.class}, order=17, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
612    @Description(shortDefinition="Why was communication done?", formalDefinition="Indicates another resource whose existence justifies this communication." )
613    protected List<Reference> reasonReference;
614    /**
615     * The actual objects that are the target of the reference (Indicates another resource whose existence justifies this communication.)
616     */
617    protected List<Resource> reasonReferenceTarget;
618
619
620    /**
621     * Text, attachment(s), or resource(s) that was communicated to the recipient.
622     */
623    @Child(name = "payload", type = {}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
624    @Description(shortDefinition="Message payload", formalDefinition="Text, attachment(s), or resource(s) that was communicated to the recipient." )
625    protected List<CommunicationPayloadComponent> payload;
626
627    /**
628     * Additional notes or commentary about the communication by the sender, receiver or other interested parties.
629     */
630    @Child(name = "note", type = {Annotation.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
631    @Description(shortDefinition="Comments made about the communication", formalDefinition="Additional notes or commentary about the communication by the sender, receiver or other interested parties." )
632    protected List<Annotation> note;
633
634    private static final long serialVersionUID = -1362735590L;
635
636  /**
637   * Constructor
638   */
639    public Communication() {
640      super();
641    }
642
643  /**
644   * Constructor
645   */
646    public Communication(Enumeration<CommunicationStatus> status) {
647      super();
648      this.status = status;
649    }
650
651    /**
652     * @return {@link #identifier} (Identifiers associated with this Communication that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).)
653     */
654    public List<Identifier> getIdentifier() { 
655      if (this.identifier == null)
656        this.identifier = new ArrayList<Identifier>();
657      return this.identifier;
658    }
659
660    /**
661     * @return Returns a reference to <code>this</code> for easy method chaining
662     */
663    public Communication setIdentifier(List<Identifier> theIdentifier) { 
664      this.identifier = theIdentifier;
665      return this;
666    }
667
668    public boolean hasIdentifier() { 
669      if (this.identifier == null)
670        return false;
671      for (Identifier item : this.identifier)
672        if (!item.isEmpty())
673          return true;
674      return false;
675    }
676
677    public Identifier addIdentifier() { //3
678      Identifier t = new Identifier();
679      if (this.identifier == null)
680        this.identifier = new ArrayList<Identifier>();
681      this.identifier.add(t);
682      return t;
683    }
684
685    public Communication addIdentifier(Identifier t) { //3
686      if (t == null)
687        return this;
688      if (this.identifier == null)
689        this.identifier = new ArrayList<Identifier>();
690      this.identifier.add(t);
691      return this;
692    }
693
694    /**
695     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
696     */
697    public Identifier getIdentifierFirstRep() { 
698      if (getIdentifier().isEmpty()) {
699        addIdentifier();
700      }
701      return getIdentifier().get(0);
702    }
703
704    /**
705     * @return {@link #definition} (A protocol, guideline, or other definition that was adhered to in whole or in part by this communication event.)
706     */
707    public List<Reference> getDefinition() { 
708      if (this.definition == null)
709        this.definition = new ArrayList<Reference>();
710      return this.definition;
711    }
712
713    /**
714     * @return Returns a reference to <code>this</code> for easy method chaining
715     */
716    public Communication setDefinition(List<Reference> theDefinition) { 
717      this.definition = theDefinition;
718      return this;
719    }
720
721    public boolean hasDefinition() { 
722      if (this.definition == null)
723        return false;
724      for (Reference item : this.definition)
725        if (!item.isEmpty())
726          return true;
727      return false;
728    }
729
730    public Reference addDefinition() { //3
731      Reference t = new Reference();
732      if (this.definition == null)
733        this.definition = new ArrayList<Reference>();
734      this.definition.add(t);
735      return t;
736    }
737
738    public Communication addDefinition(Reference t) { //3
739      if (t == null)
740        return this;
741      if (this.definition == null)
742        this.definition = new ArrayList<Reference>();
743      this.definition.add(t);
744      return this;
745    }
746
747    /**
748     * @return The first repetition of repeating field {@link #definition}, creating it if it does not already exist
749     */
750    public Reference getDefinitionFirstRep() { 
751      if (getDefinition().isEmpty()) {
752        addDefinition();
753      }
754      return getDefinition().get(0);
755    }
756
757    /**
758     * @deprecated Use Reference#setResource(IBaseResource) instead
759     */
760    @Deprecated
761    public List<Resource> getDefinitionTarget() { 
762      if (this.definitionTarget == null)
763        this.definitionTarget = new ArrayList<Resource>();
764      return this.definitionTarget;
765    }
766
767    /**
768     * @return {@link #basedOn} (An order, proposal or plan fulfilled in whole or in part by this Communication.)
769     */
770    public List<Reference> getBasedOn() { 
771      if (this.basedOn == null)
772        this.basedOn = new ArrayList<Reference>();
773      return this.basedOn;
774    }
775
776    /**
777     * @return Returns a reference to <code>this</code> for easy method chaining
778     */
779    public Communication setBasedOn(List<Reference> theBasedOn) { 
780      this.basedOn = theBasedOn;
781      return this;
782    }
783
784    public boolean hasBasedOn() { 
785      if (this.basedOn == null)
786        return false;
787      for (Reference item : this.basedOn)
788        if (!item.isEmpty())
789          return true;
790      return false;
791    }
792
793    public Reference addBasedOn() { //3
794      Reference t = new Reference();
795      if (this.basedOn == null)
796        this.basedOn = new ArrayList<Reference>();
797      this.basedOn.add(t);
798      return t;
799    }
800
801    public Communication addBasedOn(Reference t) { //3
802      if (t == null)
803        return this;
804      if (this.basedOn == null)
805        this.basedOn = new ArrayList<Reference>();
806      this.basedOn.add(t);
807      return this;
808    }
809
810    /**
811     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist
812     */
813    public Reference getBasedOnFirstRep() { 
814      if (getBasedOn().isEmpty()) {
815        addBasedOn();
816      }
817      return getBasedOn().get(0);
818    }
819
820    /**
821     * @deprecated Use Reference#setResource(IBaseResource) instead
822     */
823    @Deprecated
824    public List<Resource> getBasedOnTarget() { 
825      if (this.basedOnTarget == null)
826        this.basedOnTarget = new ArrayList<Resource>();
827      return this.basedOnTarget;
828    }
829
830    /**
831     * @return {@link #partOf} (Part of this action.)
832     */
833    public List<Reference> getPartOf() { 
834      if (this.partOf == null)
835        this.partOf = new ArrayList<Reference>();
836      return this.partOf;
837    }
838
839    /**
840     * @return Returns a reference to <code>this</code> for easy method chaining
841     */
842    public Communication setPartOf(List<Reference> thePartOf) { 
843      this.partOf = thePartOf;
844      return this;
845    }
846
847    public boolean hasPartOf() { 
848      if (this.partOf == null)
849        return false;
850      for (Reference item : this.partOf)
851        if (!item.isEmpty())
852          return true;
853      return false;
854    }
855
856    public Reference addPartOf() { //3
857      Reference t = new Reference();
858      if (this.partOf == null)
859        this.partOf = new ArrayList<Reference>();
860      this.partOf.add(t);
861      return t;
862    }
863
864    public Communication addPartOf(Reference t) { //3
865      if (t == null)
866        return this;
867      if (this.partOf == null)
868        this.partOf = new ArrayList<Reference>();
869      this.partOf.add(t);
870      return this;
871    }
872
873    /**
874     * @return The first repetition of repeating field {@link #partOf}, creating it if it does not already exist
875     */
876    public Reference getPartOfFirstRep() { 
877      if (getPartOf().isEmpty()) {
878        addPartOf();
879      }
880      return getPartOf().get(0);
881    }
882
883    /**
884     * @deprecated Use Reference#setResource(IBaseResource) instead
885     */
886    @Deprecated
887    public List<Resource> getPartOfTarget() { 
888      if (this.partOfTarget == null)
889        this.partOfTarget = new ArrayList<Resource>();
890      return this.partOfTarget;
891    }
892
893    /**
894     * @return {@link #status} (The status of the transmission.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
895     */
896    public Enumeration<CommunicationStatus> getStatusElement() { 
897      if (this.status == null)
898        if (Configuration.errorOnAutoCreate())
899          throw new Error("Attempt to auto-create Communication.status");
900        else if (Configuration.doAutoCreate())
901          this.status = new Enumeration<CommunicationStatus>(new CommunicationStatusEnumFactory()); // bb
902      return this.status;
903    }
904
905    public boolean hasStatusElement() { 
906      return this.status != null && !this.status.isEmpty();
907    }
908
909    public boolean hasStatus() { 
910      return this.status != null && !this.status.isEmpty();
911    }
912
913    /**
914     * @param value {@link #status} (The status of the transmission.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
915     */
916    public Communication setStatusElement(Enumeration<CommunicationStatus> value) { 
917      this.status = value;
918      return this;
919    }
920
921    /**
922     * @return The status of the transmission.
923     */
924    public CommunicationStatus getStatus() { 
925      return this.status == null ? null : this.status.getValue();
926    }
927
928    /**
929     * @param value The status of the transmission.
930     */
931    public Communication setStatus(CommunicationStatus value) { 
932        if (this.status == null)
933          this.status = new Enumeration<CommunicationStatus>(new CommunicationStatusEnumFactory());
934        this.status.setValue(value);
935      return this;
936    }
937
938    /**
939     * @return {@link #notDone} (If true, indicates that the described communication event did not actually occur.). This is the underlying object with id, value and extensions. The accessor "getNotDone" gives direct access to the value
940     */
941    public BooleanType getNotDoneElement() { 
942      if (this.notDone == null)
943        if (Configuration.errorOnAutoCreate())
944          throw new Error("Attempt to auto-create Communication.notDone");
945        else if (Configuration.doAutoCreate())
946          this.notDone = new BooleanType(); // bb
947      return this.notDone;
948    }
949
950    public boolean hasNotDoneElement() { 
951      return this.notDone != null && !this.notDone.isEmpty();
952    }
953
954    public boolean hasNotDone() { 
955      return this.notDone != null && !this.notDone.isEmpty();
956    }
957
958    /**
959     * @param value {@link #notDone} (If true, indicates that the described communication event did not actually occur.). This is the underlying object with id, value and extensions. The accessor "getNotDone" gives direct access to the value
960     */
961    public Communication setNotDoneElement(BooleanType value) { 
962      this.notDone = value;
963      return this;
964    }
965
966    /**
967     * @return If true, indicates that the described communication event did not actually occur.
968     */
969    public boolean getNotDone() { 
970      return this.notDone == null || this.notDone.isEmpty() ? false : this.notDone.getValue();
971    }
972
973    /**
974     * @param value If true, indicates that the described communication event did not actually occur.
975     */
976    public Communication setNotDone(boolean value) { 
977        if (this.notDone == null)
978          this.notDone = new BooleanType();
979        this.notDone.setValue(value);
980      return this;
981    }
982
983    /**
984     * @return {@link #notDoneReason} (Describes why the communication event did not occur in coded and/or textual form.)
985     */
986    public CodeableConcept getNotDoneReason() { 
987      if (this.notDoneReason == null)
988        if (Configuration.errorOnAutoCreate())
989          throw new Error("Attempt to auto-create Communication.notDoneReason");
990        else if (Configuration.doAutoCreate())
991          this.notDoneReason = new CodeableConcept(); // cc
992      return this.notDoneReason;
993    }
994
995    public boolean hasNotDoneReason() { 
996      return this.notDoneReason != null && !this.notDoneReason.isEmpty();
997    }
998
999    /**
1000     * @param value {@link #notDoneReason} (Describes why the communication event did not occur in coded and/or textual form.)
1001     */
1002    public Communication setNotDoneReason(CodeableConcept value)  { 
1003      this.notDoneReason = value;
1004      return this;
1005    }
1006
1007    /**
1008     * @return {@link #category} (The type of message conveyed such as alert, notification, reminder, instruction, etc.)
1009     */
1010    public List<CodeableConcept> getCategory() { 
1011      if (this.category == null)
1012        this.category = new ArrayList<CodeableConcept>();
1013      return this.category;
1014    }
1015
1016    /**
1017     * @return Returns a reference to <code>this</code> for easy method chaining
1018     */
1019    public Communication setCategory(List<CodeableConcept> theCategory) { 
1020      this.category = theCategory;
1021      return this;
1022    }
1023
1024    public boolean hasCategory() { 
1025      if (this.category == null)
1026        return false;
1027      for (CodeableConcept item : this.category)
1028        if (!item.isEmpty())
1029          return true;
1030      return false;
1031    }
1032
1033    public CodeableConcept addCategory() { //3
1034      CodeableConcept t = new CodeableConcept();
1035      if (this.category == null)
1036        this.category = new ArrayList<CodeableConcept>();
1037      this.category.add(t);
1038      return t;
1039    }
1040
1041    public Communication addCategory(CodeableConcept t) { //3
1042      if (t == null)
1043        return this;
1044      if (this.category == null)
1045        this.category = new ArrayList<CodeableConcept>();
1046      this.category.add(t);
1047      return this;
1048    }
1049
1050    /**
1051     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist
1052     */
1053    public CodeableConcept getCategoryFirstRep() { 
1054      if (getCategory().isEmpty()) {
1055        addCategory();
1056      }
1057      return getCategory().get(0);
1058    }
1059
1060    /**
1061     * @return {@link #medium} (A channel that was used for this communication (e.g. email, fax).)
1062     */
1063    public List<CodeableConcept> getMedium() { 
1064      if (this.medium == null)
1065        this.medium = new ArrayList<CodeableConcept>();
1066      return this.medium;
1067    }
1068
1069    /**
1070     * @return Returns a reference to <code>this</code> for easy method chaining
1071     */
1072    public Communication setMedium(List<CodeableConcept> theMedium) { 
1073      this.medium = theMedium;
1074      return this;
1075    }
1076
1077    public boolean hasMedium() { 
1078      if (this.medium == null)
1079        return false;
1080      for (CodeableConcept item : this.medium)
1081        if (!item.isEmpty())
1082          return true;
1083      return false;
1084    }
1085
1086    public CodeableConcept addMedium() { //3
1087      CodeableConcept t = new CodeableConcept();
1088      if (this.medium == null)
1089        this.medium = new ArrayList<CodeableConcept>();
1090      this.medium.add(t);
1091      return t;
1092    }
1093
1094    public Communication addMedium(CodeableConcept t) { //3
1095      if (t == null)
1096        return this;
1097      if (this.medium == null)
1098        this.medium = new ArrayList<CodeableConcept>();
1099      this.medium.add(t);
1100      return this;
1101    }
1102
1103    /**
1104     * @return The first repetition of repeating field {@link #medium}, creating it if it does not already exist
1105     */
1106    public CodeableConcept getMediumFirstRep() { 
1107      if (getMedium().isEmpty()) {
1108        addMedium();
1109      }
1110      return getMedium().get(0);
1111    }
1112
1113    /**
1114     * @return {@link #subject} (The patient or group that was the focus of this communication.)
1115     */
1116    public Reference getSubject() { 
1117      if (this.subject == null)
1118        if (Configuration.errorOnAutoCreate())
1119          throw new Error("Attempt to auto-create Communication.subject");
1120        else if (Configuration.doAutoCreate())
1121          this.subject = new Reference(); // cc
1122      return this.subject;
1123    }
1124
1125    public boolean hasSubject() { 
1126      return this.subject != null && !this.subject.isEmpty();
1127    }
1128
1129    /**
1130     * @param value {@link #subject} (The patient or group that was the focus of this communication.)
1131     */
1132    public Communication setSubject(Reference value)  { 
1133      this.subject = value;
1134      return this;
1135    }
1136
1137    /**
1138     * @return {@link #subject} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The patient or group that was the focus of this communication.)
1139     */
1140    public Resource getSubjectTarget() { 
1141      return this.subjectTarget;
1142    }
1143
1144    /**
1145     * @param value {@link #subject} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The patient or group that was the focus of this communication.)
1146     */
1147    public Communication setSubjectTarget(Resource value) { 
1148      this.subjectTarget = value;
1149      return this;
1150    }
1151
1152    /**
1153     * @return {@link #recipient} (The entity (e.g. person, organization, clinical information system, or device) which was the target of the communication. If receipts need to be tracked by individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either a receipt(s) is not tracked (e.g. a mass mail-out) or is captured in aggregate (all emails confirmed received by a particular time).)
1154     */
1155    public List<Reference> getRecipient() { 
1156      if (this.recipient == null)
1157        this.recipient = new ArrayList<Reference>();
1158      return this.recipient;
1159    }
1160
1161    /**
1162     * @return Returns a reference to <code>this</code> for easy method chaining
1163     */
1164    public Communication setRecipient(List<Reference> theRecipient) { 
1165      this.recipient = theRecipient;
1166      return this;
1167    }
1168
1169    public boolean hasRecipient() { 
1170      if (this.recipient == null)
1171        return false;
1172      for (Reference item : this.recipient)
1173        if (!item.isEmpty())
1174          return true;
1175      return false;
1176    }
1177
1178    public Reference addRecipient() { //3
1179      Reference t = new Reference();
1180      if (this.recipient == null)
1181        this.recipient = new ArrayList<Reference>();
1182      this.recipient.add(t);
1183      return t;
1184    }
1185
1186    public Communication addRecipient(Reference t) { //3
1187      if (t == null)
1188        return this;
1189      if (this.recipient == null)
1190        this.recipient = new ArrayList<Reference>();
1191      this.recipient.add(t);
1192      return this;
1193    }
1194
1195    /**
1196     * @return The first repetition of repeating field {@link #recipient}, creating it if it does not already exist
1197     */
1198    public Reference getRecipientFirstRep() { 
1199      if (getRecipient().isEmpty()) {
1200        addRecipient();
1201      }
1202      return getRecipient().get(0);
1203    }
1204
1205    /**
1206     * @deprecated Use Reference#setResource(IBaseResource) instead
1207     */
1208    @Deprecated
1209    public List<Resource> getRecipientTarget() { 
1210      if (this.recipientTarget == null)
1211        this.recipientTarget = new ArrayList<Resource>();
1212      return this.recipientTarget;
1213    }
1214
1215    /**
1216     * @return {@link #topic} (The resources which were responsible for or related to producing this communication.)
1217     */
1218    public List<Reference> getTopic() { 
1219      if (this.topic == null)
1220        this.topic = new ArrayList<Reference>();
1221      return this.topic;
1222    }
1223
1224    /**
1225     * @return Returns a reference to <code>this</code> for easy method chaining
1226     */
1227    public Communication setTopic(List<Reference> theTopic) { 
1228      this.topic = theTopic;
1229      return this;
1230    }
1231
1232    public boolean hasTopic() { 
1233      if (this.topic == null)
1234        return false;
1235      for (Reference item : this.topic)
1236        if (!item.isEmpty())
1237          return true;
1238      return false;
1239    }
1240
1241    public Reference addTopic() { //3
1242      Reference t = new Reference();
1243      if (this.topic == null)
1244        this.topic = new ArrayList<Reference>();
1245      this.topic.add(t);
1246      return t;
1247    }
1248
1249    public Communication addTopic(Reference t) { //3
1250      if (t == null)
1251        return this;
1252      if (this.topic == null)
1253        this.topic = new ArrayList<Reference>();
1254      this.topic.add(t);
1255      return this;
1256    }
1257
1258    /**
1259     * @return The first repetition of repeating field {@link #topic}, creating it if it does not already exist
1260     */
1261    public Reference getTopicFirstRep() { 
1262      if (getTopic().isEmpty()) {
1263        addTopic();
1264      }
1265      return getTopic().get(0);
1266    }
1267
1268    /**
1269     * @deprecated Use Reference#setResource(IBaseResource) instead
1270     */
1271    @Deprecated
1272    public List<Resource> getTopicTarget() { 
1273      if (this.topicTarget == null)
1274        this.topicTarget = new ArrayList<Resource>();
1275      return this.topicTarget;
1276    }
1277
1278    /**
1279     * @return {@link #context} (The encounter within which the communication was sent.)
1280     */
1281    public Reference getContext() { 
1282      if (this.context == null)
1283        if (Configuration.errorOnAutoCreate())
1284          throw new Error("Attempt to auto-create Communication.context");
1285        else if (Configuration.doAutoCreate())
1286          this.context = new Reference(); // cc
1287      return this.context;
1288    }
1289
1290    public boolean hasContext() { 
1291      return this.context != null && !this.context.isEmpty();
1292    }
1293
1294    /**
1295     * @param value {@link #context} (The encounter within which the communication was sent.)
1296     */
1297    public Communication setContext(Reference value)  { 
1298      this.context = value;
1299      return this;
1300    }
1301
1302    /**
1303     * @return {@link #context} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The encounter within which the communication was sent.)
1304     */
1305    public Resource getContextTarget() { 
1306      return this.contextTarget;
1307    }
1308
1309    /**
1310     * @param value {@link #context} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The encounter within which the communication was sent.)
1311     */
1312    public Communication setContextTarget(Resource value) { 
1313      this.contextTarget = value;
1314      return this;
1315    }
1316
1317    /**
1318     * @return {@link #sent} (The time when this communication was sent.). This is the underlying object with id, value and extensions. The accessor "getSent" gives direct access to the value
1319     */
1320    public DateTimeType getSentElement() { 
1321      if (this.sent == null)
1322        if (Configuration.errorOnAutoCreate())
1323          throw new Error("Attempt to auto-create Communication.sent");
1324        else if (Configuration.doAutoCreate())
1325          this.sent = new DateTimeType(); // bb
1326      return this.sent;
1327    }
1328
1329    public boolean hasSentElement() { 
1330      return this.sent != null && !this.sent.isEmpty();
1331    }
1332
1333    public boolean hasSent() { 
1334      return this.sent != null && !this.sent.isEmpty();
1335    }
1336
1337    /**
1338     * @param value {@link #sent} (The time when this communication was sent.). This is the underlying object with id, value and extensions. The accessor "getSent" gives direct access to the value
1339     */
1340    public Communication setSentElement(DateTimeType value) { 
1341      this.sent = value;
1342      return this;
1343    }
1344
1345    /**
1346     * @return The time when this communication was sent.
1347     */
1348    public Date getSent() { 
1349      return this.sent == null ? null : this.sent.getValue();
1350    }
1351
1352    /**
1353     * @param value The time when this communication was sent.
1354     */
1355    public Communication setSent(Date value) { 
1356      if (value == null)
1357        this.sent = null;
1358      else {
1359        if (this.sent == null)
1360          this.sent = new DateTimeType();
1361        this.sent.setValue(value);
1362      }
1363      return this;
1364    }
1365
1366    /**
1367     * @return {@link #received} (The time when this communication arrived at the destination.). This is the underlying object with id, value and extensions. The accessor "getReceived" gives direct access to the value
1368     */
1369    public DateTimeType getReceivedElement() { 
1370      if (this.received == null)
1371        if (Configuration.errorOnAutoCreate())
1372          throw new Error("Attempt to auto-create Communication.received");
1373        else if (Configuration.doAutoCreate())
1374          this.received = new DateTimeType(); // bb
1375      return this.received;
1376    }
1377
1378    public boolean hasReceivedElement() { 
1379      return this.received != null && !this.received.isEmpty();
1380    }
1381
1382    public boolean hasReceived() { 
1383      return this.received != null && !this.received.isEmpty();
1384    }
1385
1386    /**
1387     * @param value {@link #received} (The time when this communication arrived at the destination.). This is the underlying object with id, value and extensions. The accessor "getReceived" gives direct access to the value
1388     */
1389    public Communication setReceivedElement(DateTimeType value) { 
1390      this.received = value;
1391      return this;
1392    }
1393
1394    /**
1395     * @return The time when this communication arrived at the destination.
1396     */
1397    public Date getReceived() { 
1398      return this.received == null ? null : this.received.getValue();
1399    }
1400
1401    /**
1402     * @param value The time when this communication arrived at the destination.
1403     */
1404    public Communication setReceived(Date value) { 
1405      if (value == null)
1406        this.received = null;
1407      else {
1408        if (this.received == null)
1409          this.received = new DateTimeType();
1410        this.received.setValue(value);
1411      }
1412      return this;
1413    }
1414
1415    /**
1416     * @return {@link #sender} (The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.)
1417     */
1418    public Reference getSender() { 
1419      if (this.sender == null)
1420        if (Configuration.errorOnAutoCreate())
1421          throw new Error("Attempt to auto-create Communication.sender");
1422        else if (Configuration.doAutoCreate())
1423          this.sender = new Reference(); // cc
1424      return this.sender;
1425    }
1426
1427    public boolean hasSender() { 
1428      return this.sender != null && !this.sender.isEmpty();
1429    }
1430
1431    /**
1432     * @param value {@link #sender} (The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.)
1433     */
1434    public Communication setSender(Reference value)  { 
1435      this.sender = value;
1436      return this;
1437    }
1438
1439    /**
1440     * @return {@link #sender} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.)
1441     */
1442    public Resource getSenderTarget() { 
1443      return this.senderTarget;
1444    }
1445
1446    /**
1447     * @param value {@link #sender} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.)
1448     */
1449    public Communication setSenderTarget(Resource value) { 
1450      this.senderTarget = value;
1451      return this;
1452    }
1453
1454    /**
1455     * @return {@link #reasonCode} (The reason or justification for the communication.)
1456     */
1457    public List<CodeableConcept> getReasonCode() { 
1458      if (this.reasonCode == null)
1459        this.reasonCode = new ArrayList<CodeableConcept>();
1460      return this.reasonCode;
1461    }
1462
1463    /**
1464     * @return Returns a reference to <code>this</code> for easy method chaining
1465     */
1466    public Communication setReasonCode(List<CodeableConcept> theReasonCode) { 
1467      this.reasonCode = theReasonCode;
1468      return this;
1469    }
1470
1471    public boolean hasReasonCode() { 
1472      if (this.reasonCode == null)
1473        return false;
1474      for (CodeableConcept item : this.reasonCode)
1475        if (!item.isEmpty())
1476          return true;
1477      return false;
1478    }
1479
1480    public CodeableConcept addReasonCode() { //3
1481      CodeableConcept t = new CodeableConcept();
1482      if (this.reasonCode == null)
1483        this.reasonCode = new ArrayList<CodeableConcept>();
1484      this.reasonCode.add(t);
1485      return t;
1486    }
1487
1488    public Communication addReasonCode(CodeableConcept t) { //3
1489      if (t == null)
1490        return this;
1491      if (this.reasonCode == null)
1492        this.reasonCode = new ArrayList<CodeableConcept>();
1493      this.reasonCode.add(t);
1494      return this;
1495    }
1496
1497    /**
1498     * @return The first repetition of repeating field {@link #reasonCode}, creating it if it does not already exist
1499     */
1500    public CodeableConcept getReasonCodeFirstRep() { 
1501      if (getReasonCode().isEmpty()) {
1502        addReasonCode();
1503      }
1504      return getReasonCode().get(0);
1505    }
1506
1507    /**
1508     * @return {@link #reasonReference} (Indicates another resource whose existence justifies this communication.)
1509     */
1510    public List<Reference> getReasonReference() { 
1511      if (this.reasonReference == null)
1512        this.reasonReference = new ArrayList<Reference>();
1513      return this.reasonReference;
1514    }
1515
1516    /**
1517     * @return Returns a reference to <code>this</code> for easy method chaining
1518     */
1519    public Communication setReasonReference(List<Reference> theReasonReference) { 
1520      this.reasonReference = theReasonReference;
1521      return this;
1522    }
1523
1524    public boolean hasReasonReference() { 
1525      if (this.reasonReference == null)
1526        return false;
1527      for (Reference item : this.reasonReference)
1528        if (!item.isEmpty())
1529          return true;
1530      return false;
1531    }
1532
1533    public Reference addReasonReference() { //3
1534      Reference t = new Reference();
1535      if (this.reasonReference == null)
1536        this.reasonReference = new ArrayList<Reference>();
1537      this.reasonReference.add(t);
1538      return t;
1539    }
1540
1541    public Communication addReasonReference(Reference t) { //3
1542      if (t == null)
1543        return this;
1544      if (this.reasonReference == null)
1545        this.reasonReference = new ArrayList<Reference>();
1546      this.reasonReference.add(t);
1547      return this;
1548    }
1549
1550    /**
1551     * @return The first repetition of repeating field {@link #reasonReference}, creating it if it does not already exist
1552     */
1553    public Reference getReasonReferenceFirstRep() { 
1554      if (getReasonReference().isEmpty()) {
1555        addReasonReference();
1556      }
1557      return getReasonReference().get(0);
1558    }
1559
1560    /**
1561     * @deprecated Use Reference#setResource(IBaseResource) instead
1562     */
1563    @Deprecated
1564    public List<Resource> getReasonReferenceTarget() { 
1565      if (this.reasonReferenceTarget == null)
1566        this.reasonReferenceTarget = new ArrayList<Resource>();
1567      return this.reasonReferenceTarget;
1568    }
1569
1570    /**
1571     * @return {@link #payload} (Text, attachment(s), or resource(s) that was communicated to the recipient.)
1572     */
1573    public List<CommunicationPayloadComponent> getPayload() { 
1574      if (this.payload == null)
1575        this.payload = new ArrayList<CommunicationPayloadComponent>();
1576      return this.payload;
1577    }
1578
1579    /**
1580     * @return Returns a reference to <code>this</code> for easy method chaining
1581     */
1582    public Communication setPayload(List<CommunicationPayloadComponent> thePayload) { 
1583      this.payload = thePayload;
1584      return this;
1585    }
1586
1587    public boolean hasPayload() { 
1588      if (this.payload == null)
1589        return false;
1590      for (CommunicationPayloadComponent item : this.payload)
1591        if (!item.isEmpty())
1592          return true;
1593      return false;
1594    }
1595
1596    public CommunicationPayloadComponent addPayload() { //3
1597      CommunicationPayloadComponent t = new CommunicationPayloadComponent();
1598      if (this.payload == null)
1599        this.payload = new ArrayList<CommunicationPayloadComponent>();
1600      this.payload.add(t);
1601      return t;
1602    }
1603
1604    public Communication addPayload(CommunicationPayloadComponent t) { //3
1605      if (t == null)
1606        return this;
1607      if (this.payload == null)
1608        this.payload = new ArrayList<CommunicationPayloadComponent>();
1609      this.payload.add(t);
1610      return this;
1611    }
1612
1613    /**
1614     * @return The first repetition of repeating field {@link #payload}, creating it if it does not already exist
1615     */
1616    public CommunicationPayloadComponent getPayloadFirstRep() { 
1617      if (getPayload().isEmpty()) {
1618        addPayload();
1619      }
1620      return getPayload().get(0);
1621    }
1622
1623    /**
1624     * @return {@link #note} (Additional notes or commentary about the communication by the sender, receiver or other interested parties.)
1625     */
1626    public List<Annotation> getNote() { 
1627      if (this.note == null)
1628        this.note = new ArrayList<Annotation>();
1629      return this.note;
1630    }
1631
1632    /**
1633     * @return Returns a reference to <code>this</code> for easy method chaining
1634     */
1635    public Communication setNote(List<Annotation> theNote) { 
1636      this.note = theNote;
1637      return this;
1638    }
1639
1640    public boolean hasNote() { 
1641      if (this.note == null)
1642        return false;
1643      for (Annotation item : this.note)
1644        if (!item.isEmpty())
1645          return true;
1646      return false;
1647    }
1648
1649    public Annotation addNote() { //3
1650      Annotation t = new Annotation();
1651      if (this.note == null)
1652        this.note = new ArrayList<Annotation>();
1653      this.note.add(t);
1654      return t;
1655    }
1656
1657    public Communication addNote(Annotation t) { //3
1658      if (t == null)
1659        return this;
1660      if (this.note == null)
1661        this.note = new ArrayList<Annotation>();
1662      this.note.add(t);
1663      return this;
1664    }
1665
1666    /**
1667     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist
1668     */
1669    public Annotation getNoteFirstRep() { 
1670      if (getNote().isEmpty()) {
1671        addNote();
1672      }
1673      return getNote().get(0);
1674    }
1675
1676      protected void listChildren(List<Property> children) {
1677        super.listChildren(children);
1678        children.add(new Property("identifier", "Identifier", "Identifiers associated with this Communication that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).", 0, java.lang.Integer.MAX_VALUE, identifier));
1679        children.add(new Property("definition", "Reference(PlanDefinition|ActivityDefinition)", "A protocol, guideline, or other definition that was adhered to in whole or in part by this communication event.", 0, java.lang.Integer.MAX_VALUE, definition));
1680        children.add(new Property("basedOn", "Reference(Any)", "An order, proposal or plan fulfilled in whole or in part by this Communication.", 0, java.lang.Integer.MAX_VALUE, basedOn));
1681        children.add(new Property("partOf", "Reference(Any)", "Part of this action.", 0, java.lang.Integer.MAX_VALUE, partOf));
1682        children.add(new Property("status", "code", "The status of the transmission.", 0, 1, status));
1683        children.add(new Property("notDone", "boolean", "If true, indicates that the described communication event did not actually occur.", 0, 1, notDone));
1684        children.add(new Property("notDoneReason", "CodeableConcept", "Describes why the communication event did not occur in coded and/or textual form.", 0, 1, notDoneReason));
1685        children.add(new Property("category", "CodeableConcept", "The type of message conveyed such as alert, notification, reminder, instruction, etc.", 0, java.lang.Integer.MAX_VALUE, category));
1686        children.add(new Property("medium", "CodeableConcept", "A channel that was used for this communication (e.g. email, fax).", 0, java.lang.Integer.MAX_VALUE, medium));
1687        children.add(new Property("subject", "Reference(Patient|Group)", "The patient or group that was the focus of this communication.", 0, 1, subject));
1688        children.add(new Property("recipient", "Reference(Device|Organization|Patient|Practitioner|RelatedPerson|Group)", "The entity (e.g. person, organization, clinical information system, or device) which was the target of the communication. If receipts need to be tracked by individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either a receipt(s) is not tracked (e.g. a mass mail-out) or is captured in aggregate (all emails confirmed received by a particular time).", 0, java.lang.Integer.MAX_VALUE, recipient));
1689        children.add(new Property("topic", "Reference(Any)", "The resources which were responsible for or related to producing this communication.", 0, java.lang.Integer.MAX_VALUE, topic));
1690        children.add(new Property("context", "Reference(Encounter|EpisodeOfCare)", "The encounter within which the communication was sent.", 0, 1, context));
1691        children.add(new Property("sent", "dateTime", "The time when this communication was sent.", 0, 1, sent));
1692        children.add(new Property("received", "dateTime", "The time when this communication arrived at the destination.", 0, 1, received));
1693        children.add(new Property("sender", "Reference(Device|Organization|Patient|Practitioner|RelatedPerson)", "The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.", 0, 1, sender));
1694        children.add(new Property("reasonCode", "CodeableConcept", "The reason or justification for the communication.", 0, java.lang.Integer.MAX_VALUE, reasonCode));
1695        children.add(new Property("reasonReference", "Reference(Condition|Observation)", "Indicates another resource whose existence justifies this communication.", 0, java.lang.Integer.MAX_VALUE, reasonReference));
1696        children.add(new Property("payload", "", "Text, attachment(s), or resource(s) that was communicated to the recipient.", 0, java.lang.Integer.MAX_VALUE, payload));
1697        children.add(new Property("note", "Annotation", "Additional notes or commentary about the communication by the sender, receiver or other interested parties.", 0, java.lang.Integer.MAX_VALUE, note));
1698      }
1699
1700      @Override
1701      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1702        switch (_hash) {
1703        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifiers associated with this Communication that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).", 0, java.lang.Integer.MAX_VALUE, identifier);
1704        case -1014418093: /*definition*/  return new Property("definition", "Reference(PlanDefinition|ActivityDefinition)", "A protocol, guideline, or other definition that was adhered to in whole or in part by this communication event.", 0, java.lang.Integer.MAX_VALUE, definition);
1705        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(Any)", "An order, proposal or plan fulfilled in whole or in part by this Communication.", 0, java.lang.Integer.MAX_VALUE, basedOn);
1706        case -995410646: /*partOf*/  return new Property("partOf", "Reference(Any)", "Part of this action.", 0, java.lang.Integer.MAX_VALUE, partOf);
1707        case -892481550: /*status*/  return new Property("status", "code", "The status of the transmission.", 0, 1, status);
1708        case 2128257269: /*notDone*/  return new Property("notDone", "boolean", "If true, indicates that the described communication event did not actually occur.", 0, 1, notDone);
1709        case -1973169255: /*notDoneReason*/  return new Property("notDoneReason", "CodeableConcept", "Describes why the communication event did not occur in coded and/or textual form.", 0, 1, notDoneReason);
1710        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "The type of message conveyed such as alert, notification, reminder, instruction, etc.", 0, java.lang.Integer.MAX_VALUE, category);
1711        case -1078030475: /*medium*/  return new Property("medium", "CodeableConcept", "A channel that was used for this communication (e.g. email, fax).", 0, java.lang.Integer.MAX_VALUE, medium);
1712        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "The patient or group that was the focus of this communication.", 0, 1, subject);
1713        case 820081177: /*recipient*/  return new Property("recipient", "Reference(Device|Organization|Patient|Practitioner|RelatedPerson|Group)", "The entity (e.g. person, organization, clinical information system, or device) which was the target of the communication. If receipts need to be tracked by individual, a separate resource instance will need to be created for each recipient.  Multiple recipient communications are intended where either a receipt(s) is not tracked (e.g. a mass mail-out) or is captured in aggregate (all emails confirmed received by a particular time).", 0, java.lang.Integer.MAX_VALUE, recipient);
1714        case 110546223: /*topic*/  return new Property("topic", "Reference(Any)", "The resources which were responsible for or related to producing this communication.", 0, java.lang.Integer.MAX_VALUE, topic);
1715        case 951530927: /*context*/  return new Property("context", "Reference(Encounter|EpisodeOfCare)", "The encounter within which the communication was sent.", 0, 1, context);
1716        case 3526552: /*sent*/  return new Property("sent", "dateTime", "The time when this communication was sent.", 0, 1, sent);
1717        case -808719903: /*received*/  return new Property("received", "dateTime", "The time when this communication arrived at the destination.", 0, 1, received);
1718        case -905962955: /*sender*/  return new Property("sender", "Reference(Device|Organization|Patient|Practitioner|RelatedPerson)", "The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.", 0, 1, sender);
1719        case 722137681: /*reasonCode*/  return new Property("reasonCode", "CodeableConcept", "The reason or justification for the communication.", 0, java.lang.Integer.MAX_VALUE, reasonCode);
1720        case -1146218137: /*reasonReference*/  return new Property("reasonReference", "Reference(Condition|Observation)", "Indicates another resource whose existence justifies this communication.", 0, java.lang.Integer.MAX_VALUE, reasonReference);
1721        case -786701938: /*payload*/  return new Property("payload", "", "Text, attachment(s), or resource(s) that was communicated to the recipient.", 0, java.lang.Integer.MAX_VALUE, payload);
1722        case 3387378: /*note*/  return new Property("note", "Annotation", "Additional notes or commentary about the communication by the sender, receiver or other interested parties.", 0, java.lang.Integer.MAX_VALUE, note);
1723        default: return super.getNamedProperty(_hash, _name, _checkValid);
1724        }
1725
1726      }
1727
1728      @Override
1729      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1730        switch (hash) {
1731        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1732        case -1014418093: /*definition*/ return this.definition == null ? new Base[0] : this.definition.toArray(new Base[this.definition.size()]); // Reference
1733        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
1734        case -995410646: /*partOf*/ return this.partOf == null ? new Base[0] : this.partOf.toArray(new Base[this.partOf.size()]); // Reference
1735        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<CommunicationStatus>
1736        case 2128257269: /*notDone*/ return this.notDone == null ? new Base[0] : new Base[] {this.notDone}; // BooleanType
1737        case -1973169255: /*notDoneReason*/ return this.notDoneReason == null ? new Base[0] : new Base[] {this.notDoneReason}; // CodeableConcept
1738        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
1739        case -1078030475: /*medium*/ return this.medium == null ? new Base[0] : this.medium.toArray(new Base[this.medium.size()]); // CodeableConcept
1740        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
1741        case 820081177: /*recipient*/ return this.recipient == null ? new Base[0] : this.recipient.toArray(new Base[this.recipient.size()]); // Reference
1742        case 110546223: /*topic*/ return this.topic == null ? new Base[0] : this.topic.toArray(new Base[this.topic.size()]); // Reference
1743        case 951530927: /*context*/ return this.context == null ? new Base[0] : new Base[] {this.context}; // Reference
1744        case 3526552: /*sent*/ return this.sent == null ? new Base[0] : new Base[] {this.sent}; // DateTimeType
1745        case -808719903: /*received*/ return this.received == null ? new Base[0] : new Base[] {this.received}; // DateTimeType
1746        case -905962955: /*sender*/ return this.sender == null ? new Base[0] : new Base[] {this.sender}; // Reference
1747        case 722137681: /*reasonCode*/ return this.reasonCode == null ? new Base[0] : this.reasonCode.toArray(new Base[this.reasonCode.size()]); // CodeableConcept
1748        case -1146218137: /*reasonReference*/ return this.reasonReference == null ? new Base[0] : this.reasonReference.toArray(new Base[this.reasonReference.size()]); // Reference
1749        case -786701938: /*payload*/ return this.payload == null ? new Base[0] : this.payload.toArray(new Base[this.payload.size()]); // CommunicationPayloadComponent
1750        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1751        default: return super.getProperty(hash, name, checkValid);
1752        }
1753
1754      }
1755
1756      @Override
1757      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1758        switch (hash) {
1759        case -1618432855: // identifier
1760          this.getIdentifier().add(castToIdentifier(value)); // Identifier
1761          return value;
1762        case -1014418093: // definition
1763          this.getDefinition().add(castToReference(value)); // Reference
1764          return value;
1765        case -332612366: // basedOn
1766          this.getBasedOn().add(castToReference(value)); // Reference
1767          return value;
1768        case -995410646: // partOf
1769          this.getPartOf().add(castToReference(value)); // Reference
1770          return value;
1771        case -892481550: // status
1772          value = new CommunicationStatusEnumFactory().fromType(castToCode(value));
1773          this.status = (Enumeration) value; // Enumeration<CommunicationStatus>
1774          return value;
1775        case 2128257269: // notDone
1776          this.notDone = castToBoolean(value); // BooleanType
1777          return value;
1778        case -1973169255: // notDoneReason
1779          this.notDoneReason = castToCodeableConcept(value); // CodeableConcept
1780          return value;
1781        case 50511102: // category
1782          this.getCategory().add(castToCodeableConcept(value)); // CodeableConcept
1783          return value;
1784        case -1078030475: // medium
1785          this.getMedium().add(castToCodeableConcept(value)); // CodeableConcept
1786          return value;
1787        case -1867885268: // subject
1788          this.subject = castToReference(value); // Reference
1789          return value;
1790        case 820081177: // recipient
1791          this.getRecipient().add(castToReference(value)); // Reference
1792          return value;
1793        case 110546223: // topic
1794          this.getTopic().add(castToReference(value)); // Reference
1795          return value;
1796        case 951530927: // context
1797          this.context = castToReference(value); // Reference
1798          return value;
1799        case 3526552: // sent
1800          this.sent = castToDateTime(value); // DateTimeType
1801          return value;
1802        case -808719903: // received
1803          this.received = castToDateTime(value); // DateTimeType
1804          return value;
1805        case -905962955: // sender
1806          this.sender = castToReference(value); // Reference
1807          return value;
1808        case 722137681: // reasonCode
1809          this.getReasonCode().add(castToCodeableConcept(value)); // CodeableConcept
1810          return value;
1811        case -1146218137: // reasonReference
1812          this.getReasonReference().add(castToReference(value)); // Reference
1813          return value;
1814        case -786701938: // payload
1815          this.getPayload().add((CommunicationPayloadComponent) value); // CommunicationPayloadComponent
1816          return value;
1817        case 3387378: // note
1818          this.getNote().add(castToAnnotation(value)); // Annotation
1819          return value;
1820        default: return super.setProperty(hash, name, value);
1821        }
1822
1823      }
1824
1825      @Override
1826      public Base setProperty(String name, Base value) throws FHIRException {
1827        if (name.equals("identifier")) {
1828          this.getIdentifier().add(castToIdentifier(value));
1829        } else if (name.equals("definition")) {
1830          this.getDefinition().add(castToReference(value));
1831        } else if (name.equals("basedOn")) {
1832          this.getBasedOn().add(castToReference(value));
1833        } else if (name.equals("partOf")) {
1834          this.getPartOf().add(castToReference(value));
1835        } else if (name.equals("status")) {
1836          value = new CommunicationStatusEnumFactory().fromType(castToCode(value));
1837          this.status = (Enumeration) value; // Enumeration<CommunicationStatus>
1838        } else if (name.equals("notDone")) {
1839          this.notDone = castToBoolean(value); // BooleanType
1840        } else if (name.equals("notDoneReason")) {
1841          this.notDoneReason = castToCodeableConcept(value); // CodeableConcept
1842        } else if (name.equals("category")) {
1843          this.getCategory().add(castToCodeableConcept(value));
1844        } else if (name.equals("medium")) {
1845          this.getMedium().add(castToCodeableConcept(value));
1846        } else if (name.equals("subject")) {
1847          this.subject = castToReference(value); // Reference
1848        } else if (name.equals("recipient")) {
1849          this.getRecipient().add(castToReference(value));
1850        } else if (name.equals("topic")) {
1851          this.getTopic().add(castToReference(value));
1852        } else if (name.equals("context")) {
1853          this.context = castToReference(value); // Reference
1854        } else if (name.equals("sent")) {
1855          this.sent = castToDateTime(value); // DateTimeType
1856        } else if (name.equals("received")) {
1857          this.received = castToDateTime(value); // DateTimeType
1858        } else if (name.equals("sender")) {
1859          this.sender = castToReference(value); // Reference
1860        } else if (name.equals("reasonCode")) {
1861          this.getReasonCode().add(castToCodeableConcept(value));
1862        } else if (name.equals("reasonReference")) {
1863          this.getReasonReference().add(castToReference(value));
1864        } else if (name.equals("payload")) {
1865          this.getPayload().add((CommunicationPayloadComponent) value);
1866        } else if (name.equals("note")) {
1867          this.getNote().add(castToAnnotation(value));
1868        } else
1869          return super.setProperty(name, value);
1870        return value;
1871      }
1872
1873      @Override
1874      public Base makeProperty(int hash, String name) throws FHIRException {
1875        switch (hash) {
1876        case -1618432855:  return addIdentifier(); 
1877        case -1014418093:  return addDefinition(); 
1878        case -332612366:  return addBasedOn(); 
1879        case -995410646:  return addPartOf(); 
1880        case -892481550:  return getStatusElement();
1881        case 2128257269:  return getNotDoneElement();
1882        case -1973169255:  return getNotDoneReason(); 
1883        case 50511102:  return addCategory(); 
1884        case -1078030475:  return addMedium(); 
1885        case -1867885268:  return getSubject(); 
1886        case 820081177:  return addRecipient(); 
1887        case 110546223:  return addTopic(); 
1888        case 951530927:  return getContext(); 
1889        case 3526552:  return getSentElement();
1890        case -808719903:  return getReceivedElement();
1891        case -905962955:  return getSender(); 
1892        case 722137681:  return addReasonCode(); 
1893        case -1146218137:  return addReasonReference(); 
1894        case -786701938:  return addPayload(); 
1895        case 3387378:  return addNote(); 
1896        default: return super.makeProperty(hash, name);
1897        }
1898
1899      }
1900
1901      @Override
1902      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1903        switch (hash) {
1904        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1905        case -1014418093: /*definition*/ return new String[] {"Reference"};
1906        case -332612366: /*basedOn*/ return new String[] {"Reference"};
1907        case -995410646: /*partOf*/ return new String[] {"Reference"};
1908        case -892481550: /*status*/ return new String[] {"code"};
1909        case 2128257269: /*notDone*/ return new String[] {"boolean"};
1910        case -1973169255: /*notDoneReason*/ return new String[] {"CodeableConcept"};
1911        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1912        case -1078030475: /*medium*/ return new String[] {"CodeableConcept"};
1913        case -1867885268: /*subject*/ return new String[] {"Reference"};
1914        case 820081177: /*recipient*/ return new String[] {"Reference"};
1915        case 110546223: /*topic*/ return new String[] {"Reference"};
1916        case 951530927: /*context*/ return new String[] {"Reference"};
1917        case 3526552: /*sent*/ return new String[] {"dateTime"};
1918        case -808719903: /*received*/ return new String[] {"dateTime"};
1919        case -905962955: /*sender*/ return new String[] {"Reference"};
1920        case 722137681: /*reasonCode*/ return new String[] {"CodeableConcept"};
1921        case -1146218137: /*reasonReference*/ return new String[] {"Reference"};
1922        case -786701938: /*payload*/ return new String[] {};
1923        case 3387378: /*note*/ return new String[] {"Annotation"};
1924        default: return super.getTypesForProperty(hash, name);
1925        }
1926
1927      }
1928
1929      @Override
1930      public Base addChild(String name) throws FHIRException {
1931        if (name.equals("identifier")) {
1932          return addIdentifier();
1933        }
1934        else if (name.equals("definition")) {
1935          return addDefinition();
1936        }
1937        else if (name.equals("basedOn")) {
1938          return addBasedOn();
1939        }
1940        else if (name.equals("partOf")) {
1941          return addPartOf();
1942        }
1943        else if (name.equals("status")) {
1944          throw new FHIRException("Cannot call addChild on a singleton property Communication.status");
1945        }
1946        else if (name.equals("notDone")) {
1947          throw new FHIRException("Cannot call addChild on a singleton property Communication.notDone");
1948        }
1949        else if (name.equals("notDoneReason")) {
1950          this.notDoneReason = new CodeableConcept();
1951          return this.notDoneReason;
1952        }
1953        else if (name.equals("category")) {
1954          return addCategory();
1955        }
1956        else if (name.equals("medium")) {
1957          return addMedium();
1958        }
1959        else if (name.equals("subject")) {
1960          this.subject = new Reference();
1961          return this.subject;
1962        }
1963        else if (name.equals("recipient")) {
1964          return addRecipient();
1965        }
1966        else if (name.equals("topic")) {
1967          return addTopic();
1968        }
1969        else if (name.equals("context")) {
1970          this.context = new Reference();
1971          return this.context;
1972        }
1973        else if (name.equals("sent")) {
1974          throw new FHIRException("Cannot call addChild on a singleton property Communication.sent");
1975        }
1976        else if (name.equals("received")) {
1977          throw new FHIRException("Cannot call addChild on a singleton property Communication.received");
1978        }
1979        else if (name.equals("sender")) {
1980          this.sender = new Reference();
1981          return this.sender;
1982        }
1983        else if (name.equals("reasonCode")) {
1984          return addReasonCode();
1985        }
1986        else if (name.equals("reasonReference")) {
1987          return addReasonReference();
1988        }
1989        else if (name.equals("payload")) {
1990          return addPayload();
1991        }
1992        else if (name.equals("note")) {
1993          return addNote();
1994        }
1995        else
1996          return super.addChild(name);
1997      }
1998
1999  public String fhirType() {
2000    return "Communication";
2001
2002  }
2003
2004      public Communication copy() {
2005        Communication dst = new Communication();
2006        copyValues(dst);
2007        if (identifier != null) {
2008          dst.identifier = new ArrayList<Identifier>();
2009          for (Identifier i : identifier)
2010            dst.identifier.add(i.copy());
2011        };
2012        if (definition != null) {
2013          dst.definition = new ArrayList<Reference>();
2014          for (Reference i : definition)
2015            dst.definition.add(i.copy());
2016        };
2017        if (basedOn != null) {
2018          dst.basedOn = new ArrayList<Reference>();
2019          for (Reference i : basedOn)
2020            dst.basedOn.add(i.copy());
2021        };
2022        if (partOf != null) {
2023          dst.partOf = new ArrayList<Reference>();
2024          for (Reference i : partOf)
2025            dst.partOf.add(i.copy());
2026        };
2027        dst.status = status == null ? null : status.copy();
2028        dst.notDone = notDone == null ? null : notDone.copy();
2029        dst.notDoneReason = notDoneReason == null ? null : notDoneReason.copy();
2030        if (category != null) {
2031          dst.category = new ArrayList<CodeableConcept>();
2032          for (CodeableConcept i : category)
2033            dst.category.add(i.copy());
2034        };
2035        if (medium != null) {
2036          dst.medium = new ArrayList<CodeableConcept>();
2037          for (CodeableConcept i : medium)
2038            dst.medium.add(i.copy());
2039        };
2040        dst.subject = subject == null ? null : subject.copy();
2041        if (recipient != null) {
2042          dst.recipient = new ArrayList<Reference>();
2043          for (Reference i : recipient)
2044            dst.recipient.add(i.copy());
2045        };
2046        if (topic != null) {
2047          dst.topic = new ArrayList<Reference>();
2048          for (Reference i : topic)
2049            dst.topic.add(i.copy());
2050        };
2051        dst.context = context == null ? null : context.copy();
2052        dst.sent = sent == null ? null : sent.copy();
2053        dst.received = received == null ? null : received.copy();
2054        dst.sender = sender == null ? null : sender.copy();
2055        if (reasonCode != null) {
2056          dst.reasonCode = new ArrayList<CodeableConcept>();
2057          for (CodeableConcept i : reasonCode)
2058            dst.reasonCode.add(i.copy());
2059        };
2060        if (reasonReference != null) {
2061          dst.reasonReference = new ArrayList<Reference>();
2062          for (Reference i : reasonReference)
2063            dst.reasonReference.add(i.copy());
2064        };
2065        if (payload != null) {
2066          dst.payload = new ArrayList<CommunicationPayloadComponent>();
2067          for (CommunicationPayloadComponent i : payload)
2068            dst.payload.add(i.copy());
2069        };
2070        if (note != null) {
2071          dst.note = new ArrayList<Annotation>();
2072          for (Annotation i : note)
2073            dst.note.add(i.copy());
2074        };
2075        return dst;
2076      }
2077
2078      protected Communication typedCopy() {
2079        return copy();
2080      }
2081
2082      @Override
2083      public boolean equalsDeep(Base other_) {
2084        if (!super.equalsDeep(other_))
2085          return false;
2086        if (!(other_ instanceof Communication))
2087          return false;
2088        Communication o = (Communication) other_;
2089        return compareDeep(identifier, o.identifier, true) && compareDeep(definition, o.definition, true)
2090           && compareDeep(basedOn, o.basedOn, true) && compareDeep(partOf, o.partOf, true) && compareDeep(status, o.status, true)
2091           && compareDeep(notDone, o.notDone, true) && compareDeep(notDoneReason, o.notDoneReason, true) && compareDeep(category, o.category, true)
2092           && compareDeep(medium, o.medium, true) && compareDeep(subject, o.subject, true) && compareDeep(recipient, o.recipient, true)
2093           && compareDeep(topic, o.topic, true) && compareDeep(context, o.context, true) && compareDeep(sent, o.sent, true)
2094           && compareDeep(received, o.received, true) && compareDeep(sender, o.sender, true) && compareDeep(reasonCode, o.reasonCode, true)
2095           && compareDeep(reasonReference, o.reasonReference, true) && compareDeep(payload, o.payload, true)
2096           && compareDeep(note, o.note, true);
2097      }
2098
2099      @Override
2100      public boolean equalsShallow(Base other_) {
2101        if (!super.equalsShallow(other_))
2102          return false;
2103        if (!(other_ instanceof Communication))
2104          return false;
2105        Communication o = (Communication) other_;
2106        return compareValues(status, o.status, true) && compareValues(notDone, o.notDone, true) && compareValues(sent, o.sent, true)
2107           && compareValues(received, o.received, true);
2108      }
2109
2110      public boolean isEmpty() {
2111        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, definition, basedOn
2112          , partOf, status, notDone, notDoneReason, category, medium, subject, recipient
2113          , topic, context, sent, received, sender, reasonCode, reasonReference, payload
2114          , note);
2115      }
2116
2117  @Override
2118  public ResourceType getResourceType() {
2119    return ResourceType.Communication;
2120   }
2121
2122 /**
2123   * Search parameter: <b>identifier</b>
2124   * <p>
2125   * Description: <b>Unique identifier</b><br>
2126   * Type: <b>token</b><br>
2127   * Path: <b>Communication.identifier</b><br>
2128   * </p>
2129   */
2130  @SearchParamDefinition(name="identifier", path="Communication.identifier", description="Unique identifier", type="token" )
2131  public static final String SP_IDENTIFIER = "identifier";
2132 /**
2133   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2134   * <p>
2135   * Description: <b>Unique identifier</b><br>
2136   * Type: <b>token</b><br>
2137   * Path: <b>Communication.identifier</b><br>
2138   * </p>
2139   */
2140  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2141
2142 /**
2143   * Search parameter: <b>subject</b>
2144   * <p>
2145   * Description: <b>Focus of message</b><br>
2146   * Type: <b>reference</b><br>
2147   * Path: <b>Communication.subject</b><br>
2148   * </p>
2149   */
2150  @SearchParamDefinition(name="subject", path="Communication.subject", description="Focus of message", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Group.class, Patient.class } )
2151  public static final String SP_SUBJECT = "subject";
2152 /**
2153   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2154   * <p>
2155   * Description: <b>Focus of message</b><br>
2156   * Type: <b>reference</b><br>
2157   * Path: <b>Communication.subject</b><br>
2158   * </p>
2159   */
2160  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2161
2162/**
2163   * Constant for fluent queries to be used to add include statements. Specifies
2164   * the path value of "<b>Communication:subject</b>".
2165   */
2166  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Communication:subject").toLocked();
2167
2168 /**
2169   * Search parameter: <b>received</b>
2170   * <p>
2171   * Description: <b>When received</b><br>
2172   * Type: <b>date</b><br>
2173   * Path: <b>Communication.received</b><br>
2174   * </p>
2175   */
2176  @SearchParamDefinition(name="received", path="Communication.received", description="When received", type="date" )
2177  public static final String SP_RECEIVED = "received";
2178 /**
2179   * <b>Fluent Client</b> search parameter constant for <b>received</b>
2180   * <p>
2181   * Description: <b>When received</b><br>
2182   * Type: <b>date</b><br>
2183   * Path: <b>Communication.received</b><br>
2184   * </p>
2185   */
2186  public static final ca.uhn.fhir.rest.gclient.DateClientParam RECEIVED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_RECEIVED);
2187
2188 /**
2189   * Search parameter: <b>part-of</b>
2190   * <p>
2191   * Description: <b>Part of this action</b><br>
2192   * Type: <b>reference</b><br>
2193   * Path: <b>Communication.partOf</b><br>
2194   * </p>
2195   */
2196  @SearchParamDefinition(name="part-of", path="Communication.partOf", description="Part of this action", type="reference" )
2197  public static final String SP_PART_OF = "part-of";
2198 /**
2199   * <b>Fluent Client</b> search parameter constant for <b>part-of</b>
2200   * <p>
2201   * Description: <b>Part of this action</b><br>
2202   * Type: <b>reference</b><br>
2203   * Path: <b>Communication.partOf</b><br>
2204   * </p>
2205   */
2206  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PART_OF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PART_OF);
2207
2208/**
2209   * Constant for fluent queries to be used to add include statements. Specifies
2210   * the path value of "<b>Communication:part-of</b>".
2211   */
2212  public static final ca.uhn.fhir.model.api.Include INCLUDE_PART_OF = new ca.uhn.fhir.model.api.Include("Communication:part-of").toLocked();
2213
2214 /**
2215   * Search parameter: <b>medium</b>
2216   * <p>
2217   * Description: <b>A channel of communication</b><br>
2218   * Type: <b>token</b><br>
2219   * Path: <b>Communication.medium</b><br>
2220   * </p>
2221   */
2222  @SearchParamDefinition(name="medium", path="Communication.medium", description="A channel of communication", type="token" )
2223  public static final String SP_MEDIUM = "medium";
2224 /**
2225   * <b>Fluent Client</b> search parameter constant for <b>medium</b>
2226   * <p>
2227   * Description: <b>A channel of communication</b><br>
2228   * Type: <b>token</b><br>
2229   * Path: <b>Communication.medium</b><br>
2230   * </p>
2231   */
2232  public static final ca.uhn.fhir.rest.gclient.TokenClientParam MEDIUM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_MEDIUM);
2233
2234 /**
2235   * Search parameter: <b>encounter</b>
2236   * <p>
2237   * Description: <b>Encounter leading to message</b><br>
2238   * Type: <b>reference</b><br>
2239   * Path: <b>Communication.context</b><br>
2240   * </p>
2241   */
2242  @SearchParamDefinition(name="encounter", path="Communication.context", description="Encounter leading to message", type="reference", target={Encounter.class } )
2243  public static final String SP_ENCOUNTER = "encounter";
2244 /**
2245   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
2246   * <p>
2247   * Description: <b>Encounter leading to message</b><br>
2248   * Type: <b>reference</b><br>
2249   * Path: <b>Communication.context</b><br>
2250   * </p>
2251   */
2252  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
2253
2254/**
2255   * Constant for fluent queries to be used to add include statements. Specifies
2256   * the path value of "<b>Communication:encounter</b>".
2257   */
2258  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("Communication:encounter").toLocked();
2259
2260 /**
2261   * Search parameter: <b>sent</b>
2262   * <p>
2263   * Description: <b>When sent</b><br>
2264   * Type: <b>date</b><br>
2265   * Path: <b>Communication.sent</b><br>
2266   * </p>
2267   */
2268  @SearchParamDefinition(name="sent", path="Communication.sent", description="When sent", type="date" )
2269  public static final String SP_SENT = "sent";
2270 /**
2271   * <b>Fluent Client</b> search parameter constant for <b>sent</b>
2272   * <p>
2273   * Description: <b>When sent</b><br>
2274   * Type: <b>date</b><br>
2275   * Path: <b>Communication.sent</b><br>
2276   * </p>
2277   */
2278  public static final ca.uhn.fhir.rest.gclient.DateClientParam SENT = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_SENT);
2279
2280 /**
2281   * Search parameter: <b>based-on</b>
2282   * <p>
2283   * Description: <b>Request fulfilled by this communication</b><br>
2284   * Type: <b>reference</b><br>
2285   * Path: <b>Communication.basedOn</b><br>
2286   * </p>
2287   */
2288  @SearchParamDefinition(name="based-on", path="Communication.basedOn", description="Request fulfilled by this communication", type="reference" )
2289  public static final String SP_BASED_ON = "based-on";
2290 /**
2291   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
2292   * <p>
2293   * Description: <b>Request fulfilled by this communication</b><br>
2294   * Type: <b>reference</b><br>
2295   * Path: <b>Communication.basedOn</b><br>
2296   * </p>
2297   */
2298  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
2299
2300/**
2301   * Constant for fluent queries to be used to add include statements. Specifies
2302   * the path value of "<b>Communication:based-on</b>".
2303   */
2304  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("Communication:based-on").toLocked();
2305
2306 /**
2307   * Search parameter: <b>sender</b>
2308   * <p>
2309   * Description: <b>Message sender</b><br>
2310   * Type: <b>reference</b><br>
2311   * Path: <b>Communication.sender</b><br>
2312   * </p>
2313   */
2314  @SearchParamDefinition(name="sender", path="Communication.sender", description="Message sender", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Device.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class } )
2315  public static final String SP_SENDER = "sender";
2316 /**
2317   * <b>Fluent Client</b> search parameter constant for <b>sender</b>
2318   * <p>
2319   * Description: <b>Message sender</b><br>
2320   * Type: <b>reference</b><br>
2321   * Path: <b>Communication.sender</b><br>
2322   * </p>
2323   */
2324  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SENDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SENDER);
2325
2326/**
2327   * Constant for fluent queries to be used to add include statements. Specifies
2328   * the path value of "<b>Communication:sender</b>".
2329   */
2330  public static final ca.uhn.fhir.model.api.Include INCLUDE_SENDER = new ca.uhn.fhir.model.api.Include("Communication:sender").toLocked();
2331
2332 /**
2333   * Search parameter: <b>patient</b>
2334   * <p>
2335   * Description: <b>Focus of message</b><br>
2336   * Type: <b>reference</b><br>
2337   * Path: <b>Communication.subject</b><br>
2338   * </p>
2339   */
2340  @SearchParamDefinition(name="patient", path="Communication.subject", description="Focus of message", type="reference", target={Patient.class } )
2341  public static final String SP_PATIENT = "patient";
2342 /**
2343   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2344   * <p>
2345   * Description: <b>Focus of message</b><br>
2346   * Type: <b>reference</b><br>
2347   * Path: <b>Communication.subject</b><br>
2348   * </p>
2349   */
2350  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2351
2352/**
2353   * Constant for fluent queries to be used to add include statements. Specifies
2354   * the path value of "<b>Communication:patient</b>".
2355   */
2356  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Communication:patient").toLocked();
2357
2358 /**
2359   * Search parameter: <b>recipient</b>
2360   * <p>
2361   * Description: <b>Message recipient</b><br>
2362   * Type: <b>reference</b><br>
2363   * Path: <b>Communication.recipient</b><br>
2364   * </p>
2365   */
2366  @SearchParamDefinition(name="recipient", path="Communication.recipient", description="Message recipient", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Device.class, Group.class, Organization.class, Patient.class, Practitioner.class, RelatedPerson.class } )
2367  public static final String SP_RECIPIENT = "recipient";
2368 /**
2369   * <b>Fluent Client</b> search parameter constant for <b>recipient</b>
2370   * <p>
2371   * Description: <b>Message recipient</b><br>
2372   * Type: <b>reference</b><br>
2373   * Path: <b>Communication.recipient</b><br>
2374   * </p>
2375   */
2376  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam RECIPIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_RECIPIENT);
2377
2378/**
2379   * Constant for fluent queries to be used to add include statements. Specifies
2380   * the path value of "<b>Communication:recipient</b>".
2381   */
2382  public static final ca.uhn.fhir.model.api.Include INCLUDE_RECIPIENT = new ca.uhn.fhir.model.api.Include("Communication:recipient").toLocked();
2383
2384 /**
2385   * Search parameter: <b>context</b>
2386   * <p>
2387   * Description: <b>Encounter or episode leading to message</b><br>
2388   * Type: <b>reference</b><br>
2389   * Path: <b>Communication.context</b><br>
2390   * </p>
2391   */
2392  @SearchParamDefinition(name="context", path="Communication.context", description="Encounter or episode leading to message", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Encounter") }, target={Encounter.class, EpisodeOfCare.class } )
2393  public static final String SP_CONTEXT = "context";
2394 /**
2395   * <b>Fluent Client</b> search parameter constant for <b>context</b>
2396   * <p>
2397   * Description: <b>Encounter or episode leading to message</b><br>
2398   * Type: <b>reference</b><br>
2399   * Path: <b>Communication.context</b><br>
2400   * </p>
2401   */
2402  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_CONTEXT);
2403
2404/**
2405   * Constant for fluent queries to be used to add include statements. Specifies
2406   * the path value of "<b>Communication:context</b>".
2407   */
2408  public static final ca.uhn.fhir.model.api.Include INCLUDE_CONTEXT = new ca.uhn.fhir.model.api.Include("Communication:context").toLocked();
2409
2410 /**
2411   * Search parameter: <b>definition</b>
2412   * <p>
2413   * Description: <b>Instantiates protocol or definition</b><br>
2414   * Type: <b>reference</b><br>
2415   * Path: <b>Communication.definition</b><br>
2416   * </p>
2417   */
2418  @SearchParamDefinition(name="definition", path="Communication.definition", description="Instantiates protocol or definition", type="reference", target={ActivityDefinition.class, PlanDefinition.class } )
2419  public static final String SP_DEFINITION = "definition";
2420 /**
2421   * <b>Fluent Client</b> search parameter constant for <b>definition</b>
2422   * <p>
2423   * Description: <b>Instantiates protocol or definition</b><br>
2424   * Type: <b>reference</b><br>
2425   * Path: <b>Communication.definition</b><br>
2426   * </p>
2427   */
2428  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam DEFINITION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_DEFINITION);
2429
2430/**
2431   * Constant for fluent queries to be used to add include statements. Specifies
2432   * the path value of "<b>Communication:definition</b>".
2433   */
2434  public static final ca.uhn.fhir.model.api.Include INCLUDE_DEFINITION = new ca.uhn.fhir.model.api.Include("Communication:definition").toLocked();
2435
2436 /**
2437   * Search parameter: <b>category</b>
2438   * <p>
2439   * Description: <b>Message category</b><br>
2440   * Type: <b>token</b><br>
2441   * Path: <b>Communication.category</b><br>
2442   * </p>
2443   */
2444  @SearchParamDefinition(name="category", path="Communication.category", description="Message category", type="token" )
2445  public static final String SP_CATEGORY = "category";
2446 /**
2447   * <b>Fluent Client</b> search parameter constant for <b>category</b>
2448   * <p>
2449   * Description: <b>Message category</b><br>
2450   * Type: <b>token</b><br>
2451   * Path: <b>Communication.category</b><br>
2452   * </p>
2453   */
2454  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
2455
2456 /**
2457   * Search parameter: <b>status</b>
2458   * <p>
2459   * Description: <b>preparation | in-progress | suspended | aborted | completed | entered-in-error</b><br>
2460   * Type: <b>token</b><br>
2461   * Path: <b>Communication.status</b><br>
2462   * </p>
2463   */
2464  @SearchParamDefinition(name="status", path="Communication.status", description="preparation | in-progress | suspended | aborted | completed | entered-in-error", type="token" )
2465  public static final String SP_STATUS = "status";
2466 /**
2467   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2468   * <p>
2469   * Description: <b>preparation | in-progress | suspended | aborted | completed | entered-in-error</b><br>
2470   * Type: <b>token</b><br>
2471   * Path: <b>Communication.status</b><br>
2472   * </p>
2473   */
2474  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2475
2476
2477}