text: /**
   * @name exports
   * @summary Identifier Class
   */
  module.exports = class Identifier {
  	constructor(opts) {
  		// Create an object to store all props
  		Object.defineProperty(this, '__data', { value: {} });
  
  		// Define getters and setters as enumerable
  
  		Object.defineProperty(this, '_id', {
  			enumerable: true,
  			get: () => this.__data._id,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let Element = require('./element.js');
  				this.__data._id = new Element(value);
  			},
  		});
  
  		Object.defineProperty(this, 'id', {
  			enumerable: true,
  			get: () => this.__data.id,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				this.__data.id = value;
  			},
  		});
  
  		Object.defineProperty(this, 'extension', {
  			enumerable: true,
  			get: () => this.__data.extension,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let Extension = require('./extension.js');
  				this.__data.extension = Array.isArray(value) ? value.map(v => new Extension(v)) : [new Extension(value)];
  			},
  		});
  
  		Object.defineProperty(this, '_use', {
  			enumerable: true,
  			get: () => this.__data._use,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let Element = require('./element.js');
  				this.__data._use = new Element(value);
  			},
  		});
  
  		Object.defineProperty(this, 'use', {
  			enumerable: true,
  			get: () => this.__data.use,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				this.__data.use = value;
  			},
  		});
  
  		Object.defineProperty(this, 'type', {
  			enumerable: true,
  			get: () => this.__data.type,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let CodeableConcept = require('./codeableconcept.js');
  				this.__data.type = new CodeableConcept(value);
  			},
  		});
  
  		Object.defineProperty(this, '_system', {
  			enumerable: true,
  			get: () => this.__data._system,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let Element = require('./element.js');
  				this.__data._system = new Element(value);
  			},
  		});
  
  		Object.defineProperty(this, 'system', {
  			enumerable: true,
  			get: () => this.__data.system,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				this.__data.system = value;
  			},
  		});
  
  		Object.defineProperty(this, '_value', {
  			enumerable: true,
  			get: () => this.__data._value,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let Element = require('./element.js');
  				this.__data._value = new Element(value);
  			},
  		});
  
  		Object.defineProperty(this, 'value', {
  			enumerable: true,
  			get: () => this.__data.value,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				this.__data.value = value;
  			},
  		});
  
  		Object.defineProperty(this, 'period', {
  			enumerable: true,
  			get: () => this.__data.period,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let Period = require('./period.js');
  				this.__data.period = new Period(value);
  			},
  		});
  
  		Object.defineProperty(this, 'assigner', {
  			enumerable: true,
  			get: () => this.__data.assigner,
  			set: value => {
  				if (value === undefined || value === null) {
  					return;
  				}
  
  				let Reference = require('./reference.js');
  				this.__data.assigner = new Reference(value);
  			},
  		});
  
  		// Merge in any defaults
  		Object.assign(this, opts);
  
  		// Define a default non-writable resourceType property
  		Object.defineProperty(this, 'resourceType', {
  			value: 'Identifier',
  			enumerable: true,
  			writable: false,
  		});
  	}
  
  	static get resourceType() {
  		return 'Identifier';
  	}
  
  	toJSON() {
  		return {
  			_id: this._id && this._id.toJSON(),
  			id: this.id,
  			extension: this.extension && this.extension.map(v => v.toJSON()),
  			_use: this._use && this._use.toJSON(),
  			use: this.use,
  			type: this.type && this.type.toJSON(),
  			_system: this._system && this._system.toJSON(),
  			system: this.system,
  			_value: this._value && this._value.toJSON(),
  			value: this.value,
  			period: this.period && this.period.toJSON(),
  			assigner: this.assigner && this.assigner.toJSON(),
  		};
  	}
  };
  