code: function(code, name, concept) {
    Concept.call(this, name);
    /**
     * Gets or sets the value of the abs code.
     * @type {String}
     */
    this.code = code;
  
    /**
     * Gets the list of abs codes contained in this group.  This property is observable.
     * @type {AbsCode[]}
     */
    this.items = [];
  
    /**
     * Gets or sets the parent for a code.  This property is observable.
     * @type {AbsCode|AbsConcept}
     */
    this.parent = undefined;
  
    /**
     * Gets or sets the ultimate parent concept for a code.  This property is observable.
     * @type {AbsConcept}
     */
    this.concept = concept;
  
    /**
     * Flag to say if this if this concept only allows more than one active child.
     * Defaults to the same as concept.
     * Only meaningful if this concept has an items array.
     * @type {Boolean}
     */
    this.allowMultiple = this.concept.allowMultiple;
  
    /**
     * Gets or sets a value indicating whether this abs code is currently open.  When an
     * item is open, its child items (if any) are visible.  This property is observable.
     * @type {Boolean}
     */
    this.isOpen = false;
  
    /**
     * Gets or sets a value indicating whether this abs code is currently active.  When a
     * code is active, it is included in the abs data query.  This property is observable.
     * @type {Boolean}
     */
    this.isActive = false;
  
    /**
     * Flag to say if this is selectable.  This property is observable.
     * @type {Boolean}
     */
    this.isSelectable = true; //for ko
  
    knockout.track(this, ["code", "items", "isOpen", "isActive"]);
  }
docs: Represents an ABS code associated with a AbsConcept.
  An AbsCode may contains an array one of more child AbsCodes.
  
  @alias AbsCode
  @constructor
  @extends {Concept}