001package org.hl7.fhir.r5.model;
002
003
004
005
006/*
007  Copyright (c) 2011+, HL7, Inc.
008  All rights reserved.
009  
010  Redistribution and use in source and binary forms, with or without modification, \
011  are permitted provided that the following conditions are met:
012  
013   * Redistributions of source code must retain the above copyright notice, this \
014     list of conditions and the following disclaimer.
015   * Redistributions in binary form must reproduce the above copyright notice, \
016     this list of conditions and the following disclaimer in the documentation \
017     and/or other materials provided with the distribution.
018   * Neither the name of HL7 nor the names of its contributors may be used to 
019     endorse or promote products derived from this software without specific 
020     prior written permission.
021  
022  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \
023  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \
024  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \
025  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, \
026  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT \
027  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR \
028  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \
029  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \
030  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE \
031  POSSIBILITY OF SUCH DAMAGE.
032  */
033
034// Generated on Mon, May 11, 2020 09:58+1000 for FHIR vcurrent
035
036import java.util.ArrayList;
037import java.util.Date;
038import java.util.List;
039import org.hl7.fhir.utilities.Utilities;
040import org.hl7.fhir.r5.model.Enumerations.*;
041import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
042import org.hl7.fhir.exceptions.FHIRException;
043import org.hl7.fhir.instance.model.api.ICompositeType;
044import ca.uhn.fhir.model.api.annotation.ResourceDef;
045import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
046import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
047import ca.uhn.fhir.model.api.annotation.Child;
048import ca.uhn.fhir.model.api.annotation.ChildOrder;
049import ca.uhn.fhir.model.api.annotation.Description;
050import ca.uhn.fhir.model.api.annotation.Block;
051
052/**
053 * Information about a person that is involved in the care for a patient, but who is not the target of healthcare, nor has a formal responsibility in the care process.
054 */
055@ResourceDef(name="RelatedPerson", profile="http://hl7.org/fhir/StructureDefinition/RelatedPerson")
056public class RelatedPerson extends DomainResource {
057
058    @Block()
059    public static class RelatedPersonCommunicationComponent extends BackboneElement implements IBaseBackboneElement {
060        /**
061         * The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. "en" for English, or "en-US" for American English versus "en-EN" for England English.
062         */
063        @Child(name = "language", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
064        @Description(shortDefinition="The language which can be used to communicate with the patient about his or her health", formalDefinition="The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. \"en\" for English, or \"en-US\" for American English versus \"en-EN\" for England English." )
065        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
066        protected CodeableConcept language;
067
068        /**
069         * Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).
070         */
071        @Child(name = "preferred", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
072        @Description(shortDefinition="Language preference indicator", formalDefinition="Indicates whether or not the patient prefers this language (over other languages he masters up a certain level)." )
073        protected BooleanType preferred;
074
075        private static final long serialVersionUID = 633792918L;
076
077    /**
078     * Constructor
079     */
080      public RelatedPersonCommunicationComponent() {
081        super();
082      }
083
084    /**
085     * Constructor
086     */
087      public RelatedPersonCommunicationComponent(CodeableConcept language) {
088        super();
089        this.setLanguage(language);
090      }
091
092        /**
093         * @return {@link #language} (The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. "en" for English, or "en-US" for American English versus "en-EN" for England English.)
094         */
095        public CodeableConcept getLanguage() { 
096          if (this.language == null)
097            if (Configuration.errorOnAutoCreate())
098              throw new Error("Attempt to auto-create RelatedPersonCommunicationComponent.language");
099            else if (Configuration.doAutoCreate())
100              this.language = new CodeableConcept(); // cc
101          return this.language;
102        }
103
104        public boolean hasLanguage() { 
105          return this.language != null && !this.language.isEmpty();
106        }
107
108        /**
109         * @param value {@link #language} (The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. "en" for English, or "en-US" for American English versus "en-EN" for England English.)
110         */
111        public RelatedPersonCommunicationComponent setLanguage(CodeableConcept value) { 
112          this.language = value;
113          return this;
114        }
115
116        /**
117         * @return {@link #preferred} (Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).). This is the underlying object with id, value and extensions. The accessor "getPreferred" gives direct access to the value
118         */
119        public BooleanType getPreferredElement() { 
120          if (this.preferred == null)
121            if (Configuration.errorOnAutoCreate())
122              throw new Error("Attempt to auto-create RelatedPersonCommunicationComponent.preferred");
123            else if (Configuration.doAutoCreate())
124              this.preferred = new BooleanType(); // bb
125          return this.preferred;
126        }
127
128        public boolean hasPreferredElement() { 
129          return this.preferred != null && !this.preferred.isEmpty();
130        }
131
132        public boolean hasPreferred() { 
133          return this.preferred != null && !this.preferred.isEmpty();
134        }
135
136        /**
137         * @param value {@link #preferred} (Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).). This is the underlying object with id, value and extensions. The accessor "getPreferred" gives direct access to the value
138         */
139        public RelatedPersonCommunicationComponent setPreferredElement(BooleanType value) { 
140          this.preferred = value;
141          return this;
142        }
143
144        /**
145         * @return Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).
146         */
147        public boolean getPreferred() { 
148          return this.preferred == null || this.preferred.isEmpty() ? false : this.preferred.getValue();
149        }
150
151        /**
152         * @param value Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).
153         */
154        public RelatedPersonCommunicationComponent setPreferred(boolean value) { 
155            if (this.preferred == null)
156              this.preferred = new BooleanType();
157            this.preferred.setValue(value);
158          return this;
159        }
160
161        protected void listChildren(List<Property> children) {
162          super.listChildren(children);
163          children.add(new Property("language", "CodeableConcept", "The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. \"en\" for English, or \"en-US\" for American English versus \"en-EN\" for England English.", 0, 1, language));
164          children.add(new Property("preferred", "boolean", "Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).", 0, 1, preferred));
165        }
166
167        @Override
168        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
169          switch (_hash) {
170          case -1613589672: /*language*/  return new Property("language", "CodeableConcept", "The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. \"en\" for English, or \"en-US\" for American English versus \"en-EN\" for England English.", 0, 1, language);
171          case -1294005119: /*preferred*/  return new Property("preferred", "boolean", "Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).", 0, 1, preferred);
172          default: return super.getNamedProperty(_hash, _name, _checkValid);
173          }
174
175        }
176
177      @Override
178      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
179        switch (hash) {
180        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeableConcept
181        case -1294005119: /*preferred*/ return this.preferred == null ? new Base[0] : new Base[] {this.preferred}; // BooleanType
182        default: return super.getProperty(hash, name, checkValid);
183        }
184
185      }
186
187      @Override
188      public Base setProperty(int hash, String name, Base value) throws FHIRException {
189        switch (hash) {
190        case -1613589672: // language
191          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
192          return value;
193        case -1294005119: // preferred
194          this.preferred = TypeConvertor.castToBoolean(value); // BooleanType
195          return value;
196        default: return super.setProperty(hash, name, value);
197        }
198
199      }
200
201      @Override
202      public Base setProperty(String name, Base value) throws FHIRException {
203        if (name.equals("language")) {
204          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
205        } else if (name.equals("preferred")) {
206          this.preferred = TypeConvertor.castToBoolean(value); // BooleanType
207        } else
208          return super.setProperty(name, value);
209        return value;
210      }
211
212      @Override
213      public Base makeProperty(int hash, String name) throws FHIRException {
214        switch (hash) {
215        case -1613589672:  return getLanguage();
216        case -1294005119:  return getPreferredElement();
217        default: return super.makeProperty(hash, name);
218        }
219
220      }
221
222      @Override
223      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
224        switch (hash) {
225        case -1613589672: /*language*/ return new String[] {"CodeableConcept"};
226        case -1294005119: /*preferred*/ return new String[] {"boolean"};
227        default: return super.getTypesForProperty(hash, name);
228        }
229
230      }
231
232      @Override
233      public Base addChild(String name) throws FHIRException {
234        if (name.equals("language")) {
235          this.language = new CodeableConcept();
236          return this.language;
237        }
238        else if (name.equals("preferred")) {
239          throw new FHIRException("Cannot call addChild on a primitive type RelatedPerson.communication.preferred");
240        }
241        else
242          return super.addChild(name);
243      }
244
245      public RelatedPersonCommunicationComponent copy() {
246        RelatedPersonCommunicationComponent dst = new RelatedPersonCommunicationComponent();
247        copyValues(dst);
248        return dst;
249      }
250
251      public void copyValues(RelatedPersonCommunicationComponent dst) {
252        super.copyValues(dst);
253        dst.language = language == null ? null : language.copy();
254        dst.preferred = preferred == null ? null : preferred.copy();
255      }
256
257      @Override
258      public boolean equalsDeep(Base other_) {
259        if (!super.equalsDeep(other_))
260          return false;
261        if (!(other_ instanceof RelatedPersonCommunicationComponent))
262          return false;
263        RelatedPersonCommunicationComponent o = (RelatedPersonCommunicationComponent) other_;
264        return compareDeep(language, o.language, true) && compareDeep(preferred, o.preferred, true);
265      }
266
267      @Override
268      public boolean equalsShallow(Base other_) {
269        if (!super.equalsShallow(other_))
270          return false;
271        if (!(other_ instanceof RelatedPersonCommunicationComponent))
272          return false;
273        RelatedPersonCommunicationComponent o = (RelatedPersonCommunicationComponent) other_;
274        return compareValues(preferred, o.preferred, true);
275      }
276
277      public boolean isEmpty() {
278        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, preferred);
279      }
280
281  public String fhirType() {
282    return "RelatedPerson.communication";
283
284  }
285
286  }
287
288    /**
289     * Identifier for a person within a particular scope.
290     */
291    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
292    @Description(shortDefinition="A human identifier for this person", formalDefinition="Identifier for a person within a particular scope." )
293    protected List<Identifier> identifier;
294
295    /**
296     * Whether this related person record is in active use.
297     */
298    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=true, summary=true)
299    @Description(shortDefinition="Whether this related person's record is in active use", formalDefinition="Whether this related person record is in active use." )
300    protected BooleanType active;
301
302    /**
303     * The patient this person is related to.
304     */
305    @Child(name = "patient", type = {Patient.class}, order=2, min=1, max=1, modifier=false, summary=true)
306    @Description(shortDefinition="The patient this person is related to", formalDefinition="The patient this person is related to." )
307    protected Reference patient;
308
309    /**
310     * The nature of the relationship between a patient and the related person.
311     */
312    @Child(name = "relationship", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
313    @Description(shortDefinition="The nature of the relationship", formalDefinition="The nature of the relationship between a patient and the related person." )
314    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/relatedperson-relationshiptype")
315    protected List<CodeableConcept> relationship;
316
317    /**
318     * A name associated with the person.
319     */
320    @Child(name = "name", type = {HumanName.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
321    @Description(shortDefinition="A name associated with the person", formalDefinition="A name associated with the person." )
322    protected List<HumanName> name;
323
324    /**
325     * A contact detail for the person, e.g. a telephone number or an email address.
326     */
327    @Child(name = "telecom", type = {ContactPoint.class}, order=5, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
328    @Description(shortDefinition="A contact detail for the person", formalDefinition="A contact detail for the person, e.g. a telephone number or an email address." )
329    protected List<ContactPoint> telecom;
330
331    /**
332     * Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
333     */
334    @Child(name = "gender", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
335    @Description(shortDefinition="male | female | other | unknown", formalDefinition="Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes." )
336    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/administrative-gender")
337    protected Enumeration<AdministrativeGender> gender;
338
339    /**
340     * The date on which the related person was born.
341     */
342    @Child(name = "birthDate", type = {DateType.class}, order=7, min=0, max=1, modifier=false, summary=true)
343    @Description(shortDefinition="The date on which the related person was born", formalDefinition="The date on which the related person was born." )
344    protected DateType birthDate;
345
346    /**
347     * Address where the related person can be contacted or visited.
348     */
349    @Child(name = "address", type = {Address.class}, order=8, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
350    @Description(shortDefinition="Address where the related person can be contacted or visited", formalDefinition="Address where the related person can be contacted or visited." )
351    protected List<Address> address;
352
353    /**
354     * Image of the person.
355     */
356    @Child(name = "photo", type = {Attachment.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
357    @Description(shortDefinition="Image of the person", formalDefinition="Image of the person." )
358    protected List<Attachment> photo;
359
360    /**
361     * The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown.
362     */
363    @Child(name = "period", type = {Period.class}, order=10, min=0, max=1, modifier=false, summary=false)
364    @Description(shortDefinition="Period of time that this relationship is considered valid", formalDefinition="The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown." )
365    protected Period period;
366
367    /**
368     * A language which may be used to communicate with about the patient's health.
369     */
370    @Child(name = "communication", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
371    @Description(shortDefinition="A language which may be used to communicate with about the patient's health", formalDefinition="A language which may be used to communicate with about the patient's health." )
372    protected List<RelatedPersonCommunicationComponent> communication;
373
374    private static final long serialVersionUID = -857475397L;
375
376  /**
377   * Constructor
378   */
379    public RelatedPerson() {
380      super();
381    }
382
383  /**
384   * Constructor
385   */
386    public RelatedPerson(Reference patient) {
387      super();
388      this.setPatient(patient);
389    }
390
391    /**
392     * @return {@link #identifier} (Identifier for a person within a particular scope.)
393     */
394    public List<Identifier> getIdentifier() { 
395      if (this.identifier == null)
396        this.identifier = new ArrayList<Identifier>();
397      return this.identifier;
398    }
399
400    /**
401     * @return Returns a reference to <code>this</code> for easy method chaining
402     */
403    public RelatedPerson setIdentifier(List<Identifier> theIdentifier) { 
404      this.identifier = theIdentifier;
405      return this;
406    }
407
408    public boolean hasIdentifier() { 
409      if (this.identifier == null)
410        return false;
411      for (Identifier item : this.identifier)
412        if (!item.isEmpty())
413          return true;
414      return false;
415    }
416
417    public Identifier addIdentifier() { //3
418      Identifier t = new Identifier();
419      if (this.identifier == null)
420        this.identifier = new ArrayList<Identifier>();
421      this.identifier.add(t);
422      return t;
423    }
424
425    public RelatedPerson addIdentifier(Identifier t) { //3
426      if (t == null)
427        return this;
428      if (this.identifier == null)
429        this.identifier = new ArrayList<Identifier>();
430      this.identifier.add(t);
431      return this;
432    }
433
434    /**
435     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
436     */
437    public Identifier getIdentifierFirstRep() { 
438      if (getIdentifier().isEmpty()) {
439        addIdentifier();
440      }
441      return getIdentifier().get(0);
442    }
443
444    /**
445     * @return {@link #active} (Whether this related person record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
446     */
447    public BooleanType getActiveElement() { 
448      if (this.active == null)
449        if (Configuration.errorOnAutoCreate())
450          throw new Error("Attempt to auto-create RelatedPerson.active");
451        else if (Configuration.doAutoCreate())
452          this.active = new BooleanType(); // bb
453      return this.active;
454    }
455
456    public boolean hasActiveElement() { 
457      return this.active != null && !this.active.isEmpty();
458    }
459
460    public boolean hasActive() { 
461      return this.active != null && !this.active.isEmpty();
462    }
463
464    /**
465     * @param value {@link #active} (Whether this related person record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
466     */
467    public RelatedPerson setActiveElement(BooleanType value) { 
468      this.active = value;
469      return this;
470    }
471
472    /**
473     * @return Whether this related person record is in active use.
474     */
475    public boolean getActive() { 
476      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
477    }
478
479    /**
480     * @param value Whether this related person record is in active use.
481     */
482    public RelatedPerson setActive(boolean value) { 
483        if (this.active == null)
484          this.active = new BooleanType();
485        this.active.setValue(value);
486      return this;
487    }
488
489    /**
490     * @return {@link #patient} (The patient this person is related to.)
491     */
492    public Reference getPatient() { 
493      if (this.patient == null)
494        if (Configuration.errorOnAutoCreate())
495          throw new Error("Attempt to auto-create RelatedPerson.patient");
496        else if (Configuration.doAutoCreate())
497          this.patient = new Reference(); // cc
498      return this.patient;
499    }
500
501    public boolean hasPatient() { 
502      return this.patient != null && !this.patient.isEmpty();
503    }
504
505    /**
506     * @param value {@link #patient} (The patient this person is related to.)
507     */
508    public RelatedPerson setPatient(Reference value) { 
509      this.patient = value;
510      return this;
511    }
512
513    /**
514     * @return {@link #relationship} (The nature of the relationship between a patient and the related person.)
515     */
516    public List<CodeableConcept> getRelationship() { 
517      if (this.relationship == null)
518        this.relationship = new ArrayList<CodeableConcept>();
519      return this.relationship;
520    }
521
522    /**
523     * @return Returns a reference to <code>this</code> for easy method chaining
524     */
525    public RelatedPerson setRelationship(List<CodeableConcept> theRelationship) { 
526      this.relationship = theRelationship;
527      return this;
528    }
529
530    public boolean hasRelationship() { 
531      if (this.relationship == null)
532        return false;
533      for (CodeableConcept item : this.relationship)
534        if (!item.isEmpty())
535          return true;
536      return false;
537    }
538
539    public CodeableConcept addRelationship() { //3
540      CodeableConcept t = new CodeableConcept();
541      if (this.relationship == null)
542        this.relationship = new ArrayList<CodeableConcept>();
543      this.relationship.add(t);
544      return t;
545    }
546
547    public RelatedPerson addRelationship(CodeableConcept t) { //3
548      if (t == null)
549        return this;
550      if (this.relationship == null)
551        this.relationship = new ArrayList<CodeableConcept>();
552      this.relationship.add(t);
553      return this;
554    }
555
556    /**
557     * @return The first repetition of repeating field {@link #relationship}, creating it if it does not already exist {3}
558     */
559    public CodeableConcept getRelationshipFirstRep() { 
560      if (getRelationship().isEmpty()) {
561        addRelationship();
562      }
563      return getRelationship().get(0);
564    }
565
566    /**
567     * @return {@link #name} (A name associated with the person.)
568     */
569    public List<HumanName> getName() { 
570      if (this.name == null)
571        this.name = new ArrayList<HumanName>();
572      return this.name;
573    }
574
575    /**
576     * @return Returns a reference to <code>this</code> for easy method chaining
577     */
578    public RelatedPerson setName(List<HumanName> theName) { 
579      this.name = theName;
580      return this;
581    }
582
583    public boolean hasName() { 
584      if (this.name == null)
585        return false;
586      for (HumanName item : this.name)
587        if (!item.isEmpty())
588          return true;
589      return false;
590    }
591
592    public HumanName addName() { //3
593      HumanName t = new HumanName();
594      if (this.name == null)
595        this.name = new ArrayList<HumanName>();
596      this.name.add(t);
597      return t;
598    }
599
600    public RelatedPerson addName(HumanName t) { //3
601      if (t == null)
602        return this;
603      if (this.name == null)
604        this.name = new ArrayList<HumanName>();
605      this.name.add(t);
606      return this;
607    }
608
609    /**
610     * @return The first repetition of repeating field {@link #name}, creating it if it does not already exist {3}
611     */
612    public HumanName getNameFirstRep() { 
613      if (getName().isEmpty()) {
614        addName();
615      }
616      return getName().get(0);
617    }
618
619    /**
620     * @return {@link #telecom} (A contact detail for the person, e.g. a telephone number or an email address.)
621     */
622    public List<ContactPoint> getTelecom() { 
623      if (this.telecom == null)
624        this.telecom = new ArrayList<ContactPoint>();
625      return this.telecom;
626    }
627
628    /**
629     * @return Returns a reference to <code>this</code> for easy method chaining
630     */
631    public RelatedPerson setTelecom(List<ContactPoint> theTelecom) { 
632      this.telecom = theTelecom;
633      return this;
634    }
635
636    public boolean hasTelecom() { 
637      if (this.telecom == null)
638        return false;
639      for (ContactPoint item : this.telecom)
640        if (!item.isEmpty())
641          return true;
642      return false;
643    }
644
645    public ContactPoint addTelecom() { //3
646      ContactPoint t = new ContactPoint();
647      if (this.telecom == null)
648        this.telecom = new ArrayList<ContactPoint>();
649      this.telecom.add(t);
650      return t;
651    }
652
653    public RelatedPerson addTelecom(ContactPoint t) { //3
654      if (t == null)
655        return this;
656      if (this.telecom == null)
657        this.telecom = new ArrayList<ContactPoint>();
658      this.telecom.add(t);
659      return this;
660    }
661
662    /**
663     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist {3}
664     */
665    public ContactPoint getTelecomFirstRep() { 
666      if (getTelecom().isEmpty()) {
667        addTelecom();
668      }
669      return getTelecom().get(0);
670    }
671
672    /**
673     * @return {@link #gender} (Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
674     */
675    public Enumeration<AdministrativeGender> getGenderElement() { 
676      if (this.gender == null)
677        if (Configuration.errorOnAutoCreate())
678          throw new Error("Attempt to auto-create RelatedPerson.gender");
679        else if (Configuration.doAutoCreate())
680          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory()); // bb
681      return this.gender;
682    }
683
684    public boolean hasGenderElement() { 
685      return this.gender != null && !this.gender.isEmpty();
686    }
687
688    public boolean hasGender() { 
689      return this.gender != null && !this.gender.isEmpty();
690    }
691
692    /**
693     * @param value {@link #gender} (Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
694     */
695    public RelatedPerson setGenderElement(Enumeration<AdministrativeGender> value) { 
696      this.gender = value;
697      return this;
698    }
699
700    /**
701     * @return Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
702     */
703    public AdministrativeGender getGender() { 
704      return this.gender == null ? null : this.gender.getValue();
705    }
706
707    /**
708     * @param value Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.
709     */
710    public RelatedPerson setGender(AdministrativeGender value) { 
711      if (value == null)
712        this.gender = null;
713      else {
714        if (this.gender == null)
715          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory());
716        this.gender.setValue(value);
717      }
718      return this;
719    }
720
721    /**
722     * @return {@link #birthDate} (The date on which the related person was born.). This is the underlying object with id, value and extensions. The accessor "getBirthDate" gives direct access to the value
723     */
724    public DateType getBirthDateElement() { 
725      if (this.birthDate == null)
726        if (Configuration.errorOnAutoCreate())
727          throw new Error("Attempt to auto-create RelatedPerson.birthDate");
728        else if (Configuration.doAutoCreate())
729          this.birthDate = new DateType(); // bb
730      return this.birthDate;
731    }
732
733    public boolean hasBirthDateElement() { 
734      return this.birthDate != null && !this.birthDate.isEmpty();
735    }
736
737    public boolean hasBirthDate() { 
738      return this.birthDate != null && !this.birthDate.isEmpty();
739    }
740
741    /**
742     * @param value {@link #birthDate} (The date on which the related person was born.). This is the underlying object with id, value and extensions. The accessor "getBirthDate" gives direct access to the value
743     */
744    public RelatedPerson setBirthDateElement(DateType value) { 
745      this.birthDate = value;
746      return this;
747    }
748
749    /**
750     * @return The date on which the related person was born.
751     */
752    public Date getBirthDate() { 
753      return this.birthDate == null ? null : this.birthDate.getValue();
754    }
755
756    /**
757     * @param value The date on which the related person was born.
758     */
759    public RelatedPerson setBirthDate(Date value) { 
760      if (value == null)
761        this.birthDate = null;
762      else {
763        if (this.birthDate == null)
764          this.birthDate = new DateType();
765        this.birthDate.setValue(value);
766      }
767      return this;
768    }
769
770    /**
771     * @return {@link #address} (Address where the related person can be contacted or visited.)
772     */
773    public List<Address> getAddress() { 
774      if (this.address == null)
775        this.address = new ArrayList<Address>();
776      return this.address;
777    }
778
779    /**
780     * @return Returns a reference to <code>this</code> for easy method chaining
781     */
782    public RelatedPerson setAddress(List<Address> theAddress) { 
783      this.address = theAddress;
784      return this;
785    }
786
787    public boolean hasAddress() { 
788      if (this.address == null)
789        return false;
790      for (Address item : this.address)
791        if (!item.isEmpty())
792          return true;
793      return false;
794    }
795
796    public Address addAddress() { //3
797      Address t = new Address();
798      if (this.address == null)
799        this.address = new ArrayList<Address>();
800      this.address.add(t);
801      return t;
802    }
803
804    public RelatedPerson addAddress(Address t) { //3
805      if (t == null)
806        return this;
807      if (this.address == null)
808        this.address = new ArrayList<Address>();
809      this.address.add(t);
810      return this;
811    }
812
813    /**
814     * @return The first repetition of repeating field {@link #address}, creating it if it does not already exist {3}
815     */
816    public Address getAddressFirstRep() { 
817      if (getAddress().isEmpty()) {
818        addAddress();
819      }
820      return getAddress().get(0);
821    }
822
823    /**
824     * @return {@link #photo} (Image of the person.)
825     */
826    public List<Attachment> getPhoto() { 
827      if (this.photo == null)
828        this.photo = new ArrayList<Attachment>();
829      return this.photo;
830    }
831
832    /**
833     * @return Returns a reference to <code>this</code> for easy method chaining
834     */
835    public RelatedPerson setPhoto(List<Attachment> thePhoto) { 
836      this.photo = thePhoto;
837      return this;
838    }
839
840    public boolean hasPhoto() { 
841      if (this.photo == null)
842        return false;
843      for (Attachment item : this.photo)
844        if (!item.isEmpty())
845          return true;
846      return false;
847    }
848
849    public Attachment addPhoto() { //3
850      Attachment t = new Attachment();
851      if (this.photo == null)
852        this.photo = new ArrayList<Attachment>();
853      this.photo.add(t);
854      return t;
855    }
856
857    public RelatedPerson addPhoto(Attachment t) { //3
858      if (t == null)
859        return this;
860      if (this.photo == null)
861        this.photo = new ArrayList<Attachment>();
862      this.photo.add(t);
863      return this;
864    }
865
866    /**
867     * @return The first repetition of repeating field {@link #photo}, creating it if it does not already exist {3}
868     */
869    public Attachment getPhotoFirstRep() { 
870      if (getPhoto().isEmpty()) {
871        addPhoto();
872      }
873      return getPhoto().get(0);
874    }
875
876    /**
877     * @return {@link #period} (The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown.)
878     */
879    public Period getPeriod() { 
880      if (this.period == null)
881        if (Configuration.errorOnAutoCreate())
882          throw new Error("Attempt to auto-create RelatedPerson.period");
883        else if (Configuration.doAutoCreate())
884          this.period = new Period(); // cc
885      return this.period;
886    }
887
888    public boolean hasPeriod() { 
889      return this.period != null && !this.period.isEmpty();
890    }
891
892    /**
893     * @param value {@link #period} (The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown.)
894     */
895    public RelatedPerson setPeriod(Period value) { 
896      this.period = value;
897      return this;
898    }
899
900    /**
901     * @return {@link #communication} (A language which may be used to communicate with about the patient's health.)
902     */
903    public List<RelatedPersonCommunicationComponent> getCommunication() { 
904      if (this.communication == null)
905        this.communication = new ArrayList<RelatedPersonCommunicationComponent>();
906      return this.communication;
907    }
908
909    /**
910     * @return Returns a reference to <code>this</code> for easy method chaining
911     */
912    public RelatedPerson setCommunication(List<RelatedPersonCommunicationComponent> theCommunication) { 
913      this.communication = theCommunication;
914      return this;
915    }
916
917    public boolean hasCommunication() { 
918      if (this.communication == null)
919        return false;
920      for (RelatedPersonCommunicationComponent item : this.communication)
921        if (!item.isEmpty())
922          return true;
923      return false;
924    }
925
926    public RelatedPersonCommunicationComponent addCommunication() { //3
927      RelatedPersonCommunicationComponent t = new RelatedPersonCommunicationComponent();
928      if (this.communication == null)
929        this.communication = new ArrayList<RelatedPersonCommunicationComponent>();
930      this.communication.add(t);
931      return t;
932    }
933
934    public RelatedPerson addCommunication(RelatedPersonCommunicationComponent t) { //3
935      if (t == null)
936        return this;
937      if (this.communication == null)
938        this.communication = new ArrayList<RelatedPersonCommunicationComponent>();
939      this.communication.add(t);
940      return this;
941    }
942
943    /**
944     * @return The first repetition of repeating field {@link #communication}, creating it if it does not already exist {3}
945     */
946    public RelatedPersonCommunicationComponent getCommunicationFirstRep() { 
947      if (getCommunication().isEmpty()) {
948        addCommunication();
949      }
950      return getCommunication().get(0);
951    }
952
953      protected void listChildren(List<Property> children) {
954        super.listChildren(children);
955        children.add(new Property("identifier", "Identifier", "Identifier for a person within a particular scope.", 0, java.lang.Integer.MAX_VALUE, identifier));
956        children.add(new Property("active", "boolean", "Whether this related person record is in active use.", 0, 1, active));
957        children.add(new Property("patient", "Reference(Patient)", "The patient this person is related to.", 0, 1, patient));
958        children.add(new Property("relationship", "CodeableConcept", "The nature of the relationship between a patient and the related person.", 0, java.lang.Integer.MAX_VALUE, relationship));
959        children.add(new Property("name", "HumanName", "A name associated with the person.", 0, java.lang.Integer.MAX_VALUE, name));
960        children.add(new Property("telecom", "ContactPoint", "A contact detail for the person, e.g. a telephone number or an email address.", 0, java.lang.Integer.MAX_VALUE, telecom));
961        children.add(new Property("gender", "code", "Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.", 0, 1, gender));
962        children.add(new Property("birthDate", "date", "The date on which the related person was born.", 0, 1, birthDate));
963        children.add(new Property("address", "Address", "Address where the related person can be contacted or visited.", 0, java.lang.Integer.MAX_VALUE, address));
964        children.add(new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo));
965        children.add(new Property("period", "Period", "The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown.", 0, 1, period));
966        children.add(new Property("communication", "", "A language which may be used to communicate with about the patient's health.", 0, java.lang.Integer.MAX_VALUE, communication));
967      }
968
969      @Override
970      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
971        switch (_hash) {
972        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifier for a person within a particular scope.", 0, java.lang.Integer.MAX_VALUE, identifier);
973        case -1422950650: /*active*/  return new Property("active", "boolean", "Whether this related person record is in active use.", 0, 1, active);
974        case -791418107: /*patient*/  return new Property("patient", "Reference(Patient)", "The patient this person is related to.", 0, 1, patient);
975        case -261851592: /*relationship*/  return new Property("relationship", "CodeableConcept", "The nature of the relationship between a patient and the related person.", 0, java.lang.Integer.MAX_VALUE, relationship);
976        case 3373707: /*name*/  return new Property("name", "HumanName", "A name associated with the person.", 0, java.lang.Integer.MAX_VALUE, name);
977        case -1429363305: /*telecom*/  return new Property("telecom", "ContactPoint", "A contact detail for the person, e.g. a telephone number or an email address.", 0, java.lang.Integer.MAX_VALUE, telecom);
978        case -1249512767: /*gender*/  return new Property("gender", "code", "Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.", 0, 1, gender);
979        case -1210031859: /*birthDate*/  return new Property("birthDate", "date", "The date on which the related person was born.", 0, 1, birthDate);
980        case -1147692044: /*address*/  return new Property("address", "Address", "Address where the related person can be contacted or visited.", 0, java.lang.Integer.MAX_VALUE, address);
981        case 106642994: /*photo*/  return new Property("photo", "Attachment", "Image of the person.", 0, java.lang.Integer.MAX_VALUE, photo);
982        case -991726143: /*period*/  return new Property("period", "Period", "The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown.", 0, 1, period);
983        case -1035284522: /*communication*/  return new Property("communication", "", "A language which may be used to communicate with about the patient's health.", 0, java.lang.Integer.MAX_VALUE, communication);
984        default: return super.getNamedProperty(_hash, _name, _checkValid);
985        }
986
987      }
988
989      @Override
990      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
991        switch (hash) {
992        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
993        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
994        case -791418107: /*patient*/ return this.patient == null ? new Base[0] : new Base[] {this.patient}; // Reference
995        case -261851592: /*relationship*/ return this.relationship == null ? new Base[0] : this.relationship.toArray(new Base[this.relationship.size()]); // CodeableConcept
996        case 3373707: /*name*/ return this.name == null ? new Base[0] : this.name.toArray(new Base[this.name.size()]); // HumanName
997        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
998        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // Enumeration<AdministrativeGender>
999        case -1210031859: /*birthDate*/ return this.birthDate == null ? new Base[0] : new Base[] {this.birthDate}; // DateType
1000        case -1147692044: /*address*/ return this.address == null ? new Base[0] : this.address.toArray(new Base[this.address.size()]); // Address
1001        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : this.photo.toArray(new Base[this.photo.size()]); // Attachment
1002        case -991726143: /*period*/ return this.period == null ? new Base[0] : new Base[] {this.period}; // Period
1003        case -1035284522: /*communication*/ return this.communication == null ? new Base[0] : this.communication.toArray(new Base[this.communication.size()]); // RelatedPersonCommunicationComponent
1004        default: return super.getProperty(hash, name, checkValid);
1005        }
1006
1007      }
1008
1009      @Override
1010      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1011        switch (hash) {
1012        case -1618432855: // identifier
1013          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1014          return value;
1015        case -1422950650: // active
1016          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1017          return value;
1018        case -791418107: // patient
1019          this.patient = TypeConvertor.castToReference(value); // Reference
1020          return value;
1021        case -261851592: // relationship
1022          this.getRelationship().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
1023          return value;
1024        case 3373707: // name
1025          this.getName().add(TypeConvertor.castToHumanName(value)); // HumanName
1026          return value;
1027        case -1429363305: // telecom
1028          this.getTelecom().add(TypeConvertor.castToContactPoint(value)); // ContactPoint
1029          return value;
1030        case -1249512767: // gender
1031          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1032          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1033          return value;
1034        case -1210031859: // birthDate
1035          this.birthDate = TypeConvertor.castToDate(value); // DateType
1036          return value;
1037        case -1147692044: // address
1038          this.getAddress().add(TypeConvertor.castToAddress(value)); // Address
1039          return value;
1040        case 106642994: // photo
1041          this.getPhoto().add(TypeConvertor.castToAttachment(value)); // Attachment
1042          return value;
1043        case -991726143: // period
1044          this.period = TypeConvertor.castToPeriod(value); // Period
1045          return value;
1046        case -1035284522: // communication
1047          this.getCommunication().add((RelatedPersonCommunicationComponent) value); // RelatedPersonCommunicationComponent
1048          return value;
1049        default: return super.setProperty(hash, name, value);
1050        }
1051
1052      }
1053
1054      @Override
1055      public Base setProperty(String name, Base value) throws FHIRException {
1056        if (name.equals("identifier")) {
1057          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1058        } else if (name.equals("active")) {
1059          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1060        } else if (name.equals("patient")) {
1061          this.patient = TypeConvertor.castToReference(value); // Reference
1062        } else if (name.equals("relationship")) {
1063          this.getRelationship().add(TypeConvertor.castToCodeableConcept(value));
1064        } else if (name.equals("name")) {
1065          this.getName().add(TypeConvertor.castToHumanName(value));
1066        } else if (name.equals("telecom")) {
1067          this.getTelecom().add(TypeConvertor.castToContactPoint(value));
1068        } else if (name.equals("gender")) {
1069          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1070          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1071        } else if (name.equals("birthDate")) {
1072          this.birthDate = TypeConvertor.castToDate(value); // DateType
1073        } else if (name.equals("address")) {
1074          this.getAddress().add(TypeConvertor.castToAddress(value));
1075        } else if (name.equals("photo")) {
1076          this.getPhoto().add(TypeConvertor.castToAttachment(value));
1077        } else if (name.equals("period")) {
1078          this.period = TypeConvertor.castToPeriod(value); // Period
1079        } else if (name.equals("communication")) {
1080          this.getCommunication().add((RelatedPersonCommunicationComponent) value);
1081        } else
1082          return super.setProperty(name, value);
1083        return value;
1084      }
1085
1086      @Override
1087      public Base makeProperty(int hash, String name) throws FHIRException {
1088        switch (hash) {
1089        case -1618432855:  return addIdentifier(); 
1090        case -1422950650:  return getActiveElement();
1091        case -791418107:  return getPatient();
1092        case -261851592:  return addRelationship(); 
1093        case 3373707:  return addName(); 
1094        case -1429363305:  return addTelecom(); 
1095        case -1249512767:  return getGenderElement();
1096        case -1210031859:  return getBirthDateElement();
1097        case -1147692044:  return addAddress(); 
1098        case 106642994:  return addPhoto(); 
1099        case -991726143:  return getPeriod();
1100        case -1035284522:  return addCommunication(); 
1101        default: return super.makeProperty(hash, name);
1102        }
1103
1104      }
1105
1106      @Override
1107      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1108        switch (hash) {
1109        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1110        case -1422950650: /*active*/ return new String[] {"boolean"};
1111        case -791418107: /*patient*/ return new String[] {"Reference"};
1112        case -261851592: /*relationship*/ return new String[] {"CodeableConcept"};
1113        case 3373707: /*name*/ return new String[] {"HumanName"};
1114        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
1115        case -1249512767: /*gender*/ return new String[] {"code"};
1116        case -1210031859: /*birthDate*/ return new String[] {"date"};
1117        case -1147692044: /*address*/ return new String[] {"Address"};
1118        case 106642994: /*photo*/ return new String[] {"Attachment"};
1119        case -991726143: /*period*/ return new String[] {"Period"};
1120        case -1035284522: /*communication*/ return new String[] {};
1121        default: return super.getTypesForProperty(hash, name);
1122        }
1123
1124      }
1125
1126      @Override
1127      public Base addChild(String name) throws FHIRException {
1128        if (name.equals("identifier")) {
1129          return addIdentifier();
1130        }
1131        else if (name.equals("active")) {
1132          throw new FHIRException("Cannot call addChild on a primitive type RelatedPerson.active");
1133        }
1134        else if (name.equals("patient")) {
1135          this.patient = new Reference();
1136          return this.patient;
1137        }
1138        else if (name.equals("relationship")) {
1139          return addRelationship();
1140        }
1141        else if (name.equals("name")) {
1142          return addName();
1143        }
1144        else if (name.equals("telecom")) {
1145          return addTelecom();
1146        }
1147        else if (name.equals("gender")) {
1148          throw new FHIRException("Cannot call addChild on a primitive type RelatedPerson.gender");
1149        }
1150        else if (name.equals("birthDate")) {
1151          throw new FHIRException("Cannot call addChild on a primitive type RelatedPerson.birthDate");
1152        }
1153        else if (name.equals("address")) {
1154          return addAddress();
1155        }
1156        else if (name.equals("photo")) {
1157          return addPhoto();
1158        }
1159        else if (name.equals("period")) {
1160          this.period = new Period();
1161          return this.period;
1162        }
1163        else if (name.equals("communication")) {
1164          return addCommunication();
1165        }
1166        else
1167          return super.addChild(name);
1168      }
1169
1170  public String fhirType() {
1171    return "RelatedPerson";
1172
1173  }
1174
1175      public RelatedPerson copy() {
1176        RelatedPerson dst = new RelatedPerson();
1177        copyValues(dst);
1178        return dst;
1179      }
1180
1181      public void copyValues(RelatedPerson dst) {
1182        super.copyValues(dst);
1183        if (identifier != null) {
1184          dst.identifier = new ArrayList<Identifier>();
1185          for (Identifier i : identifier)
1186            dst.identifier.add(i.copy());
1187        };
1188        dst.active = active == null ? null : active.copy();
1189        dst.patient = patient == null ? null : patient.copy();
1190        if (relationship != null) {
1191          dst.relationship = new ArrayList<CodeableConcept>();
1192          for (CodeableConcept i : relationship)
1193            dst.relationship.add(i.copy());
1194        };
1195        if (name != null) {
1196          dst.name = new ArrayList<HumanName>();
1197          for (HumanName i : name)
1198            dst.name.add(i.copy());
1199        };
1200        if (telecom != null) {
1201          dst.telecom = new ArrayList<ContactPoint>();
1202          for (ContactPoint i : telecom)
1203            dst.telecom.add(i.copy());
1204        };
1205        dst.gender = gender == null ? null : gender.copy();
1206        dst.birthDate = birthDate == null ? null : birthDate.copy();
1207        if (address != null) {
1208          dst.address = new ArrayList<Address>();
1209          for (Address i : address)
1210            dst.address.add(i.copy());
1211        };
1212        if (photo != null) {
1213          dst.photo = new ArrayList<Attachment>();
1214          for (Attachment i : photo)
1215            dst.photo.add(i.copy());
1216        };
1217        dst.period = period == null ? null : period.copy();
1218        if (communication != null) {
1219          dst.communication = new ArrayList<RelatedPersonCommunicationComponent>();
1220          for (RelatedPersonCommunicationComponent i : communication)
1221            dst.communication.add(i.copy());
1222        };
1223      }
1224
1225      protected RelatedPerson typedCopy() {
1226        return copy();
1227      }
1228
1229      @Override
1230      public boolean equalsDeep(Base other_) {
1231        if (!super.equalsDeep(other_))
1232          return false;
1233        if (!(other_ instanceof RelatedPerson))
1234          return false;
1235        RelatedPerson o = (RelatedPerson) other_;
1236        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(patient, o.patient, true)
1237           && compareDeep(relationship, o.relationship, true) && compareDeep(name, o.name, true) && compareDeep(telecom, o.telecom, true)
1238           && compareDeep(gender, o.gender, true) && compareDeep(birthDate, o.birthDate, true) && compareDeep(address, o.address, true)
1239           && compareDeep(photo, o.photo, true) && compareDeep(period, o.period, true) && compareDeep(communication, o.communication, true)
1240          ;
1241      }
1242
1243      @Override
1244      public boolean equalsShallow(Base other_) {
1245        if (!super.equalsShallow(other_))
1246          return false;
1247        if (!(other_ instanceof RelatedPerson))
1248          return false;
1249        RelatedPerson o = (RelatedPerson) other_;
1250        return compareValues(active, o.active, true) && compareValues(gender, o.gender, true) && compareValues(birthDate, o.birthDate, true)
1251          ;
1252      }
1253
1254      public boolean isEmpty() {
1255        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, patient
1256          , relationship, name, telecom, gender, birthDate, address, photo, period, communication
1257          );
1258      }
1259
1260  @Override
1261  public ResourceType getResourceType() {
1262    return ResourceType.RelatedPerson;
1263   }
1264
1265 /**
1266   * Search parameter: <b>active</b>
1267   * <p>
1268   * Description: <b>Indicates if the related person record is active</b><br>
1269   * Type: <b>token</b><br>
1270   * Path: <b>RelatedPerson.active</b><br>
1271   * </p>
1272   */
1273  @SearchParamDefinition(name="active", path="RelatedPerson.active", description="Indicates if the related person record is active", type="token" )
1274  public static final String SP_ACTIVE = "active";
1275 /**
1276   * <b>Fluent Client</b> search parameter constant for <b>active</b>
1277   * <p>
1278   * Description: <b>Indicates if the related person record is active</b><br>
1279   * Type: <b>token</b><br>
1280   * Path: <b>RelatedPerson.active</b><br>
1281   * </p>
1282   */
1283  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ACTIVE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ACTIVE);
1284
1285 /**
1286   * Search parameter: <b>identifier</b>
1287   * <p>
1288   * Description: <b>An Identifier of the RelatedPerson</b><br>
1289   * Type: <b>token</b><br>
1290   * Path: <b>RelatedPerson.identifier</b><br>
1291   * </p>
1292   */
1293  @SearchParamDefinition(name="identifier", path="RelatedPerson.identifier", description="An Identifier of the RelatedPerson", type="token" )
1294  public static final String SP_IDENTIFIER = "identifier";
1295 /**
1296   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1297   * <p>
1298   * Description: <b>An Identifier of the RelatedPerson</b><br>
1299   * Type: <b>token</b><br>
1300   * Path: <b>RelatedPerson.identifier</b><br>
1301   * </p>
1302   */
1303  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1304
1305 /**
1306   * Search parameter: <b>name</b>
1307   * <p>
1308   * Description: <b>A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text</b><br>
1309   * Type: <b>string</b><br>
1310   * Path: <b>RelatedPerson.name</b><br>
1311   * </p>
1312   */
1313  @SearchParamDefinition(name="name", path="RelatedPerson.name", description="A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text", type="string" )
1314  public static final String SP_NAME = "name";
1315 /**
1316   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1317   * <p>
1318   * Description: <b>A server defined search that may match any of the string fields in the HumanName, including family, give, prefix, suffix, suffix, and/or text</b><br>
1319   * Type: <b>string</b><br>
1320   * Path: <b>RelatedPerson.name</b><br>
1321   * </p>
1322   */
1323  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1324
1325 /**
1326   * Search parameter: <b>patient</b>
1327   * <p>
1328   * Description: <b>The patient this related person is related to</b><br>
1329   * Type: <b>reference</b><br>
1330   * Path: <b>RelatedPerson.patient</b><br>
1331   * </p>
1332   */
1333  @SearchParamDefinition(name="patient", path="RelatedPerson.patient", description="The patient this related person is related to", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Patient.class } )
1334  public static final String SP_PATIENT = "patient";
1335 /**
1336   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
1337   * <p>
1338   * Description: <b>The patient this related person is related to</b><br>
1339   * Type: <b>reference</b><br>
1340   * Path: <b>RelatedPerson.patient</b><br>
1341   * </p>
1342   */
1343  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
1344
1345/**
1346   * Constant for fluent queries to be used to add include statements. Specifies
1347   * the path value of "<b>RelatedPerson:patient</b>".
1348   */
1349  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("RelatedPerson:patient").toLocked();
1350
1351 /**
1352   * Search parameter: <b>relationship</b>
1353   * <p>
1354   * Description: <b>The relationship between the patient and the relatedperson</b><br>
1355   * Type: <b>token</b><br>
1356   * Path: <b>RelatedPerson.relationship</b><br>
1357   * </p>
1358   */
1359  @SearchParamDefinition(name="relationship", path="RelatedPerson.relationship", description="The relationship between the patient and the relatedperson", type="token" )
1360  public static final String SP_RELATIONSHIP = "relationship";
1361 /**
1362   * <b>Fluent Client</b> search parameter constant for <b>relationship</b>
1363   * <p>
1364   * Description: <b>The relationship between the patient and the relatedperson</b><br>
1365   * Type: <b>token</b><br>
1366   * Path: <b>RelatedPerson.relationship</b><br>
1367   * </p>
1368   */
1369  public static final ca.uhn.fhir.rest.gclient.TokenClientParam RELATIONSHIP = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_RELATIONSHIP);
1370
1371 /**
1372   * Search parameter: <b>address-city</b>
1373   * <p>
1374   * Description: <b>Multiple Resources: 
1375
1376* [Patient](patient.html): A city specified in an address
1377* [Person](person.html): A city specified in an address
1378* [Practitioner](practitioner.html): A city specified in an address
1379* [RelatedPerson](relatedperson.html): A city specified in an address
1380</b><br>
1381   * Type: <b>string</b><br>
1382   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1383   * </p>
1384   */
1385  @SearchParamDefinition(name="address-city", path="Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A city specified in an address\r\n* [Person](person.html): A city specified in an address\r\n* [Practitioner](practitioner.html): A city specified in an address\r\n* [RelatedPerson](relatedperson.html): A city specified in an address\r\n", type="string" )
1386  public static final String SP_ADDRESS_CITY = "address-city";
1387 /**
1388   * <b>Fluent Client</b> search parameter constant for <b>address-city</b>
1389   * <p>
1390   * Description: <b>Multiple Resources: 
1391
1392* [Patient](patient.html): A city specified in an address
1393* [Person](person.html): A city specified in an address
1394* [Practitioner](practitioner.html): A city specified in an address
1395* [RelatedPerson](relatedperson.html): A city specified in an address
1396</b><br>
1397   * Type: <b>string</b><br>
1398   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1399   * </p>
1400   */
1401  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_CITY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_CITY);
1402
1403 /**
1404   * Search parameter: <b>address-country</b>
1405   * <p>
1406   * Description: <b>Multiple Resources: 
1407
1408* [Patient](patient.html): A country specified in an address
1409* [Person](person.html): A country specified in an address
1410* [Practitioner](practitioner.html): A country specified in an address
1411* [RelatedPerson](relatedperson.html): A country specified in an address
1412</b><br>
1413   * Type: <b>string</b><br>
1414   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
1415   * </p>
1416   */
1417  @SearchParamDefinition(name="address-country", path="Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A country specified in an address\r\n* [Person](person.html): A country specified in an address\r\n* [Practitioner](practitioner.html): A country specified in an address\r\n* [RelatedPerson](relatedperson.html): A country specified in an address\r\n", type="string" )
1418  public static final String SP_ADDRESS_COUNTRY = "address-country";
1419 /**
1420   * <b>Fluent Client</b> search parameter constant for <b>address-country</b>
1421   * <p>
1422   * Description: <b>Multiple Resources: 
1423
1424* [Patient](patient.html): A country specified in an address
1425* [Person](person.html): A country specified in an address
1426* [Practitioner](practitioner.html): A country specified in an address
1427* [RelatedPerson](relatedperson.html): A country specified in an address
1428</b><br>
1429   * Type: <b>string</b><br>
1430   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
1431   * </p>
1432   */
1433  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_COUNTRY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_COUNTRY);
1434
1435 /**
1436   * Search parameter: <b>address-postalcode</b>
1437   * <p>
1438   * Description: <b>Multiple Resources: 
1439
1440* [Patient](patient.html): A postalCode specified in an address
1441* [Person](person.html): A postal code specified in an address
1442* [Practitioner](practitioner.html): A postalCode specified in an address
1443* [RelatedPerson](relatedperson.html): A postal code specified in an address
1444</b><br>
1445   * Type: <b>string</b><br>
1446   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
1447   * </p>
1448   */
1449  @SearchParamDefinition(name="address-postalcode", path="Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A postalCode specified in an address\r\n* [Person](person.html): A postal code specified in an address\r\n* [Practitioner](practitioner.html): A postalCode specified in an address\r\n* [RelatedPerson](relatedperson.html): A postal code specified in an address\r\n", type="string" )
1450  public static final String SP_ADDRESS_POSTALCODE = "address-postalcode";
1451 /**
1452   * <b>Fluent Client</b> search parameter constant for <b>address-postalcode</b>
1453   * <p>
1454   * Description: <b>Multiple Resources: 
1455
1456* [Patient](patient.html): A postalCode specified in an address
1457* [Person](person.html): A postal code specified in an address
1458* [Practitioner](practitioner.html): A postalCode specified in an address
1459* [RelatedPerson](relatedperson.html): A postal code specified in an address
1460</b><br>
1461   * Type: <b>string</b><br>
1462   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
1463   * </p>
1464   */
1465  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_POSTALCODE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_POSTALCODE);
1466
1467 /**
1468   * Search parameter: <b>address-state</b>
1469   * <p>
1470   * Description: <b>Multiple Resources: 
1471
1472* [Patient](patient.html): A state specified in an address
1473* [Person](person.html): A state specified in an address
1474* [Practitioner](practitioner.html): A state specified in an address
1475* [RelatedPerson](relatedperson.html): A state specified in an address
1476</b><br>
1477   * Type: <b>string</b><br>
1478   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
1479   * </p>
1480   */
1481  @SearchParamDefinition(name="address-state", path="Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A state specified in an address\r\n* [Person](person.html): A state specified in an address\r\n* [Practitioner](practitioner.html): A state specified in an address\r\n* [RelatedPerson](relatedperson.html): A state specified in an address\r\n", type="string" )
1482  public static final String SP_ADDRESS_STATE = "address-state";
1483 /**
1484   * <b>Fluent Client</b> search parameter constant for <b>address-state</b>
1485   * <p>
1486   * Description: <b>Multiple Resources: 
1487
1488* [Patient](patient.html): A state specified in an address
1489* [Person](person.html): A state specified in an address
1490* [Practitioner](practitioner.html): A state specified in an address
1491* [RelatedPerson](relatedperson.html): A state specified in an address
1492</b><br>
1493   * Type: <b>string</b><br>
1494   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
1495   * </p>
1496   */
1497  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_STATE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_STATE);
1498
1499 /**
1500   * Search parameter: <b>address-use</b>
1501   * <p>
1502   * Description: <b>Multiple Resources: 
1503
1504* [Patient](patient.html): A use code specified in an address
1505* [Person](person.html): A use code specified in an address
1506* [Practitioner](practitioner.html): A use code specified in an address
1507* [RelatedPerson](relatedperson.html): A use code specified in an address
1508</b><br>
1509   * Type: <b>token</b><br>
1510   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
1511   * </p>
1512   */
1513  @SearchParamDefinition(name="address-use", path="Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A use code specified in an address\r\n* [Person](person.html): A use code specified in an address\r\n* [Practitioner](practitioner.html): A use code specified in an address\r\n* [RelatedPerson](relatedperson.html): A use code specified in an address\r\n", type="token" )
1514  public static final String SP_ADDRESS_USE = "address-use";
1515 /**
1516   * <b>Fluent Client</b> search parameter constant for <b>address-use</b>
1517   * <p>
1518   * Description: <b>Multiple Resources: 
1519
1520* [Patient](patient.html): A use code specified in an address
1521* [Person](person.html): A use code specified in an address
1522* [Practitioner](practitioner.html): A use code specified in an address
1523* [RelatedPerson](relatedperson.html): A use code specified in an address
1524</b><br>
1525   * Type: <b>token</b><br>
1526   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
1527   * </p>
1528   */
1529  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDRESS_USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDRESS_USE);
1530
1531 /**
1532   * Search parameter: <b>address</b>
1533   * <p>
1534   * Description: <b>Multiple Resources: 
1535
1536* [Patient](patient.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1537* [Person](person.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1538* [Practitioner](practitioner.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1539* [RelatedPerson](relatedperson.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1540</b><br>
1541   * Type: <b>string</b><br>
1542   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
1543   * </p>
1544   */
1545  @SearchParamDefinition(name="address", path="Patient.address | Person.address | Practitioner.address | RelatedPerson.address", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n* [Person](person.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n* [Practitioner](practitioner.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n* [RelatedPerson](relatedperson.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text\r\n", type="string" )
1546  public static final String SP_ADDRESS = "address";
1547 /**
1548   * <b>Fluent Client</b> search parameter constant for <b>address</b>
1549   * <p>
1550   * Description: <b>Multiple Resources: 
1551
1552* [Patient](patient.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1553* [Person](person.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1554* [Practitioner](practitioner.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1555* [RelatedPerson](relatedperson.html): A server defined search that may match any of the string fields in the Address, including line, city, district, state, country, postalCode, and/or text
1556</b><br>
1557   * Type: <b>string</b><br>
1558   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
1559   * </p>
1560   */
1561  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS);
1562
1563 /**
1564   * Search parameter: <b>birthdate</b>
1565   * <p>
1566   * Description: <b>Multiple Resources: 
1567
1568* [Patient](patient.html): The patient's date of birth
1569* [Person](person.html): The person's date of birth
1570* [RelatedPerson](relatedperson.html): The Related Person's date of birth
1571</b><br>
1572   * Type: <b>date</b><br>
1573   * Path: <b>Patient.birthDate | Person.birthDate | RelatedPerson.birthDate</b><br>
1574   * </p>
1575   */
1576  @SearchParamDefinition(name="birthdate", path="Patient.birthDate | Person.birthDate | RelatedPerson.birthDate", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): The patient's date of birth\r\n* [Person](person.html): The person's date of birth\r\n* [RelatedPerson](relatedperson.html): The Related Person's date of birth\r\n", type="date" )
1577  public static final String SP_BIRTHDATE = "birthdate";
1578 /**
1579   * <b>Fluent Client</b> search parameter constant for <b>birthdate</b>
1580   * <p>
1581   * Description: <b>Multiple Resources: 
1582
1583* [Patient](patient.html): The patient's date of birth
1584* [Person](person.html): The person's date of birth
1585* [RelatedPerson](relatedperson.html): The Related Person's date of birth
1586</b><br>
1587   * Type: <b>date</b><br>
1588   * Path: <b>Patient.birthDate | Person.birthDate | RelatedPerson.birthDate</b><br>
1589   * </p>
1590   */
1591  public static final ca.uhn.fhir.rest.gclient.DateClientParam BIRTHDATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_BIRTHDATE);
1592
1593 /**
1594   * Search parameter: <b>email</b>
1595   * <p>
1596   * Description: <b>Multiple Resources: 
1597
1598* [Patient](patient.html): A value in an email contact
1599* [Person](person.html): A value in an email contact
1600* [Practitioner](practitioner.html): A value in an email contact
1601* [PractitionerRole](practitionerrole.html): A value in an email contact
1602* [RelatedPerson](relatedperson.html): A value in an email contact
1603</b><br>
1604   * Type: <b>token</b><br>
1605   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1606   * </p>
1607   */
1608  @SearchParamDefinition(name="email", path="Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A value in an email contact\r\n* [Person](person.html): A value in an email contact\r\n* [Practitioner](practitioner.html): A value in an email contact\r\n* [PractitionerRole](practitionerrole.html): A value in an email contact\r\n* [RelatedPerson](relatedperson.html): A value in an email contact\r\n", type="token" )
1609  public static final String SP_EMAIL = "email";
1610 /**
1611   * <b>Fluent Client</b> search parameter constant for <b>email</b>
1612   * <p>
1613   * Description: <b>Multiple Resources: 
1614
1615* [Patient](patient.html): A value in an email contact
1616* [Person](person.html): A value in an email contact
1617* [Practitioner](practitioner.html): A value in an email contact
1618* [PractitionerRole](practitionerrole.html): A value in an email contact
1619* [RelatedPerson](relatedperson.html): A value in an email contact
1620</b><br>
1621   * Type: <b>token</b><br>
1622   * Path: <b>Patient.telecom.where(system='email') | Person.telecom.where(system='email') | Practitioner.telecom.where(system='email') | PractitionerRole.telecom.where(system='email') | RelatedPerson.telecom.where(system='email')</b><br>
1623   * </p>
1624   */
1625  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
1626
1627 /**
1628   * Search parameter: <b>gender</b>
1629   * <p>
1630   * Description: <b>Multiple Resources: 
1631
1632* [Patient](patient.html): Gender of the patient
1633* [Person](person.html): The gender of the person
1634* [Practitioner](practitioner.html): Gender of the practitioner
1635* [RelatedPerson](relatedperson.html): Gender of the related person
1636</b><br>
1637   * Type: <b>token</b><br>
1638   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
1639   * </p>
1640   */
1641  @SearchParamDefinition(name="gender", path="Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): Gender of the patient\r\n* [Person](person.html): The gender of the person\r\n* [Practitioner](practitioner.html): Gender of the practitioner\r\n* [RelatedPerson](relatedperson.html): Gender of the related person\r\n", type="token" )
1642  public static final String SP_GENDER = "gender";
1643 /**
1644   * <b>Fluent Client</b> search parameter constant for <b>gender</b>
1645   * <p>
1646   * Description: <b>Multiple Resources: 
1647
1648* [Patient](patient.html): Gender of the patient
1649* [Person](person.html): The gender of the person
1650* [Practitioner](practitioner.html): Gender of the practitioner
1651* [RelatedPerson](relatedperson.html): Gender of the related person
1652</b><br>
1653   * Type: <b>token</b><br>
1654   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
1655   * </p>
1656   */
1657  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GENDER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GENDER);
1658
1659 /**
1660   * Search parameter: <b>phone</b>
1661   * <p>
1662   * Description: <b>Multiple Resources: 
1663
1664* [Patient](patient.html): A value in a phone contact
1665* [Person](person.html): A value in a phone contact
1666* [Practitioner](practitioner.html): A value in a phone contact
1667* [PractitionerRole](practitionerrole.html): A value in a phone contact
1668* [RelatedPerson](relatedperson.html): A value in a phone contact
1669</b><br>
1670   * Type: <b>token</b><br>
1671   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1672   * </p>
1673   */
1674  @SearchParamDefinition(name="phone", path="Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A value in a phone contact\r\n* [Person](person.html): A value in a phone contact\r\n* [Practitioner](practitioner.html): A value in a phone contact\r\n* [PractitionerRole](practitionerrole.html): A value in a phone contact\r\n* [RelatedPerson](relatedperson.html): A value in a phone contact\r\n", type="token" )
1675  public static final String SP_PHONE = "phone";
1676 /**
1677   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
1678   * <p>
1679   * Description: <b>Multiple Resources: 
1680
1681* [Patient](patient.html): A value in a phone contact
1682* [Person](person.html): A value in a phone contact
1683* [Practitioner](practitioner.html): A value in a phone contact
1684* [PractitionerRole](practitionerrole.html): A value in a phone contact
1685* [RelatedPerson](relatedperson.html): A value in a phone contact
1686</b><br>
1687   * Type: <b>token</b><br>
1688   * Path: <b>Patient.telecom.where(system='phone') | Person.telecom.where(system='phone') | Practitioner.telecom.where(system='phone') | PractitionerRole.telecom.where(system='phone') | RelatedPerson.telecom.where(system='phone')</b><br>
1689   * </p>
1690   */
1691  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
1692
1693 /**
1694   * Search parameter: <b>phonetic</b>
1695   * <p>
1696   * Description: <b>Multiple Resources: 
1697
1698* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
1699* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
1700* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
1701* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
1702</b><br>
1703   * Type: <b>string</b><br>
1704   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
1705   * </p>
1706   */
1707  @SearchParamDefinition(name="phonetic", path="Patient.name | Person.name | Practitioner.name | RelatedPerson.name", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm\r\n* [Person](person.html): A portion of name using some kind of phonetic matching algorithm\r\n* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm\r\n* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm\r\n", type="string" )
1708  public static final String SP_PHONETIC = "phonetic";
1709 /**
1710   * <b>Fluent Client</b> search parameter constant for <b>phonetic</b>
1711   * <p>
1712   * Description: <b>Multiple Resources: 
1713
1714* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
1715* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
1716* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
1717* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
1718</b><br>
1719   * Type: <b>string</b><br>
1720   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
1721   * </p>
1722   */
1723  public static final ca.uhn.fhir.rest.gclient.StringClientParam PHONETIC = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PHONETIC);
1724
1725 /**
1726   * Search parameter: <b>telecom</b>
1727   * <p>
1728   * Description: <b>Multiple Resources: 
1729
1730* [Patient](patient.html): The value in any kind of telecom details of the patient
1731* [Person](person.html): The value in any kind of contact
1732* [Practitioner](practitioner.html): The value in any kind of contact
1733* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1734* [RelatedPerson](relatedperson.html): The value in any kind of contact
1735</b><br>
1736   * Type: <b>token</b><br>
1737   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom</b><br>
1738   * </p>
1739   */
1740  @SearchParamDefinition(name="telecom", path="Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom", description="Multiple Resources: \r\n\r\n* [Patient](patient.html): The value in any kind of telecom details of the patient\r\n* [Person](person.html): The value in any kind of contact\r\n* [Practitioner](practitioner.html): The value in any kind of contact\r\n* [PractitionerRole](practitionerrole.html): The value in any kind of contact\r\n* [RelatedPerson](relatedperson.html): The value in any kind of contact\r\n", type="token" )
1741  public static final String SP_TELECOM = "telecom";
1742 /**
1743   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
1744   * <p>
1745   * Description: <b>Multiple Resources: 
1746
1747* [Patient](patient.html): The value in any kind of telecom details of the patient
1748* [Person](person.html): The value in any kind of contact
1749* [Practitioner](practitioner.html): The value in any kind of contact
1750* [PractitionerRole](practitionerrole.html): The value in any kind of contact
1751* [RelatedPerson](relatedperson.html): The value in any kind of contact
1752</b><br>
1753   * Type: <b>token</b><br>
1754   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom</b><br>
1755   * </p>
1756   */
1757  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
1758
1759
1760}