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