# Inventaris COA Mapping Notes ## Existing Table Purposes `coa` is the Chart of Account master. It stores the real account identity: - `coaID`: primary key, use this for mapping. - `coaAccountNo`: account number for display/reporting. - `coaDescription`: account name/description. - `coaIsInput`: marks accounts that can be posted to. - `coaIsActive`: active account flag. - `coaLevel`: account hierarchy level. `coa_group`, `coa_subgroup`, and `coa_mapgroup` organize COA rows for reporting or account selection: ```text coa_group -> coa_subgroup -> coa_mapgroup -> coa ``` Relationship: ```text coa_group.CoaGroupID = coa_subgroup.CoaSubGroupCoa_GroupID coa_subgroup.CoaSubGroupID = coa_mapgroup.CoaMapGroupCoaSubGroupID coa.coaID = coa_mapgroup.CoaMapGroupCoaID ``` These tables should not be changed for inventaris mapping. They can be used only to filter or help select valid COA rows in the UI. `nat_group` and `nat_subgroup` classify normal item nature/type. They are mainly used by non-inventaris item flows, especially item category `1`. ```text nat_group -> nat_subgroup -> m_item ``` Relationship: ```text nat_group.Nat_GroupID = nat_subgroup.Nat_SubGroupNat_GroupID m_item.M_ItemNat_GroupID = nat_group.Nat_GroupID m_item.M_ItemNat_SubGroupID = nat_subgroup.Nat_SubGroupID ``` `nat_subgroup_map`, `map_nat_group`, and `map_nat_subgroup` connect NAT classification to COA for normal item accounting: - `nat_subgroup_map`: maps NAT subgroup to pendapatan, diskon, and retur COA. - `map_nat_group`: maps NAT group to diskon, retur, DP, and debt/hutang COA. - `map_nat_subgroup`: maps NAT group/subgroup to pendapatan, biaya, and persediaan COA. Typical normal item accounting flow: ```text m_item -> M_ItemNat_GroupID + M_ItemNat_SubGroupID -> map_nat_subgroup / map_nat_group / nat_subgroup_map -> coa.coaID ``` ## Relationship To `m_item` `m_item` has multiple classification fields: ```text M_ItemItem_CategoryID M_ItemNat_GroupID M_ItemNat_SubGroupID M_ItemFa_ClassID M_ItemM_InventarisGolID ``` For item category `1`, NAT group/subgroup is the main accounting classification. For inventaris item category `2`, `M_ItemM_InventarisGolID` should be the main accounting classification. Do not add COA fields to `m_item`. ## New Inventaris COA Mapping Use `m_inventaris_coa_mapping` as the default COA mapping source for inventaris items based on golongan inventaris: ```text m_item.M_ItemM_InventarisGolID -> m_inventaris_coa_mapping.M_InventarisCoaMappingM_InventarisGolID -> coa.coaID fields ``` The mapping table stores `coa.coaID`, not account number text. Account number and description should be read from `coa` when displaying or posting journals. Recommended lookup rule: ```text 1. Check active item-level override in m_inventaris_item_coa_mapping. 2. If no override exists, use active gol-level default in m_inventaris_coa_mapping. 3. If no mapping exists, stop the transaction and show an incomplete COA mapping error. ``` `m_inventaris_item_coa_mapping` is optional and only for specific item exceptions. Its COA fields are nullable so one item can override only one account and inherit the rest from the gol-level default. ## COA Fields For Inventaris The default gol-level mapping should provide: - `CoaAsetID`: asset/inventaris account. - `CoaHutangID`: payable account. - `CoaPembelianID`: purchase or acquisition account. - `CoaBebanPenyusutanID`: depreciation expense account. - `CoaAkumulasiPenyusutanID`: accumulated depreciation account. - `CoaLabaPelepasanID`: gain on disposal account. - `CoaRugiPelepasanID`: loss on disposal account. Use active, postable COA rows where possible: ```sql coa.coaIsActive = 'Y' AND coa.coaIsInput = 'Y' ``` `coa_group` and `coa_subgroup` may help filter dropdown options, but the saved mapping should still point directly to `coa.coaID`.