From a4b0a1f793866d829c5d03059363d1a3e4f445d2 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Wed, 12 Sep 2018 00:48:44 -0400 Subject: [PATCH] initial --- db_deploy.sql | 62 ++++++++++++++++++++++++++++++++++ schema/documents/bpr.json | 39 +++++++++++++++++++++ schema/tables/acct.sql | 9 +++++ schema/tables/bal.sql | 16 +++++++++ schema/tables/bpr.sql | 11 ++++++ schema/tables/gl.sql | 13 +++++++ schema/triggers/log_insert.sql | 16 +++++++++ 7 files changed, 166 insertions(+) create mode 100644 db_deploy.sql create mode 100644 schema/documents/bpr.json create mode 100644 schema/tables/acct.sql create mode 100644 schema/tables/bal.sql create mode 100644 schema/tables/bpr.sql create mode 100644 schema/tables/gl.sql create mode 100644 schema/triggers/log_insert.sql diff --git a/db_deploy.sql b/db_deploy.sql new file mode 100644 index 0000000..1e327f0 --- /dev/null +++ b/db_deploy.sql @@ -0,0 +1,62 @@ +BEGIN TRANSACTION; +--\conninfo +--drop schema evt cascade +--------------------------build schema---------------------------------------------- + +CREATE SCHEMA evt; +COMMENT ON SCHEMA evt IS 'event log'; + +--------------------------event log table------------------------------------------- + +CREATE TABLE evt.bpr ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY + ,bpr JSONB + ,bprh JSONB + ,stmp timestamptz +); +COMMENT ON COLUMN evt.bpr.bpr IS 'basic pecuniary record'; +COMMENT ON COLUMN evt.bpr.bprh IS 'basic pecuniary record history'; +COMMENT ON COLUMN evt.bpr.stmp IS 'insert time'; + +--------------------------account master--------------------------------------------- + +--the account master should be dynamically created +CREATE TABLE evt.acct ( + acct text PRIMARY KEY + ,prop jsonb +); +COMMENT ON COLUMN evt.acct.acct IS 'account'; +COMMENT ON COLUMN evt.acct.prop IS 'properties'; + +--------------------------relational ledger------------------------------------------ + +CREATE TABLE evt.gl ( + id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY + ,bpr_id INT REFERENCES evt.bpr (id) + ,acct text REFERENCES evt.acct (acct) + ,amount numeric (12,2) + ,bpr jsonb +); +COMMENT ON COLUMN evt.gl.bpr_id IS 'id of initial basic pecuniary record'; +COMMENT ON COLUMN evt.gl.acct IS 'account code'; +COMMENT ON COLUMN evt.gl.amount IS 'amount'; +COMMENT ON COLUMN evt.gl.bpr IS 'extract from initial basic pecuniary record'; + +--------------------------balances---------------------------------------------------- + +CREATE TABLE evt.bal ( + acct TEXT REFERENCES evt.acct(acct) + ,perd daterange + ,obal numeric(12,2) + ,debits numeric(12,2) + ,credits numeric(12,2) + ,cbal numeric(12,2) +); +COMMENT ON COLUMN evt.bal.acct IS 'account'; +COMMENT ON COLUMN evt.bal.perd IS 'period'; +COMMENT ON COLUMN evt.bal.obal IS 'opening balance'; +COMMENT ON COLUMN evt.bal.debits IS 'total debits'; +COMMENT ON COLUMN evt.bal.credits IS 'total credits'; +COMMENT ON COLUMN evt.bal.cbal IS 'closing balance'; + +COMMIT; \ No newline at end of file diff --git a/schema/documents/bpr.json b/schema/documents/bpr.json new file mode 100644 index 0000000..75f55e0 --- /dev/null +++ b/schema/documents/bpr.json @@ -0,0 +1,39 @@ +{ + "gl": [ + { + "jpath": [ + "{item,0}", + "{header}" + ], + "amount": 2.19, + "account": "h.food" + }, + { + "jpath": [ + "{item,0}", + "{header}" + ], + "amount": -2.19, + "account": "h.dcard" + } + ], + "item": [ + { + "item": "green olives", + "amount": 2.19, + "reason": "food", + "account": "h.food" + } + ], + "header": { + "entity": "home", + "module": "MHI", + "offset": "h.dcard", + "vendor": "Discount Drug Mart", + "currency": "USD", + "eff_date": "1/6/2018", + "location": "Stow, OH", + "instrument": "Discover Card", + "transaction": "purchase" + } +} \ No newline at end of file diff --git a/schema/tables/acct.sql b/schema/tables/acct.sql new file mode 100644 index 0000000..4badfe0 --- /dev/null +++ b/schema/tables/acct.sql @@ -0,0 +1,9 @@ +--------------------------account master--------------------------------------------- + +--the account master should be dynamically created +CREATE TABLE evt.acct ( + acct text PRIMARY KEY + ,prop jsonb +); +COMMENT ON COLUMN evt.acct.acct IS 'account'; +COMMENT ON COLUMN evt.acct.prop IS 'properties'; \ No newline at end of file diff --git a/schema/tables/bal.sql b/schema/tables/bal.sql new file mode 100644 index 0000000..2513b2b --- /dev/null +++ b/schema/tables/bal.sql @@ -0,0 +1,16 @@ +--------------------------balances---------------------------------------------------- + +CREATE TABLE evt.bal ( + acct TEXT REFERENCES evt.acct(acct) + ,perd daterange + ,obal numeric(12,2) + ,debits numeric(12,2) + ,credits numeric(12,2) + ,cbal numeric(12,2) +); +COMMENT ON COLUMN evt.bal.acct IS 'account'; +COMMENT ON COLUMN evt.bal.perd IS 'period'; +COMMENT ON COLUMN evt.bal.obal IS 'opening balance'; +COMMENT ON COLUMN evt.bal.debits IS 'total debits'; +COMMENT ON COLUMN evt.bal.credits IS 'total credits'; +COMMENT ON COLUMN evt.bal.cbal IS 'closing balance'; \ No newline at end of file diff --git a/schema/tables/bpr.sql b/schema/tables/bpr.sql new file mode 100644 index 0000000..64f56d4 --- /dev/null +++ b/schema/tables/bpr.sql @@ -0,0 +1,11 @@ +--------------------------event log table------------------------------------------- + +CREATE TABLE evt.bpr ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY + ,bpr JSONB + ,bprh JSONB + ,stmp timestamptz +); +COMMENT ON COLUMN evt.bpr.bpr IS 'basic pecuniary record'; +COMMENT ON COLUMN evt.bpr.bprh IS 'basic pecuniary record history'; +COMMENT ON COLUMN evt.bpr.stmp IS 'insert time'; \ No newline at end of file diff --git a/schema/tables/gl.sql b/schema/tables/gl.sql new file mode 100644 index 0000000..e2d9794 --- /dev/null +++ b/schema/tables/gl.sql @@ -0,0 +1,13 @@ +--------------------------relational ledger------------------------------------------ + +CREATE TABLE evt.gl ( + id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY + ,bpr_id INT REFERENCES evt.bpr (id) + ,acct text REFERENCES evt.acct (acct) + ,amount numeric (12,2) + ,bpr jsonb +); +COMMENT ON COLUMN evt.gl.bpr_id IS 'id of initial basic pecuniary record'; +COMMENT ON COLUMN evt.gl.acct IS 'account code'; +COMMENT ON COLUMN evt.gl.amount IS 'amount'; +COMMENT ON COLUMN evt.gl.bpr IS 'extract from initial basic pecuniary record'; \ No newline at end of file diff --git a/schema/triggers/log_insert.sql b/schema/triggers/log_insert.sql new file mode 100644 index 0000000..2513b2b --- /dev/null +++ b/schema/triggers/log_insert.sql @@ -0,0 +1,16 @@ +--------------------------balances---------------------------------------------------- + +CREATE TABLE evt.bal ( + acct TEXT REFERENCES evt.acct(acct) + ,perd daterange + ,obal numeric(12,2) + ,debits numeric(12,2) + ,credits numeric(12,2) + ,cbal numeric(12,2) +); +COMMENT ON COLUMN evt.bal.acct IS 'account'; +COMMENT ON COLUMN evt.bal.perd IS 'period'; +COMMENT ON COLUMN evt.bal.obal IS 'opening balance'; +COMMENT ON COLUMN evt.bal.debits IS 'total debits'; +COMMENT ON COLUMN evt.bal.credits IS 'total credits'; +COMMENT ON COLUMN evt.bal.cbal IS 'closing balance'; \ No newline at end of file