WIP: Template updates from previous session
- Fix TABLE definitions in bling and erp templates - Update sync scripts for bling integration - Fix WhatsApp config.csv header Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
dd3d8c74dd
commit
1ce32959d2
17 changed files with 425 additions and 404 deletions
|
|
@ -4,11 +4,11 @@ PARAM qtd AS INTEGER LIKE 10 DESCRIPTION "Quantity to add to stock"
|
|||
DESCRIPTION "Add stock quantity for a product by SKU"
|
||||
|
||||
person = FIND "People.xlsx", "id=" + mobile
|
||||
vendor = FIND "maria.Vendedores", "id=" + person.erpId
|
||||
vendor = FIND ".Vendedores", "id=" + person.erpId
|
||||
|
||||
TALK "Olá " + vendor.Contato_Nome + "!"
|
||||
|
||||
produto = FIND "maria.Produtos", "sku=" + sku
|
||||
produto = FIND ".Produtos", "sku=" + sku
|
||||
|
||||
IF NOT produto THEN
|
||||
TALK "Produto não encontrado."
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ DO WHILE page > 0 AND page <= pages
|
|||
itemCount = UBOUND(items)
|
||||
|
||||
IF itemCount > 0 THEN
|
||||
MERGE "maria.ContasAReceber" WITH items BY "Id"
|
||||
MERGE ".ContasAReceber" WITH items BY "Id"
|
||||
totalReceber = totalReceber + itemCount
|
||||
page = page + 1
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ DO WHILE page > 0 AND page <= pages
|
|||
itemCount = UBOUND(items)
|
||||
|
||||
IF itemCount > 0 THEN
|
||||
MERGE "maria.ContasAPagar" WITH items BY "Id"
|
||||
MERGE ".ContasAPagar" WITH items BY "Id"
|
||||
totalPagar = totalPagar + itemCount
|
||||
page = page + 1
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ DO WHILE i > 0 AND i < pages
|
|||
produto.hierarquia = "s"
|
||||
END IF
|
||||
|
||||
produtoDB = FIND "maria.Produtos", "sku=" + produto.codigo
|
||||
produtoDB = FIND ".Produtos", "sku=" + produto.codigo
|
||||
IF produtoDB THEN
|
||||
IF produtoDB.preco <> produto.preco THEN
|
||||
hist = NEW OBJECT
|
||||
|
|
@ -51,7 +51,7 @@ DO WHILE i > 0 AND i < pages
|
|||
hist.precoAtual = produto.preco
|
||||
hist.produto_id = produto.id
|
||||
hist.dataModificado = FORMAT today, "yyyy-MM-dd"
|
||||
SAVE "maria.HistoricoPreco", hist
|
||||
SAVE ".HistoricoPreco", hist
|
||||
hist = null
|
||||
END IF
|
||||
END IF
|
||||
|
|
@ -63,7 +63,7 @@ DO WHILE i > 0 AND i < pages
|
|||
list = null
|
||||
list = items
|
||||
|
||||
MERGE "maria.Produtos" WITH list BY "Id"
|
||||
MERGE ".Produtos" WITH list BY "Id"
|
||||
list = items
|
||||
|
||||
j = 0
|
||||
|
|
@ -86,7 +86,7 @@ DO WHILE i > 0 AND i < pages
|
|||
k = 0
|
||||
DO WHILE k < ubound(listV)
|
||||
listV[k].hierarquia = 'f'
|
||||
DELETE "maria.ProdutoImagem", "sku=" + listV[k].sku
|
||||
DELETE ".ProdutoImagem", "sku=" + listV[k].sku
|
||||
|
||||
images = listV[k]?.midia?.imagens?.externas
|
||||
l = 0
|
||||
|
|
@ -96,16 +96,16 @@ DO WHILE i > 0 AND i < pages
|
|||
images[l].id = random()
|
||||
l = l + 1
|
||||
LOOP
|
||||
SAVE "maria.ProdutoImagem", images
|
||||
SAVE ".ProdutoImagem", images
|
||||
images = null
|
||||
k = k + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Produtos" WITH listV BY "Id"
|
||||
MERGE ".Produtos" WITH listV BY "Id"
|
||||
END IF
|
||||
listV = null
|
||||
|
||||
DELETE "maria.ProdutoImagem", "sku=" + list[j].sku
|
||||
DELETE ".ProdutoImagem", "sku=" + list[j].sku
|
||||
k = 0
|
||||
images = list[j].midia?.imagens?.externas
|
||||
DO WHILE k < ubound(images)
|
||||
|
|
@ -114,7 +114,7 @@ DO WHILE i > 0 AND i < pages
|
|||
images[k].id = random()
|
||||
k = k + 1
|
||||
LOOP
|
||||
SAVE "maria.ProdutoImagem", images
|
||||
SAVE ".ProdutoImagem", images
|
||||
j = j + 1
|
||||
LOOP
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ DO WHILE i > 0 AND i < pages
|
|||
items[k].custo = items[k].valor / 2
|
||||
k = k + 1
|
||||
LOOP
|
||||
MERGE "maria.PedidosItem" WITH items BY "Id"
|
||||
MERGE ".PedidosItem" WITH items BY "Id"
|
||||
|
||||
items = res.data.parcelas
|
||||
k = 0
|
||||
|
|
@ -163,14 +163,14 @@ DO WHILE i > 0 AND i < pages
|
|||
items[k].pedido_id = pedido_id
|
||||
k = k + 1
|
||||
LOOP
|
||||
MERGE "maria.Parcela" WITH items BY "Id"
|
||||
MERGE ".Parcela" WITH items BY "Id"
|
||||
|
||||
fullList[j] = res.data
|
||||
res = null
|
||||
j = j + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Pedidos" WITH fullList BY "Id"
|
||||
MERGE ".Pedidos" WITH fullList BY "Id"
|
||||
i = i + 1
|
||||
IF list?.length < limit THEN
|
||||
i = 0
|
||||
|
|
@ -201,7 +201,7 @@ DO WHILE syncPage > 0 AND syncPage <= pages
|
|||
syncCount = UBOUND(syncItems)
|
||||
|
||||
IF syncCount > 0 THEN
|
||||
MERGE "maria.CategoriaReceita" WITH syncItems BY "Id"
|
||||
MERGE ".CategoriaReceita" WITH syncItems BY "Id"
|
||||
totalCategoria = totalCategoria + syncCount
|
||||
syncPage = syncPage + 1
|
||||
|
||||
|
|
@ -236,7 +236,7 @@ DO WHILE syncPage > 0 AND syncPage <= pages
|
|||
syncCount = UBOUND(syncItems)
|
||||
|
||||
IF syncCount > 0 THEN
|
||||
MERGE "maria.FormaDePagamento" WITH syncItems BY "Id"
|
||||
MERGE ".FormaDePagamento" WITH syncItems BY "Id"
|
||||
totalForma = totalForma + syncCount
|
||||
syncPage = syncPage + 1
|
||||
|
||||
|
|
@ -275,7 +275,7 @@ DO WHILE i > 0 AND i < pages
|
|||
j = j + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Contatos" WITH items BY "Id"
|
||||
MERGE ".Contatos" WITH items BY "Id"
|
||||
i = i + 1
|
||||
IF list?.length < limit THEN
|
||||
i = 0
|
||||
|
|
@ -305,7 +305,7 @@ DO WHILE i > 0 AND i < pages
|
|||
j = j + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Vendedores" WITH items BY "Id"
|
||||
MERGE ".Vendedores" WITH items BY "Id"
|
||||
i = i + 1
|
||||
IF list?.length < limit THEN
|
||||
i = 0
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ SET SCHEDULE "0 30 23 * * *"
|
|||
|
||||
SEND EMAIL admin, "Inventory sync started..."
|
||||
|
||||
fullList = FIND "maria.Produtos"
|
||||
fullList = FIND ".Produtos"
|
||||
|
||||
chunkSize = 100
|
||||
startIndex = 0
|
||||
|
|
@ -30,11 +30,11 @@ DO WHILE startIndex < ubound(fullList)
|
|||
k = 0
|
||||
DO WHILE k < ubound(items)
|
||||
depositos = items[k].depositos
|
||||
pSku = FIND "maria.Produtos", "id=${items[k].produto.id}"
|
||||
pSku = FIND ".Produtos", "id=${items[k].produto.id}"
|
||||
|
||||
IF pSku THEN
|
||||
prdSku = pSku.sku
|
||||
DELETE "maria.Depositos", "Sku=" + prdSku
|
||||
DELETE ".Depositos", "Sku=" + prdSku
|
||||
|
||||
l = 0
|
||||
DO WHILE l < ubound(depositos)
|
||||
|
|
@ -42,7 +42,7 @@ DO WHILE startIndex < ubound(fullList)
|
|||
l = l + 1
|
||||
LOOP
|
||||
|
||||
SAVE "maria.Depositos", depositos
|
||||
SAVE ".Depositos", depositos
|
||||
depositos = null
|
||||
END IF
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ DESCRIPTION "Sync product suppliers from Bling ERP to local database"
|
|||
SEND EMAIL admin, "Suppliers sync started..."
|
||||
|
||||
FUNCTION SyncProdutoFornecedor(idProduto)
|
||||
DELETE "maria.ProdutoFornecedor", "Produto_id=" + idProduto
|
||||
DELETE ".ProdutoFornecedor", "Produto_id=" + idProduto
|
||||
|
||||
i1 = 1
|
||||
DO WHILE i1 > 0 AND i1 < pages
|
||||
|
|
@ -26,7 +26,7 @@ FUNCTION SyncProdutoFornecedor(idProduto)
|
|||
j1 = j1 + 1
|
||||
LOOP
|
||||
|
||||
SAVE "maria.ProdutoFornecedor", items1
|
||||
SAVE ".ProdutoFornecedor", items1
|
||||
items1 = null
|
||||
i1 = i1 + 1
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ FUNCTION SyncProdutoFornecedor(idProduto)
|
|||
LOOP
|
||||
END FUNCTION
|
||||
|
||||
fullList = FIND "maria.Produtos"
|
||||
fullList = FIND ".Produtos"
|
||||
|
||||
chunkSize = 100
|
||||
startIndex = 0
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
TABLE Contatos ON maria
|
||||
TABLE Contatos
|
||||
Id number key
|
||||
Nome string(150)
|
||||
Codigo string(50)
|
||||
|
|
@ -37,7 +37,7 @@ TABLE Contatos ON maria
|
|||
Pais_nome string(100)
|
||||
END TABLE
|
||||
|
||||
TABLE Pedidos ON maria
|
||||
TABLE Pedidos
|
||||
Id number key
|
||||
Numero integer
|
||||
NumeroLoja string(15)
|
||||
|
|
@ -59,7 +59,7 @@ TABLE Pedidos ON maria
|
|||
NotaFiscal_id number
|
||||
END TABLE
|
||||
|
||||
TABLE PedidosItem ON maria
|
||||
TABLE PedidosItem
|
||||
Id number key
|
||||
Numero integer
|
||||
Sku string(20)
|
||||
|
|
@ -75,14 +75,14 @@ TABLE PedidosItem ON maria
|
|||
Pedido_id number
|
||||
END TABLE
|
||||
|
||||
TABLE ProdutoImagem ON maria
|
||||
TABLE ProdutoImagem
|
||||
Id number key
|
||||
Ordinal number
|
||||
Sku string(20)
|
||||
Link string(250)
|
||||
END TABLE
|
||||
|
||||
TABLE Produtos ON maria
|
||||
TABLE Produtos
|
||||
Id number key
|
||||
Nome string(150)
|
||||
Sku string(20)
|
||||
|
|
@ -146,7 +146,7 @@ TABLE Produtos ON maria
|
|||
Estrutura_componentes_0_produto_Quantidade double
|
||||
END TABLE
|
||||
|
||||
TABLE Depositos ON maria
|
||||
TABLE Depositos
|
||||
Internal_Id number key
|
||||
Id number
|
||||
Sku string(20)
|
||||
|
|
@ -154,7 +154,7 @@ TABLE Depositos ON maria
|
|||
SaldoVirtual double
|
||||
END TABLE
|
||||
|
||||
TABLE Vendedores ON maria
|
||||
TABLE Vendedores
|
||||
Id number key
|
||||
DescontoLimite double
|
||||
Loja_Id number
|
||||
|
|
@ -163,7 +163,7 @@ TABLE Vendedores ON maria
|
|||
Contato_Situacao string(1)
|
||||
END TABLE
|
||||
|
||||
TABLE ProdutoFornecedor ON maria
|
||||
TABLE ProdutoFornecedor
|
||||
Id number key
|
||||
Descricao string(255)
|
||||
Codigo string(50)
|
||||
|
|
@ -175,7 +175,7 @@ TABLE ProdutoFornecedor ON maria
|
|||
Garantia integer
|
||||
END TABLE
|
||||
|
||||
TABLE ContasAPagar ON maria
|
||||
TABLE ContasAPagar
|
||||
Id number key
|
||||
Situacao integer
|
||||
Vencimento date
|
||||
|
|
@ -195,7 +195,7 @@ TABLE ContasAPagar ON maria
|
|||
Ocorrencia_tipo integer
|
||||
END TABLE
|
||||
|
||||
TABLE ContasAReceber ON maria
|
||||
TABLE ContasAReceber
|
||||
Id number key
|
||||
Situacao integer
|
||||
Vencimento date
|
||||
|
|
@ -232,7 +232,7 @@ TABLE ContasAReceber ON maria
|
|||
Ocorrencia_tipo integer
|
||||
END TABLE
|
||||
|
||||
TABLE CategoriaReceita ON maria
|
||||
TABLE CategoriaReceita
|
||||
Id number key
|
||||
IdCategoriaPai number
|
||||
Descricao string(255)
|
||||
|
|
@ -240,7 +240,7 @@ TABLE CategoriaReceita ON maria
|
|||
Situacao integer
|
||||
END TABLE
|
||||
|
||||
TABLE FormaDePagamento ON maria
|
||||
TABLE FormaDePagamento
|
||||
Id number key
|
||||
Descricao string(255)
|
||||
TipoPagamento integer
|
||||
|
|
@ -258,14 +258,14 @@ TABLE FormaDePagamento ON maria
|
|||
DadosCartao_cnpjCredenciadora string(16)
|
||||
END TABLE
|
||||
|
||||
TABLE NaturezaDeOperacao ON maria
|
||||
TABLE NaturezaDeOperacao
|
||||
Id number key
|
||||
Situacao integer
|
||||
Padrao integer
|
||||
Descricao string(255)
|
||||
END TABLE
|
||||
|
||||
TABLE Parcela ON maria
|
||||
TABLE Parcela
|
||||
Id number key
|
||||
Pedido_id number
|
||||
DataVencimento date
|
||||
|
|
@ -274,7 +274,7 @@ TABLE Parcela ON maria
|
|||
FormaPagamento_id number
|
||||
END TABLE
|
||||
|
||||
TABLE HistoricoPreco ON maria
|
||||
TABLE HistoricoPreco
|
||||
Id number key
|
||||
Sku string(50)
|
||||
PrecoAntigo double
|
||||
|
|
|
|||
1
bots/erp.gbai/erp.gbdialog/botserver.log
Normal file
1
bots/erp.gbai/erp.gbdialog/botserver.log
Normal file
|
|
@ -0,0 +1 @@
|
|||
/bin/bash: line 3: ./target/debug/botserver: No such file or directory
|
||||
|
|
@ -6,86 +6,86 @@
|
|||
|
||||
' Items/Products master table
|
||||
TABLE items
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
item_code VARCHAR(50) UNIQUE NOT NULL
|
||||
barcode VARCHAR(50) UNIQUE
|
||||
name VARCHAR(255) NOT NULL
|
||||
id UUID KEY
|
||||
item_code STRING(50)
|
||||
barcode STRING(50)
|
||||
name STRING(255)
|
||||
description TEXT
|
||||
category VARCHAR(100)
|
||||
subcategory VARCHAR(100)
|
||||
unit_of_measure VARCHAR(20) DEFAULT 'EACH'
|
||||
weight DECIMAL(10,3)
|
||||
dimensions_length DECIMAL(10,2)
|
||||
dimensions_width DECIMAL(10,2)
|
||||
dimensions_height DECIMAL(10,2)
|
||||
minimum_stock_level INTEGER DEFAULT 0
|
||||
category STRING(100)
|
||||
subcategory STRING(100)
|
||||
unit_of_measure STRING(20)
|
||||
weight NUMBER(10,3)
|
||||
dimensions_length NUMBER(10,2)
|
||||
dimensions_width NUMBER(10,2)
|
||||
dimensions_height NUMBER(10,2)
|
||||
minimum_stock_level INTEGER
|
||||
reorder_point INTEGER
|
||||
reorder_quantity INTEGER
|
||||
lead_time_days INTEGER DEFAULT 0
|
||||
is_active BOOLEAN DEFAULT TRUE
|
||||
is_purchasable BOOLEAN DEFAULT TRUE
|
||||
is_saleable BOOLEAN DEFAULT TRUE
|
||||
is_manufactured BOOLEAN DEFAULT FALSE
|
||||
standard_cost DECIMAL(15,4)
|
||||
last_cost DECIMAL(15,4)
|
||||
average_cost DECIMAL(15,4)
|
||||
selling_price DECIMAL(15,4)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
lead_time_days INTEGER
|
||||
is_active BOOLEAN
|
||||
is_purchasable BOOLEAN
|
||||
is_saleable BOOLEAN
|
||||
is_manufactured BOOLEAN
|
||||
standard_cost NUMBER(15,4)
|
||||
last_cost NUMBER(15,4)
|
||||
average_cost NUMBER(15,4)
|
||||
selling_price NUMBER(15,4)
|
||||
created_at TIMESTAMP
|
||||
updated_at TIMESTAMP
|
||||
END TABLE
|
||||
|
||||
' Warehouses table
|
||||
TABLE warehouses
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
code VARCHAR(20) UNIQUE NOT NULL
|
||||
name VARCHAR(100) NOT NULL
|
||||
type VARCHAR(50) DEFAULT 'standard'
|
||||
id UUID KEY
|
||||
code STRING(20)
|
||||
name STRING(100)
|
||||
type STRING(50)
|
||||
address TEXT
|
||||
city VARCHAR(100)
|
||||
state VARCHAR(50)
|
||||
country VARCHAR(50)
|
||||
postal_code VARCHAR(20)
|
||||
contact_person VARCHAR(100)
|
||||
contact_phone VARCHAR(50)
|
||||
contact_email VARCHAR(100)
|
||||
city STRING(100)
|
||||
state STRING(50)
|
||||
country STRING(50)
|
||||
postal_code STRING(20)
|
||||
contact_person STRING(100)
|
||||
contact_phone STRING(50)
|
||||
contact_email STRING(100)
|
||||
capacity_units INTEGER
|
||||
current_occupancy INTEGER DEFAULT 0
|
||||
current_occupancy INTEGER
|
||||
is_active BOOLEAN DEFAULT TRUE
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
||||
' Inventory stock levels
|
||||
TABLE inventory_stock
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
item_id UUID REFERENCES items(id)
|
||||
warehouse_id UUID REFERENCES warehouses(id)
|
||||
location_code VARCHAR(50)
|
||||
quantity_on_hand DECIMAL(15,3) DEFAULT 0
|
||||
quantity_reserved DECIMAL(15,3) DEFAULT 0
|
||||
quantity_available DECIMAL(15,3) GENERATED ALWAYS AS (quantity_on_hand - quantity_reserved) STORED
|
||||
quantity_on_order DECIMAL(15,3) DEFAULT 0
|
||||
id UUID KEY
|
||||
item_id UUID
|
||||
warehouse_id UUID
|
||||
location_code STRING(50)
|
||||
quantity_on_hand NUMBER(15,3)
|
||||
quantity_reserved NUMBER(15,3)
|
||||
quantity_available NUMBER(15,3)
|
||||
quantity_on_order NUMBER(15,3)
|
||||
last_counted_date DATE
|
||||
last_movement_date TIMESTAMP
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
UNIQUE(item_id, warehouse_id, location_code)
|
||||
(item_id, warehouse_id, location_code)
|
||||
END TABLE
|
||||
|
||||
' Inventory transactions
|
||||
TABLE inventory_transactions
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
transaction_type VARCHAR(50) NOT NULL
|
||||
transaction_number VARCHAR(50) UNIQUE
|
||||
item_id UUID REFERENCES items(id)
|
||||
warehouse_id UUID REFERENCES warehouses(id)
|
||||
location_code VARCHAR(50)
|
||||
quantity DECIMAL(15,3) NOT NULL
|
||||
unit_cost DECIMAL(15,4)
|
||||
total_cost DECIMAL(15,2)
|
||||
reference_type VARCHAR(50)
|
||||
id UUID KEY
|
||||
transaction_type STRING(50)
|
||||
transaction_number STRING(50)
|
||||
item_id UUID
|
||||
warehouse_id UUID
|
||||
location_code STRING(50)
|
||||
quantity NUMBER(15,3)
|
||||
unit_cost NUMBER(15,4)
|
||||
total_cost NUMBER(15,2)
|
||||
reference_type STRING(50)
|
||||
reference_id UUID
|
||||
notes TEXT
|
||||
created_by VARCHAR(100)
|
||||
created_by STRING(100)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
||||
|
|
@ -93,28 +93,28 @@ END TABLE
|
|||
|
||||
' Vendors/Suppliers table
|
||||
TABLE vendors
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
vendor_code VARCHAR(50) UNIQUE NOT NULL
|
||||
name VARCHAR(255) NOT NULL
|
||||
legal_name VARCHAR(255)
|
||||
tax_id VARCHAR(50)
|
||||
vendor_type VARCHAR(50)
|
||||
status VARCHAR(20) DEFAULT 'active'
|
||||
rating INTEGER CHECK (rating >= 1 AND rating <= 5)
|
||||
payment_terms VARCHAR(50)
|
||||
credit_limit DECIMAL(15,2)
|
||||
currency_code VARCHAR(3) DEFAULT 'USD'
|
||||
id UUID KEY
|
||||
vendor_code STRING(50)
|
||||
name STRING(255)
|
||||
legal_name STRING(255)
|
||||
tax_id STRING(50)
|
||||
vendor_type STRING(50)
|
||||
status STRING(20)
|
||||
rating INTEGER
|
||||
payment_terms STRING(50)
|
||||
credit_limit NUMBER(15,2)
|
||||
currency_code STRING(3)
|
||||
address TEXT
|
||||
city VARCHAR(100)
|
||||
state VARCHAR(50)
|
||||
country VARCHAR(50)
|
||||
postal_code VARCHAR(20)
|
||||
phone VARCHAR(50)
|
||||
email VARCHAR(100)
|
||||
website VARCHAR(255)
|
||||
contact_person VARCHAR(100)
|
||||
bank_account_number VARCHAR(50)
|
||||
bank_name VARCHAR(100)
|
||||
city STRING(100)
|
||||
state STRING(50)
|
||||
country STRING(50)
|
||||
postal_code STRING(20)
|
||||
phone STRING(50)
|
||||
email STRING(100)
|
||||
website STRING(255)
|
||||
contact_person STRING(100)
|
||||
bank_account_number STRING(50)
|
||||
bank_name STRING(100)
|
||||
notes TEXT
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
|
|
@ -122,75 +122,75 @@ END TABLE
|
|||
|
||||
' Purchase orders
|
||||
TABLE purchase_orders
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
po_number VARCHAR(50) UNIQUE NOT NULL
|
||||
vendor_id UUID REFERENCES vendors(id)
|
||||
order_date DATE NOT NULL
|
||||
id UUID KEY
|
||||
po_number STRING(50)
|
||||
vendor_id UUID
|
||||
order_date DATE
|
||||
expected_date DATE
|
||||
status VARCHAR(50) DEFAULT 'draft'
|
||||
buyer_id VARCHAR(100)
|
||||
ship_to_warehouse_id UUID REFERENCES warehouses(id)
|
||||
shipping_method VARCHAR(50)
|
||||
payment_terms VARCHAR(50)
|
||||
currency_code VARCHAR(3) DEFAULT 'USD'
|
||||
exchange_rate DECIMAL(10,6) DEFAULT 1.0
|
||||
subtotal DECIMAL(15,2)
|
||||
tax_amount DECIMAL(15,2)
|
||||
shipping_cost DECIMAL(15,2)
|
||||
total_amount DECIMAL(15,2)
|
||||
status STRING(50)
|
||||
buyer_id STRING(100)
|
||||
ship_to_warehouse_id UUID
|
||||
shipping_method STRING(50)
|
||||
payment_terms STRING(50)
|
||||
currency_code STRING(3)
|
||||
exchange_rate NUMBER(10,6)
|
||||
subtotal NUMBER(15,2)
|
||||
tax_amount NUMBER(15,2)
|
||||
shipping_cost NUMBER(15,2)
|
||||
total_amount NUMBER(15,2)
|
||||
notes TEXT
|
||||
approved_by VARCHAR(100)
|
||||
approved_by STRING(100)
|
||||
approved_date TIMESTAMP
|
||||
created_by VARCHAR(100)
|
||||
created_by STRING(100)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
||||
' Purchase order lines
|
||||
TABLE purchase_order_lines
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
po_id UUID REFERENCES purchase_orders(id) ON DELETE CASCADE
|
||||
line_number INTEGER NOT NULL
|
||||
item_id UUID REFERENCES items(id)
|
||||
id UUID KEY
|
||||
po_id UUID
|
||||
line_number INTEGER
|
||||
item_id UUID
|
||||
description TEXT
|
||||
quantity_ordered DECIMAL(15,3) NOT NULL
|
||||
quantity_received DECIMAL(15,3) DEFAULT 0
|
||||
quantity_remaining DECIMAL(15,3) GENERATED ALWAYS AS (quantity_ordered - quantity_received) STORED
|
||||
unit_price DECIMAL(15,4) NOT NULL
|
||||
discount_percent DECIMAL(5,2) DEFAULT 0
|
||||
tax_rate DECIMAL(5,2) DEFAULT 0
|
||||
line_total DECIMAL(15,2) GENERATED ALWAYS AS (quantity_ordered * unit_price * (1 - discount_percent/100)) STORED
|
||||
quantity_ordered NUMBER(15,3)
|
||||
quantity_received NUMBER(15,3)
|
||||
quantity_remaining NUMBER(15,3)
|
||||
unit_price NUMBER(15,4)
|
||||
discount_percent NUMBER(5,2)
|
||||
tax_rate NUMBER(5,2)
|
||||
line_total NUMBER(15,2)
|
||||
expected_date DATE
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
UNIQUE(po_id, line_number)
|
||||
(po_id, line_number)
|
||||
END TABLE
|
||||
|
||||
' === SALES MODULE ===
|
||||
|
||||
' Customers table
|
||||
TABLE customers
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
customer_code VARCHAR(50) UNIQUE NOT NULL
|
||||
name VARCHAR(255) NOT NULL
|
||||
legal_name VARCHAR(255)
|
||||
tax_id VARCHAR(50)
|
||||
customer_type VARCHAR(50)
|
||||
status VARCHAR(20) DEFAULT 'active'
|
||||
credit_rating VARCHAR(10)
|
||||
credit_limit DECIMAL(15,2)
|
||||
payment_terms VARCHAR(50)
|
||||
discount_percent DECIMAL(5,2) DEFAULT 0
|
||||
currency_code VARCHAR(3) DEFAULT 'USD'
|
||||
id UUID KEY
|
||||
customer_code STRING(50)
|
||||
name STRING(255)
|
||||
legal_name STRING(255)
|
||||
tax_id STRING(50)
|
||||
customer_type STRING(50)
|
||||
status STRING(20)
|
||||
credit_rating STRING(10)
|
||||
credit_limit NUMBER(15,2)
|
||||
payment_terms STRING(50)
|
||||
discount_percent NUMBER(5,2)
|
||||
currency_code STRING(3)
|
||||
billing_address TEXT
|
||||
shipping_address TEXT
|
||||
city VARCHAR(100)
|
||||
state VARCHAR(50)
|
||||
country VARCHAR(50)
|
||||
postal_code VARCHAR(20)
|
||||
phone VARCHAR(50)
|
||||
email VARCHAR(100)
|
||||
website VARCHAR(255)
|
||||
sales_person_id VARCHAR(100)
|
||||
city STRING(100)
|
||||
state STRING(50)
|
||||
country STRING(50)
|
||||
postal_code STRING(20)
|
||||
phone STRING(50)
|
||||
email STRING(100)
|
||||
website STRING(255)
|
||||
sales_person_id STRING(100)
|
||||
notes TEXT
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
|
|
@ -198,74 +198,74 @@ END TABLE
|
|||
|
||||
' Sales orders
|
||||
TABLE sales_orders
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
order_number VARCHAR(50) UNIQUE NOT NULL
|
||||
customer_id UUID REFERENCES customers(id)
|
||||
order_date DATE NOT NULL
|
||||
id UUID KEY
|
||||
order_number STRING(50)
|
||||
customer_id UUID
|
||||
order_date DATE
|
||||
required_date DATE
|
||||
promised_date DATE
|
||||
status VARCHAR(50) DEFAULT 'draft'
|
||||
sales_person_id VARCHAR(100)
|
||||
ship_from_warehouse_id UUID REFERENCES warehouses(id)
|
||||
shipping_method VARCHAR(50)
|
||||
payment_terms VARCHAR(50)
|
||||
payment_method VARCHAR(50)
|
||||
currency_code VARCHAR(3) DEFAULT 'USD'
|
||||
exchange_rate DECIMAL(10,6) DEFAULT 1.0
|
||||
subtotal DECIMAL(15,2)
|
||||
discount_amount DECIMAL(15,2) DEFAULT 0
|
||||
tax_amount DECIMAL(15,2)
|
||||
shipping_cost DECIMAL(15,2)
|
||||
total_amount DECIMAL(15,2)
|
||||
status STRING(50)
|
||||
sales_person_id STRING(100)
|
||||
ship_from_warehouse_id UUID
|
||||
shipping_method STRING(50)
|
||||
payment_terms STRING(50)
|
||||
payment_method STRING(50)
|
||||
currency_code STRING(3)
|
||||
exchange_rate NUMBER(10,6)
|
||||
subtotal NUMBER(15,2)
|
||||
discount_amount NUMBER(15,2)
|
||||
tax_amount NUMBER(15,2)
|
||||
shipping_cost NUMBER(15,2)
|
||||
total_amount NUMBER(15,2)
|
||||
notes TEXT
|
||||
approved_by VARCHAR(100)
|
||||
approved_by STRING(100)
|
||||
approved_date TIMESTAMP
|
||||
created_by VARCHAR(100)
|
||||
created_by STRING(100)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
||||
' Sales order lines
|
||||
TABLE sales_order_lines
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
order_id UUID REFERENCES sales_orders(id) ON DELETE CASCADE
|
||||
line_number INTEGER NOT NULL
|
||||
item_id UUID REFERENCES items(id)
|
||||
id UUID KEY
|
||||
order_id UUID
|
||||
line_number INTEGER
|
||||
item_id UUID
|
||||
description TEXT
|
||||
quantity_ordered DECIMAL(15,3) NOT NULL
|
||||
quantity_shipped DECIMAL(15,3) DEFAULT 0
|
||||
quantity_invoiced DECIMAL(15,3) DEFAULT 0
|
||||
unit_price DECIMAL(15,4) NOT NULL
|
||||
discount_percent DECIMAL(5,2) DEFAULT 0
|
||||
tax_rate DECIMAL(5,2) DEFAULT 0
|
||||
line_total DECIMAL(15,2) GENERATED ALWAYS AS (quantity_ordered * unit_price * (1 - discount_percent/100)) STORED
|
||||
cost_of_goods_sold DECIMAL(15,2)
|
||||
margin DECIMAL(15,2) GENERATED ALWAYS AS (line_total - cost_of_goods_sold) STORED
|
||||
warehouse_id UUID REFERENCES warehouses(id)
|
||||
quantity_ordered NUMBER(15,3)
|
||||
quantity_shipped NUMBER(15,3)
|
||||
quantity_invoiced NUMBER(15,3)
|
||||
unit_price NUMBER(15,4)
|
||||
discount_percent NUMBER(5,2)
|
||||
tax_rate NUMBER(5,2)
|
||||
line_total NUMBER(15,2)
|
||||
cost_of_goods_sold NUMBER(15,2)
|
||||
margin NUMBER(15,2)
|
||||
warehouse_id UUID
|
||||
promised_date DATE
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
UNIQUE(order_id, line_number)
|
||||
(order_id, line_number)
|
||||
END TABLE
|
||||
|
||||
' === MANUFACTURING MODULE ===
|
||||
|
||||
' Bill of Materials (BOM) header
|
||||
TABLE bill_of_materials
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
bom_number VARCHAR(50) UNIQUE NOT NULL
|
||||
item_id UUID REFERENCES items(id)
|
||||
revision VARCHAR(20) DEFAULT 'A'
|
||||
id UUID KEY
|
||||
bom_number STRING(50)
|
||||
item_id UUID
|
||||
revision STRING(20)
|
||||
description TEXT
|
||||
quantity_per_assembly DECIMAL(15,3) DEFAULT 1
|
||||
unit_of_measure VARCHAR(20)
|
||||
status VARCHAR(20) DEFAULT 'active'
|
||||
quantity_per_assembly NUMBER(15,3)
|
||||
unit_of_measure STRING(20)
|
||||
status STRING(20)
|
||||
effective_date DATE
|
||||
expiration_date DATE
|
||||
total_cost DECIMAL(15,4)
|
||||
labor_cost DECIMAL(15,4)
|
||||
overhead_cost DECIMAL(15,4)
|
||||
created_by VARCHAR(100)
|
||||
approved_by VARCHAR(100)
|
||||
total_cost NUMBER(15,4)
|
||||
labor_cost NUMBER(15,4)
|
||||
overhead_cost NUMBER(15,4)
|
||||
created_by STRING(100)
|
||||
approved_by STRING(100)
|
||||
approved_date DATE
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
|
|
@ -273,42 +273,42 @@ END TABLE
|
|||
|
||||
' BOM components
|
||||
TABLE bom_components
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
bom_id UUID REFERENCES bill_of_materials(id) ON DELETE CASCADE
|
||||
component_item_id UUID REFERENCES items(id)
|
||||
line_number INTEGER NOT NULL
|
||||
quantity_required DECIMAL(15,6) NOT NULL
|
||||
unit_of_measure VARCHAR(20)
|
||||
scrap_percent DECIMAL(5,2) DEFAULT 0
|
||||
total_quantity DECIMAL(15,6) GENERATED ALWAYS AS (quantity_required * (1 + scrap_percent/100)) STORED
|
||||
cost_per_unit DECIMAL(15,4)
|
||||
total_cost DECIMAL(15,4) GENERATED ALWAYS AS (total_quantity * cost_per_unit) STORED
|
||||
id UUID KEY
|
||||
bom_id UUID
|
||||
component_item_id UUID
|
||||
line_number INTEGER
|
||||
quantity_required NUMBER(15,6)
|
||||
unit_of_measure STRING(20)
|
||||
scrap_percent NUMBER(5,2)
|
||||
total_quantity NUMBER(15,6)
|
||||
cost_per_unit NUMBER(15,4)
|
||||
total_cost NUMBER(15,4)
|
||||
notes TEXT
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
UNIQUE(bom_id, line_number)
|
||||
(bom_id, line_number)
|
||||
END TABLE
|
||||
|
||||
' Work orders
|
||||
TABLE work_orders
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
wo_number VARCHAR(50) UNIQUE NOT NULL
|
||||
item_id UUID REFERENCES items(id)
|
||||
bom_id UUID REFERENCES bill_of_materials(id)
|
||||
quantity_to_produce DECIMAL(15,3) NOT NULL
|
||||
quantity_completed DECIMAL(15,3) DEFAULT 0
|
||||
quantity_scrapped DECIMAL(15,3) DEFAULT 0
|
||||
status VARCHAR(50) DEFAULT 'planned'
|
||||
priority VARCHAR(20) DEFAULT 'normal'
|
||||
id UUID KEY
|
||||
wo_number STRING(50)
|
||||
item_id UUID
|
||||
bom_id UUID
|
||||
quantity_to_produce NUMBER(15,3)
|
||||
quantity_completed NUMBER(15,3)
|
||||
quantity_scrapped NUMBER(15,3)
|
||||
status STRING(50)
|
||||
priority STRING(20)
|
||||
planned_start_date TIMESTAMP
|
||||
planned_end_date TIMESTAMP
|
||||
actual_start_date TIMESTAMP
|
||||
actual_end_date TIMESTAMP
|
||||
warehouse_id UUID REFERENCES warehouses(id)
|
||||
work_center VARCHAR(50)
|
||||
labor_hours_estimated DECIMAL(10,2)
|
||||
labor_hours_actual DECIMAL(10,2)
|
||||
warehouse_id UUID
|
||||
work_center STRING(50)
|
||||
labor_hours_estimated NUMBER(10,2)
|
||||
labor_hours_actual NUMBER(10,2)
|
||||
notes TEXT
|
||||
created_by VARCHAR(100)
|
||||
created_by STRING(100)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
|
@ -317,13 +317,13 @@ END TABLE
|
|||
|
||||
' General ledger accounts
|
||||
TABLE gl_accounts
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
account_number VARCHAR(20) UNIQUE NOT NULL
|
||||
account_name VARCHAR(100) NOT NULL
|
||||
account_type VARCHAR(50) NOT NULL
|
||||
parent_account_id UUID REFERENCES gl_accounts(id)
|
||||
currency_code VARCHAR(3) DEFAULT 'USD'
|
||||
normal_balance VARCHAR(10) CHECK (normal_balance IN ('debit', 'credit'))
|
||||
id UUID KEY
|
||||
account_number STRING(20)
|
||||
account_name STRING(100)
|
||||
account_type STRING(50)
|
||||
parent_account_id UUID
|
||||
currency_code STRING(3)
|
||||
normal_balance STRING(10)
|
||||
is_active BOOLEAN DEFAULT TRUE
|
||||
is_control_account BOOLEAN DEFAULT FALSE
|
||||
allow_manual_entry BOOLEAN DEFAULT TRUE
|
||||
|
|
@ -334,65 +334,65 @@ END TABLE
|
|||
|
||||
' Journal entries header
|
||||
TABLE journal_entries
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
journal_number VARCHAR(50) UNIQUE NOT NULL
|
||||
journal_date DATE NOT NULL
|
||||
posting_date DATE NOT NULL
|
||||
period VARCHAR(20)
|
||||
journal_type VARCHAR(50)
|
||||
id UUID KEY
|
||||
journal_number STRING(50)
|
||||
journal_date DATE
|
||||
posting_date DATE
|
||||
period STRING(20)
|
||||
journal_type STRING(50)
|
||||
description TEXT
|
||||
reference_type VARCHAR(50)
|
||||
reference_number VARCHAR(50)
|
||||
status VARCHAR(20) DEFAULT 'draft'
|
||||
total_debit DECIMAL(15,2)
|
||||
total_credit DECIMAL(15,2)
|
||||
is_balanced BOOLEAN GENERATED ALWAYS AS (total_debit = total_credit) STORED
|
||||
posted_by VARCHAR(100)
|
||||
reference_type STRING(50)
|
||||
reference_number STRING(50)
|
||||
status STRING(20)
|
||||
total_debit NUMBER(15,2)
|
||||
total_credit NUMBER(15,2)
|
||||
is_balanced BOOLEAN
|
||||
posted_by STRING(100)
|
||||
posted_at TIMESTAMP
|
||||
reversed_by_id UUID REFERENCES journal_entries(id)
|
||||
created_by VARCHAR(100)
|
||||
reversed_by_id UUID
|
||||
created_by STRING(100)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
||||
' Journal entry lines
|
||||
TABLE journal_entry_lines
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
journal_entry_id UUID REFERENCES journal_entries(id) ON DELETE CASCADE
|
||||
line_number INTEGER NOT NULL
|
||||
account_id UUID REFERENCES gl_accounts(id)
|
||||
debit_amount DECIMAL(15,2) DEFAULT 0
|
||||
credit_amount DECIMAL(15,2) DEFAULT 0
|
||||
id UUID KEY
|
||||
journal_entry_id UUID
|
||||
line_number INTEGER
|
||||
account_id UUID
|
||||
debit_amount NUMBER(15,2)
|
||||
credit_amount NUMBER(15,2)
|
||||
description TEXT
|
||||
dimension1 VARCHAR(50)
|
||||
dimension2 VARCHAR(50)
|
||||
dimension3 VARCHAR(50)
|
||||
dimension1 STRING(50)
|
||||
dimension2 STRING(50)
|
||||
dimension3 STRING(50)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
UNIQUE(journal_entry_id, line_number)
|
||||
CHECK (debit_amount = 0 OR credit_amount = 0)
|
||||
(journal_entry_id, line_number)
|
||||
|
||||
END TABLE
|
||||
|
||||
' Invoices
|
||||
TABLE invoices
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
invoice_number VARCHAR(50) UNIQUE NOT NULL
|
||||
invoice_type VARCHAR(20) DEFAULT 'standard'
|
||||
customer_id UUID REFERENCES customers(id)
|
||||
vendor_id UUID REFERENCES vendors(id)
|
||||
id UUID KEY
|
||||
invoice_number STRING(50)
|
||||
invoice_type STRING(20)
|
||||
customer_id UUID
|
||||
vendor_id UUID
|
||||
order_id UUID
|
||||
invoice_date DATE NOT NULL
|
||||
due_date DATE NOT NULL
|
||||
status VARCHAR(20) DEFAULT 'draft'
|
||||
currency_code VARCHAR(3) DEFAULT 'USD'
|
||||
exchange_rate DECIMAL(10,6) DEFAULT 1.0
|
||||
subtotal DECIMAL(15,2)
|
||||
discount_amount DECIMAL(15,2) DEFAULT 0
|
||||
tax_amount DECIMAL(15,2)
|
||||
total_amount DECIMAL(15,2)
|
||||
amount_paid DECIMAL(15,2) DEFAULT 0
|
||||
balance_due DECIMAL(15,2) GENERATED ALWAYS AS (total_amount - amount_paid) STORED
|
||||
payment_terms VARCHAR(50)
|
||||
invoice_date DATE
|
||||
due_date DATE
|
||||
status STRING(20)
|
||||
currency_code STRING(3)
|
||||
exchange_rate NUMBER(10,6)
|
||||
subtotal NUMBER(15,2)
|
||||
discount_amount NUMBER(15,2)
|
||||
tax_amount NUMBER(15,2)
|
||||
total_amount NUMBER(15,2)
|
||||
amount_paid NUMBER(15,2)
|
||||
balance_due NUMBER(15,2)
|
||||
payment_terms STRING(50)
|
||||
notes TEXT
|
||||
created_by VARCHAR(100)
|
||||
created_by STRING(100)
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
|
@ -401,38 +401,38 @@ END TABLE
|
|||
|
||||
' Employees table
|
||||
TABLE employees
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
employee_number VARCHAR(50) UNIQUE NOT NULL
|
||||
first_name VARCHAR(100) NOT NULL
|
||||
last_name VARCHAR(100) NOT NULL
|
||||
middle_name VARCHAR(100)
|
||||
full_name VARCHAR(255) GENERATED ALWAYS AS (first_name || ' ' || COALESCE(middle_name || ' ', '') || last_name) STORED
|
||||
email VARCHAR(100) UNIQUE
|
||||
phone VARCHAR(50)
|
||||
mobile VARCHAR(50)
|
||||
id UUID KEY
|
||||
employee_number STRING(50)
|
||||
first_name STRING(100)
|
||||
last_name STRING(100)
|
||||
middle_name STRING(100)
|
||||
full_name STRING(255)
|
||||
email STRING(100)
|
||||
phone STRING(50)
|
||||
mobile STRING(50)
|
||||
address TEXT
|
||||
city VARCHAR(100)
|
||||
state VARCHAR(50)
|
||||
country VARCHAR(50)
|
||||
postal_code VARCHAR(20)
|
||||
city STRING(100)
|
||||
state STRING(50)
|
||||
country STRING(50)
|
||||
postal_code STRING(20)
|
||||
date_of_birth DATE
|
||||
gender VARCHAR(20)
|
||||
marital_status VARCHAR(20)
|
||||
national_id VARCHAR(50)
|
||||
passport_number VARCHAR(50)
|
||||
gender STRING(20)
|
||||
marital_status STRING(20)
|
||||
national_id STRING(50)
|
||||
passport_number STRING(50)
|
||||
department_id UUID
|
||||
position_title VARCHAR(100)
|
||||
manager_id UUID REFERENCES employees(id)
|
||||
hire_date DATE NOT NULL
|
||||
employment_status VARCHAR(50) DEFAULT 'active'
|
||||
employment_type VARCHAR(50) DEFAULT 'full-time'
|
||||
salary DECIMAL(15,2)
|
||||
hourly_rate DECIMAL(10,2)
|
||||
commission_percent DECIMAL(5,2)
|
||||
bank_account_number VARCHAR(50)
|
||||
bank_name VARCHAR(100)
|
||||
emergency_contact_name VARCHAR(100)
|
||||
emergency_contact_phone VARCHAR(50)
|
||||
position_title STRING(100)
|
||||
manager_id UUID
|
||||
hire_date DATE
|
||||
employment_status STRING(50)
|
||||
employment_type STRING(50)'full-time'
|
||||
salary NUMBER(15,2)
|
||||
hourly_rate NUMBER(10,2)
|
||||
commission_percent NUMBER(5,2)
|
||||
bank_account_number STRING(50)
|
||||
bank_name STRING(100)
|
||||
emergency_contact_name STRING(100)
|
||||
emergency_contact_phone STRING(50)
|
||||
notes TEXT
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
|
|
@ -440,26 +440,26 @@ END TABLE
|
|||
|
||||
' Payroll records
|
||||
TABLE payroll
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
payroll_number VARCHAR(50) UNIQUE NOT NULL
|
||||
employee_id UUID REFERENCES employees(id)
|
||||
pay_period_start DATE NOT NULL
|
||||
pay_period_end DATE NOT NULL
|
||||
payment_date DATE NOT NULL
|
||||
hours_worked DECIMAL(10,2)
|
||||
overtime_hours DECIMAL(10,2)
|
||||
regular_pay DECIMAL(15,2)
|
||||
overtime_pay DECIMAL(15,2)
|
||||
commission DECIMAL(15,2)
|
||||
bonus DECIMAL(15,2)
|
||||
gross_pay DECIMAL(15,2)
|
||||
tax_deductions DECIMAL(15,2)
|
||||
other_deductions DECIMAL(15,2)
|
||||
net_pay DECIMAL(15,2)
|
||||
payment_method VARCHAR(50)
|
||||
payment_reference VARCHAR(100)
|
||||
status VARCHAR(20) DEFAULT 'pending'
|
||||
approved_by VARCHAR(100)
|
||||
id UUID KEY
|
||||
payroll_number STRING(50)
|
||||
employee_id UUID
|
||||
pay_period_start DATE
|
||||
pay_period_end DATE
|
||||
payment_date DATE
|
||||
hours_worked NUMBER(10,2)
|
||||
overtime_hours NUMBER(10,2)
|
||||
regular_pay NUMBER(15,2)
|
||||
overtime_pay NUMBER(15,2)
|
||||
commission NUMBER(15,2)
|
||||
bonus NUMBER(15,2)
|
||||
gross_pay NUMBER(15,2)
|
||||
tax_deductions NUMBER(15,2)
|
||||
other_deductions NUMBER(15,2)
|
||||
net_pay NUMBER(15,2)
|
||||
payment_method STRING(50)
|
||||
payment_reference STRING(100)
|
||||
status STRING(20)
|
||||
approved_by STRING(100)
|
||||
approved_date TIMESTAMP
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
|
@ -468,42 +468,42 @@ END TABLE
|
|||
|
||||
' Audit trail
|
||||
TABLE erp_audit_log
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
table_name VARCHAR(50) NOT NULL
|
||||
record_id UUID NOT NULL
|
||||
action VARCHAR(20) NOT NULL
|
||||
changed_fields JSONB
|
||||
old_values JSONB
|
||||
new_values JSONB
|
||||
user_id VARCHAR(100)
|
||||
user_ip VARCHAR(45)
|
||||
id UUID KEY
|
||||
table_name STRING(50)
|
||||
record_id UUID
|
||||
action STRING(20)
|
||||
changed_fieldsTEXT
|
||||
old_valuesTEXT
|
||||
new_valuesTEXT
|
||||
user_id STRING(100)
|
||||
user_ip STRING(45)
|
||||
user_agent TEXT
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
END TABLE
|
||||
|
||||
' System settings
|
||||
TABLE erp_settings
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4()
|
||||
module VARCHAR(50) NOT NULL
|
||||
setting_key VARCHAR(100) NOT NULL
|
||||
id UUID KEY
|
||||
module STRING(50)
|
||||
setting_key STRING(100)
|
||||
setting_value TEXT
|
||||
data_type VARCHAR(20)
|
||||
data_type STRING(20)
|
||||
description TEXT
|
||||
is_encrypted BOOLEAN DEFAULT FALSE
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
UNIQUE(module, setting_key)
|
||||
(module, setting_key)
|
||||
END TABLE
|
||||
|
||||
' Create indexes for performance
|
||||
CREATE INDEX idx_inventory_item_warehouse ON inventory_stock(item_id, warehouse_id)
|
||||
CREATE INDEX idx_po_vendor ON purchase_orders(vendor_id)
|
||||
CREATE INDEX idx_po_status ON purchase_orders(status)
|
||||
CREATE INDEX idx_so_customer ON sales_orders(customer_id)
|
||||
CREATE INDEX idx_so_status ON sales_orders(status)
|
||||
CREATE INDEX idx_wo_status ON work_orders(status)
|
||||
CREATE INDEX idx_invoice_customer ON invoices(customer_id)
|
||||
CREATE INDEX idx_invoice_status ON invoices(status)
|
||||
CREATE INDEX idx_employee_manager ON employees(manager_id)
|
||||
CREATE INDEX idx_journal_date ON journal_entries(journal_date)
|
||||
CREATE INDEX idx_audit_table_record ON erp_audit_log(table_name, record_id)
|
||||
'CREATE INDEX idx_inventory_item_warehouse ON inventory_stock(item_id, warehouse_id)
|
||||
'CREATE INDEX idx_po_vendor ON purchase_orders(vendor_id)
|
||||
'CREATE INDEX idx_po_status ON purchase_orders(status)
|
||||
'CREATE INDEX idx_so_customer ON sales_orders(customer_id)
|
||||
'CREATE INDEX idx_so_status ON sales_orders(status)
|
||||
'CREATE INDEX idx_wo_status ON work_orders(status)
|
||||
'CREATE INDEX idx_invoice_customer ON invoices(customer_id)
|
||||
'CREATE INDEX idx_invoice_status ON invoices(status)
|
||||
'CREATE INDEX idx_employee_manager ON employees(manager_id)
|
||||
'CREATE INDEX idx_journal_date ON journal_entries(journal_date)
|
||||
'CREATE INDEX idx_audit_table_record ON erp_audit_log(table_name, record_id)
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ PARAM qtd AS INTEGER LIKE 10 DESCRIPTION "Quantity to add to stock"
|
|||
DESCRIPTION "Add stock quantity for a product by SKU"
|
||||
|
||||
person = FIND "People.xlsx", "id=" + mobile
|
||||
vendor = FIND "maria.Vendedores", "id=" + person.erpId
|
||||
vendor = FIND ".Vendedores", "id=" + person.erpId
|
||||
|
||||
TALK "Olá " + vendor.Contato_Nome + "!"
|
||||
|
||||
produto = FIND "maria.Produtos", "sku=" + sku
|
||||
produto = FIND ".Produtos", "sku=" + sku
|
||||
|
||||
IF NOT produto THEN
|
||||
TALK "Produto não encontrado."
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ DO WHILE page > 0 AND page <= pages
|
|||
itemCount = UBOUND(items)
|
||||
|
||||
IF itemCount > 0 THEN
|
||||
MERGE "maria.ContasAReceber" WITH items BY "Id"
|
||||
MERGE ".ContasAReceber" WITH items BY "Id"
|
||||
totalReceber = totalReceber + itemCount
|
||||
page = page + 1
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ DO WHILE page > 0 AND page <= pages
|
|||
itemCount = UBOUND(items)
|
||||
|
||||
IF itemCount > 0 THEN
|
||||
MERGE "maria.ContasAPagar" WITH items BY "Id"
|
||||
MERGE ".ContasAPagar" WITH items BY "Id"
|
||||
totalPagar = totalPagar + itemCount
|
||||
page = page + 1
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ DO WHILE i > 0 AND i < pages
|
|||
produto.hierarquia = "s"
|
||||
END IF
|
||||
|
||||
produtoDB = FIND "maria.Produtos", "sku=" + produto.codigo
|
||||
produtoDB = FIND ".Produtos", "sku=" + produto.codigo
|
||||
IF produtoDB THEN
|
||||
IF produtoDB.preco <> produto.preco THEN
|
||||
hist = NEW OBJECT
|
||||
|
|
@ -51,7 +51,7 @@ DO WHILE i > 0 AND i < pages
|
|||
hist.precoAtual = produto.preco
|
||||
hist.produto_id = produto.id
|
||||
hist.dataModificado = FORMAT today, "yyyy-MM-dd"
|
||||
SAVE "maria.HistoricoPreco", hist
|
||||
SAVE ".HistoricoPreco", hist
|
||||
hist = null
|
||||
END IF
|
||||
END IF
|
||||
|
|
@ -63,7 +63,7 @@ DO WHILE i > 0 AND i < pages
|
|||
list = null
|
||||
list = items
|
||||
|
||||
MERGE "maria.Produtos" WITH list BY "Id"
|
||||
MERGE ".Produtos" WITH list BY "Id"
|
||||
list = items
|
||||
|
||||
j = 0
|
||||
|
|
@ -86,7 +86,7 @@ DO WHILE i > 0 AND i < pages
|
|||
k = 0
|
||||
DO WHILE k < ubound(listV)
|
||||
listV[k].hierarquia = 'f'
|
||||
DELETE "maria.ProdutoImagem", "sku=" + listV[k].sku
|
||||
DELETE ".ProdutoImagem", "sku=" + listV[k].sku
|
||||
|
||||
images = listV[k]?.midia?.imagens?.externas
|
||||
l = 0
|
||||
|
|
@ -96,16 +96,16 @@ DO WHILE i > 0 AND i < pages
|
|||
images[l].id = random()
|
||||
l = l + 1
|
||||
LOOP
|
||||
SAVE "maria.ProdutoImagem", images
|
||||
SAVE ".ProdutoImagem", images
|
||||
images = null
|
||||
k = k + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Produtos" WITH listV BY "Id"
|
||||
MERGE ".Produtos" WITH listV BY "Id"
|
||||
END IF
|
||||
listV = null
|
||||
|
||||
DELETE "maria.ProdutoImagem", "sku=" + list[j].sku
|
||||
DELETE ".ProdutoImagem", "sku=" + list[j].sku
|
||||
k = 0
|
||||
images = list[j].midia?.imagens?.externas
|
||||
DO WHILE k < ubound(images)
|
||||
|
|
@ -114,7 +114,7 @@ DO WHILE i > 0 AND i < pages
|
|||
images[k].id = random()
|
||||
k = k + 1
|
||||
LOOP
|
||||
SAVE "maria.ProdutoImagem", images
|
||||
SAVE ".ProdutoImagem", images
|
||||
j = j + 1
|
||||
LOOP
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ DO WHILE i > 0 AND i < pages
|
|||
items[k].custo = items[k].valor / 2
|
||||
k = k + 1
|
||||
LOOP
|
||||
MERGE "maria.PedidosItem" WITH items BY "Id"
|
||||
MERGE ".PedidosItem" WITH items BY "Id"
|
||||
|
||||
items = res.data.parcelas
|
||||
k = 0
|
||||
|
|
@ -163,14 +163,14 @@ DO WHILE i > 0 AND i < pages
|
|||
items[k].pedido_id = pedido_id
|
||||
k = k + 1
|
||||
LOOP
|
||||
MERGE "maria.Parcela" WITH items BY "Id"
|
||||
MERGE ".Parcela" WITH items BY "Id"
|
||||
|
||||
fullList[j] = res.data
|
||||
res = null
|
||||
j = j + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Pedidos" WITH fullList BY "Id"
|
||||
MERGE ".Pedidos" WITH fullList BY "Id"
|
||||
i = i + 1
|
||||
IF list?.length < limit THEN
|
||||
i = 0
|
||||
|
|
@ -201,7 +201,7 @@ DO WHILE syncPage > 0 AND syncPage <= pages
|
|||
syncCount = UBOUND(syncItems)
|
||||
|
||||
IF syncCount > 0 THEN
|
||||
MERGE "maria.CategoriaReceita" WITH syncItems BY "Id"
|
||||
MERGE ".CategoriaReceita" WITH syncItems BY "Id"
|
||||
totalCategoria = totalCategoria + syncCount
|
||||
syncPage = syncPage + 1
|
||||
|
||||
|
|
@ -236,7 +236,7 @@ DO WHILE syncPage > 0 AND syncPage <= pages
|
|||
syncCount = UBOUND(syncItems)
|
||||
|
||||
IF syncCount > 0 THEN
|
||||
MERGE "maria.FormaDePagamento" WITH syncItems BY "Id"
|
||||
MERGE ".FormaDePagamento" WITH syncItems BY "Id"
|
||||
totalForma = totalForma + syncCount
|
||||
syncPage = syncPage + 1
|
||||
|
||||
|
|
@ -275,7 +275,7 @@ DO WHILE i > 0 AND i < pages
|
|||
j = j + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Contatos" WITH items BY "Id"
|
||||
MERGE ".Contatos" WITH items BY "Id"
|
||||
i = i + 1
|
||||
IF list?.length < limit THEN
|
||||
i = 0
|
||||
|
|
@ -305,7 +305,7 @@ DO WHILE i > 0 AND i < pages
|
|||
j = j + 1
|
||||
LOOP
|
||||
|
||||
MERGE "maria.Vendedores" WITH items BY "Id"
|
||||
MERGE ".Vendedores" WITH items BY "Id"
|
||||
i = i + 1
|
||||
IF list?.length < limit THEN
|
||||
i = 0
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ SET SCHEDULE "0 30 23 * * *"
|
|||
|
||||
SEND EMAIL admin, "Inventory sync started..."
|
||||
|
||||
fullList = FIND "maria.Produtos"
|
||||
fullList = FIND ".Produtos"
|
||||
|
||||
chunkSize = 100
|
||||
startIndex = 0
|
||||
|
|
@ -30,11 +30,11 @@ DO WHILE startIndex < ubound(fullList)
|
|||
k = 0
|
||||
DO WHILE k < ubound(items)
|
||||
depositos = items[k].depositos
|
||||
pSku = FIND "maria.Produtos", "id=${items[k].produto.id}"
|
||||
pSku = FIND ".Produtos", "id=${items[k].produto.id}"
|
||||
|
||||
IF pSku THEN
|
||||
prdSku = pSku.sku
|
||||
DELETE "maria.Depositos", "Sku=" + prdSku
|
||||
DELETE ".Depositos", "Sku=" + prdSku
|
||||
|
||||
l = 0
|
||||
DO WHILE l < ubound(depositos)
|
||||
|
|
@ -42,7 +42,7 @@ DO WHILE startIndex < ubound(fullList)
|
|||
l = l + 1
|
||||
LOOP
|
||||
|
||||
SAVE "maria.Depositos", depositos
|
||||
SAVE ".Depositos", depositos
|
||||
depositos = null
|
||||
END IF
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ DESCRIPTION "Sync product suppliers from Bling ERP to local database"
|
|||
SEND EMAIL admin, "Suppliers sync started..."
|
||||
|
||||
FUNCTION SyncProdutoFornecedor(idProduto)
|
||||
DELETE "maria.ProdutoFornecedor", "Produto_id=" + idProduto
|
||||
DELETE ".ProdutoFornecedor", "Produto_id=" + idProduto
|
||||
|
||||
i1 = 1
|
||||
DO WHILE i1 > 0 AND i1 < pages
|
||||
|
|
@ -26,7 +26,7 @@ FUNCTION SyncProdutoFornecedor(idProduto)
|
|||
j1 = j1 + 1
|
||||
LOOP
|
||||
|
||||
SAVE "maria.ProdutoFornecedor", items1
|
||||
SAVE ".ProdutoFornecedor", items1
|
||||
items1 = null
|
||||
i1 = i1 + 1
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ FUNCTION SyncProdutoFornecedor(idProduto)
|
|||
LOOP
|
||||
END FUNCTION
|
||||
|
||||
fullList = FIND "maria.Produtos"
|
||||
fullList = FIND ".Produtos"
|
||||
|
||||
chunkSize = 100
|
||||
startIndex = 0
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
TABLE Contatos ON maria
|
||||
TABLE Contatos
|
||||
Id number key
|
||||
Nome string(150)
|
||||
Codigo string(50)
|
||||
|
|
@ -37,7 +37,7 @@ TABLE Contatos ON maria
|
|||
Pais_nome string(100)
|
||||
END TABLE
|
||||
|
||||
TABLE Pedidos ON maria
|
||||
TABLE Pedidos
|
||||
Id number key
|
||||
Numero integer
|
||||
NumeroLoja string(15)
|
||||
|
|
@ -59,7 +59,7 @@ TABLE Pedidos ON maria
|
|||
NotaFiscal_id number
|
||||
END TABLE
|
||||
|
||||
TABLE PedidosItem ON maria
|
||||
TABLE PedidosItem
|
||||
Id number key
|
||||
Numero integer
|
||||
Sku string(20)
|
||||
|
|
@ -75,14 +75,14 @@ TABLE PedidosItem ON maria
|
|||
Pedido_id number
|
||||
END TABLE
|
||||
|
||||
TABLE ProdutoImagem ON maria
|
||||
TABLE ProdutoImagem
|
||||
Id number key
|
||||
Ordinal number
|
||||
Sku string(20)
|
||||
Link string(250)
|
||||
END TABLE
|
||||
|
||||
TABLE Produtos ON maria
|
||||
TABLE Produtos
|
||||
Id number key
|
||||
Nome string(150)
|
||||
Sku string(20)
|
||||
|
|
@ -146,7 +146,7 @@ TABLE Produtos ON maria
|
|||
Estrutura_componentes_0_produto_Quantidade double
|
||||
END TABLE
|
||||
|
||||
TABLE Depositos ON maria
|
||||
TABLE Depositos
|
||||
Internal_Id number key
|
||||
Id number
|
||||
Sku string(20)
|
||||
|
|
@ -154,7 +154,7 @@ TABLE Depositos ON maria
|
|||
SaldoVirtual double
|
||||
END TABLE
|
||||
|
||||
TABLE Vendedores ON maria
|
||||
TABLE Vendedores
|
||||
Id number key
|
||||
DescontoLimite double
|
||||
Loja_Id number
|
||||
|
|
@ -163,7 +163,7 @@ TABLE Vendedores ON maria
|
|||
Contato_Situacao string(1)
|
||||
END TABLE
|
||||
|
||||
TABLE ProdutoFornecedor ON maria
|
||||
TABLE ProdutoFornecedor
|
||||
Id number key
|
||||
Descricao string(255)
|
||||
Codigo string(50)
|
||||
|
|
@ -175,7 +175,7 @@ TABLE ProdutoFornecedor ON maria
|
|||
Garantia integer
|
||||
END TABLE
|
||||
|
||||
TABLE ContasAPagar ON maria
|
||||
TABLE ContasAPagar
|
||||
Id number key
|
||||
Situacao integer
|
||||
Vencimento date
|
||||
|
|
@ -195,7 +195,7 @@ TABLE ContasAPagar ON maria
|
|||
Ocorrencia_tipo integer
|
||||
END TABLE
|
||||
|
||||
TABLE ContasAReceber ON maria
|
||||
TABLE ContasAReceber
|
||||
Id number key
|
||||
Situacao integer
|
||||
Vencimento date
|
||||
|
|
@ -232,7 +232,7 @@ TABLE ContasAReceber ON maria
|
|||
Ocorrencia_tipo integer
|
||||
END TABLE
|
||||
|
||||
TABLE CategoriaReceita ON maria
|
||||
TABLE CategoriaReceita
|
||||
Id number key
|
||||
IdCategoriaPai number
|
||||
Descricao string(255)
|
||||
|
|
@ -240,7 +240,7 @@ TABLE CategoriaReceita ON maria
|
|||
Situacao integer
|
||||
END TABLE
|
||||
|
||||
TABLE FormaDePagamento ON maria
|
||||
TABLE FormaDePagamento
|
||||
Id number key
|
||||
Descricao string(255)
|
||||
TipoPagamento integer
|
||||
|
|
@ -258,14 +258,14 @@ TABLE FormaDePagamento ON maria
|
|||
DadosCartao_cnpjCredenciadora string(16)
|
||||
END TABLE
|
||||
|
||||
TABLE NaturezaDeOperacao ON maria
|
||||
TABLE NaturezaDeOperacao
|
||||
Id number key
|
||||
Situacao integer
|
||||
Padrao integer
|
||||
Descricao string(255)
|
||||
END TABLE
|
||||
|
||||
TABLE Parcela ON maria
|
||||
TABLE Parcela
|
||||
Id number key
|
||||
Pedido_id number
|
||||
DataVencimento date
|
||||
|
|
@ -274,7 +274,7 @@ TABLE Parcela ON maria
|
|||
FormaPagamento_id number
|
||||
END TABLE
|
||||
|
||||
TABLE HistoricoPreco ON maria
|
||||
TABLE HistoricoPreco
|
||||
Id number key
|
||||
Sku string(50)
|
||||
PrecoAntigo double
|
||||
|
|
|
|||
1
botserver.log
Normal file
1
botserver.log
Normal file
|
|
@ -0,0 +1 @@
|
|||
/home/rodriguez/gb/restart.sh: line 19: ./target/debug/botserver: No such file or directory
|
||||
1
botui.log
Normal file
1
botui.log
Normal file
|
|
@ -0,0 +1 @@
|
|||
/home/rodriguez/gb/restart.sh: line 23: ./target/debug/botui: No such file or directory
|
||||
|
|
@ -1 +1,19 @@
|
|||
Meta Challenge,
|
||||
name,value
|
||||
,
|
||||
bot-name,WhatsApp Integration
|
||||
bot-description,WhatsApp messaging integration
|
||||
,
|
||||
param-whatsappPhoneNumber,
|
||||
param-whatsappBusinessAccountID,
|
||||
param-whatsappAccessToken,
|
||||
param-whatsappWebhookURL,
|
||||
param-whatsappVerifyToken,
|
||||
,
|
||||
llm-model,gpt-4o-mini
|
||||
llm-temperature,0.3
|
||||
,
|
||||
sync-interval,60
|
||||
auto-reply,true
|
||||
,
|
||||
param-admin1,admin@yourdomain.com
|
||||
param-admin2,admin2@yourdomain.com
|
||||
|
|
|
|||
|
Loading…
Add table
Reference in a new issue