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