amountItems/TaxCredit.js

import validate from 'validate.js';
import {ValidationError} from '../Validation';
import {numberPad, fillWithPattern} from '../utils.js';

/**
 * TaxCredit Class
 *
 * Crédit d'impot
 * R209 - R211
 *
 * @private
 */
class TaxCredit {
  /**
   * @param {Object}  taxCredit
   * @param {Number}  [taxCredit.AA]  R209 - 2AB Crédit d’impôt non restituable
   * @param {Number}  [taxCredit.AJ]  R210 - 2BG Crédit d’impôt restituable
   * @param {Number}  [taxCredit.AD]  R211 - 2CK Crédit d’impôt prélèvement restituable
   */
  constructor(taxCredit) {
    this.taxCredit = taxCredit
  }

  export() {
    this.validation();

    return [
      numberPad(this.taxCredit.AA, 10),
      numberPad(this.taxCredit.AJ, 10),
      numberPad(this.taxCredit.AD, 10)
    ];
  }

  validation() {
    const taxCreditSchema = {
      AA: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 0,
          lessThanOrEqualTo: 9999999999
        }
      },
      AJ: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 0,
          lessThanOrEqualTo: 9999999999
        }
      },
      AD: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 0,
          lessThanOrEqualTo: 9999999999
        }
      }
    };

    const invalid = validate(this.taxCredit, taxCreditSchema);

    if (invalid) {
      throw new ValidationError(invalid);
    } else {
      return true;
    }
  }

  static default() {
    return fillWithPattern('10N10N10N');
  }
}

export default TaxCredit;