amountItems/IncomeSubjectToIncomeTax.js

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

/**
 * IncomeSubjectToIncomeTax Class
 *
 * Revenus soumis a l’ir et pour lesquels les prélèvements sociaux ont dejà été acquittés
 * R232 - R234
 *
 * @private
 */
class IncomeSubjectToIncomeTax {
  /**
   * @param {Object}  incomeSubjectToIncomeTax
   * @param {Number}  [incomeSubjectToIncomeTax.BS]  R232 - 2CG Produits de PEP, produits de bons ou contrats de capitalisation et des placements de même nature, produits soumis à cotisations RSI (sans CSG déductible)
   * @param {Number}  [incomeSubjectToIncomeTax.DQ]  R233 - 2CG Répartitions de FCPR et distributions de SCR (sans CSG déductible)
   * @param {Number}  [incomeSubjectToIncomeTax.BU]  R234 - 2BH Revenus déjà soumis aux prélèvements sociaux avec CSG déductible
   */
  constructor(incomeSubjectToIncomeTax) {
    this.incomeSubjectToIncomeTax = incomeSubjectToIncomeTax
  }

  export() {
    this.validation();

    return [
      numberPad(this.incomeSubjectToIncomeTax.BS, 10),
      numberPad(this.incomeSubjectToIncomeTax.DQ, 10),
      numberPad(this.incomeSubjectToIncomeTax.BU, 10)
    ];
  }

  validation() {
    const incomeSubjectToIncomeTaxSchema = {
      BS: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 0,
          lessThanOrEqualTo: 9999999999
        }
      },
      DQ: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 0,
          lessThanOrEqualTo: 9999999999
        }
      },
      BU: {
        numericality: {
          onlyInteger: true,
          greaterThanOrEqualTo: 0,
          lessThanOrEqualTo: 9999999999
        }
      }
    };

    const invalid = validate(this.incomeSubjectToIncomeTax, incomeSubjectToIncomeTaxSchema);
    if (invalid) {
      throw new ValidationError(invalid);
    } else {
      return true;
    }
  }

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

export default IncomeSubjectToIncomeTax;