With the Oracle NetSuite Fixed Asset Management app template you can load raw input data from Oracle NetSuite for the Fixed Asset Management process, extracted to either Snowflake or SQl Server using CData Sync. The raw input data is transformed through a series of transformations that take place via dbt (data build tool) and produce the required input data used in Process Mining Oracle NetSuite Fixed Asset Management process apps.
The Fixed Asset Management Process is about the process of proposing an Asset, then creating this Asset and following its use, depreciation, location transfers, revaluations, impairments/repairs, through to its eventual disposal. More information on the fixed asset management process in NetSuite can be found in this FAM handbook .
The below is an entity relationship diagram of the lifecycle of assets and activities for the FAM process.
Tag | Description |
---|---|
Current NBV higher than previous year NBV | Assets."Current_net_book_value" > Assets."Prior_year_nbv" |
Asset creation time more than 30 days | {{ pm_utils.datediff('day', 'asset_proposal_to_asset_event_ends."Proposal_event_end"', 'asset_proposal_to_asset_event_ends."Creation_event_end"') }} > 30 |
Asset does not have asset proposal | Asset_proposals."custrecord_propasset" is null |
Write down account different to write off account | Assets."Write_down_account" != Assets."Write_off_account" |
Fully depreciated asset still in use | Assets."Asset_status" = 'Fully depreciated' |
Due Date | Description |
---|---|
Last Depreciation Date Different to Depreciation End Date | Last depreciation date occurs on a different date to the depreciation end date that is specified |
The Oracle NetSuite Fixed Asset Management app template requires NetSuite version 2021.2
or higher. NetSuite has two data model configurations: SuiteTalk and SuiteQL. Both SuiteTalk and SuiteQL schemas are used in this app template.
Important: You need a valid Oracle Netsuite license. NetSuite requires a specific role, which is explained below in the system specific settings.
In order for filtering on dates to work, the date format in NetSuite and CData Sync must match. Go to NetSuite -> SetUp -> Company -> General Preferences and make note of the date format (MM/DD/YYYY
for instance).
In CData Sync, go to the NetSuite Connection, then to the Advanced
tab, and make sure that Net Suite Date Format:
is set to the same as above (MM/DD/YYYY
for instance).
In NetSuite, go to Setup -> Company -> Enable Features and enable the following in the SuiteCloud tab:
A role should be created for connecting to NetSuite to extract the data. This role must have the permissions that are listed in the official CData Sync documentation. Create a token for this role to connect it to CData.
Below is a description on how to use CData Sync to set up a source connection and load data into a Process Mining Oracle NetSuite Fixed Asset Management process app.
In general, you should follow the steps as described in Loading data using CData Sync (Snowflake) or Loading data using CData Sync (SQL Server) to set up data loading using CData Sync. Since specific settings are required when using Oracle NetSuite, pay attention to the steps described below.
As NetSuite has two schema types: SuiteQL and SuiteTalk, it will be required to create two connections, with one for each schema type. Both connections have their own custom queries, which are listed below.
SuiteQL is the newer schema that NetSuite uses to interact with the source system data.
Important: Make sure you edit the Pre-job Event.
CData Sync allows the use of environment variables in order to drive specific extraction logic in each query.
Variable | Description | Comment |
---|---|---|
start_extraction_date | Defines first date for which data will be extracted. | Mandatory |
end_extraction_date | Last date for which data will be extracted. |
Be mindful of choosing a start_extraction_date that encompasses the data that you want to capture, as orders are the starting point of the order to cash process.
In order to setup the environment variables:
Step | Action |
---|---|
1 | Access the job |
2 | Click on the Events tab. |
3 | Edit the Pre-Job Event section to add the code displayed below |
<!-- Modify environment variables here. -->
<!-- Variable start_extraction_date must be populated.-->
<api:set attr="out.env:start_extraction_date" value="01/01/2022" />
<!-- In case a specific end date is needed, replace the value string with the required date in the Date format listed in NetSuite. -->
<!-- i.e api:set attr="out.env:end_extraction_date" value="01/01/2022" -->
<api:set attr="out.env:end_extraction_date" value= '12/31/3000' />
<api:push item="out" />
Important: Do not modify the api:info
details that are shown by default.
In order to modify the environment variables, modify the values within the Events tab. By default, end_extraction_date
will default to today's date. start_extraction_date
must always be populated.
Once the job is correctly setup, click on Add Custom Query under the Tables tab and paste the following queries (each query needs to maintain the semicolon at the end). Make sure you save all changes.
Use the following custom query for SuiteQL when creating the job:
REPLICATE [account] WITH TruncateTableData = 'True' SELECT [id],[accountsearchdisplayname], [accttype], [acctnumber] FROM [account];
REPLICATE [CUSTOMRECORD_NCFAR_ALTDEPRECIATION] WITH TruncateTableData = 'True' SELECT [id],[custrecord_altdeprasset] FROM [CUSTOMRECORD_NCFAR_ALTDEPRECIATION];
REPLICATE [CUSTOMRECORD_NCFAR_ASSETPROPOSAL] WITH TruncateTableData = 'True' SELECT [id], [name], [created], [owner], [custrecord_propasset], [custrecord_propsupplier] FROM [CUSTOMRECORD_NCFAR_ASSETPROPOSAL];
REPLICATE [systemnote] WITH TruncateTableData = 'True' SELECT * FROM [systemnote] WHERE ([field] IN ('CUSTRECORD_PROPASSET', 'CUSTRECORD_PROPSTATUS', 'CUSTRECORD_PROPSOURCEID', 'CUSTRECORD_DEPRHISTDATE', 'CUSTRECORD_ASSETSTATUS', 'CUSTRECORD_ASSETMAINTNEXTDATE', 'CUSTRECORD_ASSETTYPE', 'TRANDOC.KSTATUS', 'TRANDOC.KFORMTEMPLATE', 'TRANDOC.STRANTYPE', 'TRANDOC.NKEY', 'CUSTRECORD_ASSETSOURCETRN')) AND ([date] >= '{env:start_extraction_date}') AND ([date] <= '{env:end_extraction_date}');
REPLICATE [transaction] WITH TruncateTableData = 'True' SELECT [id], [createdby], [createddate], [currency], [duedate], [employee], [entity], [exchangerate], [nexus], [status], [terms], [trandisplayname], [type], [voided] FROM [transaction] WHERE [type] IN ('PurchOrd', 'Journal', 'VendBill', 'Custom') AND ([createddate] >= '{env:start_extraction_date}') AND ([createddate] <= '{env:end_extraction_date}');
REPLICATE [transactionline] WITH TruncateTableData = 'True' SELECT DISTINCT TL.[id], [uniquekey], TL.[createdfrom], [department], TL.[expenseaccount], TL.[entity], [isclosed], [item], [itemtype], [linesequencenumber], [location], [netamount], [quantity], [subsidiary], [taxline], [transaction], [units] FROM [transactionline] AS TL JOIN [transaction] as T ON TL.[transaction] = t.[id] WHERE [type] IN ('PurchOrd', 'Journal', 'VendBill', 'Custom');
REPLICATE [nexus] WITH TruncateTableData = 'True' SELECT [id], [description] FROM [nexus];
Please make sure that the query for transactionline
works, as it is a custom case where it is joined to the transaction
table in order to filter to only include transaction lines for transactions in the Fixed Asset Management process.
Following these steps will set up all the requirements for the SuiteQL connection tables. Next, a connection to SuiteTalk will be covered to bring in the required custom saved search.
SuiteTalk is the schema required to bring in saved searches, and custom saved searches.
Important: Make sure you edit the Pre-job Event. CData allows the use of environment variables in order to drive specific extraction logic in each query.
Variable | Description | Comment |
---|---|---|
start_extraction_date | Defines first date for which data will be extracted. | Mandatory |
end_extraction_date | Last date for which data will be extracted. |
Be mindful of choosing a start_extraction_date that encompasses the data that you want to capture, as orders are the starting point of the order to cash process.
In order to setup the environment variables:
Step | Action |
---|---|
1 | Access the job created in the previous step. |
2 | Click on the Events tab. |
3 | Add the following lines to the Pre-Job Event script. |
<!-- Modify environment variables here. -->
<!-- Variable start_extraction_date must be populated.-->
<api:set attr="out.env:start_extraction_date" value="01/01/2000" />
<!-- In case a specific end date is needed, replace the value string with the required date in the Date format listed in NetSuite. -->
<!-- i.e api:set attr="out.env:end_extraction_date" value="01/01/2000" -->
<api:set attr="out.env:end_extraction_date" value= '12/31/3000' />
<api:push item="out" />
Important: Do not modify the api:info
details that are shown by default.
In order to modify the environment variables, modify the values within the Events tab. By default, end_extraction_date
will default to today's date. start_extraction_date
must always be populated.
Once the job is correctly setup, click on Add Custom Query under the Tables tab and paste the following query. Make sure you save all changes.
Use the following custom query for SuiteTalk when creating the job:
REPLICATE [FAM_Asset] WITH TruncateTableData = 'True' SELECT [InternalId], [Asset Current Cost] AS [Asset_current_cost], [Asset Original Cost] AS [Asset_original_cost], [Asset Is Leased] AS [Asset_is_leased], [Next Inspection Date] AS [Next_inspection_date], [Last Inspection Date] AS [Last_inspection_date], [Lease Company] AS [Lease_company], [Asset Status] AS [Asset_status], [Asset Type] AS [Asset_type], [Component Of] AS [Component_of], [Cumulative Depreciation] AS [Cumulative_depreciation], [Current Net Book Value] AS [Current_net_book_value], [CustomRecordId], [Depreciation Account] AS [Depreciation_account], [Depreciation Charge Account] AS [Depreciation_charge_account], [Depreciation End Date] AS [Depreciation_end_date], [Depreciation Method] AS [Depreciation_method], [Disposal Cost Account] AS [Disposal_cost_account], [Maintenance Company] AS [Maintenance_company], [Name], [Owner_InternalId], [Owner_Name], [Parent Asset] AS [Parent_asset], [Parent Transaction] AS [Parent_transaction], [Parent Transaction Line] AS [Parent_transaction_line], [Prior Year NBV] AS [Prior_year_nbv], [Quantity], [Residual Value] AS [Residual_value], [Custodian], [Location], [Subsidiary], [Supplier], [Write Down Account] AS [Write_down_account], [Write Off Account] AS [Write_off_account] FROM [FAM Asset] AS [FAM_Asset];
REPLICATE [BG_Summary_Records] WITH TruncateTableData = 'True' SELECT [InternalId], [Depreciation Date] AS [Depreciation_date], [Name], [Journal Internal Id] AS [Journal_internal_ID] FROM [BG Summary Records] AS [BG_Summary_Records];
REPLICATE [FAM_Depreciation_History] WITH TruncateTableData = 'True' SELECT [InternalId], [Alternate Method] AS [Alternate_method], [Transaction Type] AS [Transaction_type], [Asset], [Date], [Subsidiary], [Owner_Name], [Owner_InternalId], [Depreciation Period] AS [Depreciation_period], [Name], [Posting Reference] AS [Posting_reference], [Transaction Amount] AS [Transaction_amount] FROM [FAM Depreciation History] AS [FAM_Depreciation_History];
REPLICATE [FAM_Asset_Proposal] WITH TruncateTableData = 'True' SELECT [InternalId], [Accounting Method] AS [Accounting_method], [Asset], [Asset Type] AS [Asset_type], [Custodian], [Depreciation Account] AS [Depreciation_account], [Disposal Cost Account] AS [Disposal_cost_account], [Location], [Source Transaction] AS [Source_transaction], [Write Down Account] AS [Write_down_account], [Write Off Account] AS [Write_off_account], [Proposal Status] AS [Proposal_status], [Original Cost] AS [Original_cost], [Parent Proposal] AS [Parent_proposal], [Quantity], [Accounting Method] AS [Accounting_method], [Custodian], [Owner_Name], [Subsidiary], [Supplier], [Source Transaction] AS [Source_transaction] FROM [FAM Asset Proposal] AS [FAM_Asset_Proposal];
REPLICATE [FAM_Alternate_Depreciation] WITH TruncateTableData = 'True' SELECT [InternalId], [Accounting Book] AS [Accounting_book], [Alternate Method] AS [Alternate_method], [Cumulative Depreciation] AS [Cumulative_depreciation], [Book Value (NBV)] AS [Book_value], [Current Cost] AS [Current_cost], [Original Cost] AS [Original_cost], [Residual Value (RV)] SA [Residual_value], [Depreciation Account] AS [Depreciation_account], [Depreciation Charge Account] AS [Depreciation_charge_account], [Depreciation Method] AS [Depreciation_method], [Depreciation Start Date] AS [Depreciation_start_date], [Depreciation End Date] AS [Depreciation_end_date], [Disposal Cost Account] AS [Disposal_cost_account], [Prior Year NBV] AS [Prior_year_nbv], [Residual Value Percentage] AS [Residual_value_percentage], [Write Down Account] AS [Write_down_account], [Write Off Account] AS [Write_off_account] FROM [FAM Alternate Depreciation] AS [FAM_Alternate_Depreciation];
This section contains an overview of the fields for each of the input tables of the Oracle NetSuite Fixed Asset Management app template. For each table the fields are listed.
Below is a list of tables that are brought in with the NetSuite SuiteQL Schema specified:
For more information on these tables see NetSuite help center. The Analytics Browser tab is for SuiteQL tables.
Field | Data type | Label | Filtering |
---|---|---|---|
id | Text | Internal id | |
custrecord_propasset | Text | Asset id | |
owncustrecord_propsupplier | Text | Proposed Supplier | |
owner | Text | owner | |
created | Date | Created Date |
Field | Data type | Label | Filtering |
---|---|---|---|
custrecord_altdeprasset | Text | Asset Name | |
id | Text | Asset id |
Field | Data type | Label | Filtering |
---|---|---|---|
id | Text | Internal id | |
description | Text | Tax location description |
Field | Data type | Label | Filtering |
---|---|---|---|
id | Text | Internal ID | |
date | Date | Date | |
field | Text | Field where systemnote change occur | in ('CUSTRECORD_PROPASSET', 'CUSTRECORD_PROPSTATUS', 'CUSTRECORD_PROPSOURCEID', 'CUSTRECORD_DEPRHISTDATE', 'CUSTRECORD_ASSETSTATUS', 'CUSTRECORD_ASSETMAINTNEXTDATE', 'CUSTRECORD_ASSETTYPE', 'TRANDOC.KSTATUS', 'TRANDOC.KFORMTEMPLATE', 'TRANDOC.STRANTYPE', 'TRANDOC.NKEY', 'CUSTRECORD_ASSETSOURCETRN') |
name | Text | Owner internal id | |
newvalue | Text | New value | |
oldvalue | Text | Old value | |
record | Text | Record name | |
recordid | Text | Transaction id | |
role | Text | User role | |
recordtypeid | Text | Record type |
Field | Data type | Label | Filtering |
---|---|---|---|
id | Text | Internal ID | |
createdby | Text | Created By | |
createddate | Date | Date Created | |
currency | Text | Currency | |
duedate | Date | Due Date | |
exchangerate | Double | Exchange Rate | |
nexus | Text | Nexus ID | |
status | Text | Status | |
trandisplayname | Text | Transaction | |
type | Text | Type | in ('PurchOrd', 'Journal', 'VendBill', 'Custom') |
voided | Boolean | Voided |
This table is joined to the transaction table in order to filter on transaction."type"
Field | Data type | Label | Filtering |
---|---|---|---|
id | Text | Internal ID | |
uniquekey | Text | Unique Key | |
createdfrom | Text | Created From | |
expenseaccount | Text | Expense Account | |
linesequencenumber | Text | Line Number | |
location | Text | Location | |
netamount | Double | Amount (Net) (Transaction Currency) | |
quantity | Double | Quantity | |
subsidiary | Text | Subsidiary | |
taxline | Text | Tax Line | |
transaction | Text | Transaction ID | |
units | Text | Unit ID |
The following is a list of tables that are brought in with the NetSuite SuiteTalk Schema specified:
Field | Data type | Label | Filtering |
---|---|---|---|
Internal_id | Text | Internal id | |
Next_inspection_date | Date | Next inspection date | |
Last_inspection_date | Date | Last inspection date | |
Asset_current_cost | Double | Asset current value | |
Asset_original_cost | Double | Asset original value | |
Asset_is_leased | Boolean | Asset is leased or not | |
Asset_status | Text | Asset status | |
Asset_type | Text | Assert type | |
Component_of | Text | Component of parent asset (compound assets) | |
Cumulative_depreciation | Double | Total asset depreciation | |
Current_net_book_value | Double | Current asset net book value | |
Custom_record_id | Text | Custom asset id | |
Depreciation_account | Text | Depreciation account | |
Depreciation_charge_account | Text | Depreciation charge account | |
Depreciation_end_date | Date | Depreciation end date | |
Depreciation_method | Text | Depreciation method | |
Disposal_cost_account | Text | Disposal account | |
Lease_company | Text | Lease company | |
Maintenance_company | Text | Maintenance company | |
Name | Text | Asset Name | |
Owner_name | Text | Owner name | |
Owner_internal_id | Text | Owner internal id | |
Parent_asset | Text | Parent asset | |
Parent_transaction | Text | Parent transaction name | |
Parent_transaction_line | Text | Line number of parent transaction | |
Prior_year_nbv | Double | Prior year net book value | |
Quantity | Integer | Quantity | |
Residual_value | Double | Residual value of asset after depreciation | |
Custodian | Text | Responsible party | |
Location | Text | Location | |
Subsidiary | Text | Subsidiary | |
Supplier | Text | Supplier | |
Write_down_account | Text | Write-down account | |
Write_off_account | Text | Write-off account |
Field | Data type | Label | Filtering |
---|---|---|---|
Internal_id | Text | Internal id | |
Asset | Text | Asset name | |
Asset_type | Text | Asset type | |
Location | Text | Location | |
Supplier | Text | Supplier | |
Subsidiary | Text | Subsidiary | |
Depreciation_account | Text | Depreciation account | |
Disposal_cost_account | Text | Disposal account | |
Source_transaction | Text | Parent transaction | |
Write_down_account | Text | Write-down account | |
Write_off_account | Text | Write-off account | |
Proposal_status | Text | Status | |
Original_cost | Double | Original cost | |
Parent_proposal | Text | Parent asset proposal (compound assets) | |
Quantity | Double | Quantity | |
Accounting_method | Text | Accounting method | |
Custodian | Text | Responsible party | |
Owner_name | Text | Creator |
Field | Data type | Label | Filtering |
---|---|---|---|
Internal_id | Text | Internal ID | |
Depreciation_date | Date | Depreciation date | |
Journal_internal_id | Text | Journal transaction ID | |
Name | Text | BG Summary Record Name |
Field | Data type | Label | Filtering |
---|---|---|---|
Internal_ID | Text | Internal ID | |
Alternate_method | Text | Alternate Depreciation Method | |
Transaction_type | Text | Transaction type | |
Transaction_amount | Double | Transaction Amount | |
Asset | Text | Asset name | |
Date | Date | Date | |
Subsidiary | Text | Subsidiary | |
Owner_name | Text | Creator | |
Owner_internal_ID | Text | Creator internal ID | |
Posting_reference | Text | Depreciation Posting Reference | |
Depreciation_preiod | Text | Depreciation period | |
Name | Text | Unique Name of Depreciation Journal (Script Name) |
Field | Data type | Label | Filtering |
---|---|---|---|
Internal_ID | Text | Internal ID | |
Accounting_book | Text | Accounting book | |
Alternate_method | Text | Alternate method | |
Cumulative_depreciation | Double | Cumulative depreciation | |
Book_value | Double | Asset book value | |
Current_costs | Double | Asset current cost | |
Original_costs | Double | Asset original cost | |
Residual_value | Double | Residual value | |
Depreciation_account | Text | Depreciation account | |
Depreciation_charge_account | Text | Depreciation charge account | |
Depreciation_method | Text | Depreciation method | |
Depreciation_start_date | Date | Depreciation start date | |
Depreciation_end_date | Date | Depreciation end date | |
Disposal_cost_account | Text | Disposal account | |
Prior_year_nbv | Double | Prior year net book value | |
Residual_value_percentage | Double | Residual value percentage | |
Write_down_account | Text | Write-down account | |
Write_off_account | Text | Write-off account |
Below is an overview of the entities, and their attributes, of the Oracle NetSuite Fixed Asset Management app template.
Name | Attribute | Data type | Mandatory Y/N | Description |
---|---|---|---|---|
Case_ID | coalesce(Asset_input."Custom_record_id", concat('PROP-00',Asset_proposals."id") ) |
Text | Y | Unique identifier of asset or asset proposal |
Case | coalesce(Asset_input."Custom_record_id", concat('PROP-00',Asset_proposals."id") ) |
Text | N | Display name of asset or asset proposal |
Case_name | coalesce(Asset_input."Name", Asset_proposals."Asset") |
Text | N | Alternate display name of asset or asset proposal |
Case_type | coalesce(Asset_input."Asset_type", Asset_proposals."Asset_type") |
Text | N | Asset or asset proposal type |
Case_status | coalesce(Asset_input."Asset_status", Asset_proposals."Proposal_status") |
Text | N | Asset or asset proposal status |
Case_value | coalesce(Asset_input."Current_Net_Book_Value", Asset_proposals."Original_cost") |
Double | N | Asset or asset proposal value |
Parent_transaction | coalesce(Asset_input."Parent_transaction", Asset_proposals."Source_transaction") |
Text | N | Asset or asset proposal parent transaction |
Location | coalesce(Asset_input."Location", Asset_proposals."Location") |
Text | N | Asset or asset proposal parent transaction |
Maintenance_company | Asset_input."Maintenance_company" |
Text | N | Asset or asset proposal parent transaction |
Parent | coalesce(Asset_input."Parent_asset", Asset_proposals."Parent_proposal") |
Text | N | Asset or asset proposal parent asset |
Parent_asset | Asset_input."Component_of" |
Text | N | Asset or asset proposal parent compound asset |
Quantity | coalesce(Asset_input."Quantity", Asset_proposals."Quantity") |
Text | N | Asset or asset proposal quantity |
Subsidiary | coalesce(Asset_input."Subsidiary", Asset_proposals."Subsidiary") |
Text | N | Asset or asset proposal subsidiary |
Supplier | coalesce(Asset_input."Supplier", Asset_proposals."Supplier") |
Text | N | Asset or asset proposal supplier |
Write_down_account | coalesce(Asset_input."Write_down_account", Asset_proposals."Write_down_account") |
Text | N | Asset or asset proposal write down account |
Write_off_account | coalesce(Asset_input."Write_off_account", Asset_proposals."Write_off_account") |
Text | N | Asset or asset proposal write off account |
Depreciation_account | coalesce(Asset_input."Depreciation_account", Asset_proposals."Depreciation_account") |
Text | N | Asset or asset proposal depreciation account |
Depreciation_method | case when Alternate_depreciations."Alternate_method" is null then coalesce(Asset_input."Depreciation_method", Asset_proposals."Accounting_method")else Alternate_depreciations."Alternate_method" |
Text | N | Asset or asset proposal depreciation method |
Custodian | coalesce(Asset_input."Depreciation_account", Asset_proposals."Depreciation_account") |
Text | N | Asset or asset proposal custodian |
Alternate Depreciation Method | coalesce(Alternate_depreciations."Alternate_method") |
Text | N | Asset Alternate Depreciation Method |
Alternate_current_cost | Alternate_depreciations."Current_costs" |
Text | N | Alternate asset Current Cost |
Alternate_original_cost | Alternate_depreciations."Original_costs" |
Text | N | Alternate asset Original Cost |
Alternate_book_value | Alternate_depreciations."Book_value" |
Text | N | Alternate asset Book Value (sale as Case Value) |
Disposal Account | coalesce(Asset_input."Disposal_cost_account", Asset_proposals."Disposal_cost_account") |
Text | N | Asset or asset Disposal Account |
Leasing_company | Asset_input."Lease_company" |
Text | N | Asset Leasing Company |
Residual_value | Asset_input."Residual_value" |
Text | N | Asset Residual Value |
Asset_original_cost | Asset_input."Asset_original_cost" |
Text | N | Asset Original Cost |
Asset_current_cost | Asset_input."Asset_original_cost" |
Text | N | Asset current Cost |
Cumulative_depreciation | Asset_input."Cumulative_depreciation" |
Text | N | Asset Cumulative Depreciation |
Asset_proposals is a combination of SuiteQL and SuiteTalk Asset proposal inputs to create a singular entity with requisite fields.
Name | Attribute | Data type | Mandatory Y/N | Description |
---|---|---|---|---|
id | SuiteQL_proposals."id" |
Text | Y | Unique identifier of the asset proposal |
custrecord_propasset | SuiteQL_proposals."custrecord_propasset" |
Text | Y | Relation of the asset proposal to asset |
Asset | SuiteTalk_proposals."Asset" |
Text | N | Name of the asset proposal |
Asset_type | SuiteTalk_proposals."Asset_type" |
Text | N | Asset proposal type |
Location | SuiteTalk_proposals."Location" |
Text | N | Proposed asset location |
Supplier | SuiteTalk_proposals."Supplier" |
Text | N | Supplier of proposed asset |
Subsidiary | SuiteTalk_proposals."Subsidiary" |
Text | N | Subsidiary requesting asset proposal |
Depreciation_account | SuiteTalk_proposals."Depreciation_account" |
Text | N | Asset proposal depreciation account |
Source_transaction | SuiteTalk_proposals."Source_transaction" |
Text | N | Parent transaction of asset proposal |
Write_down_account | SuiteTalk_proposals."Write_down_account" |
Text | N | Asset proposal write-down account |
Write_off_account | SuiteTalk_proposals."Write_off_account" |
Text | N | Asset proposal write-off account |
Proposal_status | SuiteTalk_proposals."Proposal_status" |
Text | N | Asset proposal status |
Original_cost | SuiteTalk_proposals."Original_cost" |
Text | N | Original cost of asset proposal |
Parent_proposal | SuiteTalk_proposals."Parent_proposal" |
Text | N | Parent of asset proposal |
Quantity | SuiteTalk_proposals."Quantity" |
Text | N | Asset proposal quantity |
Accounting_method | SuiteTalk_proposals."Accounting_method" |
Text | N | Asset proposal accounting method |
Custodian | SuiteTalk_proposals."Custodian" |
Text | N | Asset proposal custodian |
A break down of the activities is listed below, based on each model that contains the activity:
This identifies the acquisition action of an asset.
This identifies the movement of an asset to another location.
This identifies the creation of an asset from asset proposal.
Systemnote_input."New_value" = 'New'
This identifies a an asset's full depreciation.
Systemnote_input."New_value" = 'Fully Depreciated'
This identifies an asset being split.
Systemnote_input."New_value" = 'Splitting'
This identifies the depreciation of an asset.
Depreciation_history."Transaction_type" = 'Depreciation'
This identifies the alternate tax depreciation of an asset.
Depreciation_history."Transaction_type" = 'Depreciation' where Depreciation_history."Alternate_method" is not null
This identifies the disposal of an asset.
This identifies a debit journal entry.
when transactionline."Net_amount" < 0
This identifies a credit journal entry.
when transactionline."Net_amount" > 0
This identifies a manual depreciation.
systemnote."Field" = 'TRANDOC.KSTATUS' and systemnote."New_value" = 'Pending Approval'
This identifies the approval of the manual depreciation.
systemnote."Field" = 'TRANDOC.KSTATUS' and systemnote."New_value" = 'Approved'
This identifies the creation of an asset proposal.
Systemnote_input."New_value" = 'New'
This identifies the rejection of an asset proposal.
Systemnote_input."New_value" = 'Rejected'
This identifies the revaluation, or write-down, of an asset.
Depreciation_history where "Transaction_type" = 'Write-down'
This identifies the transfer of an asset.
Depreciation_history where "Transaction_type" = 'Transfer'
A variable exists in dbt_project.yml
called Automated_users for users to specify the automated users that exist in the Entity table. Please add the entity.id
for these users to this variable.
NetSuite SuiteQL relies on some incredibly large tables for its data, which can be filtered by specifying the record types required. Not filtering on these can cause a lot of performance issues with either Snowflake or SQL Server, and will replicate a lot of superfluous data.
If you plan on using CSV files and are going to be using the SQL Query Editor for exporting the SuiteQL tables, the SQL Query Editor tool only allows for up to 5,000 rows to be exported in each query. If more rows are needed, one can filter based on date, and add the results together into a larger file.
Void activities are built with NetSuite having Void transactions using reversing disabled. In NetSuite, go to Setup -> Accounting -> Accounting Preferences to check.
The Asset ID used in events is created as left(Depreciation_history."Asset", 9)
. Please make sure that the number of characters required to capture the asset ID is 9, or this will need to be changed to grab the correct Asset ID.
When exporting data directly from NetSuite, -System- and (-4)
, the Owner_Name and Owner_InternalId respectively, do not appear. This will not capture automated actions as this is not present in the data. If you would like to have blank values appear as "Automated", add the following wherever Owner_InternalId
is used for defining "Automated_Users":
case
when Depreciation_history."Owner_internal_id" is null
then {{ pm_utils.to_boolean('true') }}
NetSuite is structurally built around the header level, so tracking item level changes requires utilizing a mixture of SuiteTalk and SuiteQL Schemas to find and pull the requisite data for process mining.
If you encounter errors when running a job that state column not found, go to the Advanced tab of the NetSuite Connection and set the Row Scan Depth: to 0
CData Sync may exhibit some issues in filtering the extraction tables on multiple values, so this is something to keep in mind if you do encounter similar issues.