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