---
id: object/codeunit/18001-in
type: object
title: Codeunit 18001 "GST Base Validation" (IN)
summary: Codeunit 18001 "GST Base Validation" (IN) in the IN country layer (Microsoft.Finance.GST.Base). 14 public procedures, 10 events, 42 event subscribers. Introduced in BC29, still in BC30.
tier: official
language: en
tags:
  - codeunit
  - in layer
versions:
  introduced: "29"
  last_changed: null
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: f82f82b802d0909a3eda6bbde8f684b7fe8dde80ab6d374a22b911451e046e49
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTBaseValidation.Codeunit.al
    title: src/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTBaseValidation.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations:
    - localization/in
  videos: []
  posts: []
  guidelines: []
object_type: codeunit
object_id: 18001
name: GST Base Validation
namespace: Microsoft.Finance.GST.Base
app: INGST
extends: null
first_version: "29"
last_version: "30"
present_in:
  - "29"
  - "30"
changed_in: []
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
country: IN
counts:
  fields: 0
  procedures: 96
  events: 10
  subscribers: 42
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
---

# Codeunit 18001 "GST Base Validation" (IN)

> Codeunit 18001 "GST Base Validation" (IN) in the IN country layer (Microsoft.Finance.GST.Base). 14 public procedures, 10 events, 42 event subscribers. Introduced in BC29, still in BC30.

IN country layer · Microsoft.Finance.GST.Base · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/IN/INGST/app/GSTBase/src/Codeunit/GSTBaseValidation.Codeunit.al) · facts from BC29

An object of the [IN localization](../../localizations/in.md), not part of W1.

## Events published

- `OnBeforeGetEcommerceMerchant(DetailedGSTLedgerEntryInfo: Record "Detailed GST Ledger Entry Info"; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateGSTLedgerEntry(var GSTLedgerEntry: Record "GST Ledger Entry"; RunTrigger: Boolean; var IsHandled: Boolean)` (integration)
- `OnAfterUpdateGSTLedgerEntryOnBeforeModify(var GSTLedgerEntry: Record "GST Ledger Entry")` (integration)
- `OnBeforeUpdateDetailedGstEntryTransNo(var GSTLedgerEntry: Record "GST Ledger Entry"; var IsHandled: Boolean)` (integration)
- `OnBeforeUpdateDetailedGstLedgerEntryOnafterInsertEvent(var DetailedGSTLedgerEntry: Record "Detailed GST Ledger Entry"; RunTrigger: Boolean; var IsHandled: Boolean)` (integration)
- `OnAfterUpdateDetailedGstLedgerEntryOnafterInsertEventOnBeforeModify(var DetailedGSTLedgerEntry: Record "Detailed GST Ledger Entry"; GSTRegistrationNos: Record "GST Registration Nos."; var DetailedGSTLedgerEntryInfo: Record "Detailed GST Ledger Entry Info")` (integration)
- `OnAfterUpdateDetailedGstLedgerEntryAmountsField(var DetailedGSTLedgerEntry: Record "Detailed GST Ledger Entry"; SignFactor: Integer)` (integration)
- `OnAfterUpdateDetailedGSTLedgerEntrySignFactor(var DetailedGSTLedgerEntry: Record "Detailed GST Ledger Entry"; var SignFactor: Integer; DocTypeEnum: Enum Microsoft.Finance.GST.Base."Document Type Enum"; TransTypeEnum: Enum Microsoft.Finance.GST.Base."Transaction Type Enum")` (integration)
- `OnAfterUpdateGSTLedgerEntrySignFactor(var GSTLedgerEntry: Record "GST Ledger Entry"; var SignFactor: Integer; DocTypeEnum: Enum Microsoft.Finance.GST.Base."Document Type Enum"; TransTypeEnum: Enum Microsoft.Finance.GST.Base."Transaction Type Enum")` (integration)
- `OnBeforeCallTaxEngineOnPurchHeader(PurchaseHeader: Record "Purchase Header"; var IsHandled: Boolean)` (integration)

## Event subscriptions

- UpdateGSTLedgerEntryOnafterInsertEvent subscribes to Table "GST Ledger Entry" OnAfterInsertEvent
- UpdateDetailedGstLedgerEntryOnafterInsertEvent subscribes to Table "Detailed GST Ledger Entry" OnAfterInsertEvent
- UpdateDetailedGSTEntryInfo subscribes to Table "Detailed GST Ledger Entry Info" OnBeforeInsertEvent
- ValidatePANNoOnAfterValidateEvent subscribes to Table "Company Information" OnAfterValidateEvent (P.A.N. No.)
- ValidateCompanyStateCodeOnAfterValidateEvent subscribes to Table "Company Information" OnAfterValidateEvent (State Code)
- ValdiateGSTRegistrationNoOnAfterValidateEvent subscribes to Table "Company Information" OnAfterValidateEvent (GST Registration No.)
- ValidateGSTGroupTypeOnafterValidateEvent subscribes to Table "Gst Group" OnAfterValidateEvent (GST Group Type)
- ValidateRegistrationCodeonAfterValidateEvent subscribes to Table "GST Registration Nos." OnAfterValidateEvent (Code)
- ValidateStateCodeonAfterValidateEvent subscribes to Table "GST Registration Nos." OnAfterValidateEvent (State Code)
- ValidateDeleteOnAfterDeleteEvent subscribes to Table "GST Registration Nos." OnAfterDeleteEvent
- ValidatereceivableAccountOnafterValidateEvent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (receivable Account)
- ValidatePayableAccountOnafterValidateEvent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (Payable Account)
- ValidatereceivableAccountInterimOnafterValidateEvent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (receivable Account (Interim))
- ValidatePayablesAccountInterimOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (Payables Account (Interim))
- ValidateExpenseAccountOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (Expense Account)
- ValidateRefundAccountOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (Refund Account)
- ValidatereceivableAccInterimDistOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (receivable Acc. Interim (Dist))
- ValidatereceivableAccDisOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (receivable Acc. (Dist))
- ValidateGSTCreditMismatchAccountOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (GST Credit Mismatch Account)
- ValidateGSTTDSreceivableAccountOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (GST TDS receivable Account)
- ValidateGSTTCSreceivableAccountOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (GST TCS receivable Account)
- ValidateGSTTCSPayableAccountOnafterValidatEevent subscribes to Table "GST Posting Setup" OnAfterValidateEvent (GST TCS Payable Account)
- CheckBlankGSTRegNoOnafterValidatEevent subscribes to Table "Location" OnAfterValidateEvent (State Code)
- validateGSTRegistrationNoOnafterValidatEevent subscribes to Table "Location" OnAfterValidateEvent (GST Registration No.)
- ValidateStateCodeGSTRegNoOnAfterValidateEvent subscribes to Table "State" OnAfterValidateEvent (State Code (GST Reg. No.))
- ValidateitemGSTGroupCodeOnAfterValidateEvent subscribes to Table "item" OnAfterValidateEvent (GST Group Code)
- validateGLGSTGroupCodeOnAfterValidateEvent subscribes to Table "G/L Account" OnAfterValidateEvent (GST Group Code)
- ValidateFAGSTGroupCodeOnAfterValidateEvent subscribes to Table "Fixed Asset" OnAfterValidateEvent (GST Group Code)
- ValidateResourceGSTGroupCodeOnAfterValidateEvent subscribes to Table "Resource" OnAfterValidateEvent (GST Group Code)
- ValidateItemChargeGSTGroupCodeOnAfterValidateEvent subscribes to Table "Item Charge" OnAfterValidateEvent (GST Group Code)
- ValidateServiceCostGSTGroupCodeOnAfterValidateEvent subscribes to Table "Service Cost" OnAfterValidateEvent (GST Group Code)
- ValidateBankAccStateCodeOnAfterValidateEvent subscribes to Table "Bank Account" OnAfterValidateEvent (State Code)
- ValidateGSTRegistrationStatusOnAfterValidateEvent subscribes to Table "Bank Account" OnAfterValidateEvent (GST Registration Status)
- ValidateGSTRegistrationNoBankAccOnAfterValidateEvent subscribes to Table "Bank Account" OnAfterValidateEvent (GST Registration No.)
- CheckProvisionalEntry subscribes to Codeunit "Gen. Jnl.-Post Line" OnAfterRunWithoutCheck
- ValidatePostGSTtoCustomerOnAfterValidateEvent subscribes to Table "Customer" OnAfterValidateEvent (Post GST to Customer)
- UpdateGSTAmountInTDSEntry subscribes to Codeunit "Tax Base Subscribers" OnAfterGetGSTAmountFromTransNo
- OnBeforeSkipCallingTaxEngineForPurchLine subscribes to Codeunit "Tax Base Subscribers" OnBeforeSkipCallingTaxEngineForPurchLine
- OnBeforeEnableCallingTaxEngineForPurchLine subscribes to Codeunit "Tax Base Subscribers" OnBeforeEnableCallingTaxEngineForPurchLine
- OnAfterValidateFromLocationCode subscribes to Table "FA Reclass. Journal Line" OnAfterValidateEvent (From Location Code)
- OnAfterValidateToLocationCode subscribes to Table "FA Reclass. Journal Line" OnAfterValidateEvent (To Location Code)
- GetGSTAmountForSalesInvLines subscribes to Codeunit "Tax Base Subscribers" OnAfterGetGSTAmountForSalesInvLines

## Procedures

- `CheckGSTRegistrationNo(StateCode: Code[10]; RegistrationNo: Code[20]; PANNo: Code[20])`
- `CheckGSTRegistrationNoforGidandUid(StateCode: Code[10]; RegistrationNo: Code[20]; PANNo: Code[20])`
- `VerifyPOSOutOfIndia(PartyType: Enum "Party Type"; LocationStateCode: Code[10]; VendCustStateCode: Code[10]; GSTVendorType: Enum "GST Vendor Type"; GSTCustomerType: Enum "GST Customer Type")`
- `OpenGSTEntries(FromEntry: Integer; ToEntry: Integer)`
- `OpenDetailedGSTEntries(FromEntry: Integer; ToEntry: Integer)`
- `CheckGSTAccountingPeriod(PostingDate: Date; UsedForSettlement: Boolean)`
- `RoundGSTPrecision(GSTAmount: Decimal): Decimal`
- `GetSignTransfer(DocumentType: Enum "Document Type Enum"; TransactionType: Enum "Transaction Type Enum"): Integer`
- `RoundGSTInvoicePrecision(GSTAmount: Decimal; CurrencyCode: Code[10]): Decimal`
- `GenLedInvRoundingType2GSTInvRoundingTypeEnum(GenLedInvRoundingType: Option Nearest,Up,Down): Enum "GST Inv Rounding Type"`
- `CallTaxEngineOnPurchHeader(PurchaseHeader: Record "Purchase Header")`
- `CheckGSTRegistrationNo(TransactionType: Enum "Transaction Type Enum"; DocType: Enum "Sales Document Type"; DocNo: Code[20])`
- `GetTaxComponentRoundingPrecision(var DetailedGSTEntryBuffer: Record "Detailed GST Entry Buffer"; TaxTransactionValue: Record "Tax Transaction value"): Decimal`
- `RoundGSTPrecisionThroughTaxComponent(ComponenetCode: Code[30]; GSTAmount: Decimal): Decimal`

Plus 30 local procedures.

## Across versions

- Present in: BC29-30
- Changed (declaration) in: none

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## Ask your agent

Procedure bodies are not stored here (D10). For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: `bcatlas_resolve_node(object_type: "codeunit", object_name: "GST Base Validation")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.

A IN country object, not part of W1: the default corpus does not have it; `bcatlas_list_countries` shows which countries the atlas has.
