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 * Describes validation requirements, source(s), status and dates for one or more elements.
052 */
053@ResourceDef(name="VerificationResult", profile="http://hl7.org/fhir/StructureDefinition/VerificationResult")
054public class VerificationResult extends DomainResource {
055
056    public enum VerificationResultStatus {
057        /**
058         * ***TODO***
059         */
060        ATTESTED, 
061        /**
062         * ***TODO***
063         */
064        VALIDATED, 
065        /**
066         * ***TODO***
067         */
068        INPROCESS, 
069        /**
070         * ***TODO***
071         */
072        REQREVALID, 
073        /**
074         * ***TODO***
075         */
076        VALFAIL, 
077        /**
078         * ***TODO***
079         */
080        REVALFAIL, 
081        /**
082         * The VerificationResult record was created erroneously and is not appropriated for use.
083         */
084        ENTEREDINERROR, 
085        /**
086         * added to help the parsers with the generic types
087         */
088        NULL;
089        public static VerificationResultStatus fromCode(String codeString) throws FHIRException {
090            if (codeString == null || "".equals(codeString))
091                return null;
092        if ("attested".equals(codeString))
093          return ATTESTED;
094        if ("validated".equals(codeString))
095          return VALIDATED;
096        if ("in-process".equals(codeString))
097          return INPROCESS;
098        if ("req-revalid".equals(codeString))
099          return REQREVALID;
100        if ("val-fail".equals(codeString))
101          return VALFAIL;
102        if ("reval-fail".equals(codeString))
103          return REVALFAIL;
104        if ("entered-in-error".equals(codeString))
105          return ENTEREDINERROR;
106        if (Configuration.isAcceptInvalidEnums())
107          return null;
108        else
109          throw new FHIRException("Unknown VerificationResultStatus code '"+codeString+"'");
110        }
111        public String toCode() {
112          switch (this) {
113            case ATTESTED: return "attested";
114            case VALIDATED: return "validated";
115            case INPROCESS: return "in-process";
116            case REQREVALID: return "req-revalid";
117            case VALFAIL: return "val-fail";
118            case REVALFAIL: return "reval-fail";
119            case ENTEREDINERROR: return "entered-in-error";
120            case NULL: return null;
121            default: return "?";
122          }
123        }
124        public String getSystem() {
125          switch (this) {
126            case ATTESTED: return "http://hl7.org/fhir/CodeSystem/verificationresult-status";
127            case VALIDATED: return "http://hl7.org/fhir/CodeSystem/verificationresult-status";
128            case INPROCESS: return "http://hl7.org/fhir/CodeSystem/verificationresult-status";
129            case REQREVALID: return "http://hl7.org/fhir/CodeSystem/verificationresult-status";
130            case VALFAIL: return "http://hl7.org/fhir/CodeSystem/verificationresult-status";
131            case REVALFAIL: return "http://hl7.org/fhir/CodeSystem/verificationresult-status";
132            case ENTEREDINERROR: return "http://hl7.org/fhir/CodeSystem/verificationresult-status";
133            case NULL: return null;
134            default: return "?";
135          }
136        }
137        public String getDefinition() {
138          switch (this) {
139            case ATTESTED: return "***TODO***";
140            case VALIDATED: return "***TODO***";
141            case INPROCESS: return "***TODO***";
142            case REQREVALID: return "***TODO***";
143            case VALFAIL: return "***TODO***";
144            case REVALFAIL: return "***TODO***";
145            case ENTEREDINERROR: return "The VerificationResult record was created erroneously and is not appropriated for use.";
146            case NULL: return null;
147            default: return "?";
148          }
149        }
150        public String getDisplay() {
151          switch (this) {
152            case ATTESTED: return "Attested";
153            case VALIDATED: return "Validated";
154            case INPROCESS: return "In process";
155            case REQREVALID: return "Requires revalidation";
156            case VALFAIL: return "Validation failed";
157            case REVALFAIL: return "Re-Validation failed";
158            case ENTEREDINERROR: return "Entered in Error";
159            case NULL: return null;
160            default: return "?";
161          }
162        }
163    }
164
165  public static class VerificationResultStatusEnumFactory implements EnumFactory<VerificationResultStatus> {
166    public VerificationResultStatus fromCode(String codeString) throws IllegalArgumentException {
167      if (codeString == null || "".equals(codeString))
168            if (codeString == null || "".equals(codeString))
169                return null;
170        if ("attested".equals(codeString))
171          return VerificationResultStatus.ATTESTED;
172        if ("validated".equals(codeString))
173          return VerificationResultStatus.VALIDATED;
174        if ("in-process".equals(codeString))
175          return VerificationResultStatus.INPROCESS;
176        if ("req-revalid".equals(codeString))
177          return VerificationResultStatus.REQREVALID;
178        if ("val-fail".equals(codeString))
179          return VerificationResultStatus.VALFAIL;
180        if ("reval-fail".equals(codeString))
181          return VerificationResultStatus.REVALFAIL;
182        if ("entered-in-error".equals(codeString))
183          return VerificationResultStatus.ENTEREDINERROR;
184        throw new IllegalArgumentException("Unknown VerificationResultStatus code '"+codeString+"'");
185        }
186        public Enumeration<VerificationResultStatus> fromType(PrimitiveType<?> code) throws FHIRException {
187          if (code == null)
188            return null;
189          if (code.isEmpty())
190            return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.NULL, code);
191          String codeString = ((PrimitiveType) code).asStringValue();
192          if (codeString == null || "".equals(codeString))
193            return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.NULL, code);
194        if ("attested".equals(codeString))
195          return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.ATTESTED, code);
196        if ("validated".equals(codeString))
197          return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.VALIDATED, code);
198        if ("in-process".equals(codeString))
199          return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.INPROCESS, code);
200        if ("req-revalid".equals(codeString))
201          return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.REQREVALID, code);
202        if ("val-fail".equals(codeString))
203          return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.VALFAIL, code);
204        if ("reval-fail".equals(codeString))
205          return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.REVALFAIL, code);
206        if ("entered-in-error".equals(codeString))
207          return new Enumeration<VerificationResultStatus>(this, VerificationResultStatus.ENTEREDINERROR, code);
208        throw new FHIRException("Unknown VerificationResultStatus code '"+codeString+"'");
209        }
210    public String toCode(VerificationResultStatus code) {
211       if (code == VerificationResultStatus.NULL)
212           return null;
213       if (code == VerificationResultStatus.ATTESTED)
214        return "attested";
215      if (code == VerificationResultStatus.VALIDATED)
216        return "validated";
217      if (code == VerificationResultStatus.INPROCESS)
218        return "in-process";
219      if (code == VerificationResultStatus.REQREVALID)
220        return "req-revalid";
221      if (code == VerificationResultStatus.VALFAIL)
222        return "val-fail";
223      if (code == VerificationResultStatus.REVALFAIL)
224        return "reval-fail";
225      if (code == VerificationResultStatus.ENTEREDINERROR)
226        return "entered-in-error";
227      return "?";
228   }
229    public String toSystem(VerificationResultStatus code) {
230      return code.getSystem();
231      }
232    }
233
234    @Block()
235    public static class VerificationResultPrimarySourceComponent extends BackboneElement implements IBaseBackboneElement {
236        /**
237         * Reference to the primary source.
238         */
239        @Child(name = "who", type = {Organization.class, Practitioner.class, PractitionerRole.class}, order=1, min=0, max=1, modifier=false, summary=false)
240        @Description(shortDefinition="Reference to the primary source", formalDefinition="Reference to the primary source." )
241        protected Reference who;
242
243        /**
244         * Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source).
245         */
246        @Child(name = "type", type = {CodeableConcept.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
247        @Description(shortDefinition="Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source)", formalDefinition="Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source)." )
248        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-primary-source-type")
249        protected List<CodeableConcept> type;
250
251        /**
252         * Method for communicating with the primary source (manual; API; Push).
253         */
254        @Child(name = "communicationMethod", type = {CodeableConcept.class}, order=3, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
255        @Description(shortDefinition="Method for exchanging information with the primary source", formalDefinition="Method for communicating with the primary source (manual; API; Push)." )
256        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-communication-method")
257        protected List<CodeableConcept> communicationMethod;
258
259        /**
260         * Status of the validation of the target against the primary source (successful; failed; unknown).
261         */
262        @Child(name = "validationStatus", type = {CodeableConcept.class}, order=4, min=0, max=1, modifier=false, summary=false)
263        @Description(shortDefinition="successful | failed | unknown", formalDefinition="Status of the validation of the target against the primary source (successful; failed; unknown)." )
264        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-validation-status")
265        protected CodeableConcept validationStatus;
266
267        /**
268         * When the target was validated against the primary source.
269         */
270        @Child(name = "validationDate", type = {DateTimeType.class}, order=5, min=0, max=1, modifier=false, summary=false)
271        @Description(shortDefinition="When the target was validated against the primary source", formalDefinition="When the target was validated against the primary source." )
272        protected DateTimeType validationDate;
273
274        /**
275         * Ability of the primary source to push updates/alerts (yes; no; undetermined).
276         */
277        @Child(name = "canPushUpdates", type = {CodeableConcept.class}, order=6, min=0, max=1, modifier=false, summary=true)
278        @Description(shortDefinition="yes | no | undetermined", formalDefinition="Ability of the primary source to push updates/alerts (yes; no; undetermined)." )
279        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-can-push-updates")
280        protected CodeableConcept canPushUpdates;
281
282        /**
283         * Type of alerts/updates the primary source can send (specific requested changes; any changes; as defined by source).
284         */
285        @Child(name = "pushTypeAvailable", type = {CodeableConcept.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
286        @Description(shortDefinition="specific | any | source", formalDefinition="Type of alerts/updates the primary source can send (specific requested changes; any changes; as defined by source)." )
287        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-push-type-available")
288        protected List<CodeableConcept> pushTypeAvailable;
289
290        private static final long serialVersionUID = -266994197L;
291
292    /**
293     * Constructor
294     */
295      public VerificationResultPrimarySourceComponent() {
296        super();
297      }
298
299        /**
300         * @return {@link #who} (Reference to the primary source.)
301         */
302        public Reference getWho() { 
303          if (this.who == null)
304            if (Configuration.errorOnAutoCreate())
305              throw new Error("Attempt to auto-create VerificationResultPrimarySourceComponent.who");
306            else if (Configuration.doAutoCreate())
307              this.who = new Reference(); // cc
308          return this.who;
309        }
310
311        public boolean hasWho() { 
312          return this.who != null && !this.who.isEmpty();
313        }
314
315        /**
316         * @param value {@link #who} (Reference to the primary source.)
317         */
318        public VerificationResultPrimarySourceComponent setWho(Reference value) { 
319          this.who = value;
320          return this;
321        }
322
323        /**
324         * @return {@link #type} (Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source).)
325         */
326        public List<CodeableConcept> getType() { 
327          if (this.type == null)
328            this.type = new ArrayList<CodeableConcept>();
329          return this.type;
330        }
331
332        /**
333         * @return Returns a reference to <code>this</code> for easy method chaining
334         */
335        public VerificationResultPrimarySourceComponent setType(List<CodeableConcept> theType) { 
336          this.type = theType;
337          return this;
338        }
339
340        public boolean hasType() { 
341          if (this.type == null)
342            return false;
343          for (CodeableConcept item : this.type)
344            if (!item.isEmpty())
345              return true;
346          return false;
347        }
348
349        public CodeableConcept addType() { //3
350          CodeableConcept t = new CodeableConcept();
351          if (this.type == null)
352            this.type = new ArrayList<CodeableConcept>();
353          this.type.add(t);
354          return t;
355        }
356
357        public VerificationResultPrimarySourceComponent addType(CodeableConcept t) { //3
358          if (t == null)
359            return this;
360          if (this.type == null)
361            this.type = new ArrayList<CodeableConcept>();
362          this.type.add(t);
363          return this;
364        }
365
366        /**
367         * @return The first repetition of repeating field {@link #type}, creating it if it does not already exist {3}
368         */
369        public CodeableConcept getTypeFirstRep() { 
370          if (getType().isEmpty()) {
371            addType();
372          }
373          return getType().get(0);
374        }
375
376        /**
377         * @return {@link #communicationMethod} (Method for communicating with the primary source (manual; API; Push).)
378         */
379        public List<CodeableConcept> getCommunicationMethod() { 
380          if (this.communicationMethod == null)
381            this.communicationMethod = new ArrayList<CodeableConcept>();
382          return this.communicationMethod;
383        }
384
385        /**
386         * @return Returns a reference to <code>this</code> for easy method chaining
387         */
388        public VerificationResultPrimarySourceComponent setCommunicationMethod(List<CodeableConcept> theCommunicationMethod) { 
389          this.communicationMethod = theCommunicationMethod;
390          return this;
391        }
392
393        public boolean hasCommunicationMethod() { 
394          if (this.communicationMethod == null)
395            return false;
396          for (CodeableConcept item : this.communicationMethod)
397            if (!item.isEmpty())
398              return true;
399          return false;
400        }
401
402        public CodeableConcept addCommunicationMethod() { //3
403          CodeableConcept t = new CodeableConcept();
404          if (this.communicationMethod == null)
405            this.communicationMethod = new ArrayList<CodeableConcept>();
406          this.communicationMethod.add(t);
407          return t;
408        }
409
410        public VerificationResultPrimarySourceComponent addCommunicationMethod(CodeableConcept t) { //3
411          if (t == null)
412            return this;
413          if (this.communicationMethod == null)
414            this.communicationMethod = new ArrayList<CodeableConcept>();
415          this.communicationMethod.add(t);
416          return this;
417        }
418
419        /**
420         * @return The first repetition of repeating field {@link #communicationMethod}, creating it if it does not already exist {3}
421         */
422        public CodeableConcept getCommunicationMethodFirstRep() { 
423          if (getCommunicationMethod().isEmpty()) {
424            addCommunicationMethod();
425          }
426          return getCommunicationMethod().get(0);
427        }
428
429        /**
430         * @return {@link #validationStatus} (Status of the validation of the target against the primary source (successful; failed; unknown).)
431         */
432        public CodeableConcept getValidationStatus() { 
433          if (this.validationStatus == null)
434            if (Configuration.errorOnAutoCreate())
435              throw new Error("Attempt to auto-create VerificationResultPrimarySourceComponent.validationStatus");
436            else if (Configuration.doAutoCreate())
437              this.validationStatus = new CodeableConcept(); // cc
438          return this.validationStatus;
439        }
440
441        public boolean hasValidationStatus() { 
442          return this.validationStatus != null && !this.validationStatus.isEmpty();
443        }
444
445        /**
446         * @param value {@link #validationStatus} (Status of the validation of the target against the primary source (successful; failed; unknown).)
447         */
448        public VerificationResultPrimarySourceComponent setValidationStatus(CodeableConcept value) { 
449          this.validationStatus = value;
450          return this;
451        }
452
453        /**
454         * @return {@link #validationDate} (When the target was validated against the primary source.). This is the underlying object with id, value and extensions. The accessor "getValidationDate" gives direct access to the value
455         */
456        public DateTimeType getValidationDateElement() { 
457          if (this.validationDate == null)
458            if (Configuration.errorOnAutoCreate())
459              throw new Error("Attempt to auto-create VerificationResultPrimarySourceComponent.validationDate");
460            else if (Configuration.doAutoCreate())
461              this.validationDate = new DateTimeType(); // bb
462          return this.validationDate;
463        }
464
465        public boolean hasValidationDateElement() { 
466          return this.validationDate != null && !this.validationDate.isEmpty();
467        }
468
469        public boolean hasValidationDate() { 
470          return this.validationDate != null && !this.validationDate.isEmpty();
471        }
472
473        /**
474         * @param value {@link #validationDate} (When the target was validated against the primary source.). This is the underlying object with id, value and extensions. The accessor "getValidationDate" gives direct access to the value
475         */
476        public VerificationResultPrimarySourceComponent setValidationDateElement(DateTimeType value) { 
477          this.validationDate = value;
478          return this;
479        }
480
481        /**
482         * @return When the target was validated against the primary source.
483         */
484        public Date getValidationDate() { 
485          return this.validationDate == null ? null : this.validationDate.getValue();
486        }
487
488        /**
489         * @param value When the target was validated against the primary source.
490         */
491        public VerificationResultPrimarySourceComponent setValidationDate(Date value) { 
492          if (value == null)
493            this.validationDate = null;
494          else {
495            if (this.validationDate == null)
496              this.validationDate = new DateTimeType();
497            this.validationDate.setValue(value);
498          }
499          return this;
500        }
501
502        /**
503         * @return {@link #canPushUpdates} (Ability of the primary source to push updates/alerts (yes; no; undetermined).)
504         */
505        public CodeableConcept getCanPushUpdates() { 
506          if (this.canPushUpdates == null)
507            if (Configuration.errorOnAutoCreate())
508              throw new Error("Attempt to auto-create VerificationResultPrimarySourceComponent.canPushUpdates");
509            else if (Configuration.doAutoCreate())
510              this.canPushUpdates = new CodeableConcept(); // cc
511          return this.canPushUpdates;
512        }
513
514        public boolean hasCanPushUpdates() { 
515          return this.canPushUpdates != null && !this.canPushUpdates.isEmpty();
516        }
517
518        /**
519         * @param value {@link #canPushUpdates} (Ability of the primary source to push updates/alerts (yes; no; undetermined).)
520         */
521        public VerificationResultPrimarySourceComponent setCanPushUpdates(CodeableConcept value) { 
522          this.canPushUpdates = value;
523          return this;
524        }
525
526        /**
527         * @return {@link #pushTypeAvailable} (Type of alerts/updates the primary source can send (specific requested changes; any changes; as defined by source).)
528         */
529        public List<CodeableConcept> getPushTypeAvailable() { 
530          if (this.pushTypeAvailable == null)
531            this.pushTypeAvailable = new ArrayList<CodeableConcept>();
532          return this.pushTypeAvailable;
533        }
534
535        /**
536         * @return Returns a reference to <code>this</code> for easy method chaining
537         */
538        public VerificationResultPrimarySourceComponent setPushTypeAvailable(List<CodeableConcept> thePushTypeAvailable) { 
539          this.pushTypeAvailable = thePushTypeAvailable;
540          return this;
541        }
542
543        public boolean hasPushTypeAvailable() { 
544          if (this.pushTypeAvailable == null)
545            return false;
546          for (CodeableConcept item : this.pushTypeAvailable)
547            if (!item.isEmpty())
548              return true;
549          return false;
550        }
551
552        public CodeableConcept addPushTypeAvailable() { //3
553          CodeableConcept t = new CodeableConcept();
554          if (this.pushTypeAvailable == null)
555            this.pushTypeAvailable = new ArrayList<CodeableConcept>();
556          this.pushTypeAvailable.add(t);
557          return t;
558        }
559
560        public VerificationResultPrimarySourceComponent addPushTypeAvailable(CodeableConcept t) { //3
561          if (t == null)
562            return this;
563          if (this.pushTypeAvailable == null)
564            this.pushTypeAvailable = new ArrayList<CodeableConcept>();
565          this.pushTypeAvailable.add(t);
566          return this;
567        }
568
569        /**
570         * @return The first repetition of repeating field {@link #pushTypeAvailable}, creating it if it does not already exist {3}
571         */
572        public CodeableConcept getPushTypeAvailableFirstRep() { 
573          if (getPushTypeAvailable().isEmpty()) {
574            addPushTypeAvailable();
575          }
576          return getPushTypeAvailable().get(0);
577        }
578
579        protected void listChildren(List<Property> children) {
580          super.listChildren(children);
581          children.add(new Property("who", "Reference(Organization|Practitioner|PractitionerRole)", "Reference to the primary source.", 0, 1, who));
582          children.add(new Property("type", "CodeableConcept", "Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source).", 0, java.lang.Integer.MAX_VALUE, type));
583          children.add(new Property("communicationMethod", "CodeableConcept", "Method for communicating with the primary source (manual; API; Push).", 0, java.lang.Integer.MAX_VALUE, communicationMethod));
584          children.add(new Property("validationStatus", "CodeableConcept", "Status of the validation of the target against the primary source (successful; failed; unknown).", 0, 1, validationStatus));
585          children.add(new Property("validationDate", "dateTime", "When the target was validated against the primary source.", 0, 1, validationDate));
586          children.add(new Property("canPushUpdates", "CodeableConcept", "Ability of the primary source to push updates/alerts (yes; no; undetermined).", 0, 1, canPushUpdates));
587          children.add(new Property("pushTypeAvailable", "CodeableConcept", "Type of alerts/updates the primary source can send (specific requested changes; any changes; as defined by source).", 0, java.lang.Integer.MAX_VALUE, pushTypeAvailable));
588        }
589
590        @Override
591        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
592          switch (_hash) {
593          case 117694: /*who*/  return new Property("who", "Reference(Organization|Practitioner|PractitionerRole)", "Reference to the primary source.", 0, 1, who);
594          case 3575610: /*type*/  return new Property("type", "CodeableConcept", "Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source).", 0, java.lang.Integer.MAX_VALUE, type);
595          case 1314116695: /*communicationMethod*/  return new Property("communicationMethod", "CodeableConcept", "Method for communicating with the primary source (manual; API; Push).", 0, java.lang.Integer.MAX_VALUE, communicationMethod);
596          case 1775633867: /*validationStatus*/  return new Property("validationStatus", "CodeableConcept", "Status of the validation of the target against the primary source (successful; failed; unknown).", 0, 1, validationStatus);
597          case -280180793: /*validationDate*/  return new Property("validationDate", "dateTime", "When the target was validated against the primary source.", 0, 1, validationDate);
598          case 1463787104: /*canPushUpdates*/  return new Property("canPushUpdates", "CodeableConcept", "Ability of the primary source to push updates/alerts (yes; no; undetermined).", 0, 1, canPushUpdates);
599          case 945223605: /*pushTypeAvailable*/  return new Property("pushTypeAvailable", "CodeableConcept", "Type of alerts/updates the primary source can send (specific requested changes; any changes; as defined by source).", 0, java.lang.Integer.MAX_VALUE, pushTypeAvailable);
600          default: return super.getNamedProperty(_hash, _name, _checkValid);
601          }
602
603        }
604
605      @Override
606      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
607        switch (hash) {
608        case 117694: /*who*/ return this.who == null ? new Base[0] : new Base[] {this.who}; // Reference
609        case 3575610: /*type*/ return this.type == null ? new Base[0] : this.type.toArray(new Base[this.type.size()]); // CodeableConcept
610        case 1314116695: /*communicationMethod*/ return this.communicationMethod == null ? new Base[0] : this.communicationMethod.toArray(new Base[this.communicationMethod.size()]); // CodeableConcept
611        case 1775633867: /*validationStatus*/ return this.validationStatus == null ? new Base[0] : new Base[] {this.validationStatus}; // CodeableConcept
612        case -280180793: /*validationDate*/ return this.validationDate == null ? new Base[0] : new Base[] {this.validationDate}; // DateTimeType
613        case 1463787104: /*canPushUpdates*/ return this.canPushUpdates == null ? new Base[0] : new Base[] {this.canPushUpdates}; // CodeableConcept
614        case 945223605: /*pushTypeAvailable*/ return this.pushTypeAvailable == null ? new Base[0] : this.pushTypeAvailable.toArray(new Base[this.pushTypeAvailable.size()]); // CodeableConcept
615        default: return super.getProperty(hash, name, checkValid);
616        }
617
618      }
619
620      @Override
621      public Base setProperty(int hash, String name, Base value) throws FHIRException {
622        switch (hash) {
623        case 117694: // who
624          this.who = TypeConvertor.castToReference(value); // Reference
625          return value;
626        case 3575610: // type
627          this.getType().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
628          return value;
629        case 1314116695: // communicationMethod
630          this.getCommunicationMethod().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
631          return value;
632        case 1775633867: // validationStatus
633          this.validationStatus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
634          return value;
635        case -280180793: // validationDate
636          this.validationDate = TypeConvertor.castToDateTime(value); // DateTimeType
637          return value;
638        case 1463787104: // canPushUpdates
639          this.canPushUpdates = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
640          return value;
641        case 945223605: // pushTypeAvailable
642          this.getPushTypeAvailable().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
643          return value;
644        default: return super.setProperty(hash, name, value);
645        }
646
647      }
648
649      @Override
650      public Base setProperty(String name, Base value) throws FHIRException {
651        if (name.equals("who")) {
652          this.who = TypeConvertor.castToReference(value); // Reference
653        } else if (name.equals("type")) {
654          this.getType().add(TypeConvertor.castToCodeableConcept(value));
655        } else if (name.equals("communicationMethod")) {
656          this.getCommunicationMethod().add(TypeConvertor.castToCodeableConcept(value));
657        } else if (name.equals("validationStatus")) {
658          this.validationStatus = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
659        } else if (name.equals("validationDate")) {
660          this.validationDate = TypeConvertor.castToDateTime(value); // DateTimeType
661        } else if (name.equals("canPushUpdates")) {
662          this.canPushUpdates = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
663        } else if (name.equals("pushTypeAvailable")) {
664          this.getPushTypeAvailable().add(TypeConvertor.castToCodeableConcept(value));
665        } else
666          return super.setProperty(name, value);
667        return value;
668      }
669
670  @Override
671  public void removeChild(String name, Base value) throws FHIRException {
672        if (name.equals("who")) {
673          this.who = null;
674        } else if (name.equals("type")) {
675          this.getType().remove(value);
676        } else if (name.equals("communicationMethod")) {
677          this.getCommunicationMethod().remove(value);
678        } else if (name.equals("validationStatus")) {
679          this.validationStatus = null;
680        } else if (name.equals("validationDate")) {
681          this.validationDate = null;
682        } else if (name.equals("canPushUpdates")) {
683          this.canPushUpdates = null;
684        } else if (name.equals("pushTypeAvailable")) {
685          this.getPushTypeAvailable().remove(value);
686        } else
687          super.removeChild(name, value);
688        
689      }
690
691      @Override
692      public Base makeProperty(int hash, String name) throws FHIRException {
693        switch (hash) {
694        case 117694:  return getWho();
695        case 3575610:  return addType(); 
696        case 1314116695:  return addCommunicationMethod(); 
697        case 1775633867:  return getValidationStatus();
698        case -280180793:  return getValidationDateElement();
699        case 1463787104:  return getCanPushUpdates();
700        case 945223605:  return addPushTypeAvailable(); 
701        default: return super.makeProperty(hash, name);
702        }
703
704      }
705
706      @Override
707      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
708        switch (hash) {
709        case 117694: /*who*/ return new String[] {"Reference"};
710        case 3575610: /*type*/ return new String[] {"CodeableConcept"};
711        case 1314116695: /*communicationMethod*/ return new String[] {"CodeableConcept"};
712        case 1775633867: /*validationStatus*/ return new String[] {"CodeableConcept"};
713        case -280180793: /*validationDate*/ return new String[] {"dateTime"};
714        case 1463787104: /*canPushUpdates*/ return new String[] {"CodeableConcept"};
715        case 945223605: /*pushTypeAvailable*/ return new String[] {"CodeableConcept"};
716        default: return super.getTypesForProperty(hash, name);
717        }
718
719      }
720
721      @Override
722      public Base addChild(String name) throws FHIRException {
723        if (name.equals("who")) {
724          this.who = new Reference();
725          return this.who;
726        }
727        else if (name.equals("type")) {
728          return addType();
729        }
730        else if (name.equals("communicationMethod")) {
731          return addCommunicationMethod();
732        }
733        else if (name.equals("validationStatus")) {
734          this.validationStatus = new CodeableConcept();
735          return this.validationStatus;
736        }
737        else if (name.equals("validationDate")) {
738          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.primarySource.validationDate");
739        }
740        else if (name.equals("canPushUpdates")) {
741          this.canPushUpdates = new CodeableConcept();
742          return this.canPushUpdates;
743        }
744        else if (name.equals("pushTypeAvailable")) {
745          return addPushTypeAvailable();
746        }
747        else
748          return super.addChild(name);
749      }
750
751      public VerificationResultPrimarySourceComponent copy() {
752        VerificationResultPrimarySourceComponent dst = new VerificationResultPrimarySourceComponent();
753        copyValues(dst);
754        return dst;
755      }
756
757      public void copyValues(VerificationResultPrimarySourceComponent dst) {
758        super.copyValues(dst);
759        dst.who = who == null ? null : who.copy();
760        if (type != null) {
761          dst.type = new ArrayList<CodeableConcept>();
762          for (CodeableConcept i : type)
763            dst.type.add(i.copy());
764        };
765        if (communicationMethod != null) {
766          dst.communicationMethod = new ArrayList<CodeableConcept>();
767          for (CodeableConcept i : communicationMethod)
768            dst.communicationMethod.add(i.copy());
769        };
770        dst.validationStatus = validationStatus == null ? null : validationStatus.copy();
771        dst.validationDate = validationDate == null ? null : validationDate.copy();
772        dst.canPushUpdates = canPushUpdates == null ? null : canPushUpdates.copy();
773        if (pushTypeAvailable != null) {
774          dst.pushTypeAvailable = new ArrayList<CodeableConcept>();
775          for (CodeableConcept i : pushTypeAvailable)
776            dst.pushTypeAvailable.add(i.copy());
777        };
778      }
779
780      @Override
781      public boolean equalsDeep(Base other_) {
782        if (!super.equalsDeep(other_))
783          return false;
784        if (!(other_ instanceof VerificationResultPrimarySourceComponent))
785          return false;
786        VerificationResultPrimarySourceComponent o = (VerificationResultPrimarySourceComponent) other_;
787        return compareDeep(who, o.who, true) && compareDeep(type, o.type, true) && compareDeep(communicationMethod, o.communicationMethod, true)
788           && compareDeep(validationStatus, o.validationStatus, true) && compareDeep(validationDate, o.validationDate, true)
789           && compareDeep(canPushUpdates, o.canPushUpdates, true) && compareDeep(pushTypeAvailable, o.pushTypeAvailable, true)
790          ;
791      }
792
793      @Override
794      public boolean equalsShallow(Base other_) {
795        if (!super.equalsShallow(other_))
796          return false;
797        if (!(other_ instanceof VerificationResultPrimarySourceComponent))
798          return false;
799        VerificationResultPrimarySourceComponent o = (VerificationResultPrimarySourceComponent) other_;
800        return compareValues(validationDate, o.validationDate, true);
801      }
802
803      public boolean isEmpty() {
804        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(who, type, communicationMethod
805          , validationStatus, validationDate, canPushUpdates, pushTypeAvailable);
806      }
807
808  public String fhirType() {
809    return "VerificationResult.primarySource";
810
811  }
812
813  }
814
815    @Block()
816    public static class VerificationResultAttestationComponent extends BackboneElement implements IBaseBackboneElement {
817        /**
818         * The individual or organization attesting to information.
819         */
820        @Child(name = "who", type = {Practitioner.class, PractitionerRole.class, Organization.class}, order=1, min=0, max=1, modifier=false, summary=true)
821        @Description(shortDefinition="The individual or organization attesting to information", formalDefinition="The individual or organization attesting to information." )
822        protected Reference who;
823
824        /**
825         * When the who is asserting on behalf of another (organization or individual).
826         */
827        @Child(name = "onBehalfOf", type = {Organization.class, Practitioner.class, PractitionerRole.class}, order=2, min=0, max=1, modifier=false, summary=true)
828        @Description(shortDefinition="When the who is asserting on behalf of another (organization or individual)", formalDefinition="When the who is asserting on behalf of another (organization or individual)." )
829        protected Reference onBehalfOf;
830
831        /**
832         * The method by which attested information was submitted/retrieved (manual; API; Push).
833         */
834        @Child(name = "communicationMethod", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=true)
835        @Description(shortDefinition="The method by which attested information was submitted/retrieved", formalDefinition="The method by which attested information was submitted/retrieved (manual; API; Push)." )
836        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-communication-method")
837        protected CodeableConcept communicationMethod;
838
839        /**
840         * The date the information was attested to.
841         */
842        @Child(name = "date", type = {DateType.class}, order=4, min=0, max=1, modifier=false, summary=true)
843        @Description(shortDefinition="The date the information was attested to", formalDefinition="The date the information was attested to." )
844        protected DateType date;
845
846        /**
847         * A digital identity certificate associated with the attestation source.
848         */
849        @Child(name = "sourceIdentityCertificate", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
850        @Description(shortDefinition="A digital identity certificate associated with the attestation source", formalDefinition="A digital identity certificate associated with the attestation source." )
851        protected StringType sourceIdentityCertificate;
852
853        /**
854         * A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.
855         */
856        @Child(name = "proxyIdentityCertificate", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
857        @Description(shortDefinition="A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source", formalDefinition="A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source." )
858        protected StringType proxyIdentityCertificate;
859
860        /**
861         * Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source.
862         */
863        @Child(name = "proxySignature", type = {Signature.class}, order=7, min=0, max=1, modifier=false, summary=false)
864        @Description(shortDefinition="Proxy signature (digital or image)", formalDefinition="Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source." )
865        protected Signature proxySignature;
866
867        /**
868         * Signed assertion by the attestation source that they have attested to the information.
869         */
870        @Child(name = "sourceSignature", type = {Signature.class}, order=8, min=0, max=1, modifier=false, summary=false)
871        @Description(shortDefinition="Attester signature (digital or image)", formalDefinition="Signed assertion by the attestation source that they have attested to the information." )
872        protected Signature sourceSignature;
873
874        private static final long serialVersionUID = -1110142980L;
875
876    /**
877     * Constructor
878     */
879      public VerificationResultAttestationComponent() {
880        super();
881      }
882
883        /**
884         * @return {@link #who} (The individual or organization attesting to information.)
885         */
886        public Reference getWho() { 
887          if (this.who == null)
888            if (Configuration.errorOnAutoCreate())
889              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.who");
890            else if (Configuration.doAutoCreate())
891              this.who = new Reference(); // cc
892          return this.who;
893        }
894
895        public boolean hasWho() { 
896          return this.who != null && !this.who.isEmpty();
897        }
898
899        /**
900         * @param value {@link #who} (The individual or organization attesting to information.)
901         */
902        public VerificationResultAttestationComponent setWho(Reference value) { 
903          this.who = value;
904          return this;
905        }
906
907        /**
908         * @return {@link #onBehalfOf} (When the who is asserting on behalf of another (organization or individual).)
909         */
910        public Reference getOnBehalfOf() { 
911          if (this.onBehalfOf == null)
912            if (Configuration.errorOnAutoCreate())
913              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.onBehalfOf");
914            else if (Configuration.doAutoCreate())
915              this.onBehalfOf = new Reference(); // cc
916          return this.onBehalfOf;
917        }
918
919        public boolean hasOnBehalfOf() { 
920          return this.onBehalfOf != null && !this.onBehalfOf.isEmpty();
921        }
922
923        /**
924         * @param value {@link #onBehalfOf} (When the who is asserting on behalf of another (organization or individual).)
925         */
926        public VerificationResultAttestationComponent setOnBehalfOf(Reference value) { 
927          this.onBehalfOf = value;
928          return this;
929        }
930
931        /**
932         * @return {@link #communicationMethod} (The method by which attested information was submitted/retrieved (manual; API; Push).)
933         */
934        public CodeableConcept getCommunicationMethod() { 
935          if (this.communicationMethod == null)
936            if (Configuration.errorOnAutoCreate())
937              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.communicationMethod");
938            else if (Configuration.doAutoCreate())
939              this.communicationMethod = new CodeableConcept(); // cc
940          return this.communicationMethod;
941        }
942
943        public boolean hasCommunicationMethod() { 
944          return this.communicationMethod != null && !this.communicationMethod.isEmpty();
945        }
946
947        /**
948         * @param value {@link #communicationMethod} (The method by which attested information was submitted/retrieved (manual; API; Push).)
949         */
950        public VerificationResultAttestationComponent setCommunicationMethod(CodeableConcept value) { 
951          this.communicationMethod = value;
952          return this;
953        }
954
955        /**
956         * @return {@link #date} (The date the information was attested to.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
957         */
958        public DateType getDateElement() { 
959          if (this.date == null)
960            if (Configuration.errorOnAutoCreate())
961              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.date");
962            else if (Configuration.doAutoCreate())
963              this.date = new DateType(); // bb
964          return this.date;
965        }
966
967        public boolean hasDateElement() { 
968          return this.date != null && !this.date.isEmpty();
969        }
970
971        public boolean hasDate() { 
972          return this.date != null && !this.date.isEmpty();
973        }
974
975        /**
976         * @param value {@link #date} (The date the information was attested to.). This is the underlying object with id, value and extensions. The accessor "getDate" gives direct access to the value
977         */
978        public VerificationResultAttestationComponent setDateElement(DateType value) { 
979          this.date = value;
980          return this;
981        }
982
983        /**
984         * @return The date the information was attested to.
985         */
986        public Date getDate() { 
987          return this.date == null ? null : this.date.getValue();
988        }
989
990        /**
991         * @param value The date the information was attested to.
992         */
993        public VerificationResultAttestationComponent setDate(Date value) { 
994          if (value == null)
995            this.date = null;
996          else {
997            if (this.date == null)
998              this.date = new DateType();
999            this.date.setValue(value);
1000          }
1001          return this;
1002        }
1003
1004        /**
1005         * @return {@link #sourceIdentityCertificate} (A digital identity certificate associated with the attestation source.). This is the underlying object with id, value and extensions. The accessor "getSourceIdentityCertificate" gives direct access to the value
1006         */
1007        public StringType getSourceIdentityCertificateElement() { 
1008          if (this.sourceIdentityCertificate == null)
1009            if (Configuration.errorOnAutoCreate())
1010              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.sourceIdentityCertificate");
1011            else if (Configuration.doAutoCreate())
1012              this.sourceIdentityCertificate = new StringType(); // bb
1013          return this.sourceIdentityCertificate;
1014        }
1015
1016        public boolean hasSourceIdentityCertificateElement() { 
1017          return this.sourceIdentityCertificate != null && !this.sourceIdentityCertificate.isEmpty();
1018        }
1019
1020        public boolean hasSourceIdentityCertificate() { 
1021          return this.sourceIdentityCertificate != null && !this.sourceIdentityCertificate.isEmpty();
1022        }
1023
1024        /**
1025         * @param value {@link #sourceIdentityCertificate} (A digital identity certificate associated with the attestation source.). This is the underlying object with id, value and extensions. The accessor "getSourceIdentityCertificate" gives direct access to the value
1026         */
1027        public VerificationResultAttestationComponent setSourceIdentityCertificateElement(StringType value) { 
1028          this.sourceIdentityCertificate = value;
1029          return this;
1030        }
1031
1032        /**
1033         * @return A digital identity certificate associated with the attestation source.
1034         */
1035        public String getSourceIdentityCertificate() { 
1036          return this.sourceIdentityCertificate == null ? null : this.sourceIdentityCertificate.getValue();
1037        }
1038
1039        /**
1040         * @param value A digital identity certificate associated with the attestation source.
1041         */
1042        public VerificationResultAttestationComponent setSourceIdentityCertificate(String value) { 
1043          if (Utilities.noString(value))
1044            this.sourceIdentityCertificate = null;
1045          else {
1046            if (this.sourceIdentityCertificate == null)
1047              this.sourceIdentityCertificate = new StringType();
1048            this.sourceIdentityCertificate.setValue(value);
1049          }
1050          return this;
1051        }
1052
1053        /**
1054         * @return {@link #proxyIdentityCertificate} (A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.). This is the underlying object with id, value and extensions. The accessor "getProxyIdentityCertificate" gives direct access to the value
1055         */
1056        public StringType getProxyIdentityCertificateElement() { 
1057          if (this.proxyIdentityCertificate == null)
1058            if (Configuration.errorOnAutoCreate())
1059              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.proxyIdentityCertificate");
1060            else if (Configuration.doAutoCreate())
1061              this.proxyIdentityCertificate = new StringType(); // bb
1062          return this.proxyIdentityCertificate;
1063        }
1064
1065        public boolean hasProxyIdentityCertificateElement() { 
1066          return this.proxyIdentityCertificate != null && !this.proxyIdentityCertificate.isEmpty();
1067        }
1068
1069        public boolean hasProxyIdentityCertificate() { 
1070          return this.proxyIdentityCertificate != null && !this.proxyIdentityCertificate.isEmpty();
1071        }
1072
1073        /**
1074         * @param value {@link #proxyIdentityCertificate} (A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.). This is the underlying object with id, value and extensions. The accessor "getProxyIdentityCertificate" gives direct access to the value
1075         */
1076        public VerificationResultAttestationComponent setProxyIdentityCertificateElement(StringType value) { 
1077          this.proxyIdentityCertificate = value;
1078          return this;
1079        }
1080
1081        /**
1082         * @return A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.
1083         */
1084        public String getProxyIdentityCertificate() { 
1085          return this.proxyIdentityCertificate == null ? null : this.proxyIdentityCertificate.getValue();
1086        }
1087
1088        /**
1089         * @param value A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.
1090         */
1091        public VerificationResultAttestationComponent setProxyIdentityCertificate(String value) { 
1092          if (Utilities.noString(value))
1093            this.proxyIdentityCertificate = null;
1094          else {
1095            if (this.proxyIdentityCertificate == null)
1096              this.proxyIdentityCertificate = new StringType();
1097            this.proxyIdentityCertificate.setValue(value);
1098          }
1099          return this;
1100        }
1101
1102        /**
1103         * @return {@link #proxySignature} (Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source.)
1104         */
1105        public Signature getProxySignature() { 
1106          if (this.proxySignature == null)
1107            if (Configuration.errorOnAutoCreate())
1108              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.proxySignature");
1109            else if (Configuration.doAutoCreate())
1110              this.proxySignature = new Signature(); // cc
1111          return this.proxySignature;
1112        }
1113
1114        public boolean hasProxySignature() { 
1115          return this.proxySignature != null && !this.proxySignature.isEmpty();
1116        }
1117
1118        /**
1119         * @param value {@link #proxySignature} (Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source.)
1120         */
1121        public VerificationResultAttestationComponent setProxySignature(Signature value) { 
1122          this.proxySignature = value;
1123          return this;
1124        }
1125
1126        /**
1127         * @return {@link #sourceSignature} (Signed assertion by the attestation source that they have attested to the information.)
1128         */
1129        public Signature getSourceSignature() { 
1130          if (this.sourceSignature == null)
1131            if (Configuration.errorOnAutoCreate())
1132              throw new Error("Attempt to auto-create VerificationResultAttestationComponent.sourceSignature");
1133            else if (Configuration.doAutoCreate())
1134              this.sourceSignature = new Signature(); // cc
1135          return this.sourceSignature;
1136        }
1137
1138        public boolean hasSourceSignature() { 
1139          return this.sourceSignature != null && !this.sourceSignature.isEmpty();
1140        }
1141
1142        /**
1143         * @param value {@link #sourceSignature} (Signed assertion by the attestation source that they have attested to the information.)
1144         */
1145        public VerificationResultAttestationComponent setSourceSignature(Signature value) { 
1146          this.sourceSignature = value;
1147          return this;
1148        }
1149
1150        protected void listChildren(List<Property> children) {
1151          super.listChildren(children);
1152          children.add(new Property("who", "Reference(Practitioner|PractitionerRole|Organization)", "The individual or organization attesting to information.", 0, 1, who));
1153          children.add(new Property("onBehalfOf", "Reference(Organization|Practitioner|PractitionerRole)", "When the who is asserting on behalf of another (organization or individual).", 0, 1, onBehalfOf));
1154          children.add(new Property("communicationMethod", "CodeableConcept", "The method by which attested information was submitted/retrieved (manual; API; Push).", 0, 1, communicationMethod));
1155          children.add(new Property("date", "date", "The date the information was attested to.", 0, 1, date));
1156          children.add(new Property("sourceIdentityCertificate", "string", "A digital identity certificate associated with the attestation source.", 0, 1, sourceIdentityCertificate));
1157          children.add(new Property("proxyIdentityCertificate", "string", "A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.", 0, 1, proxyIdentityCertificate));
1158          children.add(new Property("proxySignature", "Signature", "Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source.", 0, 1, proxySignature));
1159          children.add(new Property("sourceSignature", "Signature", "Signed assertion by the attestation source that they have attested to the information.", 0, 1, sourceSignature));
1160        }
1161
1162        @Override
1163        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1164          switch (_hash) {
1165          case 117694: /*who*/  return new Property("who", "Reference(Practitioner|PractitionerRole|Organization)", "The individual or organization attesting to information.", 0, 1, who);
1166          case -14402964: /*onBehalfOf*/  return new Property("onBehalfOf", "Reference(Organization|Practitioner|PractitionerRole)", "When the who is asserting on behalf of another (organization or individual).", 0, 1, onBehalfOf);
1167          case 1314116695: /*communicationMethod*/  return new Property("communicationMethod", "CodeableConcept", "The method by which attested information was submitted/retrieved (manual; API; Push).", 0, 1, communicationMethod);
1168          case 3076014: /*date*/  return new Property("date", "date", "The date the information was attested to.", 0, 1, date);
1169          case -799067682: /*sourceIdentityCertificate*/  return new Property("sourceIdentityCertificate", "string", "A digital identity certificate associated with the attestation source.", 0, 1, sourceIdentityCertificate);
1170          case 431558827: /*proxyIdentityCertificate*/  return new Property("proxyIdentityCertificate", "string", "A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.", 0, 1, proxyIdentityCertificate);
1171          case 1455540714: /*proxySignature*/  return new Property("proxySignature", "Signature", "Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source.", 0, 1, proxySignature);
1172          case 1754480349: /*sourceSignature*/  return new Property("sourceSignature", "Signature", "Signed assertion by the attestation source that they have attested to the information.", 0, 1, sourceSignature);
1173          default: return super.getNamedProperty(_hash, _name, _checkValid);
1174          }
1175
1176        }
1177
1178      @Override
1179      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1180        switch (hash) {
1181        case 117694: /*who*/ return this.who == null ? new Base[0] : new Base[] {this.who}; // Reference
1182        case -14402964: /*onBehalfOf*/ return this.onBehalfOf == null ? new Base[0] : new Base[] {this.onBehalfOf}; // Reference
1183        case 1314116695: /*communicationMethod*/ return this.communicationMethod == null ? new Base[0] : new Base[] {this.communicationMethod}; // CodeableConcept
1184        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateType
1185        case -799067682: /*sourceIdentityCertificate*/ return this.sourceIdentityCertificate == null ? new Base[0] : new Base[] {this.sourceIdentityCertificate}; // StringType
1186        case 431558827: /*proxyIdentityCertificate*/ return this.proxyIdentityCertificate == null ? new Base[0] : new Base[] {this.proxyIdentityCertificate}; // StringType
1187        case 1455540714: /*proxySignature*/ return this.proxySignature == null ? new Base[0] : new Base[] {this.proxySignature}; // Signature
1188        case 1754480349: /*sourceSignature*/ return this.sourceSignature == null ? new Base[0] : new Base[] {this.sourceSignature}; // Signature
1189        default: return super.getProperty(hash, name, checkValid);
1190        }
1191
1192      }
1193
1194      @Override
1195      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1196        switch (hash) {
1197        case 117694: // who
1198          this.who = TypeConvertor.castToReference(value); // Reference
1199          return value;
1200        case -14402964: // onBehalfOf
1201          this.onBehalfOf = TypeConvertor.castToReference(value); // Reference
1202          return value;
1203        case 1314116695: // communicationMethod
1204          this.communicationMethod = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1205          return value;
1206        case 3076014: // date
1207          this.date = TypeConvertor.castToDate(value); // DateType
1208          return value;
1209        case -799067682: // sourceIdentityCertificate
1210          this.sourceIdentityCertificate = TypeConvertor.castToString(value); // StringType
1211          return value;
1212        case 431558827: // proxyIdentityCertificate
1213          this.proxyIdentityCertificate = TypeConvertor.castToString(value); // StringType
1214          return value;
1215        case 1455540714: // proxySignature
1216          this.proxySignature = TypeConvertor.castToSignature(value); // Signature
1217          return value;
1218        case 1754480349: // sourceSignature
1219          this.sourceSignature = TypeConvertor.castToSignature(value); // Signature
1220          return value;
1221        default: return super.setProperty(hash, name, value);
1222        }
1223
1224      }
1225
1226      @Override
1227      public Base setProperty(String name, Base value) throws FHIRException {
1228        if (name.equals("who")) {
1229          this.who = TypeConvertor.castToReference(value); // Reference
1230        } else if (name.equals("onBehalfOf")) {
1231          this.onBehalfOf = TypeConvertor.castToReference(value); // Reference
1232        } else if (name.equals("communicationMethod")) {
1233          this.communicationMethod = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
1234        } else if (name.equals("date")) {
1235          this.date = TypeConvertor.castToDate(value); // DateType
1236        } else if (name.equals("sourceIdentityCertificate")) {
1237          this.sourceIdentityCertificate = TypeConvertor.castToString(value); // StringType
1238        } else if (name.equals("proxyIdentityCertificate")) {
1239          this.proxyIdentityCertificate = TypeConvertor.castToString(value); // StringType
1240        } else if (name.equals("proxySignature")) {
1241          this.proxySignature = TypeConvertor.castToSignature(value); // Signature
1242        } else if (name.equals("sourceSignature")) {
1243          this.sourceSignature = TypeConvertor.castToSignature(value); // Signature
1244        } else
1245          return super.setProperty(name, value);
1246        return value;
1247      }
1248
1249  @Override
1250  public void removeChild(String name, Base value) throws FHIRException {
1251        if (name.equals("who")) {
1252          this.who = null;
1253        } else if (name.equals("onBehalfOf")) {
1254          this.onBehalfOf = null;
1255        } else if (name.equals("communicationMethod")) {
1256          this.communicationMethod = null;
1257        } else if (name.equals("date")) {
1258          this.date = null;
1259        } else if (name.equals("sourceIdentityCertificate")) {
1260          this.sourceIdentityCertificate = null;
1261        } else if (name.equals("proxyIdentityCertificate")) {
1262          this.proxyIdentityCertificate = null;
1263        } else if (name.equals("proxySignature")) {
1264          this.proxySignature = null;
1265        } else if (name.equals("sourceSignature")) {
1266          this.sourceSignature = null;
1267        } else
1268          super.removeChild(name, value);
1269        
1270      }
1271
1272      @Override
1273      public Base makeProperty(int hash, String name) throws FHIRException {
1274        switch (hash) {
1275        case 117694:  return getWho();
1276        case -14402964:  return getOnBehalfOf();
1277        case 1314116695:  return getCommunicationMethod();
1278        case 3076014:  return getDateElement();
1279        case -799067682:  return getSourceIdentityCertificateElement();
1280        case 431558827:  return getProxyIdentityCertificateElement();
1281        case 1455540714:  return getProxySignature();
1282        case 1754480349:  return getSourceSignature();
1283        default: return super.makeProperty(hash, name);
1284        }
1285
1286      }
1287
1288      @Override
1289      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1290        switch (hash) {
1291        case 117694: /*who*/ return new String[] {"Reference"};
1292        case -14402964: /*onBehalfOf*/ return new String[] {"Reference"};
1293        case 1314116695: /*communicationMethod*/ return new String[] {"CodeableConcept"};
1294        case 3076014: /*date*/ return new String[] {"date"};
1295        case -799067682: /*sourceIdentityCertificate*/ return new String[] {"string"};
1296        case 431558827: /*proxyIdentityCertificate*/ return new String[] {"string"};
1297        case 1455540714: /*proxySignature*/ return new String[] {"Signature"};
1298        case 1754480349: /*sourceSignature*/ return new String[] {"Signature"};
1299        default: return super.getTypesForProperty(hash, name);
1300        }
1301
1302      }
1303
1304      @Override
1305      public Base addChild(String name) throws FHIRException {
1306        if (name.equals("who")) {
1307          this.who = new Reference();
1308          return this.who;
1309        }
1310        else if (name.equals("onBehalfOf")) {
1311          this.onBehalfOf = new Reference();
1312          return this.onBehalfOf;
1313        }
1314        else if (name.equals("communicationMethod")) {
1315          this.communicationMethod = new CodeableConcept();
1316          return this.communicationMethod;
1317        }
1318        else if (name.equals("date")) {
1319          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.attestation.date");
1320        }
1321        else if (name.equals("sourceIdentityCertificate")) {
1322          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.attestation.sourceIdentityCertificate");
1323        }
1324        else if (name.equals("proxyIdentityCertificate")) {
1325          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.attestation.proxyIdentityCertificate");
1326        }
1327        else if (name.equals("proxySignature")) {
1328          this.proxySignature = new Signature();
1329          return this.proxySignature;
1330        }
1331        else if (name.equals("sourceSignature")) {
1332          this.sourceSignature = new Signature();
1333          return this.sourceSignature;
1334        }
1335        else
1336          return super.addChild(name);
1337      }
1338
1339      public VerificationResultAttestationComponent copy() {
1340        VerificationResultAttestationComponent dst = new VerificationResultAttestationComponent();
1341        copyValues(dst);
1342        return dst;
1343      }
1344
1345      public void copyValues(VerificationResultAttestationComponent dst) {
1346        super.copyValues(dst);
1347        dst.who = who == null ? null : who.copy();
1348        dst.onBehalfOf = onBehalfOf == null ? null : onBehalfOf.copy();
1349        dst.communicationMethod = communicationMethod == null ? null : communicationMethod.copy();
1350        dst.date = date == null ? null : date.copy();
1351        dst.sourceIdentityCertificate = sourceIdentityCertificate == null ? null : sourceIdentityCertificate.copy();
1352        dst.proxyIdentityCertificate = proxyIdentityCertificate == null ? null : proxyIdentityCertificate.copy();
1353        dst.proxySignature = proxySignature == null ? null : proxySignature.copy();
1354        dst.sourceSignature = sourceSignature == null ? null : sourceSignature.copy();
1355      }
1356
1357      @Override
1358      public boolean equalsDeep(Base other_) {
1359        if (!super.equalsDeep(other_))
1360          return false;
1361        if (!(other_ instanceof VerificationResultAttestationComponent))
1362          return false;
1363        VerificationResultAttestationComponent o = (VerificationResultAttestationComponent) other_;
1364        return compareDeep(who, o.who, true) && compareDeep(onBehalfOf, o.onBehalfOf, true) && compareDeep(communicationMethod, o.communicationMethod, true)
1365           && compareDeep(date, o.date, true) && compareDeep(sourceIdentityCertificate, o.sourceIdentityCertificate, true)
1366           && compareDeep(proxyIdentityCertificate, o.proxyIdentityCertificate, true) && compareDeep(proxySignature, o.proxySignature, true)
1367           && compareDeep(sourceSignature, o.sourceSignature, true);
1368      }
1369
1370      @Override
1371      public boolean equalsShallow(Base other_) {
1372        if (!super.equalsShallow(other_))
1373          return false;
1374        if (!(other_ instanceof VerificationResultAttestationComponent))
1375          return false;
1376        VerificationResultAttestationComponent o = (VerificationResultAttestationComponent) other_;
1377        return compareValues(date, o.date, true) && compareValues(sourceIdentityCertificate, o.sourceIdentityCertificate, true)
1378           && compareValues(proxyIdentityCertificate, o.proxyIdentityCertificate, true);
1379      }
1380
1381      public boolean isEmpty() {
1382        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(who, onBehalfOf, communicationMethod
1383          , date, sourceIdentityCertificate, proxyIdentityCertificate, proxySignature, sourceSignature
1384          );
1385      }
1386
1387  public String fhirType() {
1388    return "VerificationResult.attestation";
1389
1390  }
1391
1392  }
1393
1394    @Block()
1395    public static class VerificationResultValidatorComponent extends BackboneElement implements IBaseBackboneElement {
1396        /**
1397         * Reference to the organization validating information.
1398         */
1399        @Child(name = "organization", type = {Organization.class}, order=1, min=1, max=1, modifier=false, summary=false)
1400        @Description(shortDefinition="Reference to the organization validating information", formalDefinition="Reference to the organization validating information." )
1401        protected Reference organization;
1402
1403        /**
1404         * A digital identity certificate associated with the validator.
1405         */
1406        @Child(name = "identityCertificate", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
1407        @Description(shortDefinition="A digital identity certificate associated with the validator", formalDefinition="A digital identity certificate associated with the validator." )
1408        protected StringType identityCertificate;
1409
1410        /**
1411         * Signed assertion by the validator that they have validated the information.
1412         */
1413        @Child(name = "attestationSignature", type = {Signature.class}, order=3, min=0, max=1, modifier=false, summary=false)
1414        @Description(shortDefinition="Validator signature (digital or image)", formalDefinition="Signed assertion by the validator that they have validated the information." )
1415        protected Signature attestationSignature;
1416
1417        private static final long serialVersionUID = 335952370L;
1418
1419    /**
1420     * Constructor
1421     */
1422      public VerificationResultValidatorComponent() {
1423        super();
1424      }
1425
1426    /**
1427     * Constructor
1428     */
1429      public VerificationResultValidatorComponent(Reference organization) {
1430        super();
1431        this.setOrganization(organization);
1432      }
1433
1434        /**
1435         * @return {@link #organization} (Reference to the organization validating information.)
1436         */
1437        public Reference getOrganization() { 
1438          if (this.organization == null)
1439            if (Configuration.errorOnAutoCreate())
1440              throw new Error("Attempt to auto-create VerificationResultValidatorComponent.organization");
1441            else if (Configuration.doAutoCreate())
1442              this.organization = new Reference(); // cc
1443          return this.organization;
1444        }
1445
1446        public boolean hasOrganization() { 
1447          return this.organization != null && !this.organization.isEmpty();
1448        }
1449
1450        /**
1451         * @param value {@link #organization} (Reference to the organization validating information.)
1452         */
1453        public VerificationResultValidatorComponent setOrganization(Reference value) { 
1454          this.organization = value;
1455          return this;
1456        }
1457
1458        /**
1459         * @return {@link #identityCertificate} (A digital identity certificate associated with the validator.). This is the underlying object with id, value and extensions. The accessor "getIdentityCertificate" gives direct access to the value
1460         */
1461        public StringType getIdentityCertificateElement() { 
1462          if (this.identityCertificate == null)
1463            if (Configuration.errorOnAutoCreate())
1464              throw new Error("Attempt to auto-create VerificationResultValidatorComponent.identityCertificate");
1465            else if (Configuration.doAutoCreate())
1466              this.identityCertificate = new StringType(); // bb
1467          return this.identityCertificate;
1468        }
1469
1470        public boolean hasIdentityCertificateElement() { 
1471          return this.identityCertificate != null && !this.identityCertificate.isEmpty();
1472        }
1473
1474        public boolean hasIdentityCertificate() { 
1475          return this.identityCertificate != null && !this.identityCertificate.isEmpty();
1476        }
1477
1478        /**
1479         * @param value {@link #identityCertificate} (A digital identity certificate associated with the validator.). This is the underlying object with id, value and extensions. The accessor "getIdentityCertificate" gives direct access to the value
1480         */
1481        public VerificationResultValidatorComponent setIdentityCertificateElement(StringType value) { 
1482          this.identityCertificate = value;
1483          return this;
1484        }
1485
1486        /**
1487         * @return A digital identity certificate associated with the validator.
1488         */
1489        public String getIdentityCertificate() { 
1490          return this.identityCertificate == null ? null : this.identityCertificate.getValue();
1491        }
1492
1493        /**
1494         * @param value A digital identity certificate associated with the validator.
1495         */
1496        public VerificationResultValidatorComponent setIdentityCertificate(String value) { 
1497          if (Utilities.noString(value))
1498            this.identityCertificate = null;
1499          else {
1500            if (this.identityCertificate == null)
1501              this.identityCertificate = new StringType();
1502            this.identityCertificate.setValue(value);
1503          }
1504          return this;
1505        }
1506
1507        /**
1508         * @return {@link #attestationSignature} (Signed assertion by the validator that they have validated the information.)
1509         */
1510        public Signature getAttestationSignature() { 
1511          if (this.attestationSignature == null)
1512            if (Configuration.errorOnAutoCreate())
1513              throw new Error("Attempt to auto-create VerificationResultValidatorComponent.attestationSignature");
1514            else if (Configuration.doAutoCreate())
1515              this.attestationSignature = new Signature(); // cc
1516          return this.attestationSignature;
1517        }
1518
1519        public boolean hasAttestationSignature() { 
1520          return this.attestationSignature != null && !this.attestationSignature.isEmpty();
1521        }
1522
1523        /**
1524         * @param value {@link #attestationSignature} (Signed assertion by the validator that they have validated the information.)
1525         */
1526        public VerificationResultValidatorComponent setAttestationSignature(Signature value) { 
1527          this.attestationSignature = value;
1528          return this;
1529        }
1530
1531        protected void listChildren(List<Property> children) {
1532          super.listChildren(children);
1533          children.add(new Property("organization", "Reference(Organization)", "Reference to the organization validating information.", 0, 1, organization));
1534          children.add(new Property("identityCertificate", "string", "A digital identity certificate associated with the validator.", 0, 1, identityCertificate));
1535          children.add(new Property("attestationSignature", "Signature", "Signed assertion by the validator that they have validated the information.", 0, 1, attestationSignature));
1536        }
1537
1538        @Override
1539        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1540          switch (_hash) {
1541          case 1178922291: /*organization*/  return new Property("organization", "Reference(Organization)", "Reference to the organization validating information.", 0, 1, organization);
1542          case -854379015: /*identityCertificate*/  return new Property("identityCertificate", "string", "A digital identity certificate associated with the validator.", 0, 1, identityCertificate);
1543          case -184196152: /*attestationSignature*/  return new Property("attestationSignature", "Signature", "Signed assertion by the validator that they have validated the information.", 0, 1, attestationSignature);
1544          default: return super.getNamedProperty(_hash, _name, _checkValid);
1545          }
1546
1547        }
1548
1549      @Override
1550      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1551        switch (hash) {
1552        case 1178922291: /*organization*/ return this.organization == null ? new Base[0] : new Base[] {this.organization}; // Reference
1553        case -854379015: /*identityCertificate*/ return this.identityCertificate == null ? new Base[0] : new Base[] {this.identityCertificate}; // StringType
1554        case -184196152: /*attestationSignature*/ return this.attestationSignature == null ? new Base[0] : new Base[] {this.attestationSignature}; // Signature
1555        default: return super.getProperty(hash, name, checkValid);
1556        }
1557
1558      }
1559
1560      @Override
1561      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1562        switch (hash) {
1563        case 1178922291: // organization
1564          this.organization = TypeConvertor.castToReference(value); // Reference
1565          return value;
1566        case -854379015: // identityCertificate
1567          this.identityCertificate = TypeConvertor.castToString(value); // StringType
1568          return value;
1569        case -184196152: // attestationSignature
1570          this.attestationSignature = TypeConvertor.castToSignature(value); // Signature
1571          return value;
1572        default: return super.setProperty(hash, name, value);
1573        }
1574
1575      }
1576
1577      @Override
1578      public Base setProperty(String name, Base value) throws FHIRException {
1579        if (name.equals("organization")) {
1580          this.organization = TypeConvertor.castToReference(value); // Reference
1581        } else if (name.equals("identityCertificate")) {
1582          this.identityCertificate = TypeConvertor.castToString(value); // StringType
1583        } else if (name.equals("attestationSignature")) {
1584          this.attestationSignature = TypeConvertor.castToSignature(value); // Signature
1585        } else
1586          return super.setProperty(name, value);
1587        return value;
1588      }
1589
1590  @Override
1591  public void removeChild(String name, Base value) throws FHIRException {
1592        if (name.equals("organization")) {
1593          this.organization = null;
1594        } else if (name.equals("identityCertificate")) {
1595          this.identityCertificate = null;
1596        } else if (name.equals("attestationSignature")) {
1597          this.attestationSignature = null;
1598        } else
1599          super.removeChild(name, value);
1600        
1601      }
1602
1603      @Override
1604      public Base makeProperty(int hash, String name) throws FHIRException {
1605        switch (hash) {
1606        case 1178922291:  return getOrganization();
1607        case -854379015:  return getIdentityCertificateElement();
1608        case -184196152:  return getAttestationSignature();
1609        default: return super.makeProperty(hash, name);
1610        }
1611
1612      }
1613
1614      @Override
1615      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1616        switch (hash) {
1617        case 1178922291: /*organization*/ return new String[] {"Reference"};
1618        case -854379015: /*identityCertificate*/ return new String[] {"string"};
1619        case -184196152: /*attestationSignature*/ return new String[] {"Signature"};
1620        default: return super.getTypesForProperty(hash, name);
1621        }
1622
1623      }
1624
1625      @Override
1626      public Base addChild(String name) throws FHIRException {
1627        if (name.equals("organization")) {
1628          this.organization = new Reference();
1629          return this.organization;
1630        }
1631        else if (name.equals("identityCertificate")) {
1632          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.validator.identityCertificate");
1633        }
1634        else if (name.equals("attestationSignature")) {
1635          this.attestationSignature = new Signature();
1636          return this.attestationSignature;
1637        }
1638        else
1639          return super.addChild(name);
1640      }
1641
1642      public VerificationResultValidatorComponent copy() {
1643        VerificationResultValidatorComponent dst = new VerificationResultValidatorComponent();
1644        copyValues(dst);
1645        return dst;
1646      }
1647
1648      public void copyValues(VerificationResultValidatorComponent dst) {
1649        super.copyValues(dst);
1650        dst.organization = organization == null ? null : organization.copy();
1651        dst.identityCertificate = identityCertificate == null ? null : identityCertificate.copy();
1652        dst.attestationSignature = attestationSignature == null ? null : attestationSignature.copy();
1653      }
1654
1655      @Override
1656      public boolean equalsDeep(Base other_) {
1657        if (!super.equalsDeep(other_))
1658          return false;
1659        if (!(other_ instanceof VerificationResultValidatorComponent))
1660          return false;
1661        VerificationResultValidatorComponent o = (VerificationResultValidatorComponent) other_;
1662        return compareDeep(organization, o.organization, true) && compareDeep(identityCertificate, o.identityCertificate, true)
1663           && compareDeep(attestationSignature, o.attestationSignature, true);
1664      }
1665
1666      @Override
1667      public boolean equalsShallow(Base other_) {
1668        if (!super.equalsShallow(other_))
1669          return false;
1670        if (!(other_ instanceof VerificationResultValidatorComponent))
1671          return false;
1672        VerificationResultValidatorComponent o = (VerificationResultValidatorComponent) other_;
1673        return compareValues(identityCertificate, o.identityCertificate, true);
1674      }
1675
1676      public boolean isEmpty() {
1677        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(organization, identityCertificate
1678          , attestationSignature);
1679      }
1680
1681  public String fhirType() {
1682    return "VerificationResult.validator";
1683
1684  }
1685
1686  }
1687
1688    /**
1689     * A resource that was validated.
1690     */
1691    @Child(name = "target", type = {Reference.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1692    @Description(shortDefinition="A resource that was validated", formalDefinition="A resource that was validated." )
1693    protected List<Reference> target;
1694
1695    /**
1696     * The fhirpath location(s) within the resource that was validated.
1697     */
1698    @Child(name = "targetLocation", type = {StringType.class}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1699    @Description(shortDefinition="The fhirpath location(s) within the resource that was validated", formalDefinition="The fhirpath location(s) within the resource that was validated." )
1700    protected List<StringType> targetLocation;
1701
1702    /**
1703     * The frequency with which the target must be validated (none; initial; periodic).
1704     */
1705    @Child(name = "need", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=true)
1706    @Description(shortDefinition="none | initial | periodic", formalDefinition="The frequency with which the target must be validated (none; initial; periodic)." )
1707    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-need")
1708    protected CodeableConcept need;
1709
1710    /**
1711     * The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).
1712     */
1713    @Child(name = "status", type = {CodeType.class}, order=3, min=1, max=1, modifier=false, summary=true)
1714    @Description(shortDefinition="attested | validated | in-process | req-revalid | val-fail | reval-fail | entered-in-error", formalDefinition="The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed)." )
1715    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-status")
1716    protected Enumeration<VerificationResultStatus> status;
1717
1718    /**
1719     * When the validation status was updated.
1720     */
1721    @Child(name = "statusDate", type = {DateTimeType.class}, order=4, min=0, max=1, modifier=false, summary=true)
1722    @Description(shortDefinition="When the validation status was updated", formalDefinition="When the validation status was updated." )
1723    protected DateTimeType statusDate;
1724
1725    /**
1726     * What the target is validated against (nothing; primary source; multiple sources).
1727     */
1728    @Child(name = "validationType", type = {CodeableConcept.class}, order=5, min=0, max=1, modifier=false, summary=true)
1729    @Description(shortDefinition="nothing | primary | multiple", formalDefinition="What the target is validated against (nothing; primary source; multiple sources)." )
1730    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-validation-type")
1731    protected CodeableConcept validationType;
1732
1733    /**
1734     * The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context).
1735     */
1736    @Child(name = "validationProcess", type = {CodeableConcept.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1737    @Description(shortDefinition="The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context)", formalDefinition="The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context)." )
1738    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-validation-process")
1739    protected List<CodeableConcept> validationProcess;
1740
1741    /**
1742     * Frequency of revalidation.
1743     */
1744    @Child(name = "frequency", type = {Timing.class}, order=7, min=0, max=1, modifier=false, summary=false)
1745    @Description(shortDefinition="Frequency of revalidation", formalDefinition="Frequency of revalidation." )
1746    protected Timing frequency;
1747
1748    /**
1749     * The date/time validation was last completed (including failed validations).
1750     */
1751    @Child(name = "lastPerformed", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=false)
1752    @Description(shortDefinition="The date/time validation was last completed (including failed validations)", formalDefinition="The date/time validation was last completed (including failed validations)." )
1753    protected DateTimeType lastPerformed;
1754
1755    /**
1756     * The date when target is next validated, if appropriate.
1757     */
1758    @Child(name = "nextScheduled", type = {DateType.class}, order=9, min=0, max=1, modifier=false, summary=false)
1759    @Description(shortDefinition="The date when target is next validated, if appropriate", formalDefinition="The date when target is next validated, if appropriate." )
1760    protected DateType nextScheduled;
1761
1762    /**
1763     * The result if validation fails (fatal; warning; record only; none).
1764     */
1765    @Child(name = "failureAction", type = {CodeableConcept.class}, order=10, min=0, max=1, modifier=false, summary=true)
1766    @Description(shortDefinition="fatal | warn | rec-only | none", formalDefinition="The result if validation fails (fatal; warning; record only; none)." )
1767    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/verificationresult-failure-action")
1768    protected CodeableConcept failureAction;
1769
1770    /**
1771     * Information about the primary source(s) involved in validation.
1772     */
1773    @Child(name = "primarySource", type = {}, order=11, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1774    @Description(shortDefinition="Information about the primary source(s) involved in validation", formalDefinition="Information about the primary source(s) involved in validation." )
1775    protected List<VerificationResultPrimarySourceComponent> primarySource;
1776
1777    /**
1778     * Information about the entity attesting to information.
1779     */
1780    @Child(name = "attestation", type = {}, order=12, min=0, max=1, modifier=false, summary=false)
1781    @Description(shortDefinition="Information about the entity attesting to information", formalDefinition="Information about the entity attesting to information." )
1782    protected VerificationResultAttestationComponent attestation;
1783
1784    /**
1785     * Information about the entity validating information.
1786     */
1787    @Child(name = "validator", type = {}, order=13, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1788    @Description(shortDefinition="Information about the entity validating information", formalDefinition="Information about the entity validating information." )
1789    protected List<VerificationResultValidatorComponent> validator;
1790
1791    private static final long serialVersionUID = -612905810L;
1792
1793  /**
1794   * Constructor
1795   */
1796    public VerificationResult() {
1797      super();
1798    }
1799
1800  /**
1801   * Constructor
1802   */
1803    public VerificationResult(VerificationResultStatus status) {
1804      super();
1805      this.setStatus(status);
1806    }
1807
1808    /**
1809     * @return {@link #target} (A resource that was validated.)
1810     */
1811    public List<Reference> getTarget() { 
1812      if (this.target == null)
1813        this.target = new ArrayList<Reference>();
1814      return this.target;
1815    }
1816
1817    /**
1818     * @return Returns a reference to <code>this</code> for easy method chaining
1819     */
1820    public VerificationResult setTarget(List<Reference> theTarget) { 
1821      this.target = theTarget;
1822      return this;
1823    }
1824
1825    public boolean hasTarget() { 
1826      if (this.target == null)
1827        return false;
1828      for (Reference item : this.target)
1829        if (!item.isEmpty())
1830          return true;
1831      return false;
1832    }
1833
1834    public Reference addTarget() { //3
1835      Reference t = new Reference();
1836      if (this.target == null)
1837        this.target = new ArrayList<Reference>();
1838      this.target.add(t);
1839      return t;
1840    }
1841
1842    public VerificationResult addTarget(Reference t) { //3
1843      if (t == null)
1844        return this;
1845      if (this.target == null)
1846        this.target = new ArrayList<Reference>();
1847      this.target.add(t);
1848      return this;
1849    }
1850
1851    /**
1852     * @return The first repetition of repeating field {@link #target}, creating it if it does not already exist {3}
1853     */
1854    public Reference getTargetFirstRep() { 
1855      if (getTarget().isEmpty()) {
1856        addTarget();
1857      }
1858      return getTarget().get(0);
1859    }
1860
1861    /**
1862     * @return {@link #targetLocation} (The fhirpath location(s) within the resource that was validated.)
1863     */
1864    public List<StringType> getTargetLocation() { 
1865      if (this.targetLocation == null)
1866        this.targetLocation = new ArrayList<StringType>();
1867      return this.targetLocation;
1868    }
1869
1870    /**
1871     * @return Returns a reference to <code>this</code> for easy method chaining
1872     */
1873    public VerificationResult setTargetLocation(List<StringType> theTargetLocation) { 
1874      this.targetLocation = theTargetLocation;
1875      return this;
1876    }
1877
1878    public boolean hasTargetLocation() { 
1879      if (this.targetLocation == null)
1880        return false;
1881      for (StringType item : this.targetLocation)
1882        if (!item.isEmpty())
1883          return true;
1884      return false;
1885    }
1886
1887    /**
1888     * @return {@link #targetLocation} (The fhirpath location(s) within the resource that was validated.)
1889     */
1890    public StringType addTargetLocationElement() {//2 
1891      StringType t = new StringType();
1892      if (this.targetLocation == null)
1893        this.targetLocation = new ArrayList<StringType>();
1894      this.targetLocation.add(t);
1895      return t;
1896    }
1897
1898    /**
1899     * @param value {@link #targetLocation} (The fhirpath location(s) within the resource that was validated.)
1900     */
1901    public VerificationResult addTargetLocation(String value) { //1
1902      StringType t = new StringType();
1903      t.setValue(value);
1904      if (this.targetLocation == null)
1905        this.targetLocation = new ArrayList<StringType>();
1906      this.targetLocation.add(t);
1907      return this;
1908    }
1909
1910    /**
1911     * @param value {@link #targetLocation} (The fhirpath location(s) within the resource that was validated.)
1912     */
1913    public boolean hasTargetLocation(String value) { 
1914      if (this.targetLocation == null)
1915        return false;
1916      for (StringType v : this.targetLocation)
1917        if (v.getValue().equals(value)) // string
1918          return true;
1919      return false;
1920    }
1921
1922    /**
1923     * @return {@link #need} (The frequency with which the target must be validated (none; initial; periodic).)
1924     */
1925    public CodeableConcept getNeed() { 
1926      if (this.need == null)
1927        if (Configuration.errorOnAutoCreate())
1928          throw new Error("Attempt to auto-create VerificationResult.need");
1929        else if (Configuration.doAutoCreate())
1930          this.need = new CodeableConcept(); // cc
1931      return this.need;
1932    }
1933
1934    public boolean hasNeed() { 
1935      return this.need != null && !this.need.isEmpty();
1936    }
1937
1938    /**
1939     * @param value {@link #need} (The frequency with which the target must be validated (none; initial; periodic).)
1940     */
1941    public VerificationResult setNeed(CodeableConcept value) { 
1942      this.need = value;
1943      return this;
1944    }
1945
1946    /**
1947     * @return {@link #status} (The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1948     */
1949    public Enumeration<VerificationResultStatus> getStatusElement() { 
1950      if (this.status == null)
1951        if (Configuration.errorOnAutoCreate())
1952          throw new Error("Attempt to auto-create VerificationResult.status");
1953        else if (Configuration.doAutoCreate())
1954          this.status = new Enumeration<VerificationResultStatus>(new VerificationResultStatusEnumFactory()); // bb
1955      return this.status;
1956    }
1957
1958    public boolean hasStatusElement() { 
1959      return this.status != null && !this.status.isEmpty();
1960    }
1961
1962    public boolean hasStatus() { 
1963      return this.status != null && !this.status.isEmpty();
1964    }
1965
1966    /**
1967     * @param value {@link #status} (The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1968     */
1969    public VerificationResult setStatusElement(Enumeration<VerificationResultStatus> value) { 
1970      this.status = value;
1971      return this;
1972    }
1973
1974    /**
1975     * @return The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).
1976     */
1977    public VerificationResultStatus getStatus() { 
1978      return this.status == null ? null : this.status.getValue();
1979    }
1980
1981    /**
1982     * @param value The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).
1983     */
1984    public VerificationResult setStatus(VerificationResultStatus value) { 
1985        if (this.status == null)
1986          this.status = new Enumeration<VerificationResultStatus>(new VerificationResultStatusEnumFactory());
1987        this.status.setValue(value);
1988      return this;
1989    }
1990
1991    /**
1992     * @return {@link #statusDate} (When the validation status was updated.). This is the underlying object with id, value and extensions. The accessor "getStatusDate" gives direct access to the value
1993     */
1994    public DateTimeType getStatusDateElement() { 
1995      if (this.statusDate == null)
1996        if (Configuration.errorOnAutoCreate())
1997          throw new Error("Attempt to auto-create VerificationResult.statusDate");
1998        else if (Configuration.doAutoCreate())
1999          this.statusDate = new DateTimeType(); // bb
2000      return this.statusDate;
2001    }
2002
2003    public boolean hasStatusDateElement() { 
2004      return this.statusDate != null && !this.statusDate.isEmpty();
2005    }
2006
2007    public boolean hasStatusDate() { 
2008      return this.statusDate != null && !this.statusDate.isEmpty();
2009    }
2010
2011    /**
2012     * @param value {@link #statusDate} (When the validation status was updated.). This is the underlying object with id, value and extensions. The accessor "getStatusDate" gives direct access to the value
2013     */
2014    public VerificationResult setStatusDateElement(DateTimeType value) { 
2015      this.statusDate = value;
2016      return this;
2017    }
2018
2019    /**
2020     * @return When the validation status was updated.
2021     */
2022    public Date getStatusDate() { 
2023      return this.statusDate == null ? null : this.statusDate.getValue();
2024    }
2025
2026    /**
2027     * @param value When the validation status was updated.
2028     */
2029    public VerificationResult setStatusDate(Date value) { 
2030      if (value == null)
2031        this.statusDate = null;
2032      else {
2033        if (this.statusDate == null)
2034          this.statusDate = new DateTimeType();
2035        this.statusDate.setValue(value);
2036      }
2037      return this;
2038    }
2039
2040    /**
2041     * @return {@link #validationType} (What the target is validated against (nothing; primary source; multiple sources).)
2042     */
2043    public CodeableConcept getValidationType() { 
2044      if (this.validationType == null)
2045        if (Configuration.errorOnAutoCreate())
2046          throw new Error("Attempt to auto-create VerificationResult.validationType");
2047        else if (Configuration.doAutoCreate())
2048          this.validationType = new CodeableConcept(); // cc
2049      return this.validationType;
2050    }
2051
2052    public boolean hasValidationType() { 
2053      return this.validationType != null && !this.validationType.isEmpty();
2054    }
2055
2056    /**
2057     * @param value {@link #validationType} (What the target is validated against (nothing; primary source; multiple sources).)
2058     */
2059    public VerificationResult setValidationType(CodeableConcept value) { 
2060      this.validationType = value;
2061      return this;
2062    }
2063
2064    /**
2065     * @return {@link #validationProcess} (The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context).)
2066     */
2067    public List<CodeableConcept> getValidationProcess() { 
2068      if (this.validationProcess == null)
2069        this.validationProcess = new ArrayList<CodeableConcept>();
2070      return this.validationProcess;
2071    }
2072
2073    /**
2074     * @return Returns a reference to <code>this</code> for easy method chaining
2075     */
2076    public VerificationResult setValidationProcess(List<CodeableConcept> theValidationProcess) { 
2077      this.validationProcess = theValidationProcess;
2078      return this;
2079    }
2080
2081    public boolean hasValidationProcess() { 
2082      if (this.validationProcess == null)
2083        return false;
2084      for (CodeableConcept item : this.validationProcess)
2085        if (!item.isEmpty())
2086          return true;
2087      return false;
2088    }
2089
2090    public CodeableConcept addValidationProcess() { //3
2091      CodeableConcept t = new CodeableConcept();
2092      if (this.validationProcess == null)
2093        this.validationProcess = new ArrayList<CodeableConcept>();
2094      this.validationProcess.add(t);
2095      return t;
2096    }
2097
2098    public VerificationResult addValidationProcess(CodeableConcept t) { //3
2099      if (t == null)
2100        return this;
2101      if (this.validationProcess == null)
2102        this.validationProcess = new ArrayList<CodeableConcept>();
2103      this.validationProcess.add(t);
2104      return this;
2105    }
2106
2107    /**
2108     * @return The first repetition of repeating field {@link #validationProcess}, creating it if it does not already exist {3}
2109     */
2110    public CodeableConcept getValidationProcessFirstRep() { 
2111      if (getValidationProcess().isEmpty()) {
2112        addValidationProcess();
2113      }
2114      return getValidationProcess().get(0);
2115    }
2116
2117    /**
2118     * @return {@link #frequency} (Frequency of revalidation.)
2119     */
2120    public Timing getFrequency() { 
2121      if (this.frequency == null)
2122        if (Configuration.errorOnAutoCreate())
2123          throw new Error("Attempt to auto-create VerificationResult.frequency");
2124        else if (Configuration.doAutoCreate())
2125          this.frequency = new Timing(); // cc
2126      return this.frequency;
2127    }
2128
2129    public boolean hasFrequency() { 
2130      return this.frequency != null && !this.frequency.isEmpty();
2131    }
2132
2133    /**
2134     * @param value {@link #frequency} (Frequency of revalidation.)
2135     */
2136    public VerificationResult setFrequency(Timing value) { 
2137      this.frequency = value;
2138      return this;
2139    }
2140
2141    /**
2142     * @return {@link #lastPerformed} (The date/time validation was last completed (including failed validations).). This is the underlying object with id, value and extensions. The accessor "getLastPerformed" gives direct access to the value
2143     */
2144    public DateTimeType getLastPerformedElement() { 
2145      if (this.lastPerformed == null)
2146        if (Configuration.errorOnAutoCreate())
2147          throw new Error("Attempt to auto-create VerificationResult.lastPerformed");
2148        else if (Configuration.doAutoCreate())
2149          this.lastPerformed = new DateTimeType(); // bb
2150      return this.lastPerformed;
2151    }
2152
2153    public boolean hasLastPerformedElement() { 
2154      return this.lastPerformed != null && !this.lastPerformed.isEmpty();
2155    }
2156
2157    public boolean hasLastPerformed() { 
2158      return this.lastPerformed != null && !this.lastPerformed.isEmpty();
2159    }
2160
2161    /**
2162     * @param value {@link #lastPerformed} (The date/time validation was last completed (including failed validations).). This is the underlying object with id, value and extensions. The accessor "getLastPerformed" gives direct access to the value
2163     */
2164    public VerificationResult setLastPerformedElement(DateTimeType value) { 
2165      this.lastPerformed = value;
2166      return this;
2167    }
2168
2169    /**
2170     * @return The date/time validation was last completed (including failed validations).
2171     */
2172    public Date getLastPerformed() { 
2173      return this.lastPerformed == null ? null : this.lastPerformed.getValue();
2174    }
2175
2176    /**
2177     * @param value The date/time validation was last completed (including failed validations).
2178     */
2179    public VerificationResult setLastPerformed(Date value) { 
2180      if (value == null)
2181        this.lastPerformed = null;
2182      else {
2183        if (this.lastPerformed == null)
2184          this.lastPerformed = new DateTimeType();
2185        this.lastPerformed.setValue(value);
2186      }
2187      return this;
2188    }
2189
2190    /**
2191     * @return {@link #nextScheduled} (The date when target is next validated, if appropriate.). This is the underlying object with id, value and extensions. The accessor "getNextScheduled" gives direct access to the value
2192     */
2193    public DateType getNextScheduledElement() { 
2194      if (this.nextScheduled == null)
2195        if (Configuration.errorOnAutoCreate())
2196          throw new Error("Attempt to auto-create VerificationResult.nextScheduled");
2197        else if (Configuration.doAutoCreate())
2198          this.nextScheduled = new DateType(); // bb
2199      return this.nextScheduled;
2200    }
2201
2202    public boolean hasNextScheduledElement() { 
2203      return this.nextScheduled != null && !this.nextScheduled.isEmpty();
2204    }
2205
2206    public boolean hasNextScheduled() { 
2207      return this.nextScheduled != null && !this.nextScheduled.isEmpty();
2208    }
2209
2210    /**
2211     * @param value {@link #nextScheduled} (The date when target is next validated, if appropriate.). This is the underlying object with id, value and extensions. The accessor "getNextScheduled" gives direct access to the value
2212     */
2213    public VerificationResult setNextScheduledElement(DateType value) { 
2214      this.nextScheduled = value;
2215      return this;
2216    }
2217
2218    /**
2219     * @return The date when target is next validated, if appropriate.
2220     */
2221    public Date getNextScheduled() { 
2222      return this.nextScheduled == null ? null : this.nextScheduled.getValue();
2223    }
2224
2225    /**
2226     * @param value The date when target is next validated, if appropriate.
2227     */
2228    public VerificationResult setNextScheduled(Date value) { 
2229      if (value == null)
2230        this.nextScheduled = null;
2231      else {
2232        if (this.nextScheduled == null)
2233          this.nextScheduled = new DateType();
2234        this.nextScheduled.setValue(value);
2235      }
2236      return this;
2237    }
2238
2239    /**
2240     * @return {@link #failureAction} (The result if validation fails (fatal; warning; record only; none).)
2241     */
2242    public CodeableConcept getFailureAction() { 
2243      if (this.failureAction == null)
2244        if (Configuration.errorOnAutoCreate())
2245          throw new Error("Attempt to auto-create VerificationResult.failureAction");
2246        else if (Configuration.doAutoCreate())
2247          this.failureAction = new CodeableConcept(); // cc
2248      return this.failureAction;
2249    }
2250
2251    public boolean hasFailureAction() { 
2252      return this.failureAction != null && !this.failureAction.isEmpty();
2253    }
2254
2255    /**
2256     * @param value {@link #failureAction} (The result if validation fails (fatal; warning; record only; none).)
2257     */
2258    public VerificationResult setFailureAction(CodeableConcept value) { 
2259      this.failureAction = value;
2260      return this;
2261    }
2262
2263    /**
2264     * @return {@link #primarySource} (Information about the primary source(s) involved in validation.)
2265     */
2266    public List<VerificationResultPrimarySourceComponent> getPrimarySource() { 
2267      if (this.primarySource == null)
2268        this.primarySource = new ArrayList<VerificationResultPrimarySourceComponent>();
2269      return this.primarySource;
2270    }
2271
2272    /**
2273     * @return Returns a reference to <code>this</code> for easy method chaining
2274     */
2275    public VerificationResult setPrimarySource(List<VerificationResultPrimarySourceComponent> thePrimarySource) { 
2276      this.primarySource = thePrimarySource;
2277      return this;
2278    }
2279
2280    public boolean hasPrimarySource() { 
2281      if (this.primarySource == null)
2282        return false;
2283      for (VerificationResultPrimarySourceComponent item : this.primarySource)
2284        if (!item.isEmpty())
2285          return true;
2286      return false;
2287    }
2288
2289    public VerificationResultPrimarySourceComponent addPrimarySource() { //3
2290      VerificationResultPrimarySourceComponent t = new VerificationResultPrimarySourceComponent();
2291      if (this.primarySource == null)
2292        this.primarySource = new ArrayList<VerificationResultPrimarySourceComponent>();
2293      this.primarySource.add(t);
2294      return t;
2295    }
2296
2297    public VerificationResult addPrimarySource(VerificationResultPrimarySourceComponent t) { //3
2298      if (t == null)
2299        return this;
2300      if (this.primarySource == null)
2301        this.primarySource = new ArrayList<VerificationResultPrimarySourceComponent>();
2302      this.primarySource.add(t);
2303      return this;
2304    }
2305
2306    /**
2307     * @return The first repetition of repeating field {@link #primarySource}, creating it if it does not already exist {3}
2308     */
2309    public VerificationResultPrimarySourceComponent getPrimarySourceFirstRep() { 
2310      if (getPrimarySource().isEmpty()) {
2311        addPrimarySource();
2312      }
2313      return getPrimarySource().get(0);
2314    }
2315
2316    /**
2317     * @return {@link #attestation} (Information about the entity attesting to information.)
2318     */
2319    public VerificationResultAttestationComponent getAttestation() { 
2320      if (this.attestation == null)
2321        if (Configuration.errorOnAutoCreate())
2322          throw new Error("Attempt to auto-create VerificationResult.attestation");
2323        else if (Configuration.doAutoCreate())
2324          this.attestation = new VerificationResultAttestationComponent(); // cc
2325      return this.attestation;
2326    }
2327
2328    public boolean hasAttestation() { 
2329      return this.attestation != null && !this.attestation.isEmpty();
2330    }
2331
2332    /**
2333     * @param value {@link #attestation} (Information about the entity attesting to information.)
2334     */
2335    public VerificationResult setAttestation(VerificationResultAttestationComponent value) { 
2336      this.attestation = value;
2337      return this;
2338    }
2339
2340    /**
2341     * @return {@link #validator} (Information about the entity validating information.)
2342     */
2343    public List<VerificationResultValidatorComponent> getValidator() { 
2344      if (this.validator == null)
2345        this.validator = new ArrayList<VerificationResultValidatorComponent>();
2346      return this.validator;
2347    }
2348
2349    /**
2350     * @return Returns a reference to <code>this</code> for easy method chaining
2351     */
2352    public VerificationResult setValidator(List<VerificationResultValidatorComponent> theValidator) { 
2353      this.validator = theValidator;
2354      return this;
2355    }
2356
2357    public boolean hasValidator() { 
2358      if (this.validator == null)
2359        return false;
2360      for (VerificationResultValidatorComponent item : this.validator)
2361        if (!item.isEmpty())
2362          return true;
2363      return false;
2364    }
2365
2366    public VerificationResultValidatorComponent addValidator() { //3
2367      VerificationResultValidatorComponent t = new VerificationResultValidatorComponent();
2368      if (this.validator == null)
2369        this.validator = new ArrayList<VerificationResultValidatorComponent>();
2370      this.validator.add(t);
2371      return t;
2372    }
2373
2374    public VerificationResult addValidator(VerificationResultValidatorComponent t) { //3
2375      if (t == null)
2376        return this;
2377      if (this.validator == null)
2378        this.validator = new ArrayList<VerificationResultValidatorComponent>();
2379      this.validator.add(t);
2380      return this;
2381    }
2382
2383    /**
2384     * @return The first repetition of repeating field {@link #validator}, creating it if it does not already exist {3}
2385     */
2386    public VerificationResultValidatorComponent getValidatorFirstRep() { 
2387      if (getValidator().isEmpty()) {
2388        addValidator();
2389      }
2390      return getValidator().get(0);
2391    }
2392
2393      protected void listChildren(List<Property> children) {
2394        super.listChildren(children);
2395        children.add(new Property("target", "Reference(Any)", "A resource that was validated.", 0, java.lang.Integer.MAX_VALUE, target));
2396        children.add(new Property("targetLocation", "string", "The fhirpath location(s) within the resource that was validated.", 0, java.lang.Integer.MAX_VALUE, targetLocation));
2397        children.add(new Property("need", "CodeableConcept", "The frequency with which the target must be validated (none; initial; periodic).", 0, 1, need));
2398        children.add(new Property("status", "code", "The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).", 0, 1, status));
2399        children.add(new Property("statusDate", "dateTime", "When the validation status was updated.", 0, 1, statusDate));
2400        children.add(new Property("validationType", "CodeableConcept", "What the target is validated against (nothing; primary source; multiple sources).", 0, 1, validationType));
2401        children.add(new Property("validationProcess", "CodeableConcept", "The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context).", 0, java.lang.Integer.MAX_VALUE, validationProcess));
2402        children.add(new Property("frequency", "Timing", "Frequency of revalidation.", 0, 1, frequency));
2403        children.add(new Property("lastPerformed", "dateTime", "The date/time validation was last completed (including failed validations).", 0, 1, lastPerformed));
2404        children.add(new Property("nextScheduled", "date", "The date when target is next validated, if appropriate.", 0, 1, nextScheduled));
2405        children.add(new Property("failureAction", "CodeableConcept", "The result if validation fails (fatal; warning; record only; none).", 0, 1, failureAction));
2406        children.add(new Property("primarySource", "", "Information about the primary source(s) involved in validation.", 0, java.lang.Integer.MAX_VALUE, primarySource));
2407        children.add(new Property("attestation", "", "Information about the entity attesting to information.", 0, 1, attestation));
2408        children.add(new Property("validator", "", "Information about the entity validating information.", 0, java.lang.Integer.MAX_VALUE, validator));
2409      }
2410
2411      @Override
2412      public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2413        switch (_hash) {
2414        case -880905839: /*target*/  return new Property("target", "Reference(Any)", "A resource that was validated.", 0, java.lang.Integer.MAX_VALUE, target);
2415        case 308958310: /*targetLocation*/  return new Property("targetLocation", "string", "The fhirpath location(s) within the resource that was validated.", 0, java.lang.Integer.MAX_VALUE, targetLocation);
2416        case 3377302: /*need*/  return new Property("need", "CodeableConcept", "The frequency with which the target must be validated (none; initial; periodic).", 0, 1, need);
2417        case -892481550: /*status*/  return new Property("status", "code", "The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).", 0, 1, status);
2418        case 247524032: /*statusDate*/  return new Property("statusDate", "dateTime", "When the validation status was updated.", 0, 1, statusDate);
2419        case -279681197: /*validationType*/  return new Property("validationType", "CodeableConcept", "What the target is validated against (nothing; primary source; multiple sources).", 0, 1, validationType);
2420        case 797680566: /*validationProcess*/  return new Property("validationProcess", "CodeableConcept", "The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context).", 0, java.lang.Integer.MAX_VALUE, validationProcess);
2421        case -70023844: /*frequency*/  return new Property("frequency", "Timing", "Frequency of revalidation.", 0, 1, frequency);
2422        case -1313229366: /*lastPerformed*/  return new Property("lastPerformed", "dateTime", "The date/time validation was last completed (including failed validations).", 0, 1, lastPerformed);
2423        case 1874589434: /*nextScheduled*/  return new Property("nextScheduled", "date", "The date when target is next validated, if appropriate.", 0, 1, nextScheduled);
2424        case 1816382560: /*failureAction*/  return new Property("failureAction", "CodeableConcept", "The result if validation fails (fatal; warning; record only; none).", 0, 1, failureAction);
2425        case -528721731: /*primarySource*/  return new Property("primarySource", "", "Information about the primary source(s) involved in validation.", 0, java.lang.Integer.MAX_VALUE, primarySource);
2426        case -709624112: /*attestation*/  return new Property("attestation", "", "Information about the entity attesting to information.", 0, 1, attestation);
2427        case -1109783726: /*validator*/  return new Property("validator", "", "Information about the entity validating information.", 0, java.lang.Integer.MAX_VALUE, validator);
2428        default: return super.getNamedProperty(_hash, _name, _checkValid);
2429        }
2430
2431      }
2432
2433      @Override
2434      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2435        switch (hash) {
2436        case -880905839: /*target*/ return this.target == null ? new Base[0] : this.target.toArray(new Base[this.target.size()]); // Reference
2437        case 308958310: /*targetLocation*/ return this.targetLocation == null ? new Base[0] : this.targetLocation.toArray(new Base[this.targetLocation.size()]); // StringType
2438        case 3377302: /*need*/ return this.need == null ? new Base[0] : new Base[] {this.need}; // CodeableConcept
2439        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<VerificationResultStatus>
2440        case 247524032: /*statusDate*/ return this.statusDate == null ? new Base[0] : new Base[] {this.statusDate}; // DateTimeType
2441        case -279681197: /*validationType*/ return this.validationType == null ? new Base[0] : new Base[] {this.validationType}; // CodeableConcept
2442        case 797680566: /*validationProcess*/ return this.validationProcess == null ? new Base[0] : this.validationProcess.toArray(new Base[this.validationProcess.size()]); // CodeableConcept
2443        case -70023844: /*frequency*/ return this.frequency == null ? new Base[0] : new Base[] {this.frequency}; // Timing
2444        case -1313229366: /*lastPerformed*/ return this.lastPerformed == null ? new Base[0] : new Base[] {this.lastPerformed}; // DateTimeType
2445        case 1874589434: /*nextScheduled*/ return this.nextScheduled == null ? new Base[0] : new Base[] {this.nextScheduled}; // DateType
2446        case 1816382560: /*failureAction*/ return this.failureAction == null ? new Base[0] : new Base[] {this.failureAction}; // CodeableConcept
2447        case -528721731: /*primarySource*/ return this.primarySource == null ? new Base[0] : this.primarySource.toArray(new Base[this.primarySource.size()]); // VerificationResultPrimarySourceComponent
2448        case -709624112: /*attestation*/ return this.attestation == null ? new Base[0] : new Base[] {this.attestation}; // VerificationResultAttestationComponent
2449        case -1109783726: /*validator*/ return this.validator == null ? new Base[0] : this.validator.toArray(new Base[this.validator.size()]); // VerificationResultValidatorComponent
2450        default: return super.getProperty(hash, name, checkValid);
2451        }
2452
2453      }
2454
2455      @Override
2456      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2457        switch (hash) {
2458        case -880905839: // target
2459          this.getTarget().add(TypeConvertor.castToReference(value)); // Reference
2460          return value;
2461        case 308958310: // targetLocation
2462          this.getTargetLocation().add(TypeConvertor.castToString(value)); // StringType
2463          return value;
2464        case 3377302: // need
2465          this.need = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2466          return value;
2467        case -892481550: // status
2468          value = new VerificationResultStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2469          this.status = (Enumeration) value; // Enumeration<VerificationResultStatus>
2470          return value;
2471        case 247524032: // statusDate
2472          this.statusDate = TypeConvertor.castToDateTime(value); // DateTimeType
2473          return value;
2474        case -279681197: // validationType
2475          this.validationType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2476          return value;
2477        case 797680566: // validationProcess
2478          this.getValidationProcess().add(TypeConvertor.castToCodeableConcept(value)); // CodeableConcept
2479          return value;
2480        case -70023844: // frequency
2481          this.frequency = TypeConvertor.castToTiming(value); // Timing
2482          return value;
2483        case -1313229366: // lastPerformed
2484          this.lastPerformed = TypeConvertor.castToDateTime(value); // DateTimeType
2485          return value;
2486        case 1874589434: // nextScheduled
2487          this.nextScheduled = TypeConvertor.castToDate(value); // DateType
2488          return value;
2489        case 1816382560: // failureAction
2490          this.failureAction = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2491          return value;
2492        case -528721731: // primarySource
2493          this.getPrimarySource().add((VerificationResultPrimarySourceComponent) value); // VerificationResultPrimarySourceComponent
2494          return value;
2495        case -709624112: // attestation
2496          this.attestation = (VerificationResultAttestationComponent) value; // VerificationResultAttestationComponent
2497          return value;
2498        case -1109783726: // validator
2499          this.getValidator().add((VerificationResultValidatorComponent) value); // VerificationResultValidatorComponent
2500          return value;
2501        default: return super.setProperty(hash, name, value);
2502        }
2503
2504      }
2505
2506      @Override
2507      public Base setProperty(String name, Base value) throws FHIRException {
2508        if (name.equals("target")) {
2509          this.getTarget().add(TypeConvertor.castToReference(value));
2510        } else if (name.equals("targetLocation")) {
2511          this.getTargetLocation().add(TypeConvertor.castToString(value));
2512        } else if (name.equals("need")) {
2513          this.need = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2514        } else if (name.equals("status")) {
2515          value = new VerificationResultStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2516          this.status = (Enumeration) value; // Enumeration<VerificationResultStatus>
2517        } else if (name.equals("statusDate")) {
2518          this.statusDate = TypeConvertor.castToDateTime(value); // DateTimeType
2519        } else if (name.equals("validationType")) {
2520          this.validationType = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2521        } else if (name.equals("validationProcess")) {
2522          this.getValidationProcess().add(TypeConvertor.castToCodeableConcept(value));
2523        } else if (name.equals("frequency")) {
2524          this.frequency = TypeConvertor.castToTiming(value); // Timing
2525        } else if (name.equals("lastPerformed")) {
2526          this.lastPerformed = TypeConvertor.castToDateTime(value); // DateTimeType
2527        } else if (name.equals("nextScheduled")) {
2528          this.nextScheduled = TypeConvertor.castToDate(value); // DateType
2529        } else if (name.equals("failureAction")) {
2530          this.failureAction = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
2531        } else if (name.equals("primarySource")) {
2532          this.getPrimarySource().add((VerificationResultPrimarySourceComponent) value);
2533        } else if (name.equals("attestation")) {
2534          this.attestation = (VerificationResultAttestationComponent) value; // VerificationResultAttestationComponent
2535        } else if (name.equals("validator")) {
2536          this.getValidator().add((VerificationResultValidatorComponent) value);
2537        } else
2538          return super.setProperty(name, value);
2539        return value;
2540      }
2541
2542  @Override
2543  public void removeChild(String name, Base value) throws FHIRException {
2544        if (name.equals("target")) {
2545          this.getTarget().remove(value);
2546        } else if (name.equals("targetLocation")) {
2547          this.getTargetLocation().remove(value);
2548        } else if (name.equals("need")) {
2549          this.need = null;
2550        } else if (name.equals("status")) {
2551          value = new VerificationResultStatusEnumFactory().fromType(TypeConvertor.castToCode(value));
2552          this.status = (Enumeration) value; // Enumeration<VerificationResultStatus>
2553        } else if (name.equals("statusDate")) {
2554          this.statusDate = null;
2555        } else if (name.equals("validationType")) {
2556          this.validationType = null;
2557        } else if (name.equals("validationProcess")) {
2558          this.getValidationProcess().remove(value);
2559        } else if (name.equals("frequency")) {
2560          this.frequency = null;
2561        } else if (name.equals("lastPerformed")) {
2562          this.lastPerformed = null;
2563        } else if (name.equals("nextScheduled")) {
2564          this.nextScheduled = null;
2565        } else if (name.equals("failureAction")) {
2566          this.failureAction = null;
2567        } else if (name.equals("primarySource")) {
2568          this.getPrimarySource().remove((VerificationResultPrimarySourceComponent) value);
2569        } else if (name.equals("attestation")) {
2570          this.attestation = (VerificationResultAttestationComponent) value; // VerificationResultAttestationComponent
2571        } else if (name.equals("validator")) {
2572          this.getValidator().remove((VerificationResultValidatorComponent) value);
2573        } else
2574          super.removeChild(name, value);
2575        
2576      }
2577
2578      @Override
2579      public Base makeProperty(int hash, String name) throws FHIRException {
2580        switch (hash) {
2581        case -880905839:  return addTarget(); 
2582        case 308958310:  return addTargetLocationElement();
2583        case 3377302:  return getNeed();
2584        case -892481550:  return getStatusElement();
2585        case 247524032:  return getStatusDateElement();
2586        case -279681197:  return getValidationType();
2587        case 797680566:  return addValidationProcess(); 
2588        case -70023844:  return getFrequency();
2589        case -1313229366:  return getLastPerformedElement();
2590        case 1874589434:  return getNextScheduledElement();
2591        case 1816382560:  return getFailureAction();
2592        case -528721731:  return addPrimarySource(); 
2593        case -709624112:  return getAttestation();
2594        case -1109783726:  return addValidator(); 
2595        default: return super.makeProperty(hash, name);
2596        }
2597
2598      }
2599
2600      @Override
2601      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2602        switch (hash) {
2603        case -880905839: /*target*/ return new String[] {"Reference"};
2604        case 308958310: /*targetLocation*/ return new String[] {"string"};
2605        case 3377302: /*need*/ return new String[] {"CodeableConcept"};
2606        case -892481550: /*status*/ return new String[] {"code"};
2607        case 247524032: /*statusDate*/ return new String[] {"dateTime"};
2608        case -279681197: /*validationType*/ return new String[] {"CodeableConcept"};
2609        case 797680566: /*validationProcess*/ return new String[] {"CodeableConcept"};
2610        case -70023844: /*frequency*/ return new String[] {"Timing"};
2611        case -1313229366: /*lastPerformed*/ return new String[] {"dateTime"};
2612        case 1874589434: /*nextScheduled*/ return new String[] {"date"};
2613        case 1816382560: /*failureAction*/ return new String[] {"CodeableConcept"};
2614        case -528721731: /*primarySource*/ return new String[] {};
2615        case -709624112: /*attestation*/ return new String[] {};
2616        case -1109783726: /*validator*/ return new String[] {};
2617        default: return super.getTypesForProperty(hash, name);
2618        }
2619
2620      }
2621
2622      @Override
2623      public Base addChild(String name) throws FHIRException {
2624        if (name.equals("target")) {
2625          return addTarget();
2626        }
2627        else if (name.equals("targetLocation")) {
2628          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.targetLocation");
2629        }
2630        else if (name.equals("need")) {
2631          this.need = new CodeableConcept();
2632          return this.need;
2633        }
2634        else if (name.equals("status")) {
2635          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.status");
2636        }
2637        else if (name.equals("statusDate")) {
2638          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.statusDate");
2639        }
2640        else if (name.equals("validationType")) {
2641          this.validationType = new CodeableConcept();
2642          return this.validationType;
2643        }
2644        else if (name.equals("validationProcess")) {
2645          return addValidationProcess();
2646        }
2647        else if (name.equals("frequency")) {
2648          this.frequency = new Timing();
2649          return this.frequency;
2650        }
2651        else if (name.equals("lastPerformed")) {
2652          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.lastPerformed");
2653        }
2654        else if (name.equals("nextScheduled")) {
2655          throw new FHIRException("Cannot call addChild on a singleton property VerificationResult.nextScheduled");
2656        }
2657        else if (name.equals("failureAction")) {
2658          this.failureAction = new CodeableConcept();
2659          return this.failureAction;
2660        }
2661        else if (name.equals("primarySource")) {
2662          return addPrimarySource();
2663        }
2664        else if (name.equals("attestation")) {
2665          this.attestation = new VerificationResultAttestationComponent();
2666          return this.attestation;
2667        }
2668        else if (name.equals("validator")) {
2669          return addValidator();
2670        }
2671        else
2672          return super.addChild(name);
2673      }
2674
2675  public String fhirType() {
2676    return "VerificationResult";
2677
2678  }
2679
2680      public VerificationResult copy() {
2681        VerificationResult dst = new VerificationResult();
2682        copyValues(dst);
2683        return dst;
2684      }
2685
2686      public void copyValues(VerificationResult dst) {
2687        super.copyValues(dst);
2688        if (target != null) {
2689          dst.target = new ArrayList<Reference>();
2690          for (Reference i : target)
2691            dst.target.add(i.copy());
2692        };
2693        if (targetLocation != null) {
2694          dst.targetLocation = new ArrayList<StringType>();
2695          for (StringType i : targetLocation)
2696            dst.targetLocation.add(i.copy());
2697        };
2698        dst.need = need == null ? null : need.copy();
2699        dst.status = status == null ? null : status.copy();
2700        dst.statusDate = statusDate == null ? null : statusDate.copy();
2701        dst.validationType = validationType == null ? null : validationType.copy();
2702        if (validationProcess != null) {
2703          dst.validationProcess = new ArrayList<CodeableConcept>();
2704          for (CodeableConcept i : validationProcess)
2705            dst.validationProcess.add(i.copy());
2706        };
2707        dst.frequency = frequency == null ? null : frequency.copy();
2708        dst.lastPerformed = lastPerformed == null ? null : lastPerformed.copy();
2709        dst.nextScheduled = nextScheduled == null ? null : nextScheduled.copy();
2710        dst.failureAction = failureAction == null ? null : failureAction.copy();
2711        if (primarySource != null) {
2712          dst.primarySource = new ArrayList<VerificationResultPrimarySourceComponent>();
2713          for (VerificationResultPrimarySourceComponent i : primarySource)
2714            dst.primarySource.add(i.copy());
2715        };
2716        dst.attestation = attestation == null ? null : attestation.copy();
2717        if (validator != null) {
2718          dst.validator = new ArrayList<VerificationResultValidatorComponent>();
2719          for (VerificationResultValidatorComponent i : validator)
2720            dst.validator.add(i.copy());
2721        };
2722      }
2723
2724      protected VerificationResult typedCopy() {
2725        return copy();
2726      }
2727
2728      @Override
2729      public boolean equalsDeep(Base other_) {
2730        if (!super.equalsDeep(other_))
2731          return false;
2732        if (!(other_ instanceof VerificationResult))
2733          return false;
2734        VerificationResult o = (VerificationResult) other_;
2735        return compareDeep(target, o.target, true) && compareDeep(targetLocation, o.targetLocation, true)
2736           && compareDeep(need, o.need, true) && compareDeep(status, o.status, true) && compareDeep(statusDate, o.statusDate, true)
2737           && compareDeep(validationType, o.validationType, true) && compareDeep(validationProcess, o.validationProcess, true)
2738           && compareDeep(frequency, o.frequency, true) && compareDeep(lastPerformed, o.lastPerformed, true)
2739           && compareDeep(nextScheduled, o.nextScheduled, true) && compareDeep(failureAction, o.failureAction, true)
2740           && compareDeep(primarySource, o.primarySource, true) && compareDeep(attestation, o.attestation, true)
2741           && compareDeep(validator, o.validator, true);
2742      }
2743
2744      @Override
2745      public boolean equalsShallow(Base other_) {
2746        if (!super.equalsShallow(other_))
2747          return false;
2748        if (!(other_ instanceof VerificationResult))
2749          return false;
2750        VerificationResult o = (VerificationResult) other_;
2751        return compareValues(targetLocation, o.targetLocation, true) && compareValues(status, o.status, true)
2752           && compareValues(statusDate, o.statusDate, true) && compareValues(lastPerformed, o.lastPerformed, true)
2753           && compareValues(nextScheduled, o.nextScheduled, true);
2754      }
2755
2756      public boolean isEmpty() {
2757        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(target, targetLocation, need
2758          , status, statusDate, validationType, validationProcess, frequency, lastPerformed
2759          , nextScheduled, failureAction, primarySource, attestation, validator);
2760      }
2761
2762  @Override
2763  public ResourceType getResourceType() {
2764    return ResourceType.VerificationResult;
2765   }
2766
2767 /**
2768   * Search parameter: <b>attestation-method</b>
2769   * <p>
2770   * Description: <b>Select validation information for data that was attested to using the specified method</b><br>
2771   * Type: <b>token</b><br>
2772   * Path: <b>VerificationResult.attestation.communicationMethod</b><br>
2773   * </p>
2774   */
2775  @SearchParamDefinition(name="attestation-method", path="VerificationResult.attestation.communicationMethod", description="Select validation information for data that was attested to using the specified method", type="token" )
2776  public static final String SP_ATTESTATION_METHOD = "attestation-method";
2777 /**
2778   * <b>Fluent Client</b> search parameter constant for <b>attestation-method</b>
2779   * <p>
2780   * Description: <b>Select validation information for data that was attested to using the specified method</b><br>
2781   * Type: <b>token</b><br>
2782   * Path: <b>VerificationResult.attestation.communicationMethod</b><br>
2783   * </p>
2784   */
2785  public static final ca.uhn.fhir.rest.gclient.TokenClientParam ATTESTATION_METHOD = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_ATTESTATION_METHOD);
2786
2787 /**
2788   * Search parameter: <b>attestation-onbehalfof</b>
2789   * <p>
2790   * Description: <b>Select validation information for data that was attested to on behalf of the specified source</b><br>
2791   * Type: <b>reference</b><br>
2792   * Path: <b>VerificationResult.attestation.onBehalfOf</b><br>
2793   * </p>
2794   */
2795  @SearchParamDefinition(name="attestation-onbehalfof", path="VerificationResult.attestation.onBehalfOf", description="Select validation information for data that was attested to on behalf of the specified source", type="reference", target={Organization.class, Practitioner.class, PractitionerRole.class } )
2796  public static final String SP_ATTESTATION_ONBEHALFOF = "attestation-onbehalfof";
2797 /**
2798   * <b>Fluent Client</b> search parameter constant for <b>attestation-onbehalfof</b>
2799   * <p>
2800   * Description: <b>Select validation information for data that was attested to on behalf of the specified source</b><br>
2801   * Type: <b>reference</b><br>
2802   * Path: <b>VerificationResult.attestation.onBehalfOf</b><br>
2803   * </p>
2804   */
2805  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ATTESTATION_ONBEHALFOF = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ATTESTATION_ONBEHALFOF);
2806
2807/**
2808   * Constant for fluent queries to be used to add include statements. Specifies
2809   * the path value of "<b>VerificationResult:attestation-onbehalfof</b>".
2810   */
2811  public static final ca.uhn.fhir.model.api.Include INCLUDE_ATTESTATION_ONBEHALFOF = new ca.uhn.fhir.model.api.Include("VerificationResult:attestation-onbehalfof").toLocked();
2812
2813 /**
2814   * Search parameter: <b>attestation-who</b>
2815   * <p>
2816   * Description: <b>Select validation information for data that was attested to by the specified source</b><br>
2817   * Type: <b>reference</b><br>
2818   * Path: <b>VerificationResult.attestation.who</b><br>
2819   * </p>
2820   */
2821  @SearchParamDefinition(name="attestation-who", path="VerificationResult.attestation.who", description="Select validation information for data that was attested to by the specified source", type="reference", target={Organization.class, Practitioner.class, PractitionerRole.class } )
2822  public static final String SP_ATTESTATION_WHO = "attestation-who";
2823 /**
2824   * <b>Fluent Client</b> search parameter constant for <b>attestation-who</b>
2825   * <p>
2826   * Description: <b>Select validation information for data that was attested to by the specified source</b><br>
2827   * Type: <b>reference</b><br>
2828   * Path: <b>VerificationResult.attestation.who</b><br>
2829   * </p>
2830   */
2831  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam ATTESTATION_WHO = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_ATTESTATION_WHO);
2832
2833/**
2834   * Constant for fluent queries to be used to add include statements. Specifies
2835   * the path value of "<b>VerificationResult:attestation-who</b>".
2836   */
2837  public static final ca.uhn.fhir.model.api.Include INCLUDE_ATTESTATION_WHO = new ca.uhn.fhir.model.api.Include("VerificationResult:attestation-who").toLocked();
2838
2839 /**
2840   * Search parameter: <b>primarysource-date</b>
2841   * <p>
2842   * Description: <b>Select validation information for data that was validated against a primary source on the specified date</b><br>
2843   * Type: <b>date</b><br>
2844   * Path: <b>VerificationResult.primarySource.validationDate</b><br>
2845   * </p>
2846   */
2847  @SearchParamDefinition(name="primarysource-date", path="VerificationResult.primarySource.validationDate", description="Select validation information for data that was validated against a primary source on the specified date", type="date" )
2848  public static final String SP_PRIMARYSOURCE_DATE = "primarysource-date";
2849 /**
2850   * <b>Fluent Client</b> search parameter constant for <b>primarysource-date</b>
2851   * <p>
2852   * Description: <b>Select validation information for data that was validated against a primary source on the specified date</b><br>
2853   * Type: <b>date</b><br>
2854   * Path: <b>VerificationResult.primarySource.validationDate</b><br>
2855   * </p>
2856   */
2857  public static final ca.uhn.fhir.rest.gclient.DateClientParam PRIMARYSOURCE_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_PRIMARYSOURCE_DATE);
2858
2859 /**
2860   * Search parameter: <b>primarysource-type</b>
2861   * <p>
2862   * Description: <b>Select validation information for data that was validated against the specified type of primary source organization</b><br>
2863   * Type: <b>token</b><br>
2864   * Path: <b>VerificationResult.primarySource.type</b><br>
2865   * </p>
2866   */
2867  @SearchParamDefinition(name="primarysource-type", path="VerificationResult.primarySource.type", description="Select validation information for data that was validated against the specified type of primary source organization", type="token" )
2868  public static final String SP_PRIMARYSOURCE_TYPE = "primarysource-type";
2869 /**
2870   * <b>Fluent Client</b> search parameter constant for <b>primarysource-type</b>
2871   * <p>
2872   * Description: <b>Select validation information for data that was validated against the specified type of primary source organization</b><br>
2873   * Type: <b>token</b><br>
2874   * Path: <b>VerificationResult.primarySource.type</b><br>
2875   * </p>
2876   */
2877  public static final ca.uhn.fhir.rest.gclient.TokenClientParam PRIMARYSOURCE_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_PRIMARYSOURCE_TYPE);
2878
2879 /**
2880   * Search parameter: <b>primarysource-who</b>
2881   * <p>
2882   * Description: <b>Select validation information for data that was validated against the specified primary source</b><br>
2883   * Type: <b>reference</b><br>
2884   * Path: <b>VerificationResult.primarySource.who</b><br>
2885   * </p>
2886   */
2887  @SearchParamDefinition(name="primarysource-who", path="VerificationResult.primarySource.who", description="Select validation information for data that was validated against the specified primary source", type="reference", target={Organization.class, Practitioner.class, PractitionerRole.class } )
2888  public static final String SP_PRIMARYSOURCE_WHO = "primarysource-who";
2889 /**
2890   * <b>Fluent Client</b> search parameter constant for <b>primarysource-who</b>
2891   * <p>
2892   * Description: <b>Select validation information for data that was validated against the specified primary source</b><br>
2893   * Type: <b>reference</b><br>
2894   * Path: <b>VerificationResult.primarySource.who</b><br>
2895   * </p>
2896   */
2897  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PRIMARYSOURCE_WHO = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PRIMARYSOURCE_WHO);
2898
2899/**
2900   * Constant for fluent queries to be used to add include statements. Specifies
2901   * the path value of "<b>VerificationResult:primarysource-who</b>".
2902   */
2903  public static final ca.uhn.fhir.model.api.Include INCLUDE_PRIMARYSOURCE_WHO = new ca.uhn.fhir.model.api.Include("VerificationResult:primarysource-who").toLocked();
2904
2905 /**
2906   * Search parameter: <b>status-date</b>
2907   * <p>
2908   * Description: <b>Select validation information with a validation status that occurred at the specified date/time</b><br>
2909   * Type: <b>date</b><br>
2910   * Path: <b>VerificationResult.statusDate</b><br>
2911   * </p>
2912   */
2913  @SearchParamDefinition(name="status-date", path="VerificationResult.statusDate", description="Select validation information with a validation status that occurred at the specified date/time", type="date" )
2914  public static final String SP_STATUS_DATE = "status-date";
2915 /**
2916   * <b>Fluent Client</b> search parameter constant for <b>status-date</b>
2917   * <p>
2918   * Description: <b>Select validation information with a validation status that occurred at the specified date/time</b><br>
2919   * Type: <b>date</b><br>
2920   * Path: <b>VerificationResult.statusDate</b><br>
2921   * </p>
2922   */
2923  public static final ca.uhn.fhir.rest.gclient.DateClientParam STATUS_DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_STATUS_DATE);
2924
2925 /**
2926   * Search parameter: <b>status</b>
2927   * <p>
2928   * Description: <b>Select validation information with the specified status</b><br>
2929   * Type: <b>token</b><br>
2930   * Path: <b>VerificationResult.status</b><br>
2931   * </p>
2932   */
2933  @SearchParamDefinition(name="status", path="VerificationResult.status", description="Select validation information with the specified status", type="token" )
2934  public static final String SP_STATUS = "status";
2935 /**
2936   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2937   * <p>
2938   * Description: <b>Select validation information with the specified status</b><br>
2939   * Type: <b>token</b><br>
2940   * Path: <b>VerificationResult.status</b><br>
2941   * </p>
2942   */
2943  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2944
2945 /**
2946   * Search parameter: <b>target</b>
2947   * <p>
2948   * Description: <b>A resource that was validated</b><br>
2949   * Type: <b>reference</b><br>
2950   * Path: <b>VerificationResult.target</b><br>
2951   * </p>
2952   */
2953  @SearchParamDefinition(name="target", path="VerificationResult.target", description="A resource that was validated", type="reference", target={Account.class, ActivityDefinition.class, ActorDefinition.class, AdministrableProductDefinition.class, AdverseEvent.class, AllergyIntolerance.class, Appointment.class, AppointmentResponse.class, ArtifactAssessment.class, AuditEvent.class, Basic.class, Binary.class, BiologicallyDerivedProduct.class, BiologicallyDerivedProductDispense.class, BodyStructure.class, Bundle.class, CapabilityStatement.class, CarePlan.class, CareTeam.class, ChargeItem.class, ChargeItemDefinition.class, Citation.class, Claim.class, ClaimResponse.class, ClinicalImpression.class, ClinicalUseDefinition.class, CodeSystem.class, Communication.class, CommunicationRequest.class, CompartmentDefinition.class, Composition.class, ConceptMap.class, Condition.class, ConditionDefinition.class, Consent.class, Contract.class, Coverage.class, CoverageEligibilityRequest.class, CoverageEligibilityResponse.class, DetectedIssue.class, Device.class, DeviceAssociation.class, DeviceDefinition.class, DeviceDispense.class, DeviceMetric.class, DeviceRequest.class, DeviceUsage.class, DiagnosticReport.class, DocumentReference.class, Encounter.class, EncounterHistory.class, Endpoint.class, EnrollmentRequest.class, EnrollmentResponse.class, EpisodeOfCare.class, EventDefinition.class, Evidence.class, EvidenceReport.class, EvidenceVariable.class, ExampleScenario.class, ExplanationOfBenefit.class, FamilyMemberHistory.class, Flag.class, FormularyItem.class, GenomicStudy.class, Goal.class, GraphDefinition.class, Group.class, GuidanceResponse.class, HealthcareService.class, ImagingSelection.class, ImagingStudy.class, Immunization.class, ImmunizationEvaluation.class, ImmunizationRecommendation.class, ImplementationGuide.class, Ingredient.class, InsurancePlan.class, InventoryItem.class, InventoryReport.class, Invoice.class, Library.class, Linkage.class, ListResource.class, Location.class, ManufacturedItemDefinition.class, Measure.class, MeasureReport.class, Medication.class, MedicationAdministration.class, MedicationDispense.class, MedicationKnowledge.class, MedicationRequest.class, MedicationStatement.class, MedicinalProductDefinition.class, MessageDefinition.class, MessageHeader.class, MolecularSequence.class, NamingSystem.class, NutritionIntake.class, NutritionOrder.class, NutritionProduct.class, Observation.class, ObservationDefinition.class, OperationDefinition.class, OperationOutcome.class, Organization.class, OrganizationAffiliation.class, PackagedProductDefinition.class, Parameters.class, Patient.class, PaymentNotice.class, PaymentReconciliation.class, Permission.class, Person.class, PlanDefinition.class, Practitioner.class, PractitionerRole.class, Procedure.class, Provenance.class, Questionnaire.class, QuestionnaireResponse.class, RegulatedAuthorization.class, RelatedPerson.class, RequestOrchestration.class, Requirements.class, ResearchStudy.class, ResearchSubject.class, RiskAssessment.class, Schedule.class, SearchParameter.class, ServiceRequest.class, Slot.class, Specimen.class, SpecimenDefinition.class, StructureDefinition.class, StructureMap.class, Subscription.class, SubscriptionStatus.class, SubscriptionTopic.class, Substance.class, SubstanceDefinition.class, SubstanceNucleicAcid.class, SubstancePolymer.class, SubstanceProtein.class, SubstanceReferenceInformation.class, SubstanceSourceMaterial.class, SupplyDelivery.class, SupplyRequest.class, Task.class, TerminologyCapabilities.class, TestPlan.class, TestReport.class, TestScript.class, Transport.class, ValueSet.class, VerificationResult.class, VisionPrescription.class } )
2954  public static final String SP_TARGET = "target";
2955 /**
2956   * <b>Fluent Client</b> search parameter constant for <b>target</b>
2957   * <p>
2958   * Description: <b>A resource that was validated</b><br>
2959   * Type: <b>reference</b><br>
2960   * Path: <b>VerificationResult.target</b><br>
2961   * </p>
2962   */
2963  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam TARGET = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_TARGET);
2964
2965/**
2966   * Constant for fluent queries to be used to add include statements. Specifies
2967   * the path value of "<b>VerificationResult:target</b>".
2968   */
2969  public static final ca.uhn.fhir.model.api.Include INCLUDE_TARGET = new ca.uhn.fhir.model.api.Include("VerificationResult:target").toLocked();
2970
2971 /**
2972   * Search parameter: <b>validator-organization</b>
2973   * <p>
2974   * Description: <b>Select validation information for data that was validated by the specified organization</b><br>
2975   * Type: <b>reference</b><br>
2976   * Path: <b>VerificationResult.validator.organization</b><br>
2977   * </p>
2978   */
2979  @SearchParamDefinition(name="validator-organization", path="VerificationResult.validator.organization", description="Select validation information for data that was validated by the specified organization", type="reference", target={Organization.class } )
2980  public static final String SP_VALIDATOR_ORGANIZATION = "validator-organization";
2981 /**
2982   * <b>Fluent Client</b> search parameter constant for <b>validator-organization</b>
2983   * <p>
2984   * Description: <b>Select validation information for data that was validated by the specified organization</b><br>
2985   * Type: <b>reference</b><br>
2986   * Path: <b>VerificationResult.validator.organization</b><br>
2987   * </p>
2988   */
2989  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam VALIDATOR_ORGANIZATION = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_VALIDATOR_ORGANIZATION);
2990
2991/**
2992   * Constant for fluent queries to be used to add include statements. Specifies
2993   * the path value of "<b>VerificationResult:validator-organization</b>".
2994   */
2995  public static final ca.uhn.fhir.model.api.Include INCLUDE_VALIDATOR_ORGANIZATION = new ca.uhn.fhir.model.api.Include("VerificationResult:validator-organization").toLocked();
2996
2997
2998}
2999