001package org.hl7.fhir.r5.model;
002
003
004/*
005  Copyright (c) 2011+, HL7, Inc.
006  All rights reserved.
007  
008  Redistribution and use in source and binary forms, with or without modification, \
009  are permitted provided that the following conditions are met:
010  
011   * Redistributions of source code must retain the above copyright notice, this \
012     list of conditions and the following disclaimer.
013   * Redistributions in binary form must reproduce the above copyright notice, \
014     this list of conditions and the following disclaimer in the documentation \
015     and/or other materials provided with the distribution.
016   * Neither the name of HL7 nor the names of its contributors may be used to 
017     endorse or promote products derived from this software without specific 
018     prior written permission.
019  
020  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
021  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
022  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
023  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
024  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
025  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
026  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
027  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
028  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
029  POSSIBILITY OF SUCH DAMAGE.
030  */
031
032// Generated on Fri, Jul 15, 2022 11:20+1000 for FHIR v5.0.0-snapshot2
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.r5.model.Enumerations.*;
039import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
040import org.hl7.fhir.exceptions.FHIRException;
041import org.hl7.fhir.instance.model.api.ICompositeType;
042import ca.uhn.fhir.model.api.annotation.ResourceDef;
043import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
044import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
045import ca.uhn.fhir.model.api.annotation.Child;
046import ca.uhn.fhir.model.api.annotation.ChildOrder;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.Block;
049
050/**
051 * A request to convey information; e.g. the CDS system proposes that an alert be sent to a responsible provider, the CDS system proposes that the public health agency be notified about a reportable condition.
052 */
053@ResourceDef(name="CommunicationRequest", profile="http://hl7.org/fhir/StructureDefinition/CommunicationRequest")
054public class CommunicationRequest extends DomainResource {
055
056    @Block()
057    public static class CommunicationRequestPayloadComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * The communicated content (or for multi-part communications, one portion of the communication).
060         */
061        @Child(name = "content", type = {Attachment.class, Reference.class, CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
062        @Description(shortDefinition="Message part content", formalDefinition="The communicated content (or for multi-part communications, one portion of the communication)." )
063        protected DataType content;
064
065        private static final long serialVersionUID = -1954179063L;
066
067    /**
068     * Constructor
069     */
070      public CommunicationRequestPayloadComponent() {
071        super();
072      }
073
074    /**
075     * Constructor
076     */
077      public CommunicationRequestPayloadComponent(DataType content) {
078        super();
079        this.setContent(content);
080      }
081
082        /**
083         * @return {@link #content} (The communicated content (or for multi-part communications, one portion of the communication).)
084         */
085        public DataType getContent() { 
086          return this.content;
087        }
088
089        /**
090         * @return {@link #content} (The communicated content (or for multi-part communications, one portion of the communication).)
091         */
092        public Attachment getContentAttachment() throws FHIRException { 
093          if (this.content == null)
094            this.content = new Attachment();
095          if (!(this.content instanceof Attachment))
096            throw new FHIRException("Type mismatch: the type Attachment was expected, but "+this.content.getClass().getName()+" was encountered");
097          return (Attachment) this.content;
098        }
099
100        public boolean hasContentAttachment() { 
101          return this != null && this.content instanceof Attachment;
102        }
103
104        /**
105         * @return {@link #content} (The communicated content (or for multi-part communications, one portion of the communication).)
106         */
107        public Reference getContentReference() throws FHIRException { 
108          if (this.content == null)
109            this.content = new Reference();
110          if (!(this.content instanceof Reference))
111            throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.content.getClass().getName()+" was encountered");
112          return (Reference) this.content;
113        }
114
115        public boolean hasContentReference() { 
116          return this != null && this.content instanceof Reference;
117        }
118
119        /**
120         * @return {@link #content} (The communicated content (or for multi-part communications, one portion of the communication).)
121         */
122        public CodeableConcept getContentCodeableConcept() throws FHIRException { 
123          if (this.content == null)
124            this.content = new CodeableConcept();
125          if (!(this.content instanceof CodeableConcept))
126            throw new FHIRException("Type mismatch: the type CodeableConcept was expected, but "+this.content.getClass().getName()+" was encountered");
127          return (CodeableConcept) this.content;
128        }
129
130        public boolean hasContentCodeableConcept() { 
131          return this != null && this.content instanceof CodeableConcept;
132        }
133
134        public boolean hasContent() { 
135          return this.content != null && !this.content.isEmpty();
136        }
137
138        /**
139         * @param value {@link #content} (The communicated content (or for multi-part communications, one portion of the communication).)
140         */
141        public CommunicationRequestPayloadComponent setContent(DataType value) { 
142          if (value != null && !(value instanceof Attachment || value instanceof Reference || value instanceof CodeableConcept))
143            throw new Error("Not the right type for CommunicationRequest.payload.content[x]: "+value.fhirType());
144          this.content = value;
145          return this;
146        }
147
148        protected void listChildren(List<Property> children) {
149          super.listChildren(children);
150          children.add(new Property("content[x]", "Attachment|Reference(Any)|CodeableConcept", "The communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content));
151        }
152
153        @Override
154        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
155          switch (_hash) {
156          case 264548711: /*content[x]*/  return new Property("content[x]", "Attachment|Reference(Any)|CodeableConcept", "The communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
157          case 951530617: /*content*/  return new Property("content[x]", "Attachment|Reference(Any)|CodeableConcept", "The communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
158          case -702028164: /*contentAttachment*/  return new Property("content[x]", "Attachment", "The communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
159          case 1193747154: /*contentReference*/  return new Property("content[x]", "Reference(Any)", "The communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
160          case 1554698728: /*contentCodeableConcept*/  return new Property("content[x]", "CodeableConcept", "The communicated content (or for multi-part communications, one portion of the communication).", 0, 1, content);
161          default: return super.getNamedProperty(_hash, _name, _checkValid);
162          }
163
164        }
165
166      @Override
167      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
168        switch (hash) {
169        case 951530617: /*content*/ return this.content == null ? new Base[0] : new Base[] {this.content}; // DataType
170        default: return super.getProperty(hash, name, checkValid);
171        }
172
173      }
174
175      @Override
176      public Base setProperty(int hash, String name, Base value) throws FHIRException {
177        switch (hash) {
178        case 951530617: // content
179          this.content = TypeConvertor.castToType(value); // DataType
180          return value;
181        default: return super.setProperty(hash, name, value);
182        }
183
184      }
185
186      @Override
187      public Base setProperty(String name, Base value) throws FHIRException {
188        if (name.equals("content[x]")) {
189          this.content = TypeConvertor.castToType(value); // DataType
190        } else
191          return super.setProperty(name, value);
192        return value;
193      }
194
195      @Override
196      public Base makeProperty(int hash, String name) throws FHIRException {
197        switch (hash) {
198        case 264548711:  return getContent();
199        case 951530617:  return getContent();
200        default: return super.makeProperty(hash, name);
201        }
202
203      }
204
205      @Override
206      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
207        switch (hash) {
208        case 951530617: /*content*/ return new String[] {"Attachment", "Reference", "CodeableConcept"};
209        default: return super.getTypesForProperty(hash, name);
210        }
211
212      }
213
214      @Override
215      public Base addChild(String name) throws FHIRException {
216        if (name.equals("contentAttachment")) {
217          this.content = new Attachment();
218          return this.content;
219        }
220        else if (name.equals("contentReference")) {
221          this.content = new Reference();
222          return this.content;
223        }
224        else if (name.equals("contentCodeableConcept")) {
225          this.content = new CodeableConcept();
226          return this.content;
227        }
228        else
229          return super.addChild(name);
230      }
231
232      public CommunicationRequestPayloadComponent copy() {
233        CommunicationRequestPayloadComponent dst = new CommunicationRequestPayloadComponent();
234        copyValues(dst);
235        return dst;
236      }
237
238      public void copyValues(CommunicationRequestPayloadComponent dst) {
239        super.copyValues(dst);
240        dst.content = content == null ? null : content.copy();
241      }
242
243      @Override
244      public boolean equalsDeep(Base other_) {
245        if (!super.equalsDeep(other_))
246          return false;
247        if (!(other_ instanceof CommunicationRequestPayloadComponent))
248          return false;
249        CommunicationRequestPayloadComponent o = (CommunicationRequestPayloadComponent) other_;
250        return compareDeep(content, o.content, true);
251      }
252
253      @Override
254      public boolean equalsShallow(Base other_) {
255        if (!super.equalsShallow(other_))
256          return false;
257        if (!(other_ instanceof CommunicationRequestPayloadComponent))
258          return false;
259        CommunicationRequestPayloadComponent o = (CommunicationRequestPayloadComponent) other_;
260        return true;
261      }
262
263      public boolean isEmpty() {
264        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(content);
265      }
266
267  public String fhirType() {
268    return "CommunicationRequest.payload";
269
270  }
271
272  }
273
274    /**
275     * Business identifiers assigned to this communication request by the performer or other systems which remain constant as the resource is updated and propagates from server to server.
276     */
277    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
278    @Description(shortDefinition="Unique identifier", formalDefinition="Business identifiers assigned to this communication request by the performer or other systems which remain constant as the resource is updated and propagates from server to server." )
279    protected List<Identifier> identifier;
280
281    /**
282     * A plan or proposal that is fulfilled in whole or in part by this request.
283     */
284    @Child(name = "basedOn", type = {Reference.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
285    @Description(shortDefinition="Fulfills plan or proposal", formalDefinition="A plan or proposal that is fulfilled in whole or in part by this request." )
286    protected List<Reference> basedOn;
287
288    /**
289     * Completed or terminated request(s) whose function is taken by this new request.
290     */
291    @Child(name = "replaces", type = {CommunicationRequest.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
292    @Description(shortDefinition="Request(s) replaced by this request", formalDefinition="Completed or terminated request(s) whose function is taken by this new request." )
293    protected List<Reference> replaces;
294
295    /**
296     * A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.
297     */
298    @Child(name = "groupIdentifier", type = {Identifier.class}, order=3, min=0, max=1, modifier=false, summary=true)
299    @Description(shortDefinition="Composite request this is part of", formalDefinition="A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form." )
300    protected Identifier groupIdentifier;
301
302    /**
303     * The status of the proposal or order.
304     */
305    @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=true, summary=true)
306    @Description(shortDefinition="draft | active | on-hold | revoked | completed | entered-in-error | unknown", formalDefinition="The status of the proposal or order." )
307    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-status")
308    protected Enumeration<RequestStatus> status;
309
310    /**
311     * Captures the reason for the current state of the CommunicationRequest.
312     */
313    @Child(name = "statusReason", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=false)
314    @Description(shortDefinition="Reason for current status", formalDefinition="Captures the reason for the current state of the CommunicationRequest." )
315    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/communication-request-status-reason")
316    protected CodeableConcept statusReason;
317
318    /**
319     * Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain.
320     */
321    @Child(name = "intent", type = {CodeType.class}, order=6, min=1, max=1, modifier=true, summary=true)
322    @Description(shortDefinition="proposal | plan | directive | order | original-order | reflex-order | filler-order | instance-order | option", formalDefinition="Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain." )
323    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-intent")
324    protected Enumeration<RequestIntent> intent;
325
326    /**
327     * The type of message to be sent such as alert, notification, reminder, instruction, etc.
328     */
329    @Child(name = "category", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
330    @Description(shortDefinition="Message category", formalDefinition="The type of message to be sent such as alert, notification, reminder, instruction, etc." )
331    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/communication-category")
332    protected List<CodeableConcept> category;
333
334    /**
335     * Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.
336     */
337    @Child(name = "priority", type = {CodeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
338    @Description(shortDefinition="routine | urgent | asap | stat", formalDefinition="Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine." )
339    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/request-priority")
340    protected Enumeration<RequestPriority> priority;
341
342    /**
343     * If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.
344     */
345    @Child(name = "doNotPerform", type = {BooleanType.class}, order=9, min=0, max=1, modifier=true, summary=true)
346    @Description(shortDefinition="True if request is prohibiting action", formalDefinition="If true indicates that the CommunicationRequest is asking for the specified action to *not* occur." )
347    protected BooleanType doNotPerform;
348
349    /**
350     * A channel that was used for this communication (e.g. email, fax).
351     */
352    @Child(name = "medium", type = {CodeableConcept.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
353    @Description(shortDefinition="A channel of communication", formalDefinition="A channel that was used for this communication (e.g. email, fax)." )
354    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-ParticipationMode")
355    protected List<CodeableConcept> medium;
356
357    /**
358     * The patient or group that is the focus of this communication request.
359     */
360    @Child(name = "subject", type = {Patient.class, Group.class}, order=11, min=0, max=1, modifier=false, summary=false)
361    @Description(shortDefinition="Focus of message", formalDefinition="The patient or group that is the focus of this communication request." )
362    protected Reference subject;
363
364    /**
365     * Other resources that pertain to this communication request and to which this communication request should be associated.
366     */
367    @Child(name = "about", type = {Reference.class}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
368    @Description(shortDefinition="Resources that pertain to this communication request", formalDefinition="Other resources that pertain to this communication request and to which this communication request should be associated." )
369    protected List<Reference> about;
370
371    /**
372     * The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated.
373     */
374    @Child(name = "encounter", type = {Encounter.class}, order=13, min=0, max=1, modifier=false, summary=true)
375    @Description(shortDefinition="The Encounter during which this CommunicationRequest was created", formalDefinition="The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated." )
376    protected Reference encounter;
377
378    /**
379     * Text, attachment(s), or resource(s) to be communicated to the recipient.
380     */
381    @Child(name = "payload", type = {}, order=14, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
382    @Description(shortDefinition="Message payload", formalDefinition="Text, attachment(s), or resource(s) to be communicated to the recipient." )
383    protected List<CommunicationRequestPayloadComponent> payload;
384
385    /**
386     * The time when this communication is to occur.
387     */
388    @Child(name = "occurrence", type = {DateTimeType.class, Period.class}, order=15, min=0, max=1, modifier=false, summary=true)
389    @Description(shortDefinition="When scheduled", formalDefinition="The time when this communication is to occur." )
390    protected DataType occurrence;
391
392    /**
393     * For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.
394     */
395    @Child(name = "authoredOn", type = {DateTimeType.class}, order=16, min=0, max=1, modifier=false, summary=true)
396    @Description(shortDefinition="When request transitioned to being actionable", formalDefinition="For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation." )
397    protected DateTimeType authoredOn;
398
399    /**
400     * The device, individual, or organization who asks for the information to be shared.
401     */
402    @Child(name = "requester", type = {Practitioner.class, PractitionerRole.class, Organization.class, Patient.class, RelatedPerson.class, Device.class}, order=17, min=0, max=1, modifier=false, summary=true)
403    @Description(shortDefinition="Who asks for the information to be shared", formalDefinition="The device, individual, or organization who asks for the information to be shared." )
404    protected Reference requester;
405
406    /**
407     * The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication.
408     */
409    @Child(name = "recipient", type = {Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class, Group.class, CareTeam.class, HealthcareService.class, Endpoint.class}, order=18, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
410    @Description(shortDefinition="Who to share the information with", formalDefinition="The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication." )
411    protected List<Reference> recipient;
412
413    /**
414     * The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication.
415     */
416    @Child(name = "informationProvider", type = {Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class, HealthcareService.class, Endpoint.class}, order=19, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
417    @Description(shortDefinition="Who should share the information", formalDefinition="The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication." )
418    protected List<Reference> informationProvider;
419
420    /**
421     * Describes why the request is being made in coded or textual form.
422     */
423    @Child(name = "reason", type = {CodeableReference.class}, order=20, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
424    @Description(shortDefinition="Why is communication needed?", formalDefinition="Describes why the request is being made in coded or textual form." )
425    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://terminology.hl7.org/ValueSet/v3-ActReason")
426    protected List<CodeableReference> reason;
427
428    /**
429     * Comments made about the request by the requester, sender, recipient, subject or other participants.
430     */
431    @Child(name = "note", type = {Annotation.class}, order=21, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
432    @Description(shortDefinition="Comments made about communication request", formalDefinition="Comments made about the request by the requester, sender, recipient, subject or other participants." )
433    protected List<Annotation> note;
434
435    private static final long serialVersionUID = -442811807L;
436
437  /**
438   * Constructor
439   */
440    public CommunicationRequest() {
441      super();
442    }
443
444  /**
445   * Constructor
446   */
447    public CommunicationRequest(RequestStatus status, RequestIntent intent) {
448      super();
449      this.setStatus(status);
450      this.setIntent(intent);
451    }
452
453    /**
454     * @return {@link #identifier} (Business identifiers assigned to this communication request by the performer or other systems which remain constant as the resource is updated and propagates from server to server.)
455     */
456    public List<Identifier> getIdentifier() { 
457      if (this.identifier == null)
458        this.identifier = new ArrayList<Identifier>();
459      return this.identifier;
460    }
461
462    /**
463     * @return Returns a reference to <code>this</code> for easy method chaining
464     */
465    public CommunicationRequest setIdentifier(List<Identifier> theIdentifier) { 
466      this.identifier = theIdentifier;
467      return this;
468    }
469
470    public boolean hasIdentifier() { 
471      if (this.identifier == null)
472        return false;
473      for (Identifier item : this.identifier)
474        if (!item.isEmpty())
475          return true;
476      return false;
477    }
478
479    public Identifier addIdentifier() { //3
480      Identifier t = new Identifier();
481      if (this.identifier == null)
482        this.identifier = new ArrayList<Identifier>();
483      this.identifier.add(t);
484      return t;
485    }
486
487    public CommunicationRequest addIdentifier(Identifier t) { //3
488      if (t == null)
489        return this;
490      if (this.identifier == null)
491        this.identifier = new ArrayList<Identifier>();
492      this.identifier.add(t);
493      return this;
494    }
495
496    /**
497     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
498     */
499    public Identifier getIdentifierFirstRep() { 
500      if (getIdentifier().isEmpty()) {
501        addIdentifier();
502      }
503      return getIdentifier().get(0);
504    }
505
506    /**
507     * @return {@link #basedOn} (A plan or proposal that is fulfilled in whole or in part by this request.)
508     */
509    public List<Reference> getBasedOn() { 
510      if (this.basedOn == null)
511        this.basedOn = new ArrayList<Reference>();
512      return this.basedOn;
513    }
514
515    /**
516     * @return Returns a reference to <code>this</code> for easy method chaining
517     */
518    public CommunicationRequest setBasedOn(List<Reference> theBasedOn) { 
519      this.basedOn = theBasedOn;
520      return this;
521    }
522
523    public boolean hasBasedOn() { 
524      if (this.basedOn == null)
525        return false;
526      for (Reference item : this.basedOn)
527        if (!item.isEmpty())
528          return true;
529      return false;
530    }
531
532    public Reference addBasedOn() { //3
533      Reference t = new Reference();
534      if (this.basedOn == null)
535        this.basedOn = new ArrayList<Reference>();
536      this.basedOn.add(t);
537      return t;
538    }
539
540    public CommunicationRequest addBasedOn(Reference t) { //3
541      if (t == null)
542        return this;
543      if (this.basedOn == null)
544        this.basedOn = new ArrayList<Reference>();
545      this.basedOn.add(t);
546      return this;
547    }
548
549    /**
550     * @return The first repetition of repeating field {@link #basedOn}, creating it if it does not already exist {3}
551     */
552    public Reference getBasedOnFirstRep() { 
553      if (getBasedOn().isEmpty()) {
554        addBasedOn();
555      }
556      return getBasedOn().get(0);
557    }
558
559    /**
560     * @return {@link #replaces} (Completed or terminated request(s) whose function is taken by this new request.)
561     */
562    public List<Reference> getReplaces() { 
563      if (this.replaces == null)
564        this.replaces = new ArrayList<Reference>();
565      return this.replaces;
566    }
567
568    /**
569     * @return Returns a reference to <code>this</code> for easy method chaining
570     */
571    public CommunicationRequest setReplaces(List<Reference> theReplaces) { 
572      this.replaces = theReplaces;
573      return this;
574    }
575
576    public boolean hasReplaces() { 
577      if (this.replaces == null)
578        return false;
579      for (Reference item : this.replaces)
580        if (!item.isEmpty())
581          return true;
582      return false;
583    }
584
585    public Reference addReplaces() { //3
586      Reference t = new Reference();
587      if (this.replaces == null)
588        this.replaces = new ArrayList<Reference>();
589      this.replaces.add(t);
590      return t;
591    }
592
593    public CommunicationRequest addReplaces(Reference t) { //3
594      if (t == null)
595        return this;
596      if (this.replaces == null)
597        this.replaces = new ArrayList<Reference>();
598      this.replaces.add(t);
599      return this;
600    }
601
602    /**
603     * @return The first repetition of repeating field {@link #replaces}, creating it if it does not already exist {3}
604     */
605    public Reference getReplacesFirstRep() { 
606      if (getReplaces().isEmpty()) {
607        addReplaces();
608      }
609      return getReplaces().get(0);
610    }
611
612    /**
613     * @return {@link #groupIdentifier} (A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.)
614     */
615    public Identifier getGroupIdentifier() { 
616      if (this.groupIdentifier == null)
617        if (Configuration.errorOnAutoCreate())
618          throw new Error("Attempt to auto-create CommunicationRequest.groupIdentifier");
619        else if (Configuration.doAutoCreate())
620          this.groupIdentifier = new Identifier(); // cc
621      return this.groupIdentifier;
622    }
623
624    public boolean hasGroupIdentifier() { 
625      return this.groupIdentifier != null && !this.groupIdentifier.isEmpty();
626    }
627
628    /**
629     * @param value {@link #groupIdentifier} (A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.)
630     */
631    public CommunicationRequest setGroupIdentifier(Identifier value) { 
632      this.groupIdentifier = value;
633      return this;
634    }
635
636    /**
637     * @return {@link #status} (The status of the proposal or order.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
638     */
639    public Enumeration<RequestStatus> getStatusElement() { 
640      if (this.status == null)
641        if (Configuration.errorOnAutoCreate())
642          throw new Error("Attempt to auto-create CommunicationRequest.status");
643        else if (Configuration.doAutoCreate())
644          this.status = new Enumeration<RequestStatus>(new RequestStatusEnumFactory()); // bb
645      return this.status;
646    }
647
648    public boolean hasStatusElement() { 
649      return this.status != null && !this.status.isEmpty();
650    }
651
652    public boolean hasStatus() { 
653      return this.status != null && !this.status.isEmpty();
654    }
655
656    /**
657     * @param value {@link #status} (The status of the proposal or order.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
658     */
659    public CommunicationRequest setStatusElement(Enumeration<RequestStatus> value) { 
660      this.status = value;
661      return this;
662    }
663
664    /**
665     * @return The status of the proposal or order.
666     */
667    public RequestStatus getStatus() { 
668      return this.status == null ? null : this.status.getValue();
669    }
670
671    /**
672     * @param value The status of the proposal or order.
673     */
674    public CommunicationRequest setStatus(RequestStatus value) { 
675        if (this.status == null)
676          this.status = new Enumeration<RequestStatus>(new RequestStatusEnumFactory());
677        this.status.setValue(value);
678      return this;
679    }
680
681    /**
682     * @return {@link #statusReason} (Captures the reason for the current state of the CommunicationRequest.)
683     */
684    public CodeableConcept getStatusReason() { 
685      if (this.statusReason == null)
686        if (Configuration.errorOnAutoCreate())
687          throw new Error("Attempt to auto-create CommunicationRequest.statusReason");
688        else if (Configuration.doAutoCreate())
689          this.statusReason = new CodeableConcept(); // cc
690      return this.statusReason;
691    }
692
693    public boolean hasStatusReason() { 
694      return this.statusReason != null && !this.statusReason.isEmpty();
695    }
696
697    /**
698     * @param value {@link #statusReason} (Captures the reason for the current state of the CommunicationRequest.)
699     */
700    public CommunicationRequest setStatusReason(CodeableConcept value) { 
701      this.statusReason = value;
702      return this;
703    }
704
705    /**
706     * @return {@link #intent} (Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
707     */
708    public Enumeration<RequestIntent> getIntentElement() { 
709      if (this.intent == null)
710        if (Configuration.errorOnAutoCreate())
711          throw new Error("Attempt to auto-create CommunicationRequest.intent");
712        else if (Configuration.doAutoCreate())
713          this.intent = new Enumeration<RequestIntent>(new RequestIntentEnumFactory()); // bb
714      return this.intent;
715    }
716
717    public boolean hasIntentElement() { 
718      return this.intent != null && !this.intent.isEmpty();
719    }
720
721    public boolean hasIntent() { 
722      return this.intent != null && !this.intent.isEmpty();
723    }
724
725    /**
726     * @param value {@link #intent} (Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain.). This is the underlying object with id, value and extensions. The accessor "getIntent" gives direct access to the value
727     */
728    public CommunicationRequest setIntentElement(Enumeration<RequestIntent> value) { 
729      this.intent = value;
730      return this;
731    }
732
733    /**
734     * @return Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain.
735     */
736    public RequestIntent getIntent() { 
737      return this.intent == null ? null : this.intent.getValue();
738    }
739
740    /**
741     * @param value Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain.
742     */
743    public CommunicationRequest setIntent(RequestIntent value) { 
744        if (this.intent == null)
745          this.intent = new Enumeration<RequestIntent>(new RequestIntentEnumFactory());
746        this.intent.setValue(value);
747      return this;
748    }
749
750    /**
751     * @return {@link #category} (The type of message to be sent such as alert, notification, reminder, instruction, etc.)
752     */
753    public List<CodeableConcept> getCategory() { 
754      if (this.category == null)
755        this.category = new ArrayList<CodeableConcept>();
756      return this.category;
757    }
758
759    /**
760     * @return Returns a reference to <code>this</code> for easy method chaining
761     */
762    public CommunicationRequest setCategory(List<CodeableConcept> theCategory) { 
763      this.category = theCategory;
764      return this;
765    }
766
767    public boolean hasCategory() { 
768      if (this.category == null)
769        return false;
770      for (CodeableConcept item : this.category)
771        if (!item.isEmpty())
772          return true;
773      return false;
774    }
775
776    public CodeableConcept addCategory() { //3
777      CodeableConcept t = new CodeableConcept();
778      if (this.category == null)
779        this.category = new ArrayList<CodeableConcept>();
780      this.category.add(t);
781      return t;
782    }
783
784    public CommunicationRequest addCategory(CodeableConcept t) { //3
785      if (t == null)
786        return this;
787      if (this.category == null)
788        this.category = new ArrayList<CodeableConcept>();
789      this.category.add(t);
790      return this;
791    }
792
793    /**
794     * @return The first repetition of repeating field {@link #category}, creating it if it does not already exist {3}
795     */
796    public CodeableConcept getCategoryFirstRep() { 
797      if (getCategory().isEmpty()) {
798        addCategory();
799      }
800      return getCategory().get(0);
801    }
802
803    /**
804     * @return {@link #priority} (Characterizes how quickly the proposed act must be initiated. 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
805     */
806    public Enumeration<RequestPriority> getPriorityElement() { 
807      if (this.priority == null)
808        if (Configuration.errorOnAutoCreate())
809          throw new Error("Attempt to auto-create CommunicationRequest.priority");
810        else if (Configuration.doAutoCreate())
811          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory()); // bb
812      return this.priority;
813    }
814
815    public boolean hasPriorityElement() { 
816      return this.priority != null && !this.priority.isEmpty();
817    }
818
819    public boolean hasPriority() { 
820      return this.priority != null && !this.priority.isEmpty();
821    }
822
823    /**
824     * @param value {@link #priority} (Characterizes how quickly the proposed act must be initiated. 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
825     */
826    public CommunicationRequest setPriorityElement(Enumeration<RequestPriority> value) { 
827      this.priority = value;
828      return this;
829    }
830
831    /**
832     * @return Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.
833     */
834    public RequestPriority getPriority() { 
835      return this.priority == null ? null : this.priority.getValue();
836    }
837
838    /**
839     * @param value Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.
840     */
841    public CommunicationRequest setPriority(RequestPriority value) { 
842      if (value == null)
843        this.priority = null;
844      else {
845        if (this.priority == null)
846          this.priority = new Enumeration<RequestPriority>(new RequestPriorityEnumFactory());
847        this.priority.setValue(value);
848      }
849      return this;
850    }
851
852    /**
853     * @return {@link #doNotPerform} (If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.). This is the underlying object with id, value and extensions. The accessor "getDoNotPerform" gives direct access to the value
854     */
855    public BooleanType getDoNotPerformElement() { 
856      if (this.doNotPerform == null)
857        if (Configuration.errorOnAutoCreate())
858          throw new Error("Attempt to auto-create CommunicationRequest.doNotPerform");
859        else if (Configuration.doAutoCreate())
860          this.doNotPerform = new BooleanType(); // bb
861      return this.doNotPerform;
862    }
863
864    public boolean hasDoNotPerformElement() { 
865      return this.doNotPerform != null && !this.doNotPerform.isEmpty();
866    }
867
868    public boolean hasDoNotPerform() { 
869      return this.doNotPerform != null && !this.doNotPerform.isEmpty();
870    }
871
872    /**
873     * @param value {@link #doNotPerform} (If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.). This is the underlying object with id, value and extensions. The accessor "getDoNotPerform" gives direct access to the value
874     */
875    public CommunicationRequest setDoNotPerformElement(BooleanType value) { 
876      this.doNotPerform = value;
877      return this;
878    }
879
880    /**
881     * @return If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.
882     */
883    public boolean getDoNotPerform() { 
884      return this.doNotPerform == null || this.doNotPerform.isEmpty() ? false : this.doNotPerform.getValue();
885    }
886
887    /**
888     * @param value If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.
889     */
890    public CommunicationRequest setDoNotPerform(boolean value) { 
891        if (this.doNotPerform == null)
892          this.doNotPerform = new BooleanType();
893        this.doNotPerform.setValue(value);
894      return this;
895    }
896
897    /**
898     * @return {@link #medium} (A channel that was used for this communication (e.g. email, fax).)
899     */
900    public List<CodeableConcept> getMedium() { 
901      if (this.medium == null)
902        this.medium = new ArrayList<CodeableConcept>();
903      return this.medium;
904    }
905
906    /**
907     * @return Returns a reference to <code>this</code> for easy method chaining
908     */
909    public CommunicationRequest setMedium(List<CodeableConcept> theMedium) { 
910      this.medium = theMedium;
911      return this;
912    }
913
914    public boolean hasMedium() { 
915      if (this.medium == null)
916        return false;
917      for (CodeableConcept item : this.medium)
918        if (!item.isEmpty())
919          return true;
920      return false;
921    }
922
923    public CodeableConcept addMedium() { //3
924      CodeableConcept t = new CodeableConcept();
925      if (this.medium == null)
926        this.medium = new ArrayList<CodeableConcept>();
927      this.medium.add(t);
928      return t;
929    }
930
931    public CommunicationRequest addMedium(CodeableConcept t) { //3
932      if (t == null)
933        return this;
934      if (this.medium == null)
935        this.medium = new ArrayList<CodeableConcept>();
936      this.medium.add(t);
937      return this;
938    }
939
940    /**
941     * @return The first repetition of repeating field {@link #medium}, creating it if it does not already exist {3}
942     */
943    public CodeableConcept getMediumFirstRep() { 
944      if (getMedium().isEmpty()) {
945        addMedium();
946      }
947      return getMedium().get(0);
948    }
949
950    /**
951     * @return {@link #subject} (The patient or group that is the focus of this communication request.)
952     */
953    public Reference getSubject() { 
954      if (this.subject == null)
955        if (Configuration.errorOnAutoCreate())
956          throw new Error("Attempt to auto-create CommunicationRequest.subject");
957        else if (Configuration.doAutoCreate())
958          this.subject = new Reference(); // cc
959      return this.subject;
960    }
961
962    public boolean hasSubject() { 
963      return this.subject != null && !this.subject.isEmpty();
964    }
965
966    /**
967     * @param value {@link #subject} (The patient or group that is the focus of this communication request.)
968     */
969    public CommunicationRequest setSubject(Reference value) { 
970      this.subject = value;
971      return this;
972    }
973
974    /**
975     * @return {@link #about} (Other resources that pertain to this communication request and to which this communication request should be associated.)
976     */
977    public List<Reference> getAbout() { 
978      if (this.about == null)
979        this.about = new ArrayList<Reference>();
980      return this.about;
981    }
982
983    /**
984     * @return Returns a reference to <code>this</code> for easy method chaining
985     */
986    public CommunicationRequest setAbout(List<Reference> theAbout) { 
987      this.about = theAbout;
988      return this;
989    }
990
991    public boolean hasAbout() { 
992      if (this.about == null)
993        return false;
994      for (Reference item : this.about)
995        if (!item.isEmpty())
996          return true;
997      return false;
998    }
999
1000    public Reference addAbout() { //3
1001      Reference t = new Reference();
1002      if (this.about == null)
1003        this.about = new ArrayList<Reference>();
1004      this.about.add(t);
1005      return t;
1006    }
1007
1008    public CommunicationRequest addAbout(Reference t) { //3
1009      if (t == null)
1010        return this;
1011      if (this.about == null)
1012        this.about = new ArrayList<Reference>();
1013      this.about.add(t);
1014      return this;
1015    }
1016
1017    /**
1018     * @return The first repetition of repeating field {@link #about}, creating it if it does not already exist {3}
1019     */
1020    public Reference getAboutFirstRep() { 
1021      if (getAbout().isEmpty()) {
1022        addAbout();
1023      }
1024      return getAbout().get(0);
1025    }
1026
1027    /**
1028     * @return {@link #encounter} (The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated.)
1029     */
1030    public Reference getEncounter() { 
1031      if (this.encounter == null)
1032        if (Configuration.errorOnAutoCreate())
1033          throw new Error("Attempt to auto-create CommunicationRequest.encounter");
1034        else if (Configuration.doAutoCreate())
1035          this.encounter = new Reference(); // cc
1036      return this.encounter;
1037    }
1038
1039    public boolean hasEncounter() { 
1040      return this.encounter != null && !this.encounter.isEmpty();
1041    }
1042
1043    /**
1044     * @param value {@link #encounter} (The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated.)
1045     */
1046    public CommunicationRequest setEncounter(Reference value) { 
1047      this.encounter = value;
1048      return this;
1049    }
1050
1051    /**
1052     * @return {@link #payload} (Text, attachment(s), or resource(s) to be communicated to the recipient.)
1053     */
1054    public List<CommunicationRequestPayloadComponent> getPayload() { 
1055      if (this.payload == null)
1056        this.payload = new ArrayList<CommunicationRequestPayloadComponent>();
1057      return this.payload;
1058    }
1059
1060    /**
1061     * @return Returns a reference to <code>this</code> for easy method chaining
1062     */
1063    public CommunicationRequest setPayload(List<CommunicationRequestPayloadComponent> thePayload) { 
1064      this.payload = thePayload;
1065      return this;
1066    }
1067
1068    public boolean hasPayload() { 
1069      if (this.payload == null)
1070        return false;
1071      for (CommunicationRequestPayloadComponent item : this.payload)
1072        if (!item.isEmpty())
1073          return true;
1074      return false;
1075    }
1076
1077    public CommunicationRequestPayloadComponent addPayload() { //3
1078      CommunicationRequestPayloadComponent t = new CommunicationRequestPayloadComponent();
1079      if (this.payload == null)
1080        this.payload = new ArrayList<CommunicationRequestPayloadComponent>();
1081      this.payload.add(t);
1082      return t;
1083    }
1084
1085    public CommunicationRequest addPayload(CommunicationRequestPayloadComponent t) { //3
1086      if (t == null)
1087        return this;
1088      if (this.payload == null)
1089        this.payload = new ArrayList<CommunicationRequestPayloadComponent>();
1090      this.payload.add(t);
1091      return this;
1092    }
1093
1094    /**
1095     * @return The first repetition of repeating field {@link #payload}, creating it if it does not already exist {3}
1096     */
1097    public CommunicationRequestPayloadComponent getPayloadFirstRep() { 
1098      if (getPayload().isEmpty()) {
1099        addPayload();
1100      }
1101      return getPayload().get(0);
1102    }
1103
1104    /**
1105     * @return {@link #occurrence} (The time when this communication is to occur.)
1106     */
1107    public DataType getOccurrence() { 
1108      return this.occurrence;
1109    }
1110
1111    /**
1112     * @return {@link #occurrence} (The time when this communication is to occur.)
1113     */
1114    public DateTimeType getOccurrenceDateTimeType() throws FHIRException { 
1115      if (this.occurrence == null)
1116        this.occurrence = new DateTimeType();
1117      if (!(this.occurrence instanceof DateTimeType))
1118        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1119      return (DateTimeType) this.occurrence;
1120    }
1121
1122    public boolean hasOccurrenceDateTimeType() { 
1123      return this != null && this.occurrence instanceof DateTimeType;
1124    }
1125
1126    /**
1127     * @return {@link #occurrence} (The time when this communication is to occur.)
1128     */
1129    public Period getOccurrencePeriod() throws FHIRException { 
1130      if (this.occurrence == null)
1131        this.occurrence = new Period();
1132      if (!(this.occurrence instanceof Period))
1133        throw new FHIRException("Type mismatch: the type Period was expected, but "+this.occurrence.getClass().getName()+" was encountered");
1134      return (Period) this.occurrence;
1135    }
1136
1137    public boolean hasOccurrencePeriod() { 
1138      return this != null && this.occurrence instanceof Period;
1139    }
1140
1141    public boolean hasOccurrence() { 
1142      return this.occurrence != null && !this.occurrence.isEmpty();
1143    }
1144
1145    /**
1146     * @param value {@link #occurrence} (The time when this communication is to occur.)
1147     */
1148    public CommunicationRequest setOccurrence(DataType value) { 
1149      if (value != null && !(value instanceof DateTimeType || value instanceof Period))
1150        throw new Error("Not the right type for CommunicationRequest.occurrence[x]: "+value.fhirType());
1151      this.occurrence = value;
1152      return this;
1153    }
1154
1155    /**
1156     * @return {@link #authoredOn} (For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
1157     */
1158    public DateTimeType getAuthoredOnElement() { 
1159      if (this.authoredOn == null)
1160        if (Configuration.errorOnAutoCreate())
1161          throw new Error("Attempt to auto-create CommunicationRequest.authoredOn");
1162        else if (Configuration.doAutoCreate())
1163          this.authoredOn = new DateTimeType(); // bb
1164      return this.authoredOn;
1165    }
1166
1167    public boolean hasAuthoredOnElement() { 
1168      return this.authoredOn != null && !this.authoredOn.isEmpty();
1169    }
1170
1171    public boolean hasAuthoredOn() { 
1172      return this.authoredOn != null && !this.authoredOn.isEmpty();
1173    }
1174
1175    /**
1176     * @param value {@link #authoredOn} (For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.). This is the underlying object with id, value and extensions. The accessor "getAuthoredOn" gives direct access to the value
1177     */
1178    public CommunicationRequest setAuthoredOnElement(DateTimeType value) { 
1179      this.authoredOn = value;
1180      return this;
1181    }
1182
1183    /**
1184     * @return For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.
1185     */
1186    public Date getAuthoredOn() { 
1187      return this.authoredOn == null ? null : this.authoredOn.getValue();
1188    }
1189
1190    /**
1191     * @param value For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.
1192     */
1193    public CommunicationRequest setAuthoredOn(Date value) { 
1194      if (value == null)
1195        this.authoredOn = null;
1196      else {
1197        if (this.authoredOn == null)
1198          this.authoredOn = new DateTimeType();
1199        this.authoredOn.setValue(value);
1200      }
1201      return this;
1202    }
1203
1204    /**
1205     * @return {@link #requester} (The device, individual, or organization who asks for the information to be shared.)
1206     */
1207    public Reference getRequester() { 
1208      if (this.requester == null)
1209        if (Configuration.errorOnAutoCreate())
1210          throw new Error("Attempt to auto-create CommunicationRequest.requester");
1211        else if (Configuration.doAutoCreate())
1212          this.requester = new Reference(); // cc
1213      return this.requester;
1214    }
1215
1216    public boolean hasRequester() { 
1217      return this.requester != null && !this.requester.isEmpty();
1218    }
1219
1220    /**
1221     * @param value {@link #requester} (The device, individual, or organization who asks for the information to be shared.)
1222     */
1223    public CommunicationRequest setRequester(Reference value) { 
1224      this.requester = value;
1225      return this;
1226    }
1227
1228    /**
1229     * @return {@link #recipient} (The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication.)
1230     */
1231    public List<Reference> getRecipient() { 
1232      if (this.recipient == null)
1233        this.recipient = new ArrayList<Reference>();
1234      return this.recipient;
1235    }
1236
1237    /**
1238     * @return Returns a reference to <code>this</code> for easy method chaining
1239     */
1240    public CommunicationRequest setRecipient(List<Reference> theRecipient) { 
1241      this.recipient = theRecipient;
1242      return this;
1243    }
1244
1245    public boolean hasRecipient() { 
1246      if (this.recipient == null)
1247        return false;
1248      for (Reference item : this.recipient)
1249        if (!item.isEmpty())
1250          return true;
1251      return false;
1252    }
1253
1254    public Reference addRecipient() { //3
1255      Reference t = new Reference();
1256      if (this.recipient == null)
1257        this.recipient = new ArrayList<Reference>();
1258      this.recipient.add(t);
1259      return t;
1260    }
1261
1262    public CommunicationRequest addRecipient(Reference t) { //3
1263      if (t == null)
1264        return this;
1265      if (this.recipient == null)
1266        this.recipient = new ArrayList<Reference>();
1267      this.recipient.add(t);
1268      return this;
1269    }
1270
1271    /**
1272     * @return The first repetition of repeating field {@link #recipient}, creating it if it does not already exist {3}
1273     */
1274    public Reference getRecipientFirstRep() { 
1275      if (getRecipient().isEmpty()) {
1276        addRecipient();
1277      }
1278      return getRecipient().get(0);
1279    }
1280
1281    /**
1282     * @return {@link #informationProvider} (The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication.)
1283     */
1284    public List<Reference> getInformationProvider() { 
1285      if (this.informationProvider == null)
1286        this.informationProvider = new ArrayList<Reference>();
1287      return this.informationProvider;
1288    }
1289
1290    /**
1291     * @return Returns a reference to <code>this</code> for easy method chaining
1292     */
1293    public CommunicationRequest setInformationProvider(List<Reference> theInformationProvider) { 
1294      this.informationProvider = theInformationProvider;
1295      return this;
1296    }
1297
1298    public boolean hasInformationProvider() { 
1299      if (this.informationProvider == null)
1300        return false;
1301      for (Reference item : this.informationProvider)
1302        if (!item.isEmpty())
1303          return true;
1304      return false;
1305    }
1306
1307    public Reference addInformationProvider() { //3
1308      Reference t = new Reference();
1309      if (this.informationProvider == null)
1310        this.informationProvider = new ArrayList<Reference>();
1311      this.informationProvider.add(t);
1312      return t;
1313    }
1314
1315    public CommunicationRequest addInformationProvider(Reference t) { //3
1316      if (t == null)
1317        return this;
1318      if (this.informationProvider == null)
1319        this.informationProvider = new ArrayList<Reference>();
1320      this.informationProvider.add(t);
1321      return this;
1322    }
1323
1324    /**
1325     * @return The first repetition of repeating field {@link #informationProvider}, creating it if it does not already exist {3}
1326     */
1327    public Reference getInformationProviderFirstRep() { 
1328      if (getInformationProvider().isEmpty()) {
1329        addInformationProvider();
1330      }
1331      return getInformationProvider().get(0);
1332    }
1333
1334    /**
1335     * @return {@link #reason} (Describes why the request is being made in coded or textual form.)
1336     */
1337    public List<CodeableReference> getReason() { 
1338      if (this.reason == null)
1339        this.reason = new ArrayList<CodeableReference>();
1340      return this.reason;
1341    }
1342
1343    /**
1344     * @return Returns a reference to <code>this</code> for easy method chaining
1345     */
1346    public CommunicationRequest setReason(List<CodeableReference> theReason) { 
1347      this.reason = theReason;
1348      return this;
1349    }
1350
1351    public boolean hasReason() { 
1352      if (this.reason == null)
1353        return false;
1354      for (CodeableReference item : this.reason)
1355        if (!item.isEmpty())
1356          return true;
1357      return false;
1358    }
1359
1360    public CodeableReference addReason() { //3
1361      CodeableReference t = new CodeableReference();
1362      if (this.reason == null)
1363        this.reason = new ArrayList<CodeableReference>();
1364      this.reason.add(t);
1365      return t;
1366    }
1367
1368    public CommunicationRequest addReason(CodeableReference t) { //3
1369      if (t == null)
1370        return this;
1371      if (this.reason == null)
1372        this.reason = new ArrayList<CodeableReference>();
1373      this.reason.add(t);
1374      return this;
1375    }
1376
1377    /**
1378     * @return The first repetition of repeating field {@link #reason}, creating it if it does not already exist {3}
1379     */
1380    public CodeableReference getReasonFirstRep() { 
1381      if (getReason().isEmpty()) {
1382        addReason();
1383      }
1384      return getReason().get(0);
1385    }
1386
1387    /**
1388     * @return {@link #note} (Comments made about the request by the requester, sender, recipient, subject or other participants.)
1389     */
1390    public List<Annotation> getNote() { 
1391      if (this.note == null)
1392        this.note = new ArrayList<Annotation>();
1393      return this.note;
1394    }
1395
1396    /**
1397     * @return Returns a reference to <code>this</code> for easy method chaining
1398     */
1399    public CommunicationRequest setNote(List<Annotation> theNote) { 
1400      this.note = theNote;
1401      return this;
1402    }
1403
1404    public boolean hasNote() { 
1405      if (this.note == null)
1406        return false;
1407      for (Annotation item : this.note)
1408        if (!item.isEmpty())
1409          return true;
1410      return false;
1411    }
1412
1413    public Annotation addNote() { //3
1414      Annotation t = new Annotation();
1415      if (this.note == null)
1416        this.note = new ArrayList<Annotation>();
1417      this.note.add(t);
1418      return t;
1419    }
1420
1421    public CommunicationRequest addNote(Annotation t) { //3
1422      if (t == null)
1423        return this;
1424      if (this.note == null)
1425        this.note = new ArrayList<Annotation>();
1426      this.note.add(t);
1427      return this;
1428    }
1429
1430    /**
1431     * @return The first repetition of repeating field {@link #note}, creating it if it does not already exist {3}
1432     */
1433    public Annotation getNoteFirstRep() { 
1434      if (getNote().isEmpty()) {
1435        addNote();
1436      }
1437      return getNote().get(0);
1438    }
1439
1440      protected void listChildren(List<Property> children) {
1441        super.listChildren(children);
1442        children.add(new Property("identifier", "Identifier", "Business identifiers assigned to this communication request 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));
1443        children.add(new Property("basedOn", "Reference(Any)", "A plan or proposal that is fulfilled in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn));
1444        children.add(new Property("replaces", "Reference(CommunicationRequest)", "Completed or terminated request(s) whose function is taken by this new request.", 0, java.lang.Integer.MAX_VALUE, replaces));
1445        children.add(new Property("groupIdentifier", "Identifier", "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", 0, 1, groupIdentifier));
1446        children.add(new Property("status", "code", "The status of the proposal or order.", 0, 1, status));
1447        children.add(new Property("statusReason", "CodeableConcept", "Captures the reason for the current state of the CommunicationRequest.", 0, 1, statusReason));
1448        children.add(new Property("intent", "code", "Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain.", 0, 1, intent));
1449        children.add(new Property("category", "CodeableConcept", "The type of message to be sent such as alert, notification, reminder, instruction, etc.", 0, java.lang.Integer.MAX_VALUE, category));
1450        children.add(new Property("priority", "code", "Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.", 0, 1, priority));
1451        children.add(new Property("doNotPerform", "boolean", "If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.", 0, 1, doNotPerform));
1452        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));
1453        children.add(new Property("subject", "Reference(Patient|Group)", "The patient or group that is the focus of this communication request.", 0, 1, subject));
1454        children.add(new Property("about", "Reference(Any)", "Other resources that pertain to this communication request and to which this communication request should be associated.", 0, java.lang.Integer.MAX_VALUE, about));
1455        children.add(new Property("encounter", "Reference(Encounter)", "The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated.", 0, 1, encounter));
1456        children.add(new Property("payload", "", "Text, attachment(s), or resource(s) to be communicated to the recipient.", 0, java.lang.Integer.MAX_VALUE, payload));
1457        children.add(new Property("occurrence[x]", "dateTime|Period", "The time when this communication is to occur.", 0, 1, occurrence));
1458        children.add(new Property("authoredOn", "dateTime", "For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.", 0, 1, authoredOn));
1459        children.add(new Property("requester", "Reference(Practitioner|PractitionerRole|Organization|Patient|RelatedPerson|Device)", "The device, individual, or organization who asks for the information to be shared.", 0, 1, requester));
1460        children.add(new Property("recipient", "Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson|Group|CareTeam|HealthcareService|Endpoint)", "The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication.", 0, java.lang.Integer.MAX_VALUE, recipient));
1461        children.add(new Property("informationProvider", "Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson|HealthcareService|Endpoint)", "The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication.", 0, java.lang.Integer.MAX_VALUE, informationProvider));
1462        children.add(new Property("reason", "CodeableReference(Any)", "Describes why the request is being made in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reason));
1463        children.add(new Property("note", "Annotation", "Comments made about the request by the requester, sender, recipient, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note));
1464      }
1465
1466      @Override
1467      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1468        switch (_hash) {
1469        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Business identifiers assigned to this communication request 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);
1470        case -332612366: /*basedOn*/  return new Property("basedOn", "Reference(Any)", "A plan or proposal that is fulfilled in whole or in part by this request.", 0, java.lang.Integer.MAX_VALUE, basedOn);
1471        case -430332865: /*replaces*/  return new Property("replaces", "Reference(CommunicationRequest)", "Completed or terminated request(s) whose function is taken by this new request.", 0, java.lang.Integer.MAX_VALUE, replaces);
1472        case -445338488: /*groupIdentifier*/  return new Property("groupIdentifier", "Identifier", "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", 0, 1, groupIdentifier);
1473        case -892481550: /*status*/  return new Property("status", "code", "The status of the proposal or order.", 0, 1, status);
1474        case 2051346646: /*statusReason*/  return new Property("statusReason", "CodeableConcept", "Captures the reason for the current state of the CommunicationRequest.", 0, 1, statusReason);
1475        case -1183762788: /*intent*/  return new Property("intent", "code", "Indicates the level of authority/intentionality associated with the CommunicationRequest and where the request fits into the workflow chain.", 0, 1, intent);
1476        case 50511102: /*category*/  return new Property("category", "CodeableConcept", "The type of message to be sent such as alert, notification, reminder, instruction, etc.", 0, java.lang.Integer.MAX_VALUE, category);
1477        case -1165461084: /*priority*/  return new Property("priority", "code", "Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.", 0, 1, priority);
1478        case -1788508167: /*doNotPerform*/  return new Property("doNotPerform", "boolean", "If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.", 0, 1, doNotPerform);
1479        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);
1480        case -1867885268: /*subject*/  return new Property("subject", "Reference(Patient|Group)", "The patient or group that is the focus of this communication request.", 0, 1, subject);
1481        case 92611469: /*about*/  return new Property("about", "Reference(Any)", "Other resources that pertain to this communication request and to which this communication request should be associated.", 0, java.lang.Integer.MAX_VALUE, about);
1482        case 1524132147: /*encounter*/  return new Property("encounter", "Reference(Encounter)", "The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated.", 0, 1, encounter);
1483        case -786701938: /*payload*/  return new Property("payload", "", "Text, attachment(s), or resource(s) to be communicated to the recipient.", 0, java.lang.Integer.MAX_VALUE, payload);
1484        case -2022646513: /*occurrence[x]*/  return new Property("occurrence[x]", "dateTime|Period", "The time when this communication is to occur.", 0, 1, occurrence);
1485        case 1687874001: /*occurrence*/  return new Property("occurrence[x]", "dateTime|Period", "The time when this communication is to occur.", 0, 1, occurrence);
1486        case -298443636: /*occurrenceDateTime*/  return new Property("occurrence[x]", "dateTime", "The time when this communication is to occur.", 0, 1, occurrence);
1487        case 1397156594: /*occurrencePeriod*/  return new Property("occurrence[x]", "Period", "The time when this communication is to occur.", 0, 1, occurrence);
1488        case -1500852503: /*authoredOn*/  return new Property("authoredOn", "dateTime", "For draft requests, indicates the date of initial creation.  For requests with other statuses, indicates the date of activation.", 0, 1, authoredOn);
1489        case 693933948: /*requester*/  return new Property("requester", "Reference(Practitioner|PractitionerRole|Organization|Patient|RelatedPerson|Device)", "The device, individual, or organization who asks for the information to be shared.", 0, 1, requester);
1490        case 820081177: /*recipient*/  return new Property("recipient", "Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson|Group|CareTeam|HealthcareService|Endpoint)", "The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication.", 0, java.lang.Integer.MAX_VALUE, recipient);
1491        case 1255338813: /*informationProvider*/  return new Property("informationProvider", "Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson|HealthcareService|Endpoint)", "The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication.", 0, java.lang.Integer.MAX_VALUE, informationProvider);
1492        case -934964668: /*reason*/  return new Property("reason", "CodeableReference(Any)", "Describes why the request is being made in coded or textual form.", 0, java.lang.Integer.MAX_VALUE, reason);
1493        case 3387378: /*note*/  return new Property("note", "Annotation", "Comments made about the request by the requester, sender, recipient, subject or other participants.", 0, java.lang.Integer.MAX_VALUE, note);
1494        default: return super.getNamedProperty(_hash, _name, _checkValid);
1495        }
1496
1497      }
1498
1499      @Override
1500      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1501        switch (hash) {
1502        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1503        case -332612366: /*basedOn*/ return this.basedOn == null ? new Base[0] : this.basedOn.toArray(new Base[this.basedOn.size()]); // Reference
1504        case -430332865: /*replaces*/ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // Reference
1505        case -445338488: /*groupIdentifier*/ return this.groupIdentifier == null ? new Base[0] : new Base[] {this.groupIdentifier}; // Identifier
1506        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<RequestStatus>
1507        case 2051346646: /*statusReason*/ return this.statusReason == null ? new Base[0] : new Base[] {this.statusReason}; // CodeableConcept
1508        case -1183762788: /*intent*/ return this.intent == null ? new Base[0] : new Base[] {this.intent}; // Enumeration<RequestIntent>
1509        case 50511102: /*category*/ return this.category == null ? new Base[0] : this.category.toArray(new Base[this.category.size()]); // CodeableConcept
1510        case -1165461084: /*priority*/ return this.priority == null ? new Base[0] : new Base[] {this.priority}; // Enumeration<RequestPriority>
1511        case -1788508167: /*doNotPerform*/ return this.doNotPerform == null ? new Base[0] : new Base[] {this.doNotPerform}; // BooleanType
1512        case -1078030475: /*medium*/ return this.medium == null ? new Base[0] : this.medium.toArray(new Base[this.medium.size()]); // CodeableConcept
1513        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
1514        case 92611469: /*about*/ return this.about == null ? new Base[0] : this.about.toArray(new Base[this.about.size()]); // Reference
1515        case 1524132147: /*encounter*/ return this.encounter == null ? new Base[0] : new Base[] {this.encounter}; // Reference
1516        case -786701938: /*payload*/ return this.payload == null ? new Base[0] : this.payload.toArray(new Base[this.payload.size()]); // CommunicationRequestPayloadComponent
1517        case 1687874001: /*occurrence*/ return this.occurrence == null ? new Base[0] : new Base[] {this.occurrence}; // DataType
1518        case -1500852503: /*authoredOn*/ return this.authoredOn == null ? new Base[0] : new Base[] {this.authoredOn}; // DateTimeType
1519        case 693933948: /*requester*/ return this.requester == null ? new Base[0] : new Base[] {this.requester}; // Reference
1520        case 820081177: /*recipient*/ return this.recipient == null ? new Base[0] : this.recipient.toArray(new Base[this.recipient.size()]); // Reference
1521        case 1255338813: /*informationProvider*/ return this.informationProvider == null ? new Base[0] : this.informationProvider.toArray(new Base[this.informationProvider.size()]); // Reference
1522        case -934964668: /*reason*/ return this.reason == null ? new Base[0] : this.reason.toArray(new Base[this.reason.size()]); // CodeableReference
1523        case 3387378: /*note*/ return this.note == null ? new Base[0] : this.note.toArray(new Base[this.note.size()]); // Annotation
1524        default: return super.getProperty(hash, name, checkValid);
1525        }
1526
1527      }
1528
1529      @Override
1530      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1531        switch (hash) {
1532        case -1618432855: // identifier
1533          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1534          return value;
1535        case -332612366: // basedOn
1536          this.getBasedOn().add(TypeConvertor.castToReference(value)); // Reference
1537          return value;
1538        case -430332865: // replaces
1539          this.getReplaces().add(TypeConvertor.castToReference(value)); // Reference
1540          return value;
1541        case -445338488: // groupIdentifier
1542          this.groupIdentifier = TypeConvertor.castToIdentifier(value); // Identifier
1543          return value;
1544        case -892481550: // status
1545          value = new RequestStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
1546          this.status = (Enumeration) value; // Enumeration<RequestStatus>
1547          return value;
1548        case 2051346646: // statusReason
1549          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1550          return value;
1551        case -1183762788: // intent
1552          value = new RequestIntentEnumFactory().fromType(TypeConvertor.castToCode(value));
1553          this.intent = (Enumeration) value; // Enumeration<RequestIntent>
1554          return value;
1555        case 50511102: // category
1556          this.getCategory().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1557          return value;
1558        case -1165461084: // priority
1559          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
1560          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
1561          return value;
1562        case -1788508167: // doNotPerform
1563          this.doNotPerform = TypeConvertor.castToBoolean(value); // BooleanType
1564          return value;
1565        case -1078030475: // medium
1566          this.getMedium().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1567          return value;
1568        case -1867885268: // subject
1569          this.subject = TypeConvertor.castToReference(value); // Reference
1570          return value;
1571        case 92611469: // about
1572          this.getAbout().add(TypeConvertor.castToReference(value)); // Reference
1573          return value;
1574        case 1524132147: // encounter
1575          this.encounter = TypeConvertor.castToReference(value); // Reference
1576          return value;
1577        case -786701938: // payload
1578          this.getPayload().add((CommunicationRequestPayloadComponent) value); // CommunicationRequestPayloadComponent
1579          return value;
1580        case 1687874001: // occurrence
1581          this.occurrence = TypeConvertor.castToType(value); // DataType
1582          return value;
1583        case -1500852503: // authoredOn
1584          this.authoredOn = TypeConvertor.castToDateTime(value); // DateTimeType
1585          return value;
1586        case 693933948: // requester
1587          this.requester = TypeConvertor.castToReference(value); // Reference
1588          return value;
1589        case 820081177: // recipient
1590          this.getRecipient().add(TypeConvertor.castToReference(value)); // Reference
1591          return value;
1592        case 1255338813: // informationProvider
1593          this.getInformationProvider().add(TypeConvertor.castToReference(value)); // Reference
1594          return value;
1595        case -934964668: // reason
1596          this.getReason().add(TypeConvertor.castToCodeableReference(value)); // CodeableReference
1597          return value;
1598        case 3387378: // note
1599          this.getNote().add(TypeConvertor.castToAnnotation(value)); // Annotation
1600          return value;
1601        default: return super.setProperty(hash, name, value);
1602        }
1603
1604      }
1605
1606      @Override
1607      public Base setProperty(String name, Base value) throws FHIRException {
1608        if (name.equals("identifier")) {
1609          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1610        } else if (name.equals("basedOn")) {
1611          this.getBasedOn().add(TypeConvertor.castToReference(value));
1612        } else if (name.equals("replaces")) {
1613          this.getReplaces().add(TypeConvertor.castToReference(value));
1614        } else if (name.equals("groupIdentifier")) {
1615          this.groupIdentifier = TypeConvertor.castToIdentifier(value); // Identifier
1616        } else if (name.equals("status")) {
1617          value = new RequestStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
1618          this.status = (Enumeration) value; // Enumeration<RequestStatus>
1619        } else if (name.equals("statusReason")) {
1620          this.statusReason = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1621        } else if (name.equals("intent")) {
1622          value = new RequestIntentEnumFactory().fromType(TypeConvertor.castToCode(value));
1623          this.intent = (Enumeration) value; // Enumeration<RequestIntent>
1624        } else if (name.equals("category")) {
1625          this.getCategory().add(TypeConvertor.castToCodeableConcept(value));
1626        } else if (name.equals("priority")) {
1627          value = new RequestPriorityEnumFactory().fromType(TypeConvertor.castToCode(value));
1628          this.priority = (Enumeration) value; // Enumeration<RequestPriority>
1629        } else if (name.equals("doNotPerform")) {
1630          this.doNotPerform = TypeConvertor.castToBoolean(value); // BooleanType
1631        } else if (name.equals("medium")) {
1632          this.getMedium().add(TypeConvertor.castToCodeableConcept(value));
1633        } else if (name.equals("subject")) {
1634          this.subject = TypeConvertor.castToReference(value); // Reference
1635        } else if (name.equals("about")) {
1636          this.getAbout().add(TypeConvertor.castToReference(value));
1637        } else if (name.equals("encounter")) {
1638          this.encounter = TypeConvertor.castToReference(value); // Reference
1639        } else if (name.equals("payload")) {
1640          this.getPayload().add((CommunicationRequestPayloadComponent) value);
1641        } else if (name.equals("occurrence[x]")) {
1642          this.occurrence = TypeConvertor.castToType(value); // DataType
1643        } else if (name.equals("authoredOn")) {
1644          this.authoredOn = TypeConvertor.castToDateTime(value); // DateTimeType
1645        } else if (name.equals("requester")) {
1646          this.requester = TypeConvertor.castToReference(value); // Reference
1647        } else if (name.equals("recipient")) {
1648          this.getRecipient().add(TypeConvertor.castToReference(value));
1649        } else if (name.equals("informationProvider")) {
1650          this.getInformationProvider().add(TypeConvertor.castToReference(value));
1651        } else if (name.equals("reason")) {
1652          this.getReason().add(TypeConvertor.castToCodeableReference(value));
1653        } else if (name.equals("note")) {
1654          this.getNote().add(TypeConvertor.castToAnnotation(value));
1655        } else
1656          return super.setProperty(name, value);
1657        return value;
1658      }
1659
1660      @Override
1661      public Base makeProperty(int hash, String name) throws FHIRException {
1662        switch (hash) {
1663        case -1618432855:  return addIdentifier(); 
1664        case -332612366:  return addBasedOn(); 
1665        case -430332865:  return addReplaces(); 
1666        case -445338488:  return getGroupIdentifier();
1667        case -892481550:  return getStatusElement();
1668        case 2051346646:  return getStatusReason();
1669        case -1183762788:  return getIntentElement();
1670        case 50511102:  return addCategory(); 
1671        case -1165461084:  return getPriorityElement();
1672        case -1788508167:  return getDoNotPerformElement();
1673        case -1078030475:  return addMedium(); 
1674        case -1867885268:  return getSubject();
1675        case 92611469:  return addAbout(); 
1676        case 1524132147:  return getEncounter();
1677        case -786701938:  return addPayload(); 
1678        case -2022646513:  return getOccurrence();
1679        case 1687874001:  return getOccurrence();
1680        case -1500852503:  return getAuthoredOnElement();
1681        case 693933948:  return getRequester();
1682        case 820081177:  return addRecipient(); 
1683        case 1255338813:  return addInformationProvider(); 
1684        case -934964668:  return addReason(); 
1685        case 3387378:  return addNote(); 
1686        default: return super.makeProperty(hash, name);
1687        }
1688
1689      }
1690
1691      @Override
1692      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1693        switch (hash) {
1694        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1695        case -332612366: /*basedOn*/ return new String[] {"Reference"};
1696        case -430332865: /*replaces*/ return new String[] {"Reference"};
1697        case -445338488: /*groupIdentifier*/ return new String[] {"Identifier"};
1698        case -892481550: /*status*/ return new String[] {"code"};
1699        case 2051346646: /*statusReason*/ return new String[] {"CodeableConcept"};
1700        case -1183762788: /*intent*/ return new String[] {"code"};
1701        case 50511102: /*category*/ return new String[] {"CodeableConcept"};
1702        case -1165461084: /*priority*/ return new String[] {"code"};
1703        case -1788508167: /*doNotPerform*/ return new String[] {"boolean"};
1704        case -1078030475: /*medium*/ return new String[] {"CodeableConcept"};
1705        case -1867885268: /*subject*/ return new String[] {"Reference"};
1706        case 92611469: /*about*/ return new String[] {"Reference"};
1707        case 1524132147: /*encounter*/ return new String[] {"Reference"};
1708        case -786701938: /*payload*/ return new String[] {};
1709        case 1687874001: /*occurrence*/ return new String[] {"dateTime", "Period"};
1710        case -1500852503: /*authoredOn*/ return new String[] {"dateTime"};
1711        case 693933948: /*requester*/ return new String[] {"Reference"};
1712        case 820081177: /*recipient*/ return new String[] {"Reference"};
1713        case 1255338813: /*informationProvider*/ return new String[] {"Reference"};
1714        case -934964668: /*reason*/ return new String[] {"CodeableReference"};
1715        case 3387378: /*note*/ return new String[] {"Annotation"};
1716        default: return super.getTypesForProperty(hash, name);
1717        }
1718
1719      }
1720
1721      @Override
1722      public Base addChild(String name) throws FHIRException {
1723        if (name.equals("identifier")) {
1724          return addIdentifier();
1725        }
1726        else if (name.equals("basedOn")) {
1727          return addBasedOn();
1728        }
1729        else if (name.equals("replaces")) {
1730          return addReplaces();
1731        }
1732        else if (name.equals("groupIdentifier")) {
1733          this.groupIdentifier = new Identifier();
1734          return this.groupIdentifier;
1735        }
1736        else if (name.equals("status")) {
1737          throw new FHIRException("Cannot call addChild on a primitive type CommunicationRequest.status");
1738        }
1739        else if (name.equals("statusReason")) {
1740          this.statusReason = new CodeableConcept();
1741          return this.statusReason;
1742        }
1743        else if (name.equals("intent")) {
1744          throw new FHIRException("Cannot call addChild on a primitive type CommunicationRequest.intent");
1745        }
1746        else if (name.equals("category")) {
1747          return addCategory();
1748        }
1749        else if (name.equals("priority")) {
1750          throw new FHIRException("Cannot call addChild on a primitive type CommunicationRequest.priority");
1751        }
1752        else if (name.equals("doNotPerform")) {
1753          throw new FHIRException("Cannot call addChild on a primitive type CommunicationRequest.doNotPerform");
1754        }
1755        else if (name.equals("medium")) {
1756          return addMedium();
1757        }
1758        else if (name.equals("subject")) {
1759          this.subject = new Reference();
1760          return this.subject;
1761        }
1762        else if (name.equals("about")) {
1763          return addAbout();
1764        }
1765        else if (name.equals("encounter")) {
1766          this.encounter = new Reference();
1767          return this.encounter;
1768        }
1769        else if (name.equals("payload")) {
1770          return addPayload();
1771        }
1772        else if (name.equals("occurrenceDateTime")) {
1773          this.occurrence = new DateTimeType();
1774          return this.occurrence;
1775        }
1776        else if (name.equals("occurrencePeriod")) {
1777          this.occurrence = new Period();
1778          return this.occurrence;
1779        }
1780        else if (name.equals("authoredOn")) {
1781          throw new FHIRException("Cannot call addChild on a primitive type CommunicationRequest.authoredOn");
1782        }
1783        else if (name.equals("requester")) {
1784          this.requester = new Reference();
1785          return this.requester;
1786        }
1787        else if (name.equals("recipient")) {
1788          return addRecipient();
1789        }
1790        else if (name.equals("informationProvider")) {
1791          return addInformationProvider();
1792        }
1793        else if (name.equals("reason")) {
1794          return addReason();
1795        }
1796        else if (name.equals("note")) {
1797          return addNote();
1798        }
1799        else
1800          return super.addChild(name);
1801      }
1802
1803  public String fhirType() {
1804    return "CommunicationRequest";
1805
1806  }
1807
1808      public CommunicationRequest copy() {
1809        CommunicationRequest dst = new CommunicationRequest();
1810        copyValues(dst);
1811        return dst;
1812      }
1813
1814      public void copyValues(CommunicationRequest dst) {
1815        super.copyValues(dst);
1816        if (identifier != null) {
1817          dst.identifier = new ArrayList<Identifier>();
1818          for (Identifier i : identifier)
1819            dst.identifier.add(i.copy());
1820        };
1821        if (basedOn != null) {
1822          dst.basedOn = new ArrayList<Reference>();
1823          for (Reference i : basedOn)
1824            dst.basedOn.add(i.copy());
1825        };
1826        if (replaces != null) {
1827          dst.replaces = new ArrayList<Reference>();
1828          for (Reference i : replaces)
1829            dst.replaces.add(i.copy());
1830        };
1831        dst.groupIdentifier = groupIdentifier == null ? null : groupIdentifier.copy();
1832        dst.status = status == null ? null : status.copy();
1833        dst.statusReason = statusReason == null ? null : statusReason.copy();
1834        dst.intent = intent == null ? null : intent.copy();
1835        if (category != null) {
1836          dst.category = new ArrayList<CodeableConcept>();
1837          for (CodeableConcept i : category)
1838            dst.category.add(i.copy());
1839        };
1840        dst.priority = priority == null ? null : priority.copy();
1841        dst.doNotPerform = doNotPerform == null ? null : doNotPerform.copy();
1842        if (medium != null) {
1843          dst.medium = new ArrayList<CodeableConcept>();
1844          for (CodeableConcept i : medium)
1845            dst.medium.add(i.copy());
1846        };
1847        dst.subject = subject == null ? null : subject.copy();
1848        if (about != null) {
1849          dst.about = new ArrayList<Reference>();
1850          for (Reference i : about)
1851            dst.about.add(i.copy());
1852        };
1853        dst.encounter = encounter == null ? null : encounter.copy();
1854        if (payload != null) {
1855          dst.payload = new ArrayList<CommunicationRequestPayloadComponent>();
1856          for (CommunicationRequestPayloadComponent i : payload)
1857            dst.payload.add(i.copy());
1858        };
1859        dst.occurrence = occurrence == null ? null : occurrence.copy();
1860        dst.authoredOn = authoredOn == null ? null : authoredOn.copy();
1861        dst.requester = requester == null ? null : requester.copy();
1862        if (recipient != null) {
1863          dst.recipient = new ArrayList<Reference>();
1864          for (Reference i : recipient)
1865            dst.recipient.add(i.copy());
1866        };
1867        if (informationProvider != null) {
1868          dst.informationProvider = new ArrayList<Reference>();
1869          for (Reference i : informationProvider)
1870            dst.informationProvider.add(i.copy());
1871        };
1872        if (reason != null) {
1873          dst.reason = new ArrayList<CodeableReference>();
1874          for (CodeableReference i : reason)
1875            dst.reason.add(i.copy());
1876        };
1877        if (note != null) {
1878          dst.note = new ArrayList<Annotation>();
1879          for (Annotation i : note)
1880            dst.note.add(i.copy());
1881        };
1882      }
1883
1884      protected CommunicationRequest typedCopy() {
1885        return copy();
1886      }
1887
1888      @Override
1889      public boolean equalsDeep(Base other_) {
1890        if (!super.equalsDeep(other_))
1891          return false;
1892        if (!(other_ instanceof CommunicationRequest))
1893          return false;
1894        CommunicationRequest o = (CommunicationRequest) other_;
1895        return compareDeep(identifier, o.identifier, true) && compareDeep(basedOn, o.basedOn, true) && compareDeep(replaces, o.replaces, true)
1896           && compareDeep(groupIdentifier, o.groupIdentifier, true) && compareDeep(status, o.status, true)
1897           && compareDeep(statusReason, o.statusReason, true) && compareDeep(intent, o.intent, true) && compareDeep(category, o.category, true)
1898           && compareDeep(priority, o.priority, true) && compareDeep(doNotPerform, o.doNotPerform, true) && compareDeep(medium, o.medium, true)
1899           && compareDeep(subject, o.subject, true) && compareDeep(about, o.about, true) && compareDeep(encounter, o.encounter, true)
1900           && compareDeep(payload, o.payload, true) && compareDeep(occurrence, o.occurrence, true) && compareDeep(authoredOn, o.authoredOn, true)
1901           && compareDeep(requester, o.requester, true) && compareDeep(recipient, o.recipient, true) && compareDeep(informationProvider, o.informationProvider, true)
1902           && compareDeep(reason, o.reason, true) && compareDeep(note, o.note, true);
1903      }
1904
1905      @Override
1906      public boolean equalsShallow(Base other_) {
1907        if (!super.equalsShallow(other_))
1908          return false;
1909        if (!(other_ instanceof CommunicationRequest))
1910          return false;
1911        CommunicationRequest o = (CommunicationRequest) other_;
1912        return compareValues(status, o.status, true) && compareValues(intent, o.intent, true) && compareValues(priority, o.priority, true)
1913           && compareValues(doNotPerform, o.doNotPerform, true) && compareValues(authoredOn, o.authoredOn, true)
1914          ;
1915      }
1916
1917      public boolean isEmpty() {
1918        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, basedOn, replaces
1919          , groupIdentifier, status, statusReason, intent, category, priority, doNotPerform
1920          , medium, subject, about, encounter, payload, occurrence, authoredOn, requester
1921          , recipient, informationProvider, reason, note);
1922      }
1923
1924  @Override
1925  public ResourceType getResourceType() {
1926    return ResourceType.CommunicationRequest;
1927   }
1928
1929 /**
1930   * Search parameter: <b>authored</b>
1931   * <p>
1932   * Description: <b>When request transitioned to being actionable</b><br>
1933   * Type: <b>date</b><br>
1934   * Path: <b>CommunicationRequest.authoredOn</b><br>
1935   * </p>
1936   */
1937  @SearchParamDefinition(name="authored", path="CommunicationRequest.authoredOn", description="When request transitioned to being actionable", type="date" )
1938  public static final String SP_AUTHORED = "authored";
1939 /**
1940   * <b>Fluent Client</b> search parameter constant for <b>authored</b>
1941   * <p>
1942   * Description: <b>When request transitioned to being actionable</b><br>
1943   * Type: <b>date</b><br>
1944   * Path: <b>CommunicationRequest.authoredOn</b><br>
1945   * </p>
1946   */
1947  public static final ca.uhn.fhir.rest.gclient.DateClientParam AUTHORED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_AUTHORED);
1948
1949 /**
1950   * Search parameter: <b>based-on</b>
1951   * <p>
1952   * Description: <b>Fulfills plan or proposal</b><br>
1953   * Type: <b>reference</b><br>
1954   * Path: <b>CommunicationRequest.basedOn</b><br>
1955   * </p>
1956   */
1957  @SearchParamDefinition(name="based-on", path="CommunicationRequest.basedOn", description="Fulfills plan or proposal", type="reference", target={Account.class, ActivityDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CapabilityStatement2.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentManifest.class, DocumentReference.class, Encounter.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationUsage.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestGroup.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
1958  public static final String SP_BASED_ON = "based-on";
1959 /**
1960   * <b>Fluent Client</b> search parameter constant for <b>based-on</b>
1961   * <p>
1962   * Description: <b>Fulfills plan or proposal</b><br>
1963   * Type: <b>reference</b><br>
1964   * Path: <b>CommunicationRequest.basedOn</b><br>
1965   * </p>
1966   */
1967  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam BASED_ON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_BASED_ON);
1968
1969/**
1970   * Constant for fluent queries to be used to add include statements. Specifies
1971   * the path value of "<b>CommunicationRequest:based-on</b>".
1972   */
1973  public static final ca.uhn.fhir.model.api.Include INCLUDE_BASED_ON = new ca.uhn.fhir.model.api.Include("CommunicationRequest:based-on").toLocked();
1974
1975 /**
1976   * Search parameter: <b>category</b>
1977   * <p>
1978   * Description: <b>Message category</b><br>
1979   * Type: <b>token</b><br>
1980   * Path: <b>CommunicationRequest.category</b><br>
1981   * </p>
1982   */
1983  @SearchParamDefinition(name="category", path="CommunicationRequest.category", description="Message category", type="token" )
1984  public static final String SP_CATEGORY = "category";
1985 /**
1986   * <b>Fluent Client</b> search parameter constant for <b>category</b>
1987   * <p>
1988   * Description: <b>Message category</b><br>
1989   * Type: <b>token</b><br>
1990   * Path: <b>CommunicationRequest.category</b><br>
1991   * </p>
1992   */
1993  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CATEGORY);
1994
1995 /**
1996   * Search parameter: <b>encounter</b>
1997   * <p>
1998   * Description: <b>The Encounter during which this CommunicationRequest was created</b><br>
1999   * Type: <b>reference</b><br>
2000   * Path: <b>CommunicationRequest.encounter</b><br>
2001   * </p>
2002   */
2003  @SearchParamDefinition(name="encounter", path="CommunicationRequest.encounter", description="The Encounter during which this CommunicationRequest was created", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Encounter") }, target={Encounter.class } )
2004  public static final String SP_ENCOUNTER = "encounter";
2005 /**
2006   * <b>Fluent Client</b> search parameter constant for <b>encounter</b>
2007   * <p>
2008   * Description: <b>The Encounter during which this CommunicationRequest was created</b><br>
2009   * Type: <b>reference</b><br>
2010   * Path: <b>CommunicationRequest.encounter</b><br>
2011   * </p>
2012   */
2013  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ENCOUNTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ENCOUNTER);
2014
2015/**
2016   * Constant for fluent queries to be used to add include statements. Specifies
2017   * the path value of "<b>CommunicationRequest:encounter</b>".
2018   */
2019  public static final ca.uhn.fhir.model.api.Include INCLUDE_ENCOUNTER = new ca.uhn.fhir.model.api.Include("CommunicationRequest:encounter").toLocked();
2020
2021 /**
2022   * Search parameter: <b>group-identifier</b>
2023   * <p>
2024   * Description: <b>Composite request this is part of</b><br>
2025   * Type: <b>token</b><br>
2026   * Path: <b>CommunicationRequest.groupIdentifier</b><br>
2027   * </p>
2028   */
2029  @SearchParamDefinition(name="group-identifier", path="CommunicationRequest.groupIdentifier", description="Composite request this is part of", type="token" )
2030  public static final String SP_GROUP_IDENTIFIER = "group-identifier";
2031 /**
2032   * <b>Fluent Client</b> search parameter constant for <b>group-identifier</b>
2033   * <p>
2034   * Description: <b>Composite request this is part of</b><br>
2035   * Type: <b>token</b><br>
2036   * Path: <b>CommunicationRequest.groupIdentifier</b><br>
2037   * </p>
2038   */
2039  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GROUP_IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GROUP_IDENTIFIER);
2040
2041 /**
2042   * Search parameter: <b>identifier</b>
2043   * <p>
2044   * Description: <b>Unique identifier</b><br>
2045   * Type: <b>token</b><br>
2046   * Path: <b>CommunicationRequest.identifier</b><br>
2047   * </p>
2048   */
2049  @SearchParamDefinition(name="identifier", path="CommunicationRequest.identifier", description="Unique identifier", type="token" )
2050  public static final String SP_IDENTIFIER = "identifier";
2051 /**
2052   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
2053   * <p>
2054   * Description: <b>Unique identifier</b><br>
2055   * Type: <b>token</b><br>
2056   * Path: <b>CommunicationRequest.identifier</b><br>
2057   * </p>
2058   */
2059  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
2060
2061 /**
2062   * Search parameter: <b>information-provider</b>
2063   * <p>
2064   * Description: <b>Who should share the information</b><br>
2065   * Type: <b>reference</b><br>
2066   * Path: <b>CommunicationRequest.informationProvider</b><br>
2067   * </p>
2068   */
2069  @SearchParamDefinition(name="information-provider", path="CommunicationRequest.informationProvider", description="Who should share the information", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Device.class, Endpoint.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2070  public static final String SP_INFORMATION_PROVIDER = "information-provider";
2071 /**
2072   * <b>Fluent Client</b> search parameter constant for <b>information-provider</b>
2073   * <p>
2074   * Description: <b>Who should share the information</b><br>
2075   * Type: <b>reference</b><br>
2076   * Path: <b>CommunicationRequest.informationProvider</b><br>
2077   * </p>
2078   */
2079  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam INFORMATION_PROVIDER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_INFORMATION_PROVIDER);
2080
2081/**
2082   * Constant for fluent queries to be used to add include statements. Specifies
2083   * the path value of "<b>CommunicationRequest:information-provider</b>".
2084   */
2085  public static final ca.uhn.fhir.model.api.Include INCLUDE_INFORMATION_PROVIDER = new ca.uhn.fhir.model.api.Include("CommunicationRequest:information-provider").toLocked();
2086
2087 /**
2088   * Search parameter: <b>medium</b>
2089   * <p>
2090   * Description: <b>A channel of communication</b><br>
2091   * Type: <b>token</b><br>
2092   * Path: <b>CommunicationRequest.medium</b><br>
2093   * </p>
2094   */
2095  @SearchParamDefinition(name="medium", path="CommunicationRequest.medium", description="A channel of communication", type="token" )
2096  public static final String SP_MEDIUM = "medium";
2097 /**
2098   * <b>Fluent Client</b> search parameter constant for <b>medium</b>
2099   * <p>
2100   * Description: <b>A channel of communication</b><br>
2101   * Type: <b>token</b><br>
2102   * Path: <b>CommunicationRequest.medium</b><br>
2103   * </p>
2104   */
2105  public static final ca.uhn.fhir.rest.gclient.TokenClientParam MEDIUM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_MEDIUM);
2106
2107 /**
2108   * Search parameter: <b>occurrence</b>
2109   * <p>
2110   * Description: <b>When scheduled</b><br>
2111   * Type: <b>date</b><br>
2112   * Path: <b>CommunicationRequest.occurrence.as(dateTime) | CommunicationRequest.occurrence.as(Period)</b><br>
2113   * </p>
2114   */
2115  @SearchParamDefinition(name="occurrence", path="CommunicationRequest.occurrence.as(dateTime) | CommunicationRequest.occurrence.as(Period)", description="When scheduled", type="date" )
2116  public static final String SP_OCCURRENCE = "occurrence";
2117 /**
2118   * <b>Fluent Client</b> search parameter constant for <b>occurrence</b>
2119   * <p>
2120   * Description: <b>When scheduled</b><br>
2121   * Type: <b>date</b><br>
2122   * Path: <b>CommunicationRequest.occurrence.as(dateTime) | CommunicationRequest.occurrence.as(Period)</b><br>
2123   * </p>
2124   */
2125  public static final ca.uhn.fhir.rest.gclient.DateClientParam OCCURRENCE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_OCCURRENCE);
2126
2127 /**
2128   * Search parameter: <b>patient</b>
2129   * <p>
2130   * Description: <b>Focus of message</b><br>
2131   * Type: <b>reference</b><br>
2132   * Path: <b>CommunicationRequest.subject.where(resolve() is Patient)</b><br>
2133   * </p>
2134   */
2135  @SearchParamDefinition(name="patient", path="CommunicationRequest.subject.where(resolve() is Patient)", description="Focus of message", type="reference", target={Patient.class } )
2136  public static final String SP_PATIENT = "patient";
2137 /**
2138   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
2139   * <p>
2140   * Description: <b>Focus of message</b><br>
2141   * Type: <b>reference</b><br>
2142   * Path: <b>CommunicationRequest.subject.where(resolve() is Patient)</b><br>
2143   * </p>
2144   */
2145  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
2146
2147/**
2148   * Constant for fluent queries to be used to add include statements. Specifies
2149   * the path value of "<b>CommunicationRequest:patient</b>".
2150   */
2151  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("CommunicationRequest:patient").toLocked();
2152
2153 /**
2154   * Search parameter: <b>priority</b>
2155   * <p>
2156   * Description: <b>routine | urgent | asap | stat</b><br>
2157   * Type: <b>token</b><br>
2158   * Path: <b>CommunicationRequest.priority</b><br>
2159   * </p>
2160   */
2161  @SearchParamDefinition(name="priority", path="CommunicationRequest.priority", description="routine | urgent | asap | stat", type="token" )
2162  public static final String SP_PRIORITY = "priority";
2163 /**
2164   * <b>Fluent Client</b> search parameter constant for <b>priority</b>
2165   * <p>
2166   * Description: <b>routine | urgent | asap | stat</b><br>
2167   * Type: <b>token</b><br>
2168   * Path: <b>CommunicationRequest.priority</b><br>
2169   * </p>
2170   */
2171  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRIORITY = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRIORITY);
2172
2173 /**
2174   * Search parameter: <b>recipient</b>
2175   * <p>
2176   * Description: <b>Who to share the information with</b><br>
2177   * Type: <b>reference</b><br>
2178   * Path: <b>CommunicationRequest.recipient</b><br>
2179   * </p>
2180   */
2181  @SearchParamDefinition(name="recipient", path="CommunicationRequest.recipient", description="Who to share the information with", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Device"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson"), @ca.uhn.fhir.model.api.annotation.Compartment(name="EXAMPLE") }, target={CareTeam.class, Device.class, Endpoint.class, Group.class, HealthcareService.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2182  public static final String SP_RECIPIENT = "recipient";
2183 /**
2184   * <b>Fluent Client</b> search parameter constant for <b>recipient</b>
2185   * <p>
2186   * Description: <b>Who to share the information with</b><br>
2187   * Type: <b>reference</b><br>
2188   * Path: <b>CommunicationRequest.recipient</b><br>
2189   * </p>
2190   */
2191  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam RECIPIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_RECIPIENT);
2192
2193/**
2194   * Constant for fluent queries to be used to add include statements. Specifies
2195   * the path value of "<b>CommunicationRequest:recipient</b>".
2196   */
2197  public static final ca.uhn.fhir.model.api.Include INCLUDE_RECIPIENT = new ca.uhn.fhir.model.api.Include("CommunicationRequest:recipient").toLocked();
2198
2199 /**
2200   * Search parameter: <b>replaces</b>
2201   * <p>
2202   * Description: <b>Request(s) replaced by this request</b><br>
2203   * Type: <b>reference</b><br>
2204   * Path: <b>CommunicationRequest.replaces</b><br>
2205   * </p>
2206   */
2207  @SearchParamDefinition(name="replaces", path="CommunicationRequest.replaces", description="Request(s) replaced by this request", type="reference", target={CommunicationRequest.class } )
2208  public static final String SP_REPLACES = "replaces";
2209 /**
2210   * <b>Fluent Client</b> search parameter constant for <b>replaces</b>
2211   * <p>
2212   * Description: <b>Request(s) replaced by this request</b><br>
2213   * Type: <b>reference</b><br>
2214   * Path: <b>CommunicationRequest.replaces</b><br>
2215   * </p>
2216   */
2217  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REPLACES = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REPLACES);
2218
2219/**
2220   * Constant for fluent queries to be used to add include statements. Specifies
2221   * the path value of "<b>CommunicationRequest:replaces</b>".
2222   */
2223  public static final ca.uhn.fhir.model.api.Include INCLUDE_REPLACES = new ca.uhn.fhir.model.api.Include("CommunicationRequest:replaces").toLocked();
2224
2225 /**
2226   * Search parameter: <b>requester</b>
2227   * <p>
2228   * Description: <b>Who asks for the information to be shared</b><br>
2229   * Type: <b>reference</b><br>
2230   * Path: <b>CommunicationRequest.requester</b><br>
2231   * </p>
2232   */
2233  @SearchParamDefinition(name="requester", path="CommunicationRequest.requester", description="Who asks for the information to be shared", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Device.class, Organization.class, Patient.class, Practitioner.class, PractitionerRole.class, RelatedPerson.class } )
2234  public static final String SP_REQUESTER = "requester";
2235 /**
2236   * <b>Fluent Client</b> search parameter constant for <b>requester</b>
2237   * <p>
2238   * Description: <b>Who asks for the information to be shared</b><br>
2239   * Type: <b>reference</b><br>
2240   * Path: <b>CommunicationRequest.requester</b><br>
2241   * </p>
2242   */
2243  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam REQUESTER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_REQUESTER);
2244
2245/**
2246   * Constant for fluent queries to be used to add include statements. Specifies
2247   * the path value of "<b>CommunicationRequest:requester</b>".
2248   */
2249  public static final ca.uhn.fhir.model.api.Include INCLUDE_REQUESTER = new ca.uhn.fhir.model.api.Include("CommunicationRequest:requester").toLocked();
2250
2251 /**
2252   * Search parameter: <b>status</b>
2253   * <p>
2254   * Description: <b>draft | active | on-hold | revoked | completed | entered-in-error | unknown</b><br>
2255   * Type: <b>token</b><br>
2256   * Path: <b>CommunicationRequest.status</b><br>
2257   * </p>
2258   */
2259  @SearchParamDefinition(name="status", path="CommunicationRequest.status", description="draft | active | on-hold | revoked | completed | entered-in-error | unknown", type="token" )
2260  public static final String SP_STATUS = "status";
2261 /**
2262   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2263   * <p>
2264   * Description: <b>draft | active | on-hold | revoked | completed | entered-in-error | unknown</b><br>
2265   * Type: <b>token</b><br>
2266   * Path: <b>CommunicationRequest.status</b><br>
2267   * </p>
2268   */
2269  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2270
2271 /**
2272   * Search parameter: <b>subject</b>
2273   * <p>
2274   * Description: <b>Focus of message</b><br>
2275   * Type: <b>reference</b><br>
2276   * Path: <b>CommunicationRequest.subject</b><br>
2277   * </p>
2278   */
2279  @SearchParamDefinition(name="subject", path="CommunicationRequest.subject", description="Focus of message", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Group.class, Patient.class } )
2280  public static final String SP_SUBJECT = "subject";
2281 /**
2282   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
2283   * <p>
2284   * Description: <b>Focus of message</b><br>
2285   * Type: <b>reference</b><br>
2286   * Path: <b>CommunicationRequest.subject</b><br>
2287   * </p>
2288   */
2289  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
2290
2291/**
2292   * Constant for fluent queries to be used to add include statements. Specifies
2293   * the path value of "<b>CommunicationRequest:subject</b>".
2294   */
2295  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("CommunicationRequest:subject").toLocked();
2296
2297
2298}
2299