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