private final I_C_TaxDeclarationAcct createTaxDeclarationAcct(
      final I_C_TaxDeclarationLine taxDeclarationLine, final I_Fact_Acct fact) {
    final I_C_TaxDeclaration taxDeclaration = getC_TaxDeclaration();

    final I_C_TaxDeclarationAcct taxDeclarationAcct =
        InterfaceWrapperHelper.create(
            getCtx(), I_C_TaxDeclarationAcct.class, ITrx.TRXNAME_ThreadInherited);
    taxDeclarationAcct.setAD_Org_ID(fact.getAD_Org_ID());
    taxDeclarationAcct.setC_TaxDeclaration(taxDeclaration);

    // Link to C_TaxDeclarationLine ONLY if the Fact_Acct record is about tax booking
    // NOTE: very important, reports are relying on this (e.g. see RV_TaxDeclarationLine)
    if (taxDeclarationLine != null && taxDeclarationLine.getC_Tax_ID() == fact.getC_Tax_ID()) {
      taxDeclarationAcct.setC_TaxDeclarationLine(taxDeclarationLine);
    } else {
      taxDeclarationAcct.setC_TaxDeclarationLine(null);
    }

    taxDeclarationAcct.setFact_Acct_ID(
        fact.getFact_Acct_ID()); // this FK shall block Fact_Acct to be deleted
    taxDeclarationAcct.setC_AcctSchema_ID(fact.getC_AcctSchema_ID());

    //
    // Save
    final int line = lineNoOffset_TaxDeclarationAcct + (countAcctLinesCreated + 1) * 10;
    taxDeclarationAcct.setLine(line);
    InterfaceWrapperHelper.save(taxDeclarationAcct);
    countAcctLinesCreated++;

    return taxDeclarationAcct;
  }