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 Tue, Dec 28, 2021 07:16+1100 for FHIR v5.0.0-snapshot1
033
034import java.util.ArrayList;
035import java.util.Date;
036import java.util.List;
037import org.hl7.fhir.utilities.Utilities;
038import org.hl7.fhir.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 * Demographics and administrative information about a person independent of a specific health-related context.
052 */
053@ResourceDef(name="Person", profile="http://hl7.org/fhir/StructureDefinition/Person")
054public class Person extends DomainResource {
055
056    public enum IdentityAssuranceLevel {
057        /**
058         * Little or no confidence in the asserted identity's accuracy.
059         */
060        LEVEL1, 
061        /**
062         * Some confidence in the asserted identity's accuracy.
063         */
064        LEVEL2, 
065        /**
066         * High confidence in the asserted identity's accuracy.
067         */
068        LEVEL3, 
069        /**
070         * Very high confidence in the asserted identity's accuracy.
071         */
072        LEVEL4, 
073        /**
074         * added to help the parsers with the generic types
075         */
076        NULL;
077        public static IdentityAssuranceLevel fromCode(String codeString) throws FHIRException {
078            if (codeString == null || "".equals(codeString))
079                return null;
080        if ("level1".equals(codeString))
081          return LEVEL1;
082        if ("level2".equals(codeString))
083          return LEVEL2;
084        if ("level3".equals(codeString))
085          return LEVEL3;
086        if ("level4".equals(codeString))
087          return LEVEL4;
088        if (Configuration.isAcceptInvalidEnums())
089          return null;
090        else
091          throw new FHIRException("Unknown IdentityAssuranceLevel code '"+codeString+"'");
092        }
093        public String toCode() {
094          switch (this) {
095            case LEVEL1: return "level1";
096            case LEVEL2: return "level2";
097            case LEVEL3: return "level3";
098            case LEVEL4: return "level4";
099            default: return "?";
100          }
101        }
102        public String getSystem() {
103          switch (this) {
104            case LEVEL1: return "http://hl7.org/fhir/identity-assuranceLevel";
105            case LEVEL2: return "http://hl7.org/fhir/identity-assuranceLevel";
106            case LEVEL3: return "http://hl7.org/fhir/identity-assuranceLevel";
107            case LEVEL4: return "http://hl7.org/fhir/identity-assuranceLevel";
108            default: return "?";
109          }
110        }
111        public String getDefinition() {
112          switch (this) {
113            case LEVEL1: return "Little or no confidence in the asserted identity's accuracy.";
114            case LEVEL2: return "Some confidence in the asserted identity's accuracy.";
115            case LEVEL3: return "High confidence in the asserted identity's accuracy.";
116            case LEVEL4: return "Very high confidence in the asserted identity's accuracy.";
117            default: return "?";
118          }
119        }
120        public String getDisplay() {
121          switch (this) {
122            case LEVEL1: return "Level 1";
123            case LEVEL2: return "Level 2";
124            case LEVEL3: return "Level 3";
125            case LEVEL4: return "Level 4";
126            default: return "?";
127          }
128        }
129    }
130
131  public static class IdentityAssuranceLevelEnumFactory implements EnumFactory<IdentityAssuranceLevel> {
132    public IdentityAssuranceLevel fromCode(String codeString) throws IllegalArgumentException {
133      if (codeString == null || "".equals(codeString))
134            if (codeString == null || "".equals(codeString))
135                return null;
136        if ("level1".equals(codeString))
137          return IdentityAssuranceLevel.LEVEL1;
138        if ("level2".equals(codeString))
139          return IdentityAssuranceLevel.LEVEL2;
140        if ("level3".equals(codeString))
141          return IdentityAssuranceLevel.LEVEL3;
142        if ("level4".equals(codeString))
143          return IdentityAssuranceLevel.LEVEL4;
144        throw new IllegalArgumentException("Unknown IdentityAssuranceLevel code '"+codeString+"'");
145        }
146        public Enumeration<IdentityAssuranceLevel> fromType(Base code) throws FHIRException {
147          if (code == null)
148            return null;
149          if (code.isEmpty())
150            return new Enumeration<IdentityAssuranceLevel>(this);
151          String codeString = ((PrimitiveType) code).asStringValue();
152          if (codeString == null || "".equals(codeString))
153            return null;
154        if ("level1".equals(codeString))
155          return new Enumeration<IdentityAssuranceLevel>(this, IdentityAssuranceLevel.LEVEL1);
156        if ("level2".equals(codeString))
157          return new Enumeration<IdentityAssuranceLevel>(this, IdentityAssuranceLevel.LEVEL2);
158        if ("level3".equals(codeString))
159          return new Enumeration<IdentityAssuranceLevel>(this, IdentityAssuranceLevel.LEVEL3);
160        if ("level4".equals(codeString))
161          return new Enumeration<IdentityAssuranceLevel>(this, IdentityAssuranceLevel.LEVEL4);
162        throw new FHIRException("Unknown IdentityAssuranceLevel code '"+codeString+"'");
163        }
164    public String toCode(IdentityAssuranceLevel code) {
165      if (code == IdentityAssuranceLevel.LEVEL1)
166        return "level1";
167      if (code == IdentityAssuranceLevel.LEVEL2)
168        return "level2";
169      if (code == IdentityAssuranceLevel.LEVEL3)
170        return "level3";
171      if (code == IdentityAssuranceLevel.LEVEL4)
172        return "level4";
173      return "?";
174      }
175    public String toSystem(IdentityAssuranceLevel code) {
176      return code.getSystem();
177      }
178    }
179
180    @Block()
181    public static class PersonCommunicationComponent extends BackboneElement implements IBaseBackboneElement {
182        /**
183         * 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.
184         */
185        @Child(name = "language", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=false, summary=false)
186        @Description(shortDefinition="The language which can be used to communicate with the person 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." )
187        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/languages")
188        protected CodeableConcept language;
189
190        /**
191         * Indicates whether or not the person prefers this language (over other languages he masters up a certain level).
192         */
193        @Child(name = "preferred", type = {BooleanType.class}, order=2, min=0, max=1, modifier=false, summary=false)
194        @Description(shortDefinition="Language preference indicator", formalDefinition="Indicates whether or not the person prefers this language (over other languages he masters up a certain level)." )
195        protected BooleanType preferred;
196
197        private static final long serialVersionUID = 633792918L;
198
199    /**
200     * Constructor
201     */
202      public PersonCommunicationComponent() {
203        super();
204      }
205
206    /**
207     * Constructor
208     */
209      public PersonCommunicationComponent(CodeableConcept language) {
210        super();
211        this.setLanguage(language);
212      }
213
214        /**
215         * @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.)
216         */
217        public CodeableConcept getLanguage() { 
218          if (this.language == null)
219            if (Configuration.errorOnAutoCreate())
220              throw new Error("Attempt to auto-create PersonCommunicationComponent.language");
221            else if (Configuration.doAutoCreate())
222              this.language = new CodeableConcept(); // cc
223          return this.language;
224        }
225
226        public boolean hasLanguage() { 
227          return this.language != null && !this.language.isEmpty();
228        }
229
230        /**
231         * @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.)
232         */
233        public PersonCommunicationComponent setLanguage(CodeableConcept value) { 
234          this.language = value;
235          return this;
236        }
237
238        /**
239         * @return {@link #preferred} (Indicates whether or not the person 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
240         */
241        public BooleanType getPreferredElement() { 
242          if (this.preferred == null)
243            if (Configuration.errorOnAutoCreate())
244              throw new Error("Attempt to auto-create PersonCommunicationComponent.preferred");
245            else if (Configuration.doAutoCreate())
246              this.preferred = new BooleanType(); // bb
247          return this.preferred;
248        }
249
250        public boolean hasPreferredElement() { 
251          return this.preferred != null && !this.preferred.isEmpty();
252        }
253
254        public boolean hasPreferred() { 
255          return this.preferred != null && !this.preferred.isEmpty();
256        }
257
258        /**
259         * @param value {@link #preferred} (Indicates whether or not the person 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
260         */
261        public PersonCommunicationComponent setPreferredElement(BooleanType value) { 
262          this.preferred = value;
263          return this;
264        }
265
266        /**
267         * @return Indicates whether or not the person prefers this language (over other languages he masters up a certain level).
268         */
269        public boolean getPreferred() { 
270          return this.preferred == null || this.preferred.isEmpty() ? false : this.preferred.getValue();
271        }
272
273        /**
274         * @param value Indicates whether or not the person prefers this language (over other languages he masters up a certain level).
275         */
276        public PersonCommunicationComponent setPreferred(boolean value) { 
277            if (this.preferred == null)
278              this.preferred = new BooleanType();
279            this.preferred.setValue(value);
280          return this;
281        }
282
283        protected void listChildren(List<Property> children) {
284          super.listChildren(children);
285          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));
286          children.add(new Property("preferred", "boolean", "Indicates whether or not the person prefers this language (over other languages he masters up a certain level).", 0, 1, preferred));
287        }
288
289        @Override
290        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
291          switch (_hash) {
292          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);
293          case -1294005119: /*preferred*/  return new Property("preferred", "boolean", "Indicates whether or not the person prefers this language (over other languages he masters up a certain level).", 0, 1, preferred);
294          default: return super.getNamedProperty(_hash, _name, _checkValid);
295          }
296
297        }
298
299      @Override
300      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
301        switch (hash) {
302        case -1613589672: /*language*/ return this.language == null ? new Base[0] : new Base[] {this.language}; // CodeableConcept
303        case -1294005119: /*preferred*/ return this.preferred == null ? new Base[0] : new Base[] {this.preferred}; // BooleanType
304        default: return super.getProperty(hash, name, checkValid);
305        }
306
307      }
308
309      @Override
310      public Base setProperty(int hash, String name, Base value) throws FHIRException {
311        switch (hash) {
312        case -1613589672: // language
313          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
314          return value;
315        case -1294005119: // preferred
316          this.preferred = TypeConvertor.castToBoolean(value); // BooleanType
317          return value;
318        default: return super.setProperty(hash, name, value);
319        }
320
321      }
322
323      @Override
324      public Base setProperty(String name, Base value) throws FHIRException {
325        if (name.equals("language")) {
326          this.language = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
327        } else if (name.equals("preferred")) {
328          this.preferred = TypeConvertor.castToBoolean(value); // BooleanType
329        } else
330          return super.setProperty(name, value);
331        return value;
332      }
333
334      @Override
335      public Base makeProperty(int hash, String name) throws FHIRException {
336        switch (hash) {
337        case -1613589672:  return getLanguage();
338        case -1294005119:  return getPreferredElement();
339        default: return super.makeProperty(hash, name);
340        }
341
342      }
343
344      @Override
345      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
346        switch (hash) {
347        case -1613589672: /*language*/ return new String[] {"CodeableConcept"};
348        case -1294005119: /*preferred*/ return new String[] {"boolean"};
349        default: return super.getTypesForProperty(hash, name);
350        }
351
352      }
353
354      @Override
355      public Base addChild(String name) throws FHIRException {
356        if (name.equals("language")) {
357          this.language = new CodeableConcept();
358          return this.language;
359        }
360        else if (name.equals("preferred")) {
361          throw new FHIRException("Cannot call addChild on a primitive type Person.communication.preferred");
362        }
363        else
364          return super.addChild(name);
365      }
366
367      public PersonCommunicationComponent copy() {
368        PersonCommunicationComponent dst = new PersonCommunicationComponent();
369        copyValues(dst);
370        return dst;
371      }
372
373      public void copyValues(PersonCommunicationComponent dst) {
374        super.copyValues(dst);
375        dst.language = language == null ? null : language.copy();
376        dst.preferred = preferred == null ? null : preferred.copy();
377      }
378
379      @Override
380      public boolean equalsDeep(Base other_) {
381        if (!super.equalsDeep(other_))
382          return false;
383        if (!(other_ instanceof PersonCommunicationComponent))
384          return false;
385        PersonCommunicationComponent o = (PersonCommunicationComponent) other_;
386        return compareDeep(language, o.language, true) && compareDeep(preferred, o.preferred, true);
387      }
388
389      @Override
390      public boolean equalsShallow(Base other_) {
391        if (!super.equalsShallow(other_))
392          return false;
393        if (!(other_ instanceof PersonCommunicationComponent))
394          return false;
395        PersonCommunicationComponent o = (PersonCommunicationComponent) other_;
396        return compareValues(preferred, o.preferred, true);
397      }
398
399      public boolean isEmpty() {
400        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(language, preferred);
401      }
402
403  public String fhirType() {
404    return "Person.communication";
405
406  }
407
408  }
409
410    @Block()
411    public static class PersonLinkComponent extends BackboneElement implements IBaseBackboneElement {
412        /**
413         * The resource to which this actual person is associated.
414         */
415        @Child(name = "target", type = {Patient.class, Practitioner.class, RelatedPerson.class, Person.class}, order=1, min=1, max=1, modifier=false, summary=false)
416        @Description(shortDefinition="The resource to which this actual person is associated", formalDefinition="The resource to which this actual person is associated." )
417        protected Reference target;
418
419        /**
420         * Level of assurance that this link is associated with the target resource.
421         */
422        @Child(name = "assurance", type = {CodeType.class}, order=2, min=0, max=1, modifier=false, summary=false)
423        @Description(shortDefinition="level1 | level2 | level3 | level4", formalDefinition="Level of assurance that this link is associated with the target resource." )
424        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/identity-assuranceLevel")
425        protected Enumeration<IdentityAssuranceLevel> assurance;
426
427        private static final long serialVersionUID = -1393523223L;
428
429    /**
430     * Constructor
431     */
432      public PersonLinkComponent() {
433        super();
434      }
435
436    /**
437     * Constructor
438     */
439      public PersonLinkComponent(Reference target) {
440        super();
441        this.setTarget(target);
442      }
443
444        /**
445         * @return {@link #target} (The resource to which this actual person is associated.)
446         */
447        public Reference getTarget() { 
448          if (this.target == null)
449            if (Configuration.errorOnAutoCreate())
450              throw new Error("Attempt to auto-create PersonLinkComponent.target");
451            else if (Configuration.doAutoCreate())
452              this.target = new Reference(); // cc
453          return this.target;
454        }
455
456        public boolean hasTarget() { 
457          return this.target != null && !this.target.isEmpty();
458        }
459
460        /**
461         * @param value {@link #target} (The resource to which this actual person is associated.)
462         */
463        public PersonLinkComponent setTarget(Reference value) { 
464          this.target = value;
465          return this;
466        }
467
468        /**
469         * @return {@link #assurance} (Level of assurance that this link is associated with the target resource.). This is the underlying object with id, value and extensions. The accessor "getAssurance" gives direct access to the value
470         */
471        public Enumeration<IdentityAssuranceLevel> getAssuranceElement() { 
472          if (this.assurance == null)
473            if (Configuration.errorOnAutoCreate())
474              throw new Error("Attempt to auto-create PersonLinkComponent.assurance");
475            else if (Configuration.doAutoCreate())
476              this.assurance = new Enumeration<IdentityAssuranceLevel>(new IdentityAssuranceLevelEnumFactory()); // bb
477          return this.assurance;
478        }
479
480        public boolean hasAssuranceElement() { 
481          return this.assurance != null && !this.assurance.isEmpty();
482        }
483
484        public boolean hasAssurance() { 
485          return this.assurance != null && !this.assurance.isEmpty();
486        }
487
488        /**
489         * @param value {@link #assurance} (Level of assurance that this link is associated with the target resource.). This is the underlying object with id, value and extensions. The accessor "getAssurance" gives direct access to the value
490         */
491        public PersonLinkComponent setAssuranceElement(Enumeration<IdentityAssuranceLevel> value) { 
492          this.assurance = value;
493          return this;
494        }
495
496        /**
497         * @return Level of assurance that this link is associated with the target resource.
498         */
499        public IdentityAssuranceLevel getAssurance() { 
500          return this.assurance == null ? null : this.assurance.getValue();
501        }
502
503        /**
504         * @param value Level of assurance that this link is associated with the target resource.
505         */
506        public PersonLinkComponent setAssurance(IdentityAssuranceLevel value) { 
507          if (value == null)
508            this.assurance = null;
509          else {
510            if (this.assurance == null)
511              this.assurance = new Enumeration<IdentityAssuranceLevel>(new IdentityAssuranceLevelEnumFactory());
512            this.assurance.setValue(value);
513          }
514          return this;
515        }
516
517        protected void listChildren(List<Property> children) {
518          super.listChildren(children);
519          children.add(new Property("target", "Reference(Patient|Practitioner|RelatedPerson|Person)", "The resource to which this actual person is associated.", 0, 1, target));
520          children.add(new Property("assurance", "code", "Level of assurance that this link is associated with the target resource.", 0, 1, assurance));
521        }
522
523        @Override
524        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
525          switch (_hash) {
526          case -880905839: /*target*/  return new Property("target", "Reference(Patient|Practitioner|RelatedPerson|Person)", "The resource to which this actual person is associated.", 0, 1, target);
527          case 1771900717: /*assurance*/  return new Property("assurance", "code", "Level of assurance that this link is associated with the target resource.", 0, 1, assurance);
528          default: return super.getNamedProperty(_hash, _name, _checkValid);
529          }
530
531        }
532
533      @Override
534      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
535        switch (hash) {
536        case -880905839: /*target*/ return this.target == null ? new Base[0] : new Base[] {this.target}; // Reference
537        case 1771900717: /*assurance*/ return this.assurance == null ? new Base[0] : new Base[] {this.assurance}; // Enumeration<IdentityAssuranceLevel>
538        default: return super.getProperty(hash, name, checkValid);
539        }
540
541      }
542
543      @Override
544      public Base setProperty(int hash, String name, Base value) throws FHIRException {
545        switch (hash) {
546        case -880905839: // target
547          this.target = TypeConvertor.castToReference(value); // Reference
548          return value;
549        case 1771900717: // assurance
550          value = new IdentityAssuranceLevelEnumFactory().fromType(TypeConvertor.castToCode(value));
551          this.assurance = (Enumeration) value; // Enumeration<IdentityAssuranceLevel>
552          return value;
553        default: return super.setProperty(hash, name, value);
554        }
555
556      }
557
558      @Override
559      public Base setProperty(String name, Base value) throws FHIRException {
560        if (name.equals("target")) {
561          this.target = TypeConvertor.castToReference(value); // Reference
562        } else if (name.equals("assurance")) {
563          value = new IdentityAssuranceLevelEnumFactory().fromType(TypeConvertor.castToCode(value));
564          this.assurance = (Enumeration) value; // Enumeration<IdentityAssuranceLevel>
565        } else
566          return super.setProperty(name, value);
567        return value;
568      }
569
570      @Override
571      public Base makeProperty(int hash, String name) throws FHIRException {
572        switch (hash) {
573        case -880905839:  return getTarget();
574        case 1771900717:  return getAssuranceElement();
575        default: return super.makeProperty(hash, name);
576        }
577
578      }
579
580      @Override
581      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
582        switch (hash) {
583        case -880905839: /*target*/ return new String[] {"Reference"};
584        case 1771900717: /*assurance*/ return new String[] {"code"};
585        default: return super.getTypesForProperty(hash, name);
586        }
587
588      }
589
590      @Override
591      public Base addChild(String name) throws FHIRException {
592        if (name.equals("target")) {
593          this.target = new Reference();
594          return this.target;
595        }
596        else if (name.equals("assurance")) {
597          throw new FHIRException("Cannot call addChild on a primitive type Person.link.assurance");
598        }
599        else
600          return super.addChild(name);
601      }
602
603      public PersonLinkComponent copy() {
604        PersonLinkComponent dst = new PersonLinkComponent();
605        copyValues(dst);
606        return dst;
607      }
608
609      public void copyValues(PersonLinkComponent dst) {
610        super.copyValues(dst);
611        dst.target = target == null ? null : target.copy();
612        dst.assurance = assurance == null ? null : assurance.copy();
613      }
614
615      @Override
616      public boolean equalsDeep(Base other_) {
617        if (!super.equalsDeep(other_))
618          return false;
619        if (!(other_ instanceof PersonLinkComponent))
620          return false;
621        PersonLinkComponent o = (PersonLinkComponent) other_;
622        return compareDeep(target, o.target, true) && compareDeep(assurance, o.assurance, true);
623      }
624
625      @Override
626      public boolean equalsShallow(Base other_) {
627        if (!super.equalsShallow(other_))
628          return false;
629        if (!(other_ instanceof PersonLinkComponent))
630          return false;
631        PersonLinkComponent o = (PersonLinkComponent) other_;
632        return compareValues(assurance, o.assurance, true);
633      }
634
635      public boolean isEmpty() {
636        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(target, assurance);
637      }
638
639  public String fhirType() {
640    return "Person.link";
641
642  }
643
644  }
645
646    /**
647     * Identifier for a person within a particular scope.
648     */
649    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
650    @Description(shortDefinition="A human identifier for this person", formalDefinition="Identifier for a person within a particular scope." )
651    protected List<Identifier> identifier;
652
653    /**
654     * Whether this person's record is in active use.
655     */
656    @Child(name = "active", type = {BooleanType.class}, order=1, min=0, max=1, modifier=true, summary=true)
657    @Description(shortDefinition="This person's record is in active use", formalDefinition="Whether this person's record is in active use." )
658    protected BooleanType active;
659
660    /**
661     * A name associated with the person.
662     */
663    @Child(name = "name", type = {HumanName.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
664    @Description(shortDefinition="A name associated with the person", formalDefinition="A name associated with the person." )
665    protected List<HumanName> name;
666
667    /**
668     * A contact detail for the person, e.g. a telephone number or an email address.
669     */
670    @Child(name = "telecom", type = {ContactPoint.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
671    @Description(shortDefinition="A contact detail for the person", formalDefinition="A contact detail for the person, e.g. a telephone number or an email address." )
672    protected List<ContactPoint> telecom;
673
674    /**
675     * Administrative Gender.
676     */
677    @Child(name = "gender", type = {CodeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
678    @Description(shortDefinition="male | female | other | unknown", formalDefinition="Administrative Gender." )
679    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/administrative-gender")
680    protected Enumeration<AdministrativeGender> gender;
681
682    /**
683     * The birth date for the person.
684     */
685    @Child(name = "birthDate", type = {DateType.class}, order=5, min=0, max=1, modifier=false, summary=true)
686    @Description(shortDefinition="The date on which the person was born", formalDefinition="The birth date for the person." )
687    protected DateType birthDate;
688
689    /**
690     * Indicates if the individual is deceased or not.
691     */
692    @Child(name = "deceased", type = {BooleanType.class, DateTimeType.class}, order=6, min=0, max=1, modifier=false, summary=true)
693    @Description(shortDefinition="Indicates if the individual is deceased or not", formalDefinition="Indicates if the individual is deceased or not." )
694    protected DataType deceased;
695
696    /**
697     * One or more addresses for the person.
698     */
699    @Child(name = "address", type = {Address.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
700    @Description(shortDefinition="One or more addresses for the person", formalDefinition="One or more addresses for the person." )
701    protected List<Address> address;
702
703    /**
704     * This field contains a person's most recent marital (civil) status.
705     */
706    @Child(name = "maritalStatus", type = {CodeableConcept.class}, order=8, min=0, max=1, modifier=false, summary=false)
707    @Description(shortDefinition="Marital (civil) status of a person", formalDefinition="This field contains a person's most recent marital (civil) status." )
708    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/marital-status")
709    protected CodeableConcept maritalStatus;
710
711    /**
712     * An image that can be displayed as a thumbnail of the person to enhance the identification of the individual.
713     */
714    @Child(name = "photo", type = {Attachment.class}, order=9, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
715    @Description(shortDefinition="Image of the person", formalDefinition="An image that can be displayed as a thumbnail of the person to enhance the identification of the individual." )
716    protected List<Attachment> photo;
717
718    /**
719     * The organization that is the custodian of the person record.
720     */
721    @Child(name = "managingOrganization", type = {Organization.class}, order=10, min=0, max=1, modifier=false, summary=true)
722    @Description(shortDefinition="The organization that is the custodian of the person record", formalDefinition="The organization that is the custodian of the person record." )
723    protected Reference managingOrganization;
724
725    /**
726     * A language which may be used to communicate with the person about his or her health.
727     */
728    @Child(name = "communication", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
729    @Description(shortDefinition="A language which may be used to communicate with the person about his or her health", formalDefinition="A language which may be used to communicate with the person about his or her health." )
730    protected List<PersonCommunicationComponent> communication;
731
732    /**
733     * Link to a resource that concerns the same actual person.
734     */
735    @Child(name = "link", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
736    @Description(shortDefinition="Link to a resource that concerns the same actual person", formalDefinition="Link to a resource that concerns the same actual person." )
737    protected List<PersonLinkComponent> link;
738
739    private static final long serialVersionUID = -1013247270L;
740
741  /**
742   * Constructor
743   */
744    public Person() {
745      super();
746    }
747
748    /**
749     * @return {@link #identifier} (Identifier for a person within a particular scope.)
750     */
751    public List<Identifier> getIdentifier() { 
752      if (this.identifier == null)
753        this.identifier = new ArrayList<Identifier>();
754      return this.identifier;
755    }
756
757    /**
758     * @return Returns a reference to <code>this</code> for easy method chaining
759     */
760    public Person setIdentifier(List<Identifier> theIdentifier) { 
761      this.identifier = theIdentifier;
762      return this;
763    }
764
765    public boolean hasIdentifier() { 
766      if (this.identifier == null)
767        return false;
768      for (Identifier item : this.identifier)
769        if (!item.isEmpty())
770          return true;
771      return false;
772    }
773
774    public Identifier addIdentifier() { //3
775      Identifier t = new Identifier();
776      if (this.identifier == null)
777        this.identifier = new ArrayList<Identifier>();
778      this.identifier.add(t);
779      return t;
780    }
781
782    public Person addIdentifier(Identifier t) { //3
783      if (t == null)
784        return this;
785      if (this.identifier == null)
786        this.identifier = new ArrayList<Identifier>();
787      this.identifier.add(t);
788      return this;
789    }
790
791    /**
792     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist {3}
793     */
794    public Identifier getIdentifierFirstRep() { 
795      if (getIdentifier().isEmpty()) {
796        addIdentifier();
797      }
798      return getIdentifier().get(0);
799    }
800
801    /**
802     * @return {@link #active} (Whether this person's record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
803     */
804    public BooleanType getActiveElement() { 
805      if (this.active == null)
806        if (Configuration.errorOnAutoCreate())
807          throw new Error("Attempt to auto-create Person.active");
808        else if (Configuration.doAutoCreate())
809          this.active = new BooleanType(); // bb
810      return this.active;
811    }
812
813    public boolean hasActiveElement() { 
814      return this.active != null && !this.active.isEmpty();
815    }
816
817    public boolean hasActive() { 
818      return this.active != null && !this.active.isEmpty();
819    }
820
821    /**
822     * @param value {@link #active} (Whether this person's record is in active use.). This is the underlying object with id, value and extensions. The accessor "getActive" gives direct access to the value
823     */
824    public Person setActiveElement(BooleanType value) { 
825      this.active = value;
826      return this;
827    }
828
829    /**
830     * @return Whether this person's record is in active use.
831     */
832    public boolean getActive() { 
833      return this.active == null || this.active.isEmpty() ? false : this.active.getValue();
834    }
835
836    /**
837     * @param value Whether this person's record is in active use.
838     */
839    public Person setActive(boolean value) { 
840        if (this.active == null)
841          this.active = new BooleanType();
842        this.active.setValue(value);
843      return this;
844    }
845
846    /**
847     * @return {@link #name} (A name associated with the person.)
848     */
849    public List<HumanName> getName() { 
850      if (this.name == null)
851        this.name = new ArrayList<HumanName>();
852      return this.name;
853    }
854
855    /**
856     * @return Returns a reference to <code>this</code> for easy method chaining
857     */
858    public Person setName(List<HumanName> theName) { 
859      this.name = theName;
860      return this;
861    }
862
863    public boolean hasName() { 
864      if (this.name == null)
865        return false;
866      for (HumanName item : this.name)
867        if (!item.isEmpty())
868          return true;
869      return false;
870    }
871
872    public HumanName addName() { //3
873      HumanName t = new HumanName();
874      if (this.name == null)
875        this.name = new ArrayList<HumanName>();
876      this.name.add(t);
877      return t;
878    }
879
880    public Person addName(HumanName t) { //3
881      if (t == null)
882        return this;
883      if (this.name == null)
884        this.name = new ArrayList<HumanName>();
885      this.name.add(t);
886      return this;
887    }
888
889    /**
890     * @return The first repetition of repeating field {@link #name}, creating it if it does not already exist {3}
891     */
892    public HumanName getNameFirstRep() { 
893      if (getName().isEmpty()) {
894        addName();
895      }
896      return getName().get(0);
897    }
898
899    /**
900     * @return {@link #telecom} (A contact detail for the person, e.g. a telephone number or an email address.)
901     */
902    public List<ContactPoint> getTelecom() { 
903      if (this.telecom == null)
904        this.telecom = new ArrayList<ContactPoint>();
905      return this.telecom;
906    }
907
908    /**
909     * @return Returns a reference to <code>this</code> for easy method chaining
910     */
911    public Person setTelecom(List<ContactPoint> theTelecom) { 
912      this.telecom = theTelecom;
913      return this;
914    }
915
916    public boolean hasTelecom() { 
917      if (this.telecom == null)
918        return false;
919      for (ContactPoint item : this.telecom)
920        if (!item.isEmpty())
921          return true;
922      return false;
923    }
924
925    public ContactPoint addTelecom() { //3
926      ContactPoint t = new ContactPoint();
927      if (this.telecom == null)
928        this.telecom = new ArrayList<ContactPoint>();
929      this.telecom.add(t);
930      return t;
931    }
932
933    public Person addTelecom(ContactPoint t) { //3
934      if (t == null)
935        return this;
936      if (this.telecom == null)
937        this.telecom = new ArrayList<ContactPoint>();
938      this.telecom.add(t);
939      return this;
940    }
941
942    /**
943     * @return The first repetition of repeating field {@link #telecom}, creating it if it does not already exist {3}
944     */
945    public ContactPoint getTelecomFirstRep() { 
946      if (getTelecom().isEmpty()) {
947        addTelecom();
948      }
949      return getTelecom().get(0);
950    }
951
952    /**
953     * @return {@link #gender} (Administrative Gender.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
954     */
955    public Enumeration<AdministrativeGender> getGenderElement() { 
956      if (this.gender == null)
957        if (Configuration.errorOnAutoCreate())
958          throw new Error("Attempt to auto-create Person.gender");
959        else if (Configuration.doAutoCreate())
960          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory()); // bb
961      return this.gender;
962    }
963
964    public boolean hasGenderElement() { 
965      return this.gender != null && !this.gender.isEmpty();
966    }
967
968    public boolean hasGender() { 
969      return this.gender != null && !this.gender.isEmpty();
970    }
971
972    /**
973     * @param value {@link #gender} (Administrative Gender.). This is the underlying object with id, value and extensions. The accessor "getGender" gives direct access to the value
974     */
975    public Person setGenderElement(Enumeration<AdministrativeGender> value) { 
976      this.gender = value;
977      return this;
978    }
979
980    /**
981     * @return Administrative Gender.
982     */
983    public AdministrativeGender getGender() { 
984      return this.gender == null ? null : this.gender.getValue();
985    }
986
987    /**
988     * @param value Administrative Gender.
989     */
990    public Person setGender(AdministrativeGender value) { 
991      if (value == null)
992        this.gender = null;
993      else {
994        if (this.gender == null)
995          this.gender = new Enumeration<AdministrativeGender>(new AdministrativeGenderEnumFactory());
996        this.gender.setValue(value);
997      }
998      return this;
999    }
1000
1001    /**
1002     * @return {@link #birthDate} (The birth date for the person.). This is the underlying object with id, value and extensions. The accessor "getBirthDate" gives direct access to the value
1003     */
1004    public DateType getBirthDateElement() { 
1005      if (this.birthDate == null)
1006        if (Configuration.errorOnAutoCreate())
1007          throw new Error("Attempt to auto-create Person.birthDate");
1008        else if (Configuration.doAutoCreate())
1009          this.birthDate = new DateType(); // bb
1010      return this.birthDate;
1011    }
1012
1013    public boolean hasBirthDateElement() { 
1014      return this.birthDate != null && !this.birthDate.isEmpty();
1015    }
1016
1017    public boolean hasBirthDate() { 
1018      return this.birthDate != null && !this.birthDate.isEmpty();
1019    }
1020
1021    /**
1022     * @param value {@link #birthDate} (The birth date for the person.). This is the underlying object with id, value and extensions. The accessor "getBirthDate" gives direct access to the value
1023     */
1024    public Person setBirthDateElement(DateType value) { 
1025      this.birthDate = value;
1026      return this;
1027    }
1028
1029    /**
1030     * @return The birth date for the person.
1031     */
1032    public Date getBirthDate() { 
1033      return this.birthDate == null ? null : this.birthDate.getValue();
1034    }
1035
1036    /**
1037     * @param value The birth date for the person.
1038     */
1039    public Person setBirthDate(Date value) { 
1040      if (value == null)
1041        this.birthDate = null;
1042      else {
1043        if (this.birthDate == null)
1044          this.birthDate = new DateType();
1045        this.birthDate.setValue(value);
1046      }
1047      return this;
1048    }
1049
1050    /**
1051     * @return {@link #deceased} (Indicates if the individual is deceased or not.)
1052     */
1053    public DataType getDeceased() { 
1054      return this.deceased;
1055    }
1056
1057    /**
1058     * @return {@link #deceased} (Indicates if the individual is deceased or not.)
1059     */
1060    public BooleanType getDeceasedBooleanType() throws FHIRException { 
1061      if (this.deceased == null)
1062        this.deceased = new BooleanType();
1063      if (!(this.deceased instanceof BooleanType))
1064        throw new FHIRException("Type mismatch: the type BooleanType was expected, but "+this.deceased.getClass().getName()+" was encountered");
1065      return (BooleanType) this.deceased;
1066    }
1067
1068    public boolean hasDeceasedBooleanType() { 
1069      return this != null && this.deceased instanceof BooleanType;
1070    }
1071
1072    /**
1073     * @return {@link #deceased} (Indicates if the individual is deceased or not.)
1074     */
1075    public DateTimeType getDeceasedDateTimeType() throws FHIRException { 
1076      if (this.deceased == null)
1077        this.deceased = new DateTimeType();
1078      if (!(this.deceased instanceof DateTimeType))
1079        throw new FHIRException("Type mismatch: the type DateTimeType was expected, but "+this.deceased.getClass().getName()+" was encountered");
1080      return (DateTimeType) this.deceased;
1081    }
1082
1083    public boolean hasDeceasedDateTimeType() { 
1084      return this != null && this.deceased instanceof DateTimeType;
1085    }
1086
1087    public boolean hasDeceased() { 
1088      return this.deceased != null && !this.deceased.isEmpty();
1089    }
1090
1091    /**
1092     * @param value {@link #deceased} (Indicates if the individual is deceased or not.)
1093     */
1094    public Person setDeceased(DataType value) { 
1095      if (value != null && !(value instanceof BooleanType || value instanceof DateTimeType))
1096        throw new Error("Not the right type for Person.deceased[x]: "+value.fhirType());
1097      this.deceased = value;
1098      return this;
1099    }
1100
1101    /**
1102     * @return {@link #address} (One or more addresses for the person.)
1103     */
1104    public List<Address> getAddress() { 
1105      if (this.address == null)
1106        this.address = new ArrayList<Address>();
1107      return this.address;
1108    }
1109
1110    /**
1111     * @return Returns a reference to <code>this</code> for easy method chaining
1112     */
1113    public Person setAddress(List<Address> theAddress) { 
1114      this.address = theAddress;
1115      return this;
1116    }
1117
1118    public boolean hasAddress() { 
1119      if (this.address == null)
1120        return false;
1121      for (Address item : this.address)
1122        if (!item.isEmpty())
1123          return true;
1124      return false;
1125    }
1126
1127    public Address addAddress() { //3
1128      Address t = new Address();
1129      if (this.address == null)
1130        this.address = new ArrayList<Address>();
1131      this.address.add(t);
1132      return t;
1133    }
1134
1135    public Person addAddress(Address t) { //3
1136      if (t == null)
1137        return this;
1138      if (this.address == null)
1139        this.address = new ArrayList<Address>();
1140      this.address.add(t);
1141      return this;
1142    }
1143
1144    /**
1145     * @return The first repetition of repeating field {@link #address}, creating it if it does not already exist {3}
1146     */
1147    public Address getAddressFirstRep() { 
1148      if (getAddress().isEmpty()) {
1149        addAddress();
1150      }
1151      return getAddress().get(0);
1152    }
1153
1154    /**
1155     * @return {@link #maritalStatus} (This field contains a person's most recent marital (civil) status.)
1156     */
1157    public CodeableConcept getMaritalStatus() { 
1158      if (this.maritalStatus == null)
1159        if (Configuration.errorOnAutoCreate())
1160          throw new Error("Attempt to auto-create Person.maritalStatus");
1161        else if (Configuration.doAutoCreate())
1162          this.maritalStatus = new CodeableConcept(); // cc
1163      return this.maritalStatus;
1164    }
1165
1166    public boolean hasMaritalStatus() { 
1167      return this.maritalStatus != null && !this.maritalStatus.isEmpty();
1168    }
1169
1170    /**
1171     * @param value {@link #maritalStatus} (This field contains a person's most recent marital (civil) status.)
1172     */
1173    public Person setMaritalStatus(CodeableConcept value) { 
1174      this.maritalStatus = value;
1175      return this;
1176    }
1177
1178    /**
1179     * @return {@link #photo} (An image that can be displayed as a thumbnail of the person to enhance the identification of the individual.)
1180     */
1181    public List<Attachment> getPhoto() { 
1182      if (this.photo == null)
1183        this.photo = new ArrayList<Attachment>();
1184      return this.photo;
1185    }
1186
1187    /**
1188     * @return Returns a reference to <code>this</code> for easy method chaining
1189     */
1190    public Person setPhoto(List<Attachment> thePhoto) { 
1191      this.photo = thePhoto;
1192      return this;
1193    }
1194
1195    public boolean hasPhoto() { 
1196      if (this.photo == null)
1197        return false;
1198      for (Attachment item : this.photo)
1199        if (!item.isEmpty())
1200          return true;
1201      return false;
1202    }
1203
1204    public Attachment addPhoto() { //3
1205      Attachment t = new Attachment();
1206      if (this.photo == null)
1207        this.photo = new ArrayList<Attachment>();
1208      this.photo.add(t);
1209      return t;
1210    }
1211
1212    public Person addPhoto(Attachment t) { //3
1213      if (t == null)
1214        return this;
1215      if (this.photo == null)
1216        this.photo = new ArrayList<Attachment>();
1217      this.photo.add(t);
1218      return this;
1219    }
1220
1221    /**
1222     * @return The first repetition of repeating field {@link #photo}, creating it if it does not already exist {3}
1223     */
1224    public Attachment getPhotoFirstRep() { 
1225      if (getPhoto().isEmpty()) {
1226        addPhoto();
1227      }
1228      return getPhoto().get(0);
1229    }
1230
1231    /**
1232     * @return {@link #managingOrganization} (The organization that is the custodian of the person record.)
1233     */
1234    public Reference getManagingOrganization() { 
1235      if (this.managingOrganization == null)
1236        if (Configuration.errorOnAutoCreate())
1237          throw new Error("Attempt to auto-create Person.managingOrganization");
1238        else if (Configuration.doAutoCreate())
1239          this.managingOrganization = new Reference(); // cc
1240      return this.managingOrganization;
1241    }
1242
1243    public boolean hasManagingOrganization() { 
1244      return this.managingOrganization != null && !this.managingOrganization.isEmpty();
1245    }
1246
1247    /**
1248     * @param value {@link #managingOrganization} (The organization that is the custodian of the person record.)
1249     */
1250    public Person setManagingOrganization(Reference value) { 
1251      this.managingOrganization = value;
1252      return this;
1253    }
1254
1255    /**
1256     * @return {@link #communication} (A language which may be used to communicate with the person about his or her health.)
1257     */
1258    public List<PersonCommunicationComponent> getCommunication() { 
1259      if (this.communication == null)
1260        this.communication = new ArrayList<PersonCommunicationComponent>();
1261      return this.communication;
1262    }
1263
1264    /**
1265     * @return Returns a reference to <code>this</code> for easy method chaining
1266     */
1267    public Person setCommunication(List<PersonCommunicationComponent> theCommunication) { 
1268      this.communication = theCommunication;
1269      return this;
1270    }
1271
1272    public boolean hasCommunication() { 
1273      if (this.communication == null)
1274        return false;
1275      for (PersonCommunicationComponent item : this.communication)
1276        if (!item.isEmpty())
1277          return true;
1278      return false;
1279    }
1280
1281    public PersonCommunicationComponent addCommunication() { //3
1282      PersonCommunicationComponent t = new PersonCommunicationComponent();
1283      if (this.communication == null)
1284        this.communication = new ArrayList<PersonCommunicationComponent>();
1285      this.communication.add(t);
1286      return t;
1287    }
1288
1289    public Person addCommunication(PersonCommunicationComponent t) { //3
1290      if (t == null)
1291        return this;
1292      if (this.communication == null)
1293        this.communication = new ArrayList<PersonCommunicationComponent>();
1294      this.communication.add(t);
1295      return this;
1296    }
1297
1298    /**
1299     * @return The first repetition of repeating field {@link #communication}, creating it if it does not already exist {3}
1300     */
1301    public PersonCommunicationComponent getCommunicationFirstRep() { 
1302      if (getCommunication().isEmpty()) {
1303        addCommunication();
1304      }
1305      return getCommunication().get(0);
1306    }
1307
1308    /**
1309     * @return {@link #link} (Link to a resource that concerns the same actual person.)
1310     */
1311    public List<PersonLinkComponent> getLink() { 
1312      if (this.link == null)
1313        this.link = new ArrayList<PersonLinkComponent>();
1314      return this.link;
1315    }
1316
1317    /**
1318     * @return Returns a reference to <code>this</code> for easy method chaining
1319     */
1320    public Person setLink(List<PersonLinkComponent> theLink) { 
1321      this.link = theLink;
1322      return this;
1323    }
1324
1325    public boolean hasLink() { 
1326      if (this.link == null)
1327        return false;
1328      for (PersonLinkComponent item : this.link)
1329        if (!item.isEmpty())
1330          return true;
1331      return false;
1332    }
1333
1334    public PersonLinkComponent addLink() { //3
1335      PersonLinkComponent t = new PersonLinkComponent();
1336      if (this.link == null)
1337        this.link = new ArrayList<PersonLinkComponent>();
1338      this.link.add(t);
1339      return t;
1340    }
1341
1342    public Person addLink(PersonLinkComponent t) { //3
1343      if (t == null)
1344        return this;
1345      if (this.link == null)
1346        this.link = new ArrayList<PersonLinkComponent>();
1347      this.link.add(t);
1348      return this;
1349    }
1350
1351    /**
1352     * @return The first repetition of repeating field {@link #link}, creating it if it does not already exist {3}
1353     */
1354    public PersonLinkComponent getLinkFirstRep() { 
1355      if (getLink().isEmpty()) {
1356        addLink();
1357      }
1358      return getLink().get(0);
1359    }
1360
1361      protected void listChildren(List<Property> children) {
1362        super.listChildren(children);
1363        children.add(new Property("identifier", "Identifier", "Identifier for a person within a particular scope.", 0, java.lang.Integer.MAX_VALUE, identifier));
1364        children.add(new Property("active", "boolean", "Whether this person's record is in active use.", 0, 1, active));
1365        children.add(new Property("name", "HumanName", "A name associated with the person.", 0, java.lang.Integer.MAX_VALUE, name));
1366        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));
1367        children.add(new Property("gender", "code", "Administrative Gender.", 0, 1, gender));
1368        children.add(new Property("birthDate", "date", "The birth date for the person.", 0, 1, birthDate));
1369        children.add(new Property("deceased[x]", "boolean|dateTime", "Indicates if the individual is deceased or not.", 0, 1, deceased));
1370        children.add(new Property("address", "Address", "One or more addresses for the person.", 0, java.lang.Integer.MAX_VALUE, address));
1371        children.add(new Property("maritalStatus", "CodeableConcept", "This field contains a person's most recent marital (civil) status.", 0, 1, maritalStatus));
1372        children.add(new Property("photo", "Attachment", "An image that can be displayed as a thumbnail of the person to enhance the identification of the individual.", 0, java.lang.Integer.MAX_VALUE, photo));
1373        children.add(new Property("managingOrganization", "Reference(Organization)", "The organization that is the custodian of the person record.", 0, 1, managingOrganization));
1374        children.add(new Property("communication", "", "A language which may be used to communicate with the person about his or her health.", 0, java.lang.Integer.MAX_VALUE, communication));
1375        children.add(new Property("link", "", "Link to a resource that concerns the same actual person.", 0, java.lang.Integer.MAX_VALUE, link));
1376      }
1377
1378      @Override
1379      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1380        switch (_hash) {
1381        case -1618432855: /*identifier*/  return new Property("identifier", "Identifier", "Identifier for a person within a particular scope.", 0, java.lang.Integer.MAX_VALUE, identifier);
1382        case -1422950650: /*active*/  return new Property("active", "boolean", "Whether this person's record is in active use.", 0, 1, active);
1383        case 3373707: /*name*/  return new Property("name", "HumanName", "A name associated with the person.", 0, java.lang.Integer.MAX_VALUE, name);
1384        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);
1385        case -1249512767: /*gender*/  return new Property("gender", "code", "Administrative Gender.", 0, 1, gender);
1386        case -1210031859: /*birthDate*/  return new Property("birthDate", "date", "The birth date for the person.", 0, 1, birthDate);
1387        case -1311442804: /*deceased[x]*/  return new Property("deceased[x]", "boolean|dateTime", "Indicates if the individual is deceased or not.", 0, 1, deceased);
1388        case 561497972: /*deceased*/  return new Property("deceased[x]", "boolean|dateTime", "Indicates if the individual is deceased or not.", 0, 1, deceased);
1389        case 497463828: /*deceasedBoolean*/  return new Property("deceased[x]", "boolean", "Indicates if the individual is deceased or not.", 0, 1, deceased);
1390        case -1971804369: /*deceasedDateTime*/  return new Property("deceased[x]", "dateTime", "Indicates if the individual is deceased or not.", 0, 1, deceased);
1391        case -1147692044: /*address*/  return new Property("address", "Address", "One or more addresses for the person.", 0, java.lang.Integer.MAX_VALUE, address);
1392        case 1756919302: /*maritalStatus*/  return new Property("maritalStatus", "CodeableConcept", "This field contains a person's most recent marital (civil) status.", 0, 1, maritalStatus);
1393        case 106642994: /*photo*/  return new Property("photo", "Attachment", "An image that can be displayed as a thumbnail of the person to enhance the identification of the individual.", 0, java.lang.Integer.MAX_VALUE, photo);
1394        case -2058947787: /*managingOrganization*/  return new Property("managingOrganization", "Reference(Organization)", "The organization that is the custodian of the person record.", 0, 1, managingOrganization);
1395        case -1035284522: /*communication*/  return new Property("communication", "", "A language which may be used to communicate with the person about his or her health.", 0, java.lang.Integer.MAX_VALUE, communication);
1396        case 3321850: /*link*/  return new Property("link", "", "Link to a resource that concerns the same actual person.", 0, java.lang.Integer.MAX_VALUE, link);
1397        default: return super.getNamedProperty(_hash, _name, _checkValid);
1398        }
1399
1400      }
1401
1402      @Override
1403      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1404        switch (hash) {
1405        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
1406        case -1422950650: /*active*/ return this.active == null ? new Base[0] : new Base[] {this.active}; // BooleanType
1407        case 3373707: /*name*/ return this.name == null ? new Base[0] : this.name.toArray(new Base[this.name.size()]); // HumanName
1408        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
1409        case -1249512767: /*gender*/ return this.gender == null ? new Base[0] : new Base[] {this.gender}; // Enumeration<AdministrativeGender>
1410        case -1210031859: /*birthDate*/ return this.birthDate == null ? new Base[0] : new Base[] {this.birthDate}; // DateType
1411        case 561497972: /*deceased*/ return this.deceased == null ? new Base[0] : new Base[] {this.deceased}; // DataType
1412        case -1147692044: /*address*/ return this.address == null ? new Base[0] : this.address.toArray(new Base[this.address.size()]); // Address
1413        case 1756919302: /*maritalStatus*/ return this.maritalStatus == null ? new Base[0] : new Base[] {this.maritalStatus}; // CodeableConcept
1414        case 106642994: /*photo*/ return this.photo == null ? new Base[0] : this.photo.toArray(new Base[this.photo.size()]); // Attachment
1415        case -2058947787: /*managingOrganization*/ return this.managingOrganization == null ? new Base[0] : new Base[] {this.managingOrganization}; // Reference
1416        case -1035284522: /*communication*/ return this.communication == null ? new Base[0] : this.communication.toArray(new Base[this.communication.size()]); // PersonCommunicationComponent
1417        case 3321850: /*link*/ return this.link == null ? new Base[0] : this.link.toArray(new Base[this.link.size()]); // PersonLinkComponent
1418        default: return super.getProperty(hash, name, checkValid);
1419        }
1420
1421      }
1422
1423      @Override
1424      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1425        switch (hash) {
1426        case -1618432855: // identifier
1427          this.getIdentifier().add(TypeConvertor.castToIdentifier(value)); // Identifier
1428          return value;
1429        case -1422950650: // active
1430          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1431          return value;
1432        case 3373707: // name
1433          this.getName().add(TypeConvertor.castToHumanName(value)); // HumanName
1434          return value;
1435        case -1429363305: // telecom
1436          this.getTelecom().add(TypeConvertor.castToContactPoint(value)); // ContactPoint
1437          return value;
1438        case -1249512767: // gender
1439          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1440          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1441          return value;
1442        case -1210031859: // birthDate
1443          this.birthDate = TypeConvertor.castToDate(value); // DateType
1444          return value;
1445        case 561497972: // deceased
1446          this.deceased = TypeConvertor.castToType(value); // DataType
1447          return value;
1448        case -1147692044: // address
1449          this.getAddress().add(TypeConvertor.castToAddress(value)); // Address
1450          return value;
1451        case 1756919302: // maritalStatus
1452          this.maritalStatus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1453          return value;
1454        case 106642994: // photo
1455          this.getPhoto().add(TypeConvertor.castToAttachment(value)); // Attachment
1456          return value;
1457        case -2058947787: // managingOrganization
1458          this.managingOrganization = TypeConvertor.castToReference(value); // Reference
1459          return value;
1460        case -1035284522: // communication
1461          this.getCommunication().add((PersonCommunicationComponent) value); // PersonCommunicationComponent
1462          return value;
1463        case 3321850: // link
1464          this.getLink().add((PersonLinkComponent) value); // PersonLinkComponent
1465          return value;
1466        default: return super.setProperty(hash, name, value);
1467        }
1468
1469      }
1470
1471      @Override
1472      public Base setProperty(String name, Base value) throws FHIRException {
1473        if (name.equals("identifier")) {
1474          this.getIdentifier().add(TypeConvertor.castToIdentifier(value));
1475        } else if (name.equals("active")) {
1476          this.active = TypeConvertor.castToBoolean(value); // BooleanType
1477        } else if (name.equals("name")) {
1478          this.getName().add(TypeConvertor.castToHumanName(value));
1479        } else if (name.equals("telecom")) {
1480          this.getTelecom().add(TypeConvertor.castToContactPoint(value));
1481        } else if (name.equals("gender")) {
1482          value = new AdministrativeGenderEnumFactory().fromType(TypeConvertor.castToCode(value));
1483          this.gender = (Enumeration) value; // Enumeration<AdministrativeGender>
1484        } else if (name.equals("birthDate")) {
1485          this.birthDate = TypeConvertor.castToDate(value); // DateType
1486        } else if (name.equals("deceased[x]")) {
1487          this.deceased = TypeConvertor.castToType(value); // DataType
1488        } else if (name.equals("address")) {
1489          this.getAddress().add(TypeConvertor.castToAddress(value));
1490        } else if (name.equals("maritalStatus")) {
1491          this.maritalStatus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1492        } else if (name.equals("photo")) {
1493          this.getPhoto().add(TypeConvertor.castToAttachment(value));
1494        } else if (name.equals("managingOrganization")) {
1495          this.managingOrganization = TypeConvertor.castToReference(value); // Reference
1496        } else if (name.equals("communication")) {
1497          this.getCommunication().add((PersonCommunicationComponent) value);
1498        } else if (name.equals("link")) {
1499          this.getLink().add((PersonLinkComponent) value);
1500        } else
1501          return super.setProperty(name, value);
1502        return value;
1503      }
1504
1505      @Override
1506      public Base makeProperty(int hash, String name) throws FHIRException {
1507        switch (hash) {
1508        case -1618432855:  return addIdentifier(); 
1509        case -1422950650:  return getActiveElement();
1510        case 3373707:  return addName(); 
1511        case -1429363305:  return addTelecom(); 
1512        case -1249512767:  return getGenderElement();
1513        case -1210031859:  return getBirthDateElement();
1514        case -1311442804:  return getDeceased();
1515        case 561497972:  return getDeceased();
1516        case -1147692044:  return addAddress(); 
1517        case 1756919302:  return getMaritalStatus();
1518        case 106642994:  return addPhoto(); 
1519        case -2058947787:  return getManagingOrganization();
1520        case -1035284522:  return addCommunication(); 
1521        case 3321850:  return addLink(); 
1522        default: return super.makeProperty(hash, name);
1523        }
1524
1525      }
1526
1527      @Override
1528      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1529        switch (hash) {
1530        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
1531        case -1422950650: /*active*/ return new String[] {"boolean"};
1532        case 3373707: /*name*/ return new String[] {"HumanName"};
1533        case -1429363305: /*telecom*/ return new String[] {"ContactPoint"};
1534        case -1249512767: /*gender*/ return new String[] {"code"};
1535        case -1210031859: /*birthDate*/ return new String[] {"date"};
1536        case 561497972: /*deceased*/ return new String[] {"boolean", "dateTime"};
1537        case -1147692044: /*address*/ return new String[] {"Address"};
1538        case 1756919302: /*maritalStatus*/ return new String[] {"CodeableConcept"};
1539        case 106642994: /*photo*/ return new String[] {"Attachment"};
1540        case -2058947787: /*managingOrganization*/ return new String[] {"Reference"};
1541        case -1035284522: /*communication*/ return new String[] {};
1542        case 3321850: /*link*/ return new String[] {};
1543        default: return super.getTypesForProperty(hash, name);
1544        }
1545
1546      }
1547
1548      @Override
1549      public Base addChild(String name) throws FHIRException {
1550        if (name.equals("identifier")) {
1551          return addIdentifier();
1552        }
1553        else if (name.equals("active")) {
1554          throw new FHIRException("Cannot call addChild on a primitive type Person.active");
1555        }
1556        else if (name.equals("name")) {
1557          return addName();
1558        }
1559        else if (name.equals("telecom")) {
1560          return addTelecom();
1561        }
1562        else if (name.equals("gender")) {
1563          throw new FHIRException("Cannot call addChild on a primitive type Person.gender");
1564        }
1565        else if (name.equals("birthDate")) {
1566          throw new FHIRException("Cannot call addChild on a primitive type Person.birthDate");
1567        }
1568        else if (name.equals("deceasedBoolean")) {
1569          this.deceased = new BooleanType();
1570          return this.deceased;
1571        }
1572        else if (name.equals("deceasedDateTime")) {
1573          this.deceased = new DateTimeType();
1574          return this.deceased;
1575        }
1576        else if (name.equals("address")) {
1577          return addAddress();
1578        }
1579        else if (name.equals("maritalStatus")) {
1580          this.maritalStatus = new CodeableConcept();
1581          return this.maritalStatus;
1582        }
1583        else if (name.equals("photo")) {
1584          return addPhoto();
1585        }
1586        else if (name.equals("managingOrganization")) {
1587          this.managingOrganization = new Reference();
1588          return this.managingOrganization;
1589        }
1590        else if (name.equals("communication")) {
1591          return addCommunication();
1592        }
1593        else if (name.equals("link")) {
1594          return addLink();
1595        }
1596        else
1597          return super.addChild(name);
1598      }
1599
1600  public String fhirType() {
1601    return "Person";
1602
1603  }
1604
1605      public Person copy() {
1606        Person dst = new Person();
1607        copyValues(dst);
1608        return dst;
1609      }
1610
1611      public void copyValues(Person dst) {
1612        super.copyValues(dst);
1613        if (identifier != null) {
1614          dst.identifier = new ArrayList<Identifier>();
1615          for (Identifier i : identifier)
1616            dst.identifier.add(i.copy());
1617        };
1618        dst.active = active == null ? null : active.copy();
1619        if (name != null) {
1620          dst.name = new ArrayList<HumanName>();
1621          for (HumanName i : name)
1622            dst.name.add(i.copy());
1623        };
1624        if (telecom != null) {
1625          dst.telecom = new ArrayList<ContactPoint>();
1626          for (ContactPoint i : telecom)
1627            dst.telecom.add(i.copy());
1628        };
1629        dst.gender = gender == null ? null : gender.copy();
1630        dst.birthDate = birthDate == null ? null : birthDate.copy();
1631        dst.deceased = deceased == null ? null : deceased.copy();
1632        if (address != null) {
1633          dst.address = new ArrayList<Address>();
1634          for (Address i : address)
1635            dst.address.add(i.copy());
1636        };
1637        dst.maritalStatus = maritalStatus == null ? null : maritalStatus.copy();
1638        if (photo != null) {
1639          dst.photo = new ArrayList<Attachment>();
1640          for (Attachment i : photo)
1641            dst.photo.add(i.copy());
1642        };
1643        dst.managingOrganization = managingOrganization == null ? null : managingOrganization.copy();
1644        if (communication != null) {
1645          dst.communication = new ArrayList<PersonCommunicationComponent>();
1646          for (PersonCommunicationComponent i : communication)
1647            dst.communication.add(i.copy());
1648        };
1649        if (link != null) {
1650          dst.link = new ArrayList<PersonLinkComponent>();
1651          for (PersonLinkComponent i : link)
1652            dst.link.add(i.copy());
1653        };
1654      }
1655
1656      protected Person typedCopy() {
1657        return copy();
1658      }
1659
1660      @Override
1661      public boolean equalsDeep(Base other_) {
1662        if (!super.equalsDeep(other_))
1663          return false;
1664        if (!(other_ instanceof Person))
1665          return false;
1666        Person o = (Person) other_;
1667        return compareDeep(identifier, o.identifier, true) && compareDeep(active, o.active, true) && compareDeep(name, o.name, true)
1668           && compareDeep(telecom, o.telecom, true) && compareDeep(gender, o.gender, true) && compareDeep(birthDate, o.birthDate, true)
1669           && compareDeep(deceased, o.deceased, true) && compareDeep(address, o.address, true) && compareDeep(maritalStatus, o.maritalStatus, true)
1670           && compareDeep(photo, o.photo, true) && compareDeep(managingOrganization, o.managingOrganization, true)
1671           && compareDeep(communication, o.communication, true) && compareDeep(link, o.link, true);
1672      }
1673
1674      @Override
1675      public boolean equalsShallow(Base other_) {
1676        if (!super.equalsShallow(other_))
1677          return false;
1678        if (!(other_ instanceof Person))
1679          return false;
1680        Person o = (Person) other_;
1681        return compareValues(active, o.active, true) && compareValues(gender, o.gender, true) && compareValues(birthDate, o.birthDate, true)
1682          ;
1683      }
1684
1685      public boolean isEmpty() {
1686        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, active, name
1687          , telecom, gender, birthDate, deceased, address, maritalStatus, photo, managingOrganization
1688          , communication, link);
1689      }
1690
1691  @Override
1692  public ResourceType getResourceType() {
1693    return ResourceType.Person;
1694   }
1695
1696 /**
1697   * Search parameter: <b>death-date</b>
1698   * <p>
1699   * Description: <b>The date of death has been provided and satisfies this search value</b><br>
1700   * Type: <b>date</b><br>
1701   * Path: <b>(Person.deceased as dateTime)</b><br>
1702   * </p>
1703   */
1704  @SearchParamDefinition(name="death-date", path="(Person.deceased as dateTime)", description="The date of death has been provided and satisfies this search value", type="date" )
1705  public static final String SP_DEATH_DATE = "death-date";
1706 /**
1707   * <b>Fluent Client</b> search parameter constant for <b>death-date</b>
1708   * <p>
1709   * Description: <b>The date of death has been provided and satisfies this search value</b><br>
1710   * Type: <b>date</b><br>
1711   * Path: <b>(Person.deceased as dateTime)</b><br>
1712   * </p>
1713   */
1714  public static final ca.uhn.fhir.rest.gclient.DateClientParam DEATH_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DEATH_DATE);
1715
1716 /**
1717   * Search parameter: <b>deceased</b>
1718   * <p>
1719   * Description: <b>This person has been marked as deceased, or has a death date entered</b><br>
1720   * Type: <b>token</b><br>
1721   * Path: <b>Person.deceased.exists() and Person.deceased != false</b><br>
1722   * </p>
1723   */
1724  @SearchParamDefinition(name="deceased", path="Person.deceased.exists() and Person.deceased != false", description="This person has been marked as deceased, or has a death date entered", type="token" )
1725  public static final String SP_DECEASED = "deceased";
1726 /**
1727   * <b>Fluent Client</b> search parameter constant for <b>deceased</b>
1728   * <p>
1729   * Description: <b>This person has been marked as deceased, or has a death date entered</b><br>
1730   * Type: <b>token</b><br>
1731   * Path: <b>Person.deceased.exists() and Person.deceased != false</b><br>
1732   * </p>
1733   */
1734  public static final ca.uhn.fhir.rest.gclient.TokenClientParam DECEASED = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_DECEASED);
1735
1736 /**
1737   * Search parameter: <b>family</b>
1738   * <p>
1739   * Description: <b>A portion of the family name of the person</b><br>
1740   * Type: <b>string</b><br>
1741   * Path: <b>Person.name.family</b><br>
1742   * </p>
1743   */
1744  @SearchParamDefinition(name="family", path="Person.name.family", description="A portion of the family name of the person", type="string" )
1745  public static final String SP_FAMILY = "family";
1746 /**
1747   * <b>Fluent Client</b> search parameter constant for <b>family</b>
1748   * <p>
1749   * Description: <b>A portion of the family name of the person</b><br>
1750   * Type: <b>string</b><br>
1751   * Path: <b>Person.name.family</b><br>
1752   * </p>
1753   */
1754  public static final ca.uhn.fhir.rest.gclient.StringClientParam FAMILY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_FAMILY);
1755
1756 /**
1757   * Search parameter: <b>given</b>
1758   * <p>
1759   * Description: <b>A portion of the given name of the person</b><br>
1760   * Type: <b>string</b><br>
1761   * Path: <b>Person.name.given</b><br>
1762   * </p>
1763   */
1764  @SearchParamDefinition(name="given", path="Person.name.given", description="A portion of the given name of the person", type="string" )
1765  public static final String SP_GIVEN = "given";
1766 /**
1767   * <b>Fluent Client</b> search parameter constant for <b>given</b>
1768   * <p>
1769   * Description: <b>A portion of the given name of the person</b><br>
1770   * Type: <b>string</b><br>
1771   * Path: <b>Person.name.given</b><br>
1772   * </p>
1773   */
1774  public static final ca.uhn.fhir.rest.gclient.StringClientParam GIVEN = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_GIVEN);
1775
1776 /**
1777   * Search parameter: <b>identifier</b>
1778   * <p>
1779   * Description: <b>A person Identifier</b><br>
1780   * Type: <b>token</b><br>
1781   * Path: <b>Person.identifier</b><br>
1782   * </p>
1783   */
1784  @SearchParamDefinition(name="identifier", path="Person.identifier", description="A person Identifier", type="token" )
1785  public static final String SP_IDENTIFIER = "identifier";
1786 /**
1787   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
1788   * <p>
1789   * Description: <b>A person Identifier</b><br>
1790   * Type: <b>token</b><br>
1791   * Path: <b>Person.identifier</b><br>
1792   * </p>
1793   */
1794  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
1795
1796 /**
1797   * Search parameter: <b>link</b>
1798   * <p>
1799   * Description: <b>Any link has this Patient, Person, RelatedPerson or Practitioner reference</b><br>
1800   * Type: <b>reference</b><br>
1801   * Path: <b>Person.link.target</b><br>
1802   * </p>
1803   */
1804  @SearchParamDefinition(name="link", path="Person.link.target", description="Any link has this Patient, Person, RelatedPerson or Practitioner reference", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for RelatedPerson") }, target={Patient.class, Person.class, Practitioner.class, RelatedPerson.class } )
1805  public static final String SP_LINK = "link";
1806 /**
1807   * <b>Fluent Client</b> search parameter constant for <b>link</b>
1808   * <p>
1809   * Description: <b>Any link has this Patient, Person, RelatedPerson or Practitioner reference</b><br>
1810   * Type: <b>reference</b><br>
1811   * Path: <b>Person.link.target</b><br>
1812   * </p>
1813   */
1814  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam LINK = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_LINK);
1815
1816/**
1817   * Constant for fluent queries to be used to add include statements. Specifies
1818   * the path value of "<b>Person:link</b>".
1819   */
1820  public static final ca.uhn.fhir.model.api.Include INCLUDE_LINK = new ca.uhn.fhir.model.api.Include("Person:link").toLocked();
1821
1822 /**
1823   * Search parameter: <b>name</b>
1824   * <p>
1825   * 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>
1826   * Type: <b>string</b><br>
1827   * Path: <b>Person.name</b><br>
1828   * </p>
1829   */
1830  @SearchParamDefinition(name="name", path="Person.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" )
1831  public static final String SP_NAME = "name";
1832 /**
1833   * <b>Fluent Client</b> search parameter constant for <b>name</b>
1834   * <p>
1835   * 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>
1836   * Type: <b>string</b><br>
1837   * Path: <b>Person.name</b><br>
1838   * </p>
1839   */
1840  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
1841
1842 /**
1843   * Search parameter: <b>organization</b>
1844   * <p>
1845   * Description: <b>The organization at which this person record is being managed</b><br>
1846   * Type: <b>reference</b><br>
1847   * Path: <b>Person.managingOrganization</b><br>
1848   * </p>
1849   */
1850  @SearchParamDefinition(name="organization", path="Person.managingOrganization", description="The organization at which this person record is being managed", type="reference", target={Organization.class } )
1851  public static final String SP_ORGANIZATION = "organization";
1852 /**
1853   * <b>Fluent Client</b> search parameter constant for <b>organization</b>
1854   * <p>
1855   * Description: <b>The organization at which this person record is being managed</b><br>
1856   * Type: <b>reference</b><br>
1857   * Path: <b>Person.managingOrganization</b><br>
1858   * </p>
1859   */
1860  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ORGANIZATION);
1861
1862/**
1863   * Constant for fluent queries to be used to add include statements. Specifies
1864   * the path value of "<b>Person:organization</b>".
1865   */
1866  public static final ca.uhn.fhir.model.api.Include INCLUDE_ORGANIZATION = new ca.uhn.fhir.model.api.Include("Person:organization").toLocked();
1867
1868 /**
1869   * Search parameter: <b>patient</b>
1870   * <p>
1871   * Description: <b>The Person links to this Patient</b><br>
1872   * Type: <b>reference</b><br>
1873   * Path: <b>Person.link.target.where(resolve() is Patient)</b><br>
1874   * </p>
1875   */
1876  @SearchParamDefinition(name="patient", path="Person.link.target.where(resolve() is Patient)", description="The Person links to this Patient", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Patient") }, target={Patient.class, Person.class, Practitioner.class, RelatedPerson.class } )
1877  public static final String SP_PATIENT = "patient";
1878 /**
1879   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
1880   * <p>
1881   * Description: <b>The Person links to this Patient</b><br>
1882   * Type: <b>reference</b><br>
1883   * Path: <b>Person.link.target.where(resolve() is Patient)</b><br>
1884   * </p>
1885   */
1886  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
1887
1888/**
1889   * Constant for fluent queries to be used to add include statements. Specifies
1890   * the path value of "<b>Person:patient</b>".
1891   */
1892  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Person:patient").toLocked();
1893
1894 /**
1895   * Search parameter: <b>practitioner</b>
1896   * <p>
1897   * Description: <b>The Person links to this Practitioner</b><br>
1898   * Type: <b>reference</b><br>
1899   * Path: <b>Person.link.target.where(resolve() is Practitioner)</b><br>
1900   * </p>
1901   */
1902  @SearchParamDefinition(name="practitioner", path="Person.link.target.where(resolve() is Practitioner)", description="The Person links to this Practitioner", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Base FHIR compartment definition for Practitioner") }, target={Patient.class, Person.class, Practitioner.class, RelatedPerson.class } )
1903  public static final String SP_PRACTITIONER = "practitioner";
1904 /**
1905   * <b>Fluent Client</b> search parameter constant for <b>practitioner</b>
1906   * <p>
1907   * Description: <b>The Person links to this Practitioner</b><br>
1908   * Type: <b>reference</b><br>
1909   * Path: <b>Person.link.target.where(resolve() is Practitioner)</b><br>
1910   * </p>
1911   */
1912  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRACTITIONER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRACTITIONER);
1913
1914/**
1915   * Constant for fluent queries to be used to add include statements. Specifies
1916   * the path value of "<b>Person:practitioner</b>".
1917   */
1918  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRACTITIONER = new ca.uhn.fhir.model.api.Include("Person:practitioner").toLocked();
1919
1920 /**
1921   * Search parameter: <b>relatedperson</b>
1922   * <p>
1923   * Description: <b>The Person links to this RelatedPerson</b><br>
1924   * Type: <b>reference</b><br>
1925   * Path: <b>Person.link.target.where(resolve() is RelatedPerson)</b><br>
1926   * </p>
1927   */
1928  @SearchParamDefinition(name="relatedperson", path="Person.link.target.where(resolve() is RelatedPerson)", description="The Person links to this RelatedPerson", type="reference", target={Patient.class, Person.class, Practitioner.class, RelatedPerson.class } )
1929  public static final String SP_RELATEDPERSON = "relatedperson";
1930 /**
1931   * <b>Fluent Client</b> search parameter constant for <b>relatedperson</b>
1932   * <p>
1933   * Description: <b>The Person links to this RelatedPerson</b><br>
1934   * Type: <b>reference</b><br>
1935   * Path: <b>Person.link.target.where(resolve() is RelatedPerson)</b><br>
1936   * </p>
1937   */
1938  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam RELATEDPERSON = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_RELATEDPERSON);
1939
1940/**
1941   * Constant for fluent queries to be used to add include statements. Specifies
1942   * the path value of "<b>Person:relatedperson</b>".
1943   */
1944  public static final ca.uhn.fhir.model.api.Include INCLUDE_RELATEDPERSON = new ca.uhn.fhir.model.api.Include("Person:relatedperson").toLocked();
1945
1946 /**
1947   * Search parameter: <b>address-city</b>
1948   * <p>
1949   * Description: <b>Multiple Resources: 
1950
1951* [Patient](patient.html): A city specified in an address
1952* [Person](person.html): A city specified in an address
1953* [Practitioner](practitioner.html): A city specified in an address
1954* [RelatedPerson](relatedperson.html): A city specified in an address
1955</b><br>
1956   * Type: <b>string</b><br>
1957   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1958   * </p>
1959   */
1960  @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" )
1961  public static final String SP_ADDRESS_CITY = "address-city";
1962 /**
1963   * <b>Fluent Client</b> search parameter constant for <b>address-city</b>
1964   * <p>
1965   * Description: <b>Multiple Resources: 
1966
1967* [Patient](patient.html): A city specified in an address
1968* [Person](person.html): A city specified in an address
1969* [Practitioner](practitioner.html): A city specified in an address
1970* [RelatedPerson](relatedperson.html): A city specified in an address
1971</b><br>
1972   * Type: <b>string</b><br>
1973   * Path: <b>Patient.address.city | Person.address.city | Practitioner.address.city | RelatedPerson.address.city</b><br>
1974   * </p>
1975   */
1976  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_CITY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_CITY);
1977
1978 /**
1979   * Search parameter: <b>address-country</b>
1980   * <p>
1981   * Description: <b>Multiple Resources: 
1982
1983* [Patient](patient.html): A country specified in an address
1984* [Person](person.html): A country specified in an address
1985* [Practitioner](practitioner.html): A country specified in an address
1986* [RelatedPerson](relatedperson.html): A country specified in an address
1987</b><br>
1988   * Type: <b>string</b><br>
1989   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
1990   * </p>
1991   */
1992  @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" )
1993  public static final String SP_ADDRESS_COUNTRY = "address-country";
1994 /**
1995   * <b>Fluent Client</b> search parameter constant for <b>address-country</b>
1996   * <p>
1997   * Description: <b>Multiple Resources: 
1998
1999* [Patient](patient.html): A country specified in an address
2000* [Person](person.html): A country specified in an address
2001* [Practitioner](practitioner.html): A country specified in an address
2002* [RelatedPerson](relatedperson.html): A country specified in an address
2003</b><br>
2004   * Type: <b>string</b><br>
2005   * Path: <b>Patient.address.country | Person.address.country | Practitioner.address.country | RelatedPerson.address.country</b><br>
2006   * </p>
2007   */
2008  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_COUNTRY = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_COUNTRY);
2009
2010 /**
2011   * Search parameter: <b>address-postalcode</b>
2012   * <p>
2013   * Description: <b>Multiple Resources: 
2014
2015* [Patient](patient.html): A postalCode specified in an address
2016* [Person](person.html): A postal code specified in an address
2017* [Practitioner](practitioner.html): A postalCode specified in an address
2018* [RelatedPerson](relatedperson.html): A postal code specified in an address
2019</b><br>
2020   * Type: <b>string</b><br>
2021   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
2022   * </p>
2023   */
2024  @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" )
2025  public static final String SP_ADDRESS_POSTALCODE = "address-postalcode";
2026 /**
2027   * <b>Fluent Client</b> search parameter constant for <b>address-postalcode</b>
2028   * <p>
2029   * Description: <b>Multiple Resources: 
2030
2031* [Patient](patient.html): A postalCode specified in an address
2032* [Person](person.html): A postal code specified in an address
2033* [Practitioner](practitioner.html): A postalCode specified in an address
2034* [RelatedPerson](relatedperson.html): A postal code specified in an address
2035</b><br>
2036   * Type: <b>string</b><br>
2037   * Path: <b>Patient.address.postalCode | Person.address.postalCode | Practitioner.address.postalCode | RelatedPerson.address.postalCode</b><br>
2038   * </p>
2039   */
2040  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_POSTALCODE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_POSTALCODE);
2041
2042 /**
2043   * Search parameter: <b>address-state</b>
2044   * <p>
2045   * Description: <b>Multiple Resources: 
2046
2047* [Patient](patient.html): A state specified in an address
2048* [Person](person.html): A state specified in an address
2049* [Practitioner](practitioner.html): A state specified in an address
2050* [RelatedPerson](relatedperson.html): A state specified in an address
2051</b><br>
2052   * Type: <b>string</b><br>
2053   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
2054   * </p>
2055   */
2056  @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" )
2057  public static final String SP_ADDRESS_STATE = "address-state";
2058 /**
2059   * <b>Fluent Client</b> search parameter constant for <b>address-state</b>
2060   * <p>
2061   * Description: <b>Multiple Resources: 
2062
2063* [Patient](patient.html): A state specified in an address
2064* [Person](person.html): A state specified in an address
2065* [Practitioner](practitioner.html): A state specified in an address
2066* [RelatedPerson](relatedperson.html): A state specified in an address
2067</b><br>
2068   * Type: <b>string</b><br>
2069   * Path: <b>Patient.address.state | Person.address.state | Practitioner.address.state | RelatedPerson.address.state</b><br>
2070   * </p>
2071   */
2072  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS_STATE = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS_STATE);
2073
2074 /**
2075   * Search parameter: <b>address-use</b>
2076   * <p>
2077   * Description: <b>Multiple Resources: 
2078
2079* [Patient](patient.html): A use code specified in an address
2080* [Person](person.html): A use code specified in an address
2081* [Practitioner](practitioner.html): A use code specified in an address
2082* [RelatedPerson](relatedperson.html): A use code specified in an address
2083</b><br>
2084   * Type: <b>token</b><br>
2085   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
2086   * </p>
2087   */
2088  @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" )
2089  public static final String SP_ADDRESS_USE = "address-use";
2090 /**
2091   * <b>Fluent Client</b> search parameter constant for <b>address-use</b>
2092   * <p>
2093   * Description: <b>Multiple Resources: 
2094
2095* [Patient](patient.html): A use code specified in an address
2096* [Person](person.html): A use code specified in an address
2097* [Practitioner](practitioner.html): A use code specified in an address
2098* [RelatedPerson](relatedperson.html): A use code specified in an address
2099</b><br>
2100   * Type: <b>token</b><br>
2101   * Path: <b>Patient.address.use | Person.address.use | Practitioner.address.use | RelatedPerson.address.use</b><br>
2102   * </p>
2103   */
2104  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ADDRESS_USE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ADDRESS_USE);
2105
2106 /**
2107   * Search parameter: <b>address</b>
2108   * <p>
2109   * Description: <b>Multiple Resources: 
2110
2111* [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
2112* [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
2113* [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
2114* [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
2115</b><br>
2116   * Type: <b>string</b><br>
2117   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
2118   * </p>
2119   */
2120  @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" )
2121  public static final String SP_ADDRESS = "address";
2122 /**
2123   * <b>Fluent Client</b> search parameter constant for <b>address</b>
2124   * <p>
2125   * Description: <b>Multiple Resources: 
2126
2127* [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
2128* [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
2129* [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
2130* [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
2131</b><br>
2132   * Type: <b>string</b><br>
2133   * Path: <b>Patient.address | Person.address | Practitioner.address | RelatedPerson.address</b><br>
2134   * </p>
2135   */
2136  public static final ca.uhn.fhir.rest.gclient.StringClientParam ADDRESS = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_ADDRESS);
2137
2138 /**
2139   * Search parameter: <b>birthdate</b>
2140   * <p>
2141   * Description: <b>Multiple Resources: 
2142
2143* [Patient](patient.html): The patient's date of birth
2144* [Person](person.html): The person's date of birth
2145* [RelatedPerson](relatedperson.html): The Related Person's date of birth
2146</b><br>
2147   * Type: <b>date</b><br>
2148   * Path: <b>Patient.birthDate | Person.birthDate | RelatedPerson.birthDate</b><br>
2149   * </p>
2150   */
2151  @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" )
2152  public static final String SP_BIRTHDATE = "birthdate";
2153 /**
2154   * <b>Fluent Client</b> search parameter constant for <b>birthdate</b>
2155   * <p>
2156   * Description: <b>Multiple Resources: 
2157
2158* [Patient](patient.html): The patient's date of birth
2159* [Person](person.html): The person's date of birth
2160* [RelatedPerson](relatedperson.html): The Related Person's date of birth
2161</b><br>
2162   * Type: <b>date</b><br>
2163   * Path: <b>Patient.birthDate | Person.birthDate | RelatedPerson.birthDate</b><br>
2164   * </p>
2165   */
2166  public static final ca.uhn.fhir.rest.gclient.DateClientParam BIRTHDATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_BIRTHDATE);
2167
2168 /**
2169   * Search parameter: <b>email</b>
2170   * <p>
2171   * Description: <b>Multiple Resources: 
2172
2173* [Patient](patient.html): A value in an email contact
2174* [Person](person.html): A value in an email contact
2175* [Practitioner](practitioner.html): A value in an email contact
2176* [PractitionerRole](practitionerrole.html): A value in an email contact
2177* [RelatedPerson](relatedperson.html): A value in an email contact
2178</b><br>
2179   * Type: <b>token</b><br>
2180   * 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>
2181   * </p>
2182   */
2183  @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" )
2184  public static final String SP_EMAIL = "email";
2185 /**
2186   * <b>Fluent Client</b> search parameter constant for <b>email</b>
2187   * <p>
2188   * Description: <b>Multiple Resources: 
2189
2190* [Patient](patient.html): A value in an email contact
2191* [Person](person.html): A value in an email contact
2192* [Practitioner](practitioner.html): A value in an email contact
2193* [PractitionerRole](practitionerrole.html): A value in an email contact
2194* [RelatedPerson](relatedperson.html): A value in an email contact
2195</b><br>
2196   * Type: <b>token</b><br>
2197   * 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>
2198   * </p>
2199   */
2200  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EMAIL = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_EMAIL);
2201
2202 /**
2203   * Search parameter: <b>gender</b>
2204   * <p>
2205   * Description: <b>Multiple Resources: 
2206
2207* [Patient](patient.html): Gender of the patient
2208* [Person](person.html): The gender of the person
2209* [Practitioner](practitioner.html): Gender of the practitioner
2210* [RelatedPerson](relatedperson.html): Gender of the related person
2211</b><br>
2212   * Type: <b>token</b><br>
2213   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
2214   * </p>
2215   */
2216  @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" )
2217  public static final String SP_GENDER = "gender";
2218 /**
2219   * <b>Fluent Client</b> search parameter constant for <b>gender</b>
2220   * <p>
2221   * Description: <b>Multiple Resources: 
2222
2223* [Patient](patient.html): Gender of the patient
2224* [Person](person.html): The gender of the person
2225* [Practitioner](practitioner.html): Gender of the practitioner
2226* [RelatedPerson](relatedperson.html): Gender of the related person
2227</b><br>
2228   * Type: <b>token</b><br>
2229   * Path: <b>Patient.gender | Person.gender | Practitioner.gender | RelatedPerson.gender</b><br>
2230   * </p>
2231   */
2232  public static final ca.uhn.fhir.rest.gclient.TokenClientParam GENDER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_GENDER);
2233
2234 /**
2235   * Search parameter: <b>phone</b>
2236   * <p>
2237   * Description: <b>Multiple Resources: 
2238
2239* [Patient](patient.html): A value in a phone contact
2240* [Person](person.html): A value in a phone contact
2241* [Practitioner](practitioner.html): A value in a phone contact
2242* [PractitionerRole](practitionerrole.html): A value in a phone contact
2243* [RelatedPerson](relatedperson.html): A value in a phone contact
2244</b><br>
2245   * Type: <b>token</b><br>
2246   * 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>
2247   * </p>
2248   */
2249  @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" )
2250  public static final String SP_PHONE = "phone";
2251 /**
2252   * <b>Fluent Client</b> search parameter constant for <b>phone</b>
2253   * <p>
2254   * Description: <b>Multiple Resources: 
2255
2256* [Patient](patient.html): A value in a phone contact
2257* [Person](person.html): A value in a phone contact
2258* [Practitioner](practitioner.html): A value in a phone contact
2259* [PractitionerRole](practitionerrole.html): A value in a phone contact
2260* [RelatedPerson](relatedperson.html): A value in a phone contact
2261</b><br>
2262   * Type: <b>token</b><br>
2263   * 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>
2264   * </p>
2265   */
2266  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PHONE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PHONE);
2267
2268 /**
2269   * Search parameter: <b>phonetic</b>
2270   * <p>
2271   * Description: <b>Multiple Resources: 
2272
2273* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
2274* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
2275* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
2276* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
2277</b><br>
2278   * Type: <b>string</b><br>
2279   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
2280   * </p>
2281   */
2282  @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" )
2283  public static final String SP_PHONETIC = "phonetic";
2284 /**
2285   * <b>Fluent Client</b> search parameter constant for <b>phonetic</b>
2286   * <p>
2287   * Description: <b>Multiple Resources: 
2288
2289* [Patient](patient.html): A portion of either family or given name using some kind of phonetic matching algorithm
2290* [Person](person.html): A portion of name using some kind of phonetic matching algorithm
2291* [Practitioner](practitioner.html): A portion of either family or given name using some kind of phonetic matching algorithm
2292* [RelatedPerson](relatedperson.html): A portion of name using some kind of phonetic matching algorithm
2293</b><br>
2294   * Type: <b>string</b><br>
2295   * Path: <b>Patient.name | Person.name | Practitioner.name | RelatedPerson.name</b><br>
2296   * </p>
2297   */
2298  public static final ca.uhn.fhir.rest.gclient.StringClientParam PHONETIC = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PHONETIC);
2299
2300 /**
2301   * Search parameter: <b>telecom</b>
2302   * <p>
2303   * Description: <b>Multiple Resources: 
2304
2305* [Patient](patient.html): The value in any kind of telecom details of the patient
2306* [Person](person.html): The value in any kind of contact
2307* [Practitioner](practitioner.html): The value in any kind of contact
2308* [PractitionerRole](practitionerrole.html): The value in any kind of contact
2309* [RelatedPerson](relatedperson.html): The value in any kind of contact
2310</b><br>
2311   * Type: <b>token</b><br>
2312   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom</b><br>
2313   * </p>
2314   */
2315  @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" )
2316  public static final String SP_TELECOM = "telecom";
2317 /**
2318   * <b>Fluent Client</b> search parameter constant for <b>telecom</b>
2319   * <p>
2320   * Description: <b>Multiple Resources: 
2321
2322* [Patient](patient.html): The value in any kind of telecom details of the patient
2323* [Person](person.html): The value in any kind of contact
2324* [Practitioner](practitioner.html): The value in any kind of contact
2325* [PractitionerRole](practitionerrole.html): The value in any kind of contact
2326* [RelatedPerson](relatedperson.html): The value in any kind of contact
2327</b><br>
2328   * Type: <b>token</b><br>
2329   * Path: <b>Patient.telecom | Person.telecom | Practitioner.telecom | PractitionerRole.telecom | RelatedPerson.telecom</b><br>
2330   * </p>
2331   */
2332  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TELECOM = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TELECOM);
2333
2334
2335}
2336