132 lines
3.8 KiB
Markdown
132 lines
3.8 KiB
Markdown
# 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`.
|