Codeunit 6200 Non-Deductible VAT

App
Base Application
Namespace
Microsoft.Finance.VAT.Calculation
Versions
22-28

Procedures, 82Events, 25Obsolete, 11

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Finance/VAT/Calculation/NonDeductibleVAT.Codeunit.al919 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Finance.VAT.Calculation;

using Microsoft.Finance.Currency;
using Microsoft.Finance.Deferral;
using Microsoft.Finance.GeneralLedger.Journal;
using Microsoft.Finance.GeneralLedger.Ledger;
using Microsoft.Finance.ReceivablesPayables;
using Microsoft.Finance.VAT.Ledger;
using Microsoft.Finance.VAT.Setup;
using Microsoft.FixedAssets.Ledger;
using Microsoft.Foundation.Enums;
using Microsoft.Projects.Project.Journal;
using Microsoft.Purchases.Document;
using Microsoft.Purchases.History;

/// <summary>
/// Provides an interface of the Non-Deductible VAT functionality.
/// </summary>
codeunit 6200 "Non-Deductible VAT"
{
    Access = Public;

    var
        NonDedVATImpl: Codeunit "Non-Ded. VAT Impl.";

    /// <summary>
    /// Returns true if the Non-Deductible VAT functionality is enabled
    /// </summary>
    /// <returns>if the feature is fully enabled</returns>
    procedure IsNonDeductibleVATEnabled(): Boolean
    begin
        exit(NonDedVATImpl.IsNonDeductibleVATEnabled());
    end;

    /// <summary>
    /// Returns true if Non-Deductible VAT fields must be shown in document lines
    /// </summary>
    /// <returns>If Non-Deductible VAT fields are visible in documents</returns>
    procedure ShowNonDeductibleVATInLines(): Boolean
    begin
        exit(NonDedVATImpl.ShowNonDeductibleVATInLines());
    end;

    /// <summary>
    /// Returns the non-deductible VAT amount of the current purchase line
    /// </summary>
    /// <param name="PurchLine">The current purchase line</param>
    /// <returns>The non-deductible VAT amount</returns>
    procedure GetNonDeductibleVATAmount(PurchaseLine: Record "Purchase Line"): Decimal
    begin
        exit(NonDedVATImpl.GetNonDeductibleVATAmount(PurchaseLine));
    end;

    /// <summary>
    /// Returns the non-deductible VAT percent for the combination of a VAT Business group, VAT Product group and a certain posting type
    /// </summary>
    /// <param name="VATBusPostGroupCode">The VAT business posting group code</param>
    /// <param name="VATProdPostGroupCode">The VAT product posting group code</param>
    /// <param name="GeneralPostingType">The sales or purchase</param>
    procedure GetNonDeductibleVATPct(VATBusPostGroupCode: Code[20]; VATProdPostGroupCode: Code[20]; GeneralPostingType: Enum "General Posting Type")
    begin
        NonDedVATImpl.GetNonDeductibleVATPct(VATBusPostGroupCode, VATProdPostGroupCode, GeneralPostingType);
    end;

    /// <summary>
    /// Returns the non-deductible VAT percent of the current VAT posting setup
    /// </summary>
    /// <param name="VATPostingSetup">The current VAT posting setup</param>
    /// <returns>The non-deductible VAT percent</returns>
    procedure GetNonDeductibleVATPct(VATPostingSetup: Record "VAT Posting Setup"): Decimal
    begin
        exit(NonDedVATImpl.GetNonDeductibleVATPct(VATPostingSetup, Enum::"General Posting Type"::Purchase));
    end;

    /// <summary>
    /// Returns the non-deductible VAT amount of the current general journal line
    /// </summary>
    /// <param name="GenJournalLine">The current general journal line</param>
    /// <returns>The non-deductible VAT amount</returns>
    procedure GetNonDeductibleVATAmount(GenJournalLine: Record "Gen. Journal Line"): Decimal
    begin
        exit(NonDedVATImpl.GetNonDeductibleVATAmount(GenJournalLine));
    end;

    /// <summary>
    /// Returns the non-deductible VAT percent for deferrals
    /// </summary>
    /// <param name="VATBusPostGroupCode">VAT business posting group code</param>
    /// <param name="VATProdPostGroupCode">VAT product posting group code</param>
    /// <param name="DeferralDocType">Deferral document type</param>
    /// <returns>The non-deductible VAT percent</returns>
    procedure GetNonDeductibleVATPct(VATBusPostGroupCode: Code[20]; VATProdPostGroupCode: Code[20]; DeferralDocType: Enum "Deferral Document Type"): Decimal
    begin
        exit(NonDedVATImpl.GetNonDeductibleVATPct(VATBusPostGroupCode, VATProdPostGroupCode, DeferralDocType));
    end;

    /// <summary>
    /// Returns the Non-Deductible VAT account for deferrals
    /// </summary>
    /// <param name="DeferralDocType">Deferral document type</param>
    /// <param name="PostingGLAccountNo">Default posting G/L account number</param>
    /// <param name="VATPostingSetup">VAT Posting Setup</param>
    /// <returns>The G/L account number</returns>
    procedure GetNonDeductibleVATAccForDeferrals(DeferralDocType: Enum "Deferral Document Type"; PostingGLAccountNo: Code[20]; VATPostingSetup: Record "VAT Posting Setup"): Code[20]
    begin
        exit(NonDedVATImpl.GetNonDeductibleVATAccForDeferrals(DeferralDocType, PostingGLAccountNo, VATPostingSetup));
    end;

    /// <summary>
    /// Get the Non-Deductible VAT amount to add to the item cost
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <returns>The Non-Deductible VAT Amount</returns>
    procedure GetNonDeductibleVATAmountForItemCost(PurchaseLine: Record "Purchase Line"): Decimal
    begin
        exit(NonDedVATImpl.GetNonDeductibleVATAmountForItemCost(PurchaseLine));
    end;

    /// <summary>
    /// Get Non-Deductible VAT amount
    /// </summary>
    /// <param name="Amount">The base amount</param>
    /// <param name="NonDeductiblePercent">The Non-Deductible VAT percent</param>
    /// <param name="AmountRoundingPrecision">Amount rounding precision to apply after multiplication</param>
    /// <param name="Rounding">The remainining rounding difference after multiplication</param>
    /// <returns>The Non-Deductible VAT Amount</returns>
    procedure GetNonDeductibleAmount(Amount: Decimal; NonDeductiblePercent: Decimal; AmountRoundingPrecision: Decimal; var Rounding: Decimal) Result: Decimal
    begin
        exit(NonDedVATImpl.GetNonDeductibleAmount(Amount, NonDeductiblePercent, AmountRoundingPrecision, Rounding));
    end;

    /// <summary>
    /// Returns the non-deductible VAT base from the VAT entry in both LCY and ACY
    /// </summary>
    /// <param name="NonDedVATBase">The Non-Deductible VAT base</param>
    /// <param name="NonDedVATBaseACY">The Non-Deductible VAT base in additional currency</param>
    /// <param name="VATEntry">The current purchase line</param>
    procedure GetNonDeductibleVATBaseBothCurrencies(var NonDedVATBase: Decimal; var NonDedVATBaseACY: Decimal; VATEntry: Record "VAT Entry")
    begin
        NonDedVATImpl.GetNonDeductibleVATBaseBothCurrencies(NonDedVATBase, NonDedVATBaseACY, VATEntry);
    end;

    /// <summary>
    /// Sets the non-deductible VAT percent in the purchase line
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure SetNonDeductiblePct(var PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.SetNonDeductiblePct(PurchaseLine);
    end;

    /// <summary>
    /// Set the Non-Deductible VAT amount in the purchase line
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="NonDeductibleVATAmount">The Non-Deductible VAT amount to set</param>
    procedure SetNonDedVATAmountInPurchLine(var PurchaseLine: Record "Purchase Line"; NonDeductibleVATAmount: Decimal)
    begin
        NonDedVATImpl.SetNonDedVATAmountInPurchLine(PurchaseLine, NonDeductibleVATAmount);
    end;

    /// <summary>
    /// Set the Non-Deductible VAT difference of the VAT amount line to the purchase line with factor multiplication
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="VATAmountLineRemainder">Remainder from rounding to add to the next line</param>
    /// <param name="VATDifference">The Non-Deductible VAT difference to set</param>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    /// <param name="Currency">The currency code of the document</param>
    /// <param name="Part">The numerator for the factor calculation</param>
    /// <param name="Total">The denominator for factor calculation</param>
    procedure SetNonDedVATAmountDiffInPurchLine(var PurchaseLine: Record "Purchase Line"; var VATAmountLineRemainder: Record "VAT Amount Line"; var VATDifference: Decimal; VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; Part: Decimal; Total: Decimal)
    begin
        NonDedVATImpl.SetNonDedVATAmountDiffInPurchLine(PurchaseLine, VATAmountLineRemainder, VATDifference, VATAmountLine, Currency, Part, Total);
    end;

    /// <summary>
    /// Set Non-Deductible VAT base in the VAT Entry
    /// </summary>
    /// <param name="VATEntry">The current VAT Entry to be updated</param>
    /// <param name="NonDedVATAmount">Non-Deductible VAT amount</param>
    /// <param name="NonDedVATAmountACY">Non-Deductible VAT amount in additional currency</param>
    procedure SetNonDeductibleVATAmount(var VATEntry: Record "VAT Entry"; NonDedVATAmount: Decimal; NonDedVATAmountACY: Decimal)
    begin
        NonDedVATImpl.SetNonDeductibleVATAmount(VATEntry, NonDedVATAmount, NonDedVATAmountACY);
    end;

    /// <summary>
    /// Set Non-Deductible VAT amount in the VAT Entry
    /// </summary>
    /// <param name="VATEntry">The current VAT Entry to be updated</param>
    /// <param name="NonDedVATBase">Non-Deductible VAT base</param>
    /// <param name="NonDedVATBaseACY">Non-Deductible VAT base in additional currency</param>
    procedure SetNonDeductibleVATBase(var VATEntry: Record "VAT Entry"; NonDedVATBase: Decimal; NonDedVATBaseACY: Decimal)
    begin
        NonDedVATImpl.SetNonDeductibleVATBase(VATEntry, NonDedVATBase, NonDedVATBaseACY);
    end;

    /// <summary>
    /// Set Non-Deductible VAT amounts in the invoice posting buffer
    /// </summary>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer to be updated</param>
    /// <param name="TotalNonDedVATBase">Total Non-Deductible VAT base</param>
    /// <param name="TotalNonDedVATAmount">Total Non-Deductible VAT amount</param>
    /// <param name="TotalNonDedVATBaseACY">Total Non-Deductible VAT base in additional currency</param>
    /// <param name="TotalNonDedVATAmountACY">Total Non-Deductible VAT amount in additional currency</param>
    /// <param name="TotalNonDedVATDiff">Total Non-Deductible VAT difference</param>
    procedure SetNonDeductibleVAT(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; TotalNonDedVATBase: Decimal; TotalNonDedVATAmount: Decimal; TotalNonDedVATBaseACY: Decimal; TotalNonDedVATAmountACY: Decimal; TotalNonDedVATDiff: Decimal)
    begin
        NonDedVATImpl.SetNonDeductibleVAT(InvoicePostingBuffer, TotalNonDedVATBase, TotalNonDedVATAmount, TotalNonDedVATBaseACY, TotalNonDedVATAmountACY, TotalNonDedVATDiff);
    end;

    /// <summary>
    /// Set Non-Deductible VAT amounts in the VAT entry
    /// </summary>
    /// <param name="VATEntry">The current VAT Entry to be updated</param>
    /// <param name="NonDedBase">The Non-Deductible VAT base</param>
    /// <param name="NonDedVATAmount">The Non-Deductible VAT amount</param>
    /// <param name="SrcCurrNonDedBaseAmount">The Non-Deductible VAT base in additional currency</param>
    /// <param name="SrcCurrNonDedVATAmount">The Non-Deductible VAT amount in additional currency</param>
    /// <param name="NonDedVATDiff">The Non-Deductible VAT difference</param>
    /// <param name="NonDedVATDiffACY">The Non-Deductible VAT difference in additional currency</param>  
    procedure SetNonDedVATInVATEntry(var VATEntry: Record "VAT Entry"; NonDedBase: Decimal; NonDedVATAmount: Decimal; SrcCurrNonDedBaseAmount: Decimal; SrcCurrNonDedVATAmount: Decimal; NonDedVATDiff: Decimal; NonDedVATDiffACY: Decimal)
    begin
        NonDedVATImpl.SetNonDedVATInVATEntry(VATEntry, NonDedBase, NonDedVATAmount, SrcCurrNonDedBaseAmount, SrcCurrNonDedVATAmount, NonDedVATDiff, NonDedVATDiffACY);
    end;

    /// <summary>
    /// Initialize the Non-Deductible VAT amount from purchase line
    /// </summary>
    /// <param name="NonDedVATBase">Non-Deductible VAT Base</param>
    /// <param name="NonDedVATAmount">Non-Deductible VAT Amount</param>
    /// <param name="NonDedVATBaseACY">Non-Deductible VAT Base in additional currency</param>
    /// <param name="NonDedVATAmountACY">Non-Deductible VAT Amount in additional currency</param>
    /// <param name="NonDedVATDiff">Non-Deductible VAT Difference</param>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="PurchaseLineACY">The current purchase line in additional currency</param>
    procedure Init(var NonDedVATBase: Decimal; var NonDedVATAmount: Decimal; var NonDedVATBaseACY: Decimal; var NonDedVATAmountACY: Decimal; var NonDedVATDiff: Decimal; PurchaseLine: Record "Purchase Line"; PurchaseLineACY: Record "Purchase Line")
    begin
        NonDedVATImpl.Init(NonDedVATBase, NonDedVATAmount, NonDedVATBaseACY, NonDedVATAmountACY, NonDedVATDiff, PurchaseLine, PurchaseLineACY);
    end;

    /// <summary>
    /// Clears Non-Deductible VAT difference in the purchase line
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure InitNonDeductibleVATDiff(var PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.InitNonDeductibleVATDiff(PurchaseLine);
    end;

    /// <summary>
    /// Updates the non-deductible VAT base and amount in the purchase line with rounding
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="TempVATAmountLineRemainder">Remainder from rounding to add to the next line</param>
    /// <param name="Currency">The currency code of the purchase document</param>
    procedure Update(var PurchaseLine: Record "Purchase Line"; var TempVATAmountLineRemainder: Record "VAT Amount Line" temporary; Currency: Record Currency)
    begin
        NonDedVATImpl.Update(PurchaseLine, TempVATAmountLineRemainder, Currency);
    end;

    /// <summary>
    /// Updates the non-deductible VAT base and amount in the purchase line
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="Currency">The currency code of the purchase document</param>
    procedure Update(var PurchaseLine: Record "Purchase Line"; Currency: Record Currency)
    begin
        NonDedVATImpl.Update(PurchaseLine, Currency);
    end;

    /// <summary>
    /// Update the non-deductible VAT base and amount in the purchase line with factor multiplication
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="Part">The numerator for the factor calculation</param>
    /// <param name="Total">The denominator for factor calculation</param>
    /// <param name="AmountRoundingPrecision">Amount rounding precision to apply after multiplication</param>
    procedure Update(var PurchaseLine: Record "Purchase Line"; Part: Decimal; Total: Decimal; AmountRoundingPrecision: Decimal)
    begin
        NonDedVATImpl.Update(PurchaseLine, Part, Total, AmountRoundingPrecision);
    end;

    /// <summary>
    /// Updates total Non-Deductible VAT amounts in the invoice posting buffer
    /// </summary>
    /// <param name="TotalNonDedVATBase">Total Non-Deductible VAT base</param>
    /// <param name="TotalNonDedVATAmount">Total Non-Deductible VAT amount</param>
    /// <param name="TotalNonDedVATBaseACY">Total Non-Deductible VAT base in additional currency</param>
    /// <param name="TotalNonDedVATAmountACY">Total Non-Deductible VAT amount in additional currency</param>
    /// <param name="TotalNonDedVATDiff">Total Non-Deductible VAT difference</param>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer to update totals</param>
    procedure Update(var TotalNonDedVATBase: Decimal; var TotalNonDedVATAmount: Decimal; var TotalNonDedVATBaseACY: Decimal; var TotalNonDedVATAmountACY: Decimal; var TotalNonDedVATDiff: Decimal; InvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.Update(TotalNonDedVATBase, TotalNonDedVATAmount, TotalNonDedVATBaseACY, TotalNonDedVATAmountACY, TotalNonDedVATDiff, InvoicePostingBuffer);
    end;

    /// <summary>
    /// Update Non-Deductible VAT amounts in the VAT amount line
    /// </summary>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    /// <param name="Currency">The currency code of the document</param>
    procedure Update(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency)
    begin
        NonDedVATImpl.Update(VATAmountLine, Currency);
    end;

    /// <summary>
    /// Update Non-Deductible VAT amounts in the invoice posting buffer with rounding
    /// </summary>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer</param>
    /// <param name="RemainderInvoicePostingBuffer">Remainder from rounding to add to the next line</param>
    /// <param name="AmountRoundingPrecision">Amount rounding precision to apply for rounding</param>
    procedure Update(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; var RemainderInvoicePostingBuffer: Record "Invoice Posting Buffer"; AmountRoundingPrecision: Decimal)
    begin
        NonDedVATImpl.Update(InvoicePostingBuffer, RemainderInvoicePostingBuffer, AmountRoundingPrecision);
    end;

    /// <summary>
    /// Divide Non-Deductible VAT amounts of VAT amount line for the purchase line
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="VATAmountLineRemainder">Remainder from rounding to add to the next line</param>
    /// <param name="VATAmountLine">The current VAT amount line to divide</param>
    /// <param name="Currency">The currency code of the purchase document</param>
    /// <param name="Part">The numerator for the factor calculation</param>
    /// <param name="Total">The denominator for factor calculation</param>
    procedure DivideNonDeductibleVATInPurchaseLine(var PurchaseLine: Record "Purchase Line"; var VATAmountLineRemainder: Record "VAT Amount Line"; VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; Part: Decimal; Total: Decimal)
    begin
        NonDedVATImpl.DivideNonDeductibleVATInPurchaseLine(PurchaseLine, VATAmountLineRemainder, VATAmountLine, Currency, Part, Total);
    end;

    /// <summary>
    /// Update Non-Deductible VAT amounts on VAT amount validation in the VAT amount line
    /// </summary>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    procedure ValidateVATAmountInVATAmountLine(var VATAmountLine: Record "VAT Amount Line")
    begin
        NonDedVATImpl.ValidateVATAmountInVATAmountLine(VATAmountLine);
    end;

    /// <summary>
    /// Update Non-Deductible VAT amounts on Non-Deductible VAT amount validation in the VAT amount line
    /// </summary>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    procedure ValidateNonDeductibleVATInVATAmountLine(var VATAmountLine: Record "VAT Amount Line")
    begin
        NonDedVATImpl.ValidateNonDeductibleVATInVATAmountLine(VATAmountLine);
    end;

    /// <summary>
    /// Update Non-Deductible VAT amounts in the VAT amount line with VAT difference
    /// </summary>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    /// <param name="Currency">The currency code of the document</param>
    procedure UpdateNonDeductibleAmountsWithDiffInVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency)
    begin
        NonDedVATImpl.UpdateNonDeductibleAmountsWithDiffInVATAmountLine(VATAmountLine, Currency);
    end;

    /// <summary>
    /// Get Non-Deductible VAT Amount from VAT amount line with factor multiplication
    /// </summary>
    /// <param name="VATAmountLineRemainder">Remainder from rounding to add to the next line</param>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    /// <param name="Currency">The currency code of the document</param>
    /// <param name="Part">The numerator for the factor calculation</param>
    /// <param name="Total">The denominator for factor calculation</param>
    /// <returns>The Non-Deductible VAT Amount</returns>
    procedure GetNonDedVATAmountFromVATAmountLine(var VATAmountLineRemainder: Record "VAT Amount Line"; VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; Part: Decimal; Total: Decimal): Decimal
    begin
        exit(NonDedVATImpl.GetNonDedVATAmountFromVATAmountLine(VATAmountLineRemainder, VATAmountLine, Currency, Part, Total));
    end;

    /// <summary>
    /// Adds the Non-Deductible VAT amounts to the VAT amount line from the purchase line with factor multiplication
    /// </summary>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    /// <param name="VATAmountLineRemainder">Remainder from rounding to add to the next line</param>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="Currency">The currency code of the document</param>
    /// <param name="Part">The numerator for the factor calculation</param>
    /// <param name="Total">The denominator for factor calculation</param>
    procedure AddNonDedAmountsOfPurchLineToVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; var VATAmountLineRemainder: Record "VAT Amount Line"; PurchaseLine: Record "Purchase Line"; Currency: Record Currency; Part: Decimal; Total: Decimal)
    begin
        NonDedVATImpl.AddNonDedAmountsOfPurchLineToVATAmountLine(VATAmountLine, VATAmountLineRemainder, PurchaseLine, Currency, Part, Total);
    end;

    /// <summary>
    /// Copy Non-Deductible VAT amounts from the purchase invoice line to VAT amount line
    /// </summary>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    /// <param name="PurchInvLine">The current purchase invoice line</param>
    procedure CopyNonDedVATFromPurchInvLineToVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; PurchInvLine: Record "Purch. Inv. Line")
    begin
        NonDedVATImpl.CopyNonDedVATFromPurchInvLineToVATAmountLine(VATAmountLine, PurchInvLine);
    end;

    /// <summary>
    /// Copy Non-Deductible VAT amounts from the purchase credit memo line to VAT amount line
    /// </summary>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    /// <param name="PurchCrMemoLine">The current purchase credit memo line</param>
    procedure CopyNonDedVATFromPurchCrMemoLineToVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; PurchCrMemoLine: Record "Purch. Cr. Memo Line")
    begin
        NonDedVATImpl.CopyNonDedVATFromPurchCrMemoLineToVATAmountLine(VATAmountLine, PurchCrMemoLine);
    end;

    /// <summary>
    /// Copy Non-Deductible VAT amount from general journal line to G/L entry
    /// </summary>
    /// <param name="GLEntry">The current G/L entry</param>
    /// <param name="GenJournalLine">The current general journal line</param>
    procedure CopyNonDedVATAmountFromGenJnlLineToGLEntry(var GLEntry: Record "G/L Entry"; GenJournalLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.CopyNonDedVATAmountFromGenJnlLineToGLEntry(GLEntry, GenJournalLine);
    end;

    /// <summary>
    /// Copy Non-Deductible VAT from general journal line to FA ledger Entry
    /// </summary>
    /// <param name="FALedgEntry">The current FA ledger entry</param>
    /// <param name="GenJnlLine">The current general journal line</param>
    procedure CopyNonDedVATFromGenJnlLineToFALedgEntry(var FALedgEntry: Record "FA Ledger Entry"; GenJnlLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.CopyNonDedVATFromGenJnlLineToFALedgEntry(FALedgEntry, GenJnlLine);
    end;

    /// <summary>
    /// Copies non-deductible VAT information from general journal line to job journal line for job-related transactions.
    /// </summary>
    /// <param name="JobJnlLine">Job journal line to receive non-deductible VAT information</param>
    /// <param name="GenJnlLine">Source general journal line containing non-deductible VAT data</param>
    procedure CopyNonDedVATFromGenJnlLineToJobJnlLine(var JobJnlLine: Record "Job Journal Line"; GenJnlLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.CopyNonDedVATFromGenJnlLineToJobJnlLine(JobJnlLine, GenJnlLine);
    end;

    /// <summary>
    /// Throws an error if purchase line contains prepayment and Non-Deductible VAT
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure CheckPrepmtWithNonDeductubleVATInPurchaseLine(PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.CheckPrepmtWithNonDeductubleVATInPurchaseLine(PurchaseLine);
    end;

    /// <summary>
    /// Throws the error about prepayment not compatible with Non-Deductible VAT if VAT Posting Setup contains Non-Deductible VAT
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure CheckPrepmtVATPostingSetup(VATPostingSetup: Record "VAT Posting Setup")
    begin
        NonDedVATImpl.CheckPrepmtVATPostingSetup(VATPostingSetup);
    end;

    /// <summary>
    /// Throws an error if current VAT posting setup contains unrealized VAT and Non-Deductible VAT
    /// </summary>
    /// <param name="VATPostingSetup">The current VAT posting setup</param>
    procedure CheckUnrealizedVATWithNonDeductibleVATInVATPostingSetup(VATPostingSetup: Record "VAT Posting Setup")
    begin
        NonDedVATImpl.CheckUnrealizedVATWithNonDeductibleVATInVATPostingSetup(VATPostingSetup);
    end;

    /// <summary>
    /// Check that a certain change of the VAT Posting Setup is allowed
    /// </summary>
    procedure CheckVATPostingSetupChangeIsAllowed(VATPostingSetup: Record "VAT Posting Setup")
    begin
        NonDedVATImpl.CheckVATPostingSetupChangeIsAllowed(VATPostingSetup);
    end;

    /// <summary>
    /// Check that a Non-Deductible VAT % is allowed in the purchase line
    /// </summary>
    procedure CheckNonDeductibleVATPctIsAllowed(PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.CheckNonDeductibleVATPctIsAllowed(PurchaseLine);
    end;

    /// <summary>
    /// Throws an error if the total Non-Deductible VAT difference is not allowed
    /// </summary>
    /// <param name="TempVATAmountLine"></param>
    /// <param name="xTempVATAmountLine"></param>
    /// <param name="AllowVATDifference"></param>
    /// <param name="Currency"></param>
    procedure CheckNonDeductibleVATAmountDiff(var TempVATAmountLine: Record "VAT Amount Line" temporary; xTempVATAmountLine: Record "VAT Amount Line" temporary; AllowVATDifference: Boolean; Currency: Record Currency)
    begin
        NonDedVATImpl.CheckNonDeductibleVATAmountDiff(TempVATAmountLine, xTempVATAmountLine, AllowVATDifference, Currency);
    end;

    /// <summary>
    /// Deduct the Non-Deductible VAT amounts from the VAT amount line
    /// </summary>
    /// <param name="TotalVATAmountLine">The VAT amount line to be deducted</param>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    procedure DeductNonDedValuesFromVATAmountLine(var TotalVATAmountLine: Record "VAT Amount Line"; VATAmountLineDeduct: Record "VAT Amount Line")
    begin
        NonDedVATImpl.DeductNonDedValuesFromVATAmountLine(TotalVATAmountLine, VATAmountLineDeduct);
    end;

    /// <summary>
    /// Reverse the Non-Deductible VAT base and amount in the purchase line
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure Reverse(var PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.Reverse(PurchaseLine);
    end;

    /// <summary>
    /// Reverse the Non-Deductible VAT base and amount in the invoice posting buffer
    /// </summary>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer</param>
    procedure Reverse(var InvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.Reverse(InvoicePostingBuffer);
    end;

    /// <summary>
    /// Reverse Non-Deductible amount in G/L Entry
    /// </summary>
    /// <param name="GLEntry">The G/L Entry to set the reversed amount</param>
    /// <param name="GLEntryToReverse">The G/L Entry to take the value from</param>
    procedure Reverse(var GLEntry: Record "G/L Entry"; GLEntryToReverse: Record "G/L Entry")
    begin
        NonDedVATImpl.Reverse(GLEntry, GLEntryToReverse);
    end;

    /// <summary>
    /// Reverse Non-Deductible amount in the VAT Entry
    /// </summary>
    /// <param name="VATEntry">The VAT Entry to set the reversed amount</param>
    procedure Reverse(var VATEntry: Record "VAT Entry")
    begin
        NonDedVATImpl.Reverse(VATEntry);
    end;

    /// <summary>
    /// Increment the Non-Deductible VAT amounts in the VAT amount line
    /// </summary>
    /// <param name="TotalVATAmountLine">The VAT amount line to be incremented</param>
    /// <param name="VATAmountLine">The current VAT amount line</param>
    procedure Increment(var TotalVATAmountLine: Record "VAT Amount Line"; VATAmountLine: Record "VAT Amount Line")
    begin
        NonDedVATImpl.Increment(TotalVATAmountLine, VATAmountLine);
    end;

    /// <summary>
    /// Increment Non-Deductible VAT amounts in the purchase line
    /// </summary>
    /// <param name="TotalPurchaseLine">The purchase line to be incremented</param>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure Increment(var TotalPurchaseLine: Record "Purchase Line"; PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.Increment(TotalPurchaseLine, PurchaseLine);
    end;

    /// <summary>
    /// Increment Non-Deductible VAT amounts in the invoice posting buffer
    /// </summary>
    /// <param name="TotalInvoicePostingBuffer">The invoice posting buffer to be incremented</param>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer</param>
    procedure Increment(var TotalInvoicePostingBuffer: Record "Invoice Posting Buffer"; InvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.Increment(TotalInvoicePostingBuffer, InvoicePostingBuffer);
    end;

    /// <summary>
    /// Identifies if the current FA ledger entry is a Non-Deductible VAT entry in the first acquisition
    /// </summary>
    /// <param name="FALedgEntry"></param>
    /// <returns>Returns true if the current FA ledger entry is a Non-Deductible VAT entry in the first acquisition</returns>
    procedure IsNonDedFALedgEntryInFirstAcquisition(FALedgEntry: Record "FA Ledger Entry"): Boolean
    begin
        exit(NonDedVATImpl.IsNonDedFALedgEntryInFirstAcquisition(FALedgEntry));
    end;

    /// <summary>
    /// Round Non-Deductible VAT amounts after exchanging to the local currency
    /// </summary>
    /// <param name="PurchaseHeader">The current purchase header</param>
    /// <param name="PurchaseLine">The current purchase line</param>
    /// <param name="TotalPurchaseLine">The total purchase line with remainders</param>
    /// <param name="TotalPurchaseLineLCY">The total purchase line in additional curency with remainders</param>
    procedure RoundNonDeductibleVAT(PurchaseHeader: Record "Purchase Header"; var PurchaseLine: Record "Purchase Line"; TotalPurchaseLine: Record "Purchase Line"; TotalPurchaseLineLCY: Record "Purchase Line")
    begin
        NonDedVATImpl.RoundNonDeductibleVAT(PurchaseHeader, PurchaseLine, TotalPurchaseLine, TotalPurchaseLineLCY);
    end;

    /// <summary>
    /// Clear Non-Deductible VAT in the purchase line
    /// </summary>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure ClearNonDeductibleVAT(var PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.ClearNonDeductibleVAT(PurchaseLine);
    end;

    /// <summary>
    /// Clear Non-Deductible VAT in the invoice posting buffer
    /// </summary>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer</param>
    procedure ClearNonDeductibleVAT(var InvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.ClearNonDeductibleVAT(InvoicePostingBuffer);
    end;

    /// <summary>
    /// Clear Non-Deductible VAT amounts in additional currency in VAT entry
    /// </summary>
    /// <param name="VATEntry">The current VAT entry</param>
    procedure ClearNonDedVATACYInVATEntry(var VATEntry: Record "VAT Entry")
    begin
        NonDedVATImpl.ClearNonDedVATACYInVATEntry(VATEntry);
    end;

    /// <summary>
    /// Validate the Non-Deductible VAT percent in the general journal line
    /// </summary>
    /// <param name="GenJournalLine">The current general journal line</param>
    procedure ValidateNonDedVATPctInGenJnlLine(var GenJournalLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.ValidateNonDedVATPctInGenJnlLine(GenJournalLine);
    end;

    /// <summary>
    /// Validate the Non-Deductible VAT percent in the general journal line for the balance account
    /// </summary>
    /// <param name="GenJournalLine">The current general journal line</param>
    procedure ValidateBalNonDedVATPctInGenJnlLine(var GenJournalLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.ValidateBalNonDedVATPctInGenJnlLine(GenJournalLine);
    end;

    /// <summary>
    /// Calculate Non-Deductible VAT amounts in the general journal line
    /// </summary>
    /// <param name="GenJournalLine">The current journal line</param>
    /// <param name="Currency">The currency code of the document</param>
    procedure Calculate(var GenJournalLine: Record "Gen. Journal Line"; Currency: Record Currency)
    begin
        NonDedVATImpl.Calculate(GenJournalLine, Currency);
    end;

    /// <summary>
    /// Calculate Non-Deductible VAT amounts in the general journal line for the balance account
    /// </summary>
    /// <param name="GenJournalLine">The current journal line</param>
    /// <param name="Currency">The currency code of the document</param>
    procedure CalculateBalAcc(var GenJournalLine: Record "Gen. Journal Line"; Currency: Record Currency)
    begin
        NonDedVATImpl.CalculateBalAcc(GenJournalLine, Currency);
    end;

    /// <summary>
    /// Calculate Non-Deductible VAT amounts in the invoice posting buffer
    /// </summary>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer</param>
    procedure Calculate(var InvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.Calculate(InvoicePostingBuffer);
    end;

    /// <summary>
    /// Calculate Non-Deductible VAT per unit
    /// </summary>
    /// <param name="NonDeductibleBaseAmount">The calculated total Non-Deductible base</param>
    /// <param name="NonDeductibleVATAmount">The calculated total Non-Deductible amount</param>
    /// <param name="NonDeductibleVATAmtPerUnit">The calculated Non-Deductible VAT amount per unit</param>
    /// <param name="NonDeductibleVATAmtPerUnitLCY">The calculated Non-Deductible VAT amount per unit in local currency</param>
    /// <param name="NDVATAmountRounding">The remaining rounding difference of Non-Deductible VAT amount</param>
    /// <param name="NDVATBaseRounding">The remaining rounding difference of Non-Deductible VAT base</param>
    /// <param name="PurchHeader">The current purchase header</param>
    /// <param name="PurchaseLine">The current purchase line with LCY amounts</param>
    procedure Calculate(var NonDeductibleBaseAmount: Decimal; var NonDeductibleVATAmount: Decimal; var NonDeductibleVATAmtPerUnit: Decimal; var NonDeductibleVATAmtPerUnitLCY: Decimal; var NDVATAmountRounding: Decimal; var NDVATBaseRounding: Decimal; PurchHeader: Record "Purchase Header"; PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.Calculate(NonDeductibleBaseAmount, NonDeductibleVATAmount, NonDeductibleVATAmtPerUnit, NonDeductibleVATAmtPerUnitLCY, NDVATAmountRounding, NDVATBaseRounding, PurchHeader, PurchaseLine);
    end;

    /// <summary>
    /// Copy Non-Deductible VAT from the purchase line to the invoice posting buffer
    /// </summary>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer</param>
    /// <param name="PurchaseLine">The current purchase line</param>
    procedure Copy(var InvoicePostingBuffer: Record "Invoice Posting Buffer"; PurchaseLine: Record "Purchase Line")
    begin
        NonDedVATImpl.Copy(InvoicePostingBuffer, PurchaseLine);
    end;

    /// <summary>
    /// Copy Non-Deductible VAT from the general journal line to the VAT Entry
    /// </summary>
    /// <param name="VATEntry">The current VAT Entry</param>
    /// <param name="GenJournalLine">The current general journal line</param>
    procedure Copy(var VATEntry: Record "VAT Entry"; GenJournalLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.Copy(VATEntry, GenJournalLine);
    end;

    /// <summary>
    /// Copy Non-Deductible VAT from the invoice posting buffer to the general journal line
    /// </summary>
    /// <param name="GenJournalLine">The current general journal line</param>
    /// <param name="InvoicePostingBuffer">The current invoice posting buffer</param>
    procedure Copy(var GenJournalLine: Record "Gen. Journal Line"; InvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.Copy(GenJournalLine, InvoicePostingBuffer);
    end;

    /// <summary>
    /// Exchange Non-Deductible VAT fields with the balance side in general journaal line
    /// </summary>
    /// <param name="GenJournalLine">The current general journal line</param>
    /// <param name="GenJournalLine">The copied general journal line</param>
    procedure ExchangeAccGLJournalLine(var GenJournalLine: Record "Gen. Journal Line"; CopiedGenJournalLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.ExchangeAccGLJournalLine(GenJournalLine, CopiedGenJournalLine);
    end;

    /// <summary>
    /// Adjust VAT amounts with Non-Deductible VAT from general journal line
    /// </summary>
    /// <param name="VATAmount">The VAT amount to be adjusted</param>
    /// <param name="BaseAmount">The VAT base to be adjusted</param>
    /// <param name="VATAmountACY">The VAT amount in additional currency to be adjusted</param>
    /// <param name="BaseAmountACY">The VAT base in additional currency to be adjusted</param>
    /// <param name="GenJournalLine">The current general journal line</param>
    procedure AdjustVATAmountsFromGenJnlLine(var VATAmount: Decimal; var BaseAmount: Decimal; var VATAmountACY: Decimal; var BaseAmountACY: Decimal; var GenJournalLine: Record "Gen. Journal Line")
    begin
        NonDedVATImpl.AdjustVATAmountsFromGenJnlLine(VATAmount, BaseAmount, VATAmountACY, BaseAmountACY, GenJournalLine);
    end;

    /// <summary>
    /// Adjust rounding for invoice posting buffer
    /// </summary>
    /// <param name="RoundingInvoicePostingBuffer">The invoice posting buffer for rounding</param>
    /// <param name="CurrInvoicePostingBuffer">The current invoice posting buffer</param>
    procedure AdjustRoundingForInvoicePostingBufferUpdate(var RoundingInvoicePostingBuffer: Record "Invoice Posting Buffer"; var CurrInvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.AdjustRoundingForInvoicePostingBufferUpdate(RoundingInvoicePostingBuffer, CurrInvoicePostingBuffer);
    end;

    /// <summary>
    /// Returns true if the Non-Deductible VAT amount must be added to the fixed asset cost
    /// </summary>
    /// <returns>If the Non-Deductible amount must be added to the fixed asset cost</returns>
    procedure UseNonDeductibleVATAmountForFixedAssetCost(): Boolean
    begin
        exit(NonDedVATImpl.UseNonDeductibleVATAmountForFixedAssetCost());
    end;

    /// <summary>
    /// Returns true if the Non-Deductible VAT amount must be added to the job cost
    /// </summary>
    /// <returns>If the Non-Deductible amount must be added to the job cost</returns>
    procedure UseNonDeductibleVATAmountForJobCost(): Boolean
    begin
        exit(NonDedVATImpl.UseNonDeductibleVATAmountForJobCost());
    end;

    /// <summary>
    /// Apply rounding for the final posting from the invoice posting buffer
    /// </summary>
    /// <param name="RoundingInvoicePostingBuffer">The invoice posting buffer for rounding</param>
    /// <param name="CurrInvoicePostingBuffer">The current invoice posting buffer</param>
    procedure ApplyRoundingForFinalPostingFromInvoicePostingBuffer(var RoundingInvoicePostingBuffer: Record "Invoice Posting Buffer"; var CurrInvoicePostingBuffer: Record "Invoice Posting Buffer")
    begin
        NonDedVATImpl.ApplyRoundingForFinalPostingFromInvoicePostingBuffer(RoundingInvoicePostingBuffer, CurrInvoicePostingBuffer);
    end;

    /// <summary>
    /// Integration event raised before determining non-deductible VAT percentage for purchase line.
    /// Enables custom logic for non-deductible VAT percentage calculation.
    /// </summary>
    /// <param name="NonDeductibleVATPct">Non-deductible VAT percentage to be set</param>
    /// <param name="PurchaseLine">Purchase line for which non-deductible VAT percentage is determined</param>
    /// <param name="IsHandled">Set to true to skip standard non-deductible VAT percentage determination</param>
    [IntegrationEvent(false, false)]
    internal procedure OnBeforeGetNonDeductibleVATPctForPurchLine(var NonDeductibleVATPct: Decimal; PurchaseLine: Record "Purchase Line"; var IsHandled: Boolean)
    begin
    end;

    /// <summary>
    /// Integration event raised before determining non-deductible VAT percentage for general journal line.
    /// Enables custom logic for non-deductible VAT percentage calculation in journal processing.
    /// </summary>
    /// <param name="NonDeductibleVATPct">Non-deductible VAT percentage to be set</param>
    /// <param name="GenJournalLine">General journal line for which non-deductible VAT percentage is determined</param>
    /// <param name="IsHandled">Set to true to skip standard non-deductible VAT percentage determination</param>
    [IntegrationEvent(false, false)]
    internal procedure OnBeforeGetNonDedVATPctForGenJnlLine(var NonDeductibleVATPct: Decimal; GenJournalLine: Record "Gen. Journal Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeGetBalNonDedVATPctForGenJnlLine(var NonDeductibleVATPct: Decimal; GenJournalLine: Record "Gen. Journal Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeGetNonDeductibleVATPctForDeferrals(var NonDeductibleVATPct: Decimal; VATBusPostGroupCode: Code[20]; VATProdPostGroupCode: Code[20]; DeferralDocType: Enum "Deferral Document Type"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeCalcNonDedAmountsInGenJnlLine(var GenJournalLine: Record "Gen. Journal Line"; Currency: Record Currency; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeCalcBalNonDedAmountsInGenJnlLine(var GenJournalLine: Record "Gen. Journal Line"; Currency: Record Currency; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeGetNonDeductibleVATPct(var NonDeductibleVATPct: Decimal; VATPostingSetup: Record "VAT Posting Setup"; GeneralPostingType: Enum "General Posting Type"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeUpdateNonDeductibleAmountsWithRoundingInPurchLine(var PurchaseLine: Record "Purchase Line"; var TempVATAmountLineRemainder: Record "VAT Amount Line" temporary; Currency: Record Currency; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeUpdateNonDeductibleAmountsInPurchLine(var PurchaseLine: Record "Purchase Line"; Currency: Record Currency; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeUpdateNonDeductibleAmountsWithFactorInPurchLine(var PurchaseLine: Record "Purchase Line"; Part: Decimal; Total: Decimal; AmountRoundingPrecision: Decimal; var IsHandled: Boolean)
    begin

    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeDivideNonDeductibleVATInPurchaseLine(var PurchaseLine: Record "Purchase Line"; var VATAmountLineRemainder: Record "VAT Amount Line"; VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; Part: Decimal; Total: Decimal; var IsHandled: Boolean)
    begin

    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeValidateVATAmountInVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeValidateNonDeductibleVATInVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeUpdateNonDeductibleAmountsInVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeUpdateNonDeductibleAmountsWithDiffInVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeAdjustVATAmountsFromGenJnlLine(var VATAmount: Decimal; var BaseAmount: Decimal; var VATAmountACY: Decimal; var BaseAmountACY: Decimal; var GenJournalLine: Record "Gen. Journal Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeSetNonDedVATAmountInPurchLine(var PurchaseLine: Record "Purchase Line"; NonDeductibleVATAmount: Decimal; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeSetNonDedVATAmountDiffInPurchLine(var PurchaseLine: Record "Purchase Line"; var VATAmountLineRemainder: Record "VAT Amount Line"; var VATDifference: Decimal; VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; Part: Decimal; Total: Decimal; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeGetNonDedVATAmountFromVATAmountLine(var NonDeductibleVATAmount: Decimal; var VATAmountLineRemainder: Record "VAT Amount Line"; VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; Part: Decimal; Total: Decimal; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeAddNonDedAmountsOfPurchLineToVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; var VATAmountLineRemainder: Record "VAT Amount Line"; PurchaseLine: Record "Purchase Line"; Currency: Record Currency; Part: Decimal; Total: Decimal; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeCopyNonDedVATFromPurchInvLineToVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; PurchInvLine: Record "Purch. Inv. Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeCopyNonDedVATFromPurchCrMemoLineToVATAmountLine(var VATAmountLine: Record "VAT Amount Line"; PurchCrMemoLine: Record "Purch. Cr. Memo Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeCheckVATPostingSetupChangeIsAllowed(VATPostingSetup: Record "VAT Posting Setup"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnBeforeCheckNonDeductibleVATPctIsAllowed(PurchaseLine: Record "Purchase Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    internal procedure OnAfterCalcRevChargeVATAmountInPurchLine(PurchaseLine: Record "Purchase Line"; var VATAmount: Decimal)
    begin
    end;
}