warehouse-companies
v1.0.1
Published
Helper methods to create initial share ledgers for warehouse companies using Reguity
Downloads
1
Readme
warehouse-companies
Helper methods to create a initial share ledger for a warehouse company using Reguity
Installation
npm install warehouse-companies
createShareLedgerEventsParams
can be used in a scenario where you want to sell a warehouse company that has
one owner and one sharetype, given the following parameters:
- companyId The id of the company to sell
- sharetypeId The id of the sharetype
- startCapital The amount of share capital that exists from the start
- endCapital The amount of share capital to exist once the new owners have bought it
- startQuantity The amount of shares that exist from the start
- firstShareownerId The id of the initial owner of the first shares
- firstDate The date on which the company was founded
- endDate The date on which the company was sold
- shareownerAndQuantityTuples List of objects on the form
{ shareownerId, quantity }
, whereshareownerId
is the id of a new shareowner and quantity is the amount of shares that he/she should receive - firstRefusal Whether first refusal should be set
Example call.
Scenario: Warehouse company initially has 1000 shares and a share capital of 50000. Two shareowners want to buy it but end up owning 1200 and 1100 shares respectively, with a new share capital of 100000.
This will yeild a initial setup where we say that we initially own the 1000 shares, two transactions where we distribute the 1000 shares proportionaly to the new owners, a new share issue (doesn't change quotient value) and a split (that changes quotient value):
const { createShareLedgerEventsParams } = require('warehouse-companies');
createShareLedgerEventsParams({
companyId: "42",
sharetypeId: 55,
startCapital: 50000,
endCapital: 100000,
startQuantity: 1000,
firstShareownerId: "1",
firstDate: '2018-01-01T00:00:00.000Z',
endDate: '2018-01-02T00:00:00.000Z',
shareownerAndQuantityTuples: [{
shareownerId: "2",
quantity: 1200
}, {
shareownerId: "3",
quantity: 1100
}],
firstRefusal: true
});
/*
=>
[{
companyId: "42",
type: "Setup",
date: "2018-01-01T00:00:00.000Z",
shareCapitalChange: 50000,
shareholdingChanges: [{
startNr: 1,
stopNr: 1000,
buyDate: "2018-01-01T00:00:00.000Z",
shareownerId: "1",
sharetypeId: 55
}]
}, {
companyId: "42",
type: "Transaction",
date: "2018-01-02T00:00:00.000Z",
shareholdingChanges: [{
startNr: 1,
stopNr: 522,
shareownerId: "2"
}, {
startNr: 523,
stopNr: 1000,
shareownerId: "1"
}]
}, {
companyId: "42",
type: "Transaction",
date: "2018-01-02T00:00:00.000Z",
shareholdingChanges: [{
startNr: 523,
stopNr: 1000,
shareownerId: "3"
}]
}, {
companyId: "42",
type: "Newshareissue",
shareCapitalChange: 50000,
date: "2018-01-02T00:00:00.000Z",
shareholdingChanges: [{
startNr: 1001,
stopNr: 1521,
shareownerId: "2",
sharetypeId: 55
}, {
startNr: 1522,
stopNr: 2000,
shareownerId: "3",
sharetypeId: 55
}]
}, {
companyId: "42",
type: "Split",
date: "2018-01-02T00:00:00.000Z",
shareholdingChanges: [{
startNr: 2001,
stopNr: 2157,
shareownerId: "2",
sharetypeId: 55
}, {
startNr: 2158,
stopNr: 2300,
shareownerId: "3",
sharetypeId: 55
}]
}, {
companyId: "42",
type: "Reservationupdate",
date: "2018-01-02T00:00:00.000Z",
shareholdingChanges: [{
startNr: 1,
stopNr: 522,
firstRefusal: true
}, {
startNr: 523,
stopNr: 1000,
firstRefusal: true
}, {
startNr: 1001,
stopNr: 1521,
firstRefusal: true
}, {
startNr: 1522,
stopNr: 2000,
firstRefusal: true
}, {
startNr: 2001,
stopNr: 2157,
firstRefusal: true
}, {
startNr: 2158,
stopNr: 2300,
firstRefusal: true
}]
}]
*/
Usage with Reguity GraphQL API
The response from createShareLedgerEventsParams
is an array of parameters that can used as consecutive calls to the createShareLedgerEvent
mutation.
One just has to iterate the response from createShareLedgerEventParams
, and supply each element as the value for variable $params
.
#Example using graphql-request and the example call
const { createShareLedgerEventsParams } = require('warehouse-companies');
const { request } = require('graphql-request');
const endpoint = 'https://api-dev.reguity.com';
const query = `mutation CreateShareLedgerEvent ($params: EventCreationInput!) {
createShareLedgerEvent (params: $params) {
code
message
}
}`;
let result = createShareLedgerEventsParams({
companyId: "42",
sharetypeId: 55,
startCapital: 50000,
endCapital: 100000,
startQuantity: 1000,
firstShareownerId: "1",
firstDate: '2018-01-01T00:00:00.000Z',
endDate: '2018-01-02T00:00:00.000Z',
shareownerAndQuantityTuples: [{
shareownerId: "2",
quantity: 1200
}, {
shareownerId: "3",
quantity: 1100
}],
firstRefusal: true
});
result.reduce((ack, params) => ack.then(async () => request(endpoint, query, { params })), Promise.all([]));
Done!