Service - CommerceAccounting Purchase: Difference between revisions

From Izara Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
= Overview =
= Overview =


Handle purchases in one service, because some Accounting entries include the full amount, some break up according to purchaseLineItems.
Handle links between purchases and Accounting records.


= Repository =
= Repository =
Line 9: Line 9:
= Object Schemas =
= Object Schemas =
; Additional Information: [[Per Service Schemas]]
; Additional Information: [[Per Service Schemas]]
== comAccPurchaseLink ==


<syntaxhighlight lang="JavaScript">
<syntaxhighlight lang="JavaScript">
Line 16: Line 18:
belongTo: {
belongTo: {
serviceTag: "ComAccLink",
serviceTag: "ComAccLink",
objectType: "comAccLink"
objectType: "comAccLinkByBusiness"
},
},
addOnDataStructure: [],
addOnDataStructure: [],
Line 26: Line 28:
     },
     },
     fieldNames: {
     fieldNames: {
// probably have two dynamo tables, one identified by purchaseId, one by journalId
// businessId,
// accountLinkTag // type of link: inputVAT|..
// accountId
     },
     },
     identifiers: [
     identifiers: [
{
{
// see above note
type: "partitionKey",
fieldName: "businessId",
},
{
type: "sortKey",
fieldName: "accountLinkTag"
},
    ]
}
</syntaxhighlight>
 
* sets which Accounting accountId journal entries are added to
 
== comAccPurchase ==
 
<syntaxhighlight lang="JavaScript">
{
objectType: "comAccPurchase",
canDelete: false,
belongTo: {
serviceTag: "ComAccLink",
objectType: "comAccLinkByBusiness"
},
addOnDataStructure: [],
storageResources: {
"dynamo": {
"storageType": "dynamoDB",
"tableName": "comAccPurchase",
}
}
    },
    fieldNames: {
// businessId,
// purchaseId,
inputVatJournalId: {
type: "string",
optionalOnCreate: true,
canUpdate: true,
storageResourceTags: ["dynamo"],
},
    },
    identifiers: [
{
type: "partitionKey",
fieldName: "businessId",
},
{
type: "sortKey",
fieldName: "purchaseId"
},
     ]
     ]
}
}
</syntaxhighlight>
</syntaxhighlight>


* one purchaseId may link to multiple journalIds, purchase value and inventory adjustment entries
== comAccPurchaseLineItem ==
* maintains a link between purchaseId and journalIds, so can adjust if changes made to purchase
 
<syntaxhighlight lang="JavaScript">
{
objectType: "comAccPurchaseLineItem",
canDelete: false,
belongTo: {
serviceTag: "ComAccLink",
objectType: "comAccLinkByBusiness"
},
addOnDataStructure: [],
storageResources: {
"dynamo": {
"storageType": "dynamoDB",
"tableName": "comAccPurchaseLineItem",
}
    },
    fieldNames: {
// purchaseId,
// purchaseLineItemId,
// journalId
    },
    identifiers: [
{
type: "partitionKey",
fieldName: "purchaseId"
},
{
type: "sortKey",
fieldName: "purchaseLineItemId"
},
    ]
}
</syntaxhighlight>


== Relationships ==
== Relationships ==
Line 46: Line 129:
= flowSchemas =
= flowSchemas =


== purchaseCreated ==
== createPurchase ==


* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created
* when creating a purchase, iterate purchaseLineItems to decide which journal entries are created
* accountsPayable accountId will need to come from [[Service - CommerceAccounting Vendor]]
* accountsPayable accountId comes from [[Service - CommerceAccounting Vendor]]
* each purchaseLineItem checks it's type then finds accountId from coresponding comAcc service


=== Purchase Value ===
=== Example request param from Commerce ===


* the total purchase value has journal entry for all the below:
<syntaxhighlight lang="JavaScript">
*# (credit)accountsPayable(Liability)
{
 
belongToIdentifiers: {
* The other side (debit) is broken up depending on lineItem type
  businessId: "xxx"
 
},
* For expenses value an entry is entered into the below
purchaseId: "",
* Maybe classify expenses and have different accounts depending on classification
vendorId: "",
*# (debit)expense(Expense)
purchaseCurrencyId: "",
 
purchaseLineItems: {
* Goods:
{purchaseLineItemId}: {
*# (debit)inventory(Asset)
Type: "", // inventory|expense|services|freight|salesTax|vatTax|other
 
SubType: "", // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, order: standard
* Intangible Goods:
lineItemQuantity: 1,
*# (debit)expense(Expense)
lineItemUnitPrice: "2.00"
 
},
* Services:
//...
*# (debit)expense(Expense)
}
 
}
* Assets:
</syntaxhighlight>
*# (debit)inventoryAsset(Asset)
 
* Intangible Assets have:
*# (debit)inventoryIntangibleAsset(Asset)
 
* all debit side may have:
*# (debit)vatReceivable(Asset)
 
=== inventoryAsset Purchased ===
 
* maybe triggered from ComAcc Sale saleCommitted flow, because needs to know asset purchase journalId
* simply saves the link for future actions


== purchaseChange ==
== purchaseChange ==


* make adjustment to journal entries when purchaseLineItemId changes
* make adjustment to journal entries when purchaseLineItemId changes
* perhaps handling removal of purchase/journal entries, or creation of new entries
* handle removal of purchase/journal entries, or creation of new entries
* basically re-calculate all entries and check against existing
* basically re-calculate all entries and check against existing



Revision as of 13:43, 16 April 2026

Overview

Handle links between purchases and Accounting records.

Repository

...

Object Schemas

Additional Information
Per Service Schemas

comAccPurchaseLink

{
	objectType: "comAccPurchaseLink",
	canDelete: false,
	belongTo: {
		serviceTag: "ComAccLink",
		objectType: "comAccLinkByBusiness"
	},
	addOnDataStructure: [],
	storageResources: {
		"dynamo": {
			"storageType": "dynamoDB",
			"tableName": "comAccPurchaseLink",
		}
    },
    fieldNames: {
		// businessId,
		// accountLinkTag // type of link: inputVAT|..
		// accountId
    },
    identifiers: [
		{
			type: "partitionKey",
			fieldName: "businessId",
		},
		{
			type: "sortKey",
			fieldName: "accountLinkTag"
		},
    ]
}
  • sets which Accounting accountId journal entries are added to

comAccPurchase

{
	objectType: "comAccPurchase",
	canDelete: false,
	belongTo: {
		serviceTag: "ComAccLink",
		objectType: "comAccLinkByBusiness"
	},
	addOnDataStructure: [],
	storageResources: {
		"dynamo": {
			"storageType": "dynamoDB",
			"tableName": "comAccPurchase",
		}
    },
    fieldNames: {
		// businessId,
		// purchaseId,
		inputVatJournalId: {
			type: "string",
			optionalOnCreate: true,
			canUpdate: true,
			storageResourceTags: ["dynamo"],
		},

    },
    identifiers: [
		{
			type: "partitionKey",
			fieldName: "businessId",
		},
		{
			type: "sortKey",
			fieldName: "purchaseId"
		},
    ]
}

comAccPurchaseLineItem

{
	objectType: "comAccPurchaseLineItem",
	canDelete: false,
	belongTo: {
		serviceTag: "ComAccLink",
		objectType: "comAccLinkByBusiness"
	},
	addOnDataStructure: [],
	storageResources: {
		"dynamo": {
			"storageType": "dynamoDB",
			"tableName": "comAccPurchaseLineItem",
		}
    },
    fieldNames: {
		// purchaseId,
		// purchaseLineItemId,
		// journalId
    },
    identifiers: [
		{
			type: "partitionKey",
			fieldName: "purchaseId"
		},
		{
			type: "sortKey",
			fieldName: "purchaseLineItemId"
		},
    ]
}

Relationships

...

flowSchemas

createPurchase

  • when creating a purchase, iterate purchaseLineItems to decide which journal entries are created
  • accountsPayable accountId comes from Service - CommerceAccounting Vendor
  • each purchaseLineItem checks it's type then finds accountId from coresponding comAcc service

Example request param from Commerce

{
	belongToIdentifiers: {
	  businessId: "xxx"
	},
	purchaseId: "",
	vendorId: "",
	purchaseCurrencyId: "",
	purchaseLineItems: {
		{purchaseLineItemId}: {
			Type: "", // inventory|expense|services|freight|salesTax|vatTax|other
			SubType: "", // inventory: goods|intangibleGoods|rawMaterial|asset|intangibleAsset, expense: pointInTime|overTime, services: pointInTime|overTime, freight: standard, order: standard
			lineItemQuantity: 1,
			lineItemUnitPrice: "2.00"
		},
		//...
	}
}

purchaseChange

  • make adjustment to journal entries when purchaseLineItemId changes
  • handle removal of purchase/journal entries, or creation of new entries
  • basically re-calculate all entries and check against existing

Working documents

CommerceAccounting Purchase