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