Service - CommerceAccounting Sale
Overview
Handle sales in one service because some Accounting entries include the full amount, some break up according to saleLineItems.
Repository
...
Object Schemas
- Additional Information
- Per Service Schemas
comAccSaleLink
{
objectType: "comAccSaleLink",
generatedBy: "userGenerated",
canDelete: false,
belongTo: {
serviceTag: "CommerceAccountingLink",
objectType: "comAccLinkByBusiness"
},
addOnDataStructure: [],
storageResources: {
"myGraph":{
"storageType": "graph",
"graphServerTag": "GraphHandler"
},
"dynamo": {
"storageType": "dynamoDB",
"tableName": "comAccSaleLink",
}
},
fieldNames: {
businessId:{
fromObjType:{
serviceTag: "CommerceAccountingLink",
objectType: "comAccLinkByBusiness"
},
},
organizationId: {
fromObjType:{
serviceTag: "CommerceAccountingLink",
objectType: "comAccLinkByOrganization"
},
},
accountLinkTag:{ // type of link: ..
type: "string",
requriedOnCreate: true,
storageResourceTags: ['myGraph', 'dynamo']
}
accountId:{
type: "string",
requriedOnCreate: true,
storageResourceTags: ['myGraph', 'dynamo']
}
},
identifiers: [
{
type: "partitionKey",
fieldNames: ["businessId", "organizationId"],
name: "comAccLinkId",
},
{
type: "sortKey",
fieldName: "accountLinkTag"
},
]
}
- sets which Accounting accountId journal entries are added to
{
objectType: "comAccSale",
generatedBy: "systemGenerated",
canDelete: false,
belongTo: {
serviceTag: "CommerceAccountingLink",
objectType: "comAccLinkByBusiness"
},
addOnDataStructure: [],
storageResources: {
"dynamo": {
"storageType": "dynamoDB",
"tableName": "comAccSaleLink",
},
"myGraph": {
"storageType": "graph",
"graphServerTag": "GraphHandler"
}
},
fieldNames: {
// businessId,
// organizationId,
// saleId,
// record lock eg: prefix: "updateSale"
// updateSale_status: {requiredOnCreate: true}, // open|lock,
// updateSale_uniqueRequestId: {requiredOnCreate: true},
// updateSale_timestamp: {requiredOnCreate: true},
saleValueJournalId: {
type: "string",
optionalOnCreate: true,
canUpdate: true,
storageResourceTags: ["dynamo"],
},
inventoryAdjustJournalId: {
type: "string",
optionalOnCreate: true,
canUpdate: true,
storageResourceTags: ["dynamo"],
},
},
identifiers: [
{
type: "partitionKey",
fieldNames: ["businessId", "organizationId"],
name: "comAccLinkId",
},
{
type: "sortKey",
fieldName: "saleId"
},
]
}
- one saleId links to two journalIds, sale value and inventory adjustment entries
- maintains a link between saleId and journalIds, so can adjust if changes made to sale
Relationships
...
flowSchemas
saleCommitted
- when creating a sale, iterate saleLineItems to decide which journal entries are created
- accountsReceivable accountId will need to come from Service - CommerceAccounting Customer
Sale Value
- the total sale value has journal entry for all the below:
- (debit)accountsReceivable(Asset)
- The other side (credit) is broken up depending on goods/service or assets
- For goods value an entry is entered into the below
- (credit)goodsSale/serviceSale(Revenue)
- Assets have:
- (credit)inventoryAsset(Asset)
- (debit)accumulatedDepreciation(Asset)
- (debit or credit)creditGainOnSale(Renenue)/debitLossOnSale(Expense)
- Intangible Assets have:
- (credit)inventoryIntangibleAsset(Asset)
- (debit)accumulatedAmortization(Asset)
- (debit or credit)creditGainOnSale(Renenue)/debitLossOnSale(Expense)
- all credit side may have:
- (credit)salesTaxPayable(Liability)
- (credit)vatPayable(liability)
Goods Sold
- the total saleLineItem value for Inventory Goods has a journal entry for:
- (debit)cogsGoods(Expense)
- (credit)inventoryGoods(Asset)
Raw Material Sold
- the total saleLineItem value for Inventory Raw Materials has a journal entry for:
- (debit)cogsRawMaterial(Expense)
- (credit)inventoryRawMaterial(Asset)
Assets Sold
- might not have accumulatedDepreciation applied yet
- if sold for same amount as original value then not have creditGainOnSale/debitLossOnSale
- will need to query Accounting Assets service for depreciation amount
- may need to query ComAcc Inventory service to find link between Commerce Asset and Accounting Asset, so can find depreciation
Services Sold
- no additional entries required
Intangible Goods Sold
- no additional entries required
- entries same as physical Goods
Intangible Assets
- same as an Asset, except use the term Amortization instead of Depreciation, which are functionally the same
saleChange
- make adjustment to journal entries when saleLineItemId changes
- perhaps handling removal of sale/journal entries, or creation of new entries
- basically re-calculate all entries and check against existing