@zeyos/client 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.md +33 -4
  2. package/README.md +31 -1
  3. package/agents/README.md +4 -0
  4. package/agents/shared/zeyos-entity-map.md +5 -1
  5. package/agents/shared/zeyos-entity-reference.md +89 -33
  6. package/agents/zeyos-mail-operations/SKILL.md +7 -1
  7. package/agents/zeyos-mail-operations/references/workflows.md +19 -2
  8. package/agents/zeyos-platform-and-schema/SKILL.md +1 -1
  9. package/agents/zeyos-platform-and-schema/references/workflows.md +21 -5
  10. package/agents/zeyos-time-tracking/SKILL.md +48 -0
  11. package/agents/zeyos-time-tracking/references/workflows.md +230 -0
  12. package/agents/zeyos-work-management/SKILL.md +5 -2
  13. package/agents/zeyos-work-management/references/workflows.md +54 -4
  14. package/docs/02-javascript-client/03-making-requests.md +46 -1
  15. package/docs/03-cli/02-commands.md +63 -1
  16. package/docs/03-cli/03-configuration.md +37 -5
  17. package/docs/04-agent-workflows/01-agent-quickstart.md +24 -0
  18. package/docs/04-agent-workflows/03-cli-coverage-and-escalation.md +3 -2
  19. package/docs/06-okf/01-overview.md +70 -0
  20. package/docs/06-okf/02-producing-and-consuming.md +46 -0
  21. package/docs/06-okf/03-keeping-fresh.md +53 -0
  22. package/docs/06-okf/04-loops.md +58 -0
  23. package/docs/06-okf/_category_.json +9 -0
  24. package/okf/concepts/counting-and-sums.md +10 -0
  25. package/okf/concepts/dates-unix-seconds.md +12 -0
  26. package/okf/concepts/enums.md +14 -0
  27. package/okf/concepts/filters-vs-filter.md +14 -0
  28. package/okf/concepts/index.md +8 -0
  29. package/okf/concepts/operationid-vocabulary.md +17 -0
  30. package/okf/concepts/visibility-column.md +13 -0
  31. package/okf/entities/accounts.md +82 -0
  32. package/okf/entities/actionsteps.md +84 -0
  33. package/okf/entities/addresses.md +50 -0
  34. package/okf/entities/applicationassets.md +43 -0
  35. package/okf/entities/applications.md +62 -0
  36. package/okf/entities/appointments.md +79 -0
  37. package/okf/entities/associations.md +41 -0
  38. package/okf/entities/binfiles.md +32 -0
  39. package/okf/entities/campaigns.md +66 -0
  40. package/okf/entities/categories.md +55 -0
  41. package/okf/entities/channels.md +54 -0
  42. package/okf/entities/comments.md +44 -0
  43. package/okf/entities/components.md +46 -0
  44. package/okf/entities/contacts.md +96 -0
  45. package/okf/entities/contacts2contacts.md +42 -0
  46. package/okf/entities/contracts.md +83 -0
  47. package/okf/entities/couponcodes.md +58 -0
  48. package/okf/entities/coupons.md +69 -0
  49. package/okf/entities/customfields.md +59 -0
  50. package/okf/entities/davservers.md +74 -0
  51. package/okf/entities/devices.md +65 -0
  52. package/okf/entities/documents.md +76 -0
  53. package/okf/entities/dunning.md +82 -0
  54. package/okf/entities/dunning2transactions.md +46 -0
  55. package/okf/entities/entities2channels.md +42 -0
  56. package/okf/entities/events.md +57 -0
  57. package/okf/entities/feedservers.md +67 -0
  58. package/okf/entities/files.md +50 -0
  59. package/okf/entities/follows.md +40 -0
  60. package/okf/entities/forks.md +54 -0
  61. package/okf/entities/groups.md +48 -0
  62. package/okf/entities/groups2users.md +44 -0
  63. package/okf/entities/index.md +93 -0
  64. package/okf/entities/invitations.md +53 -0
  65. package/okf/entities/items.md +95 -0
  66. package/okf/entities/ledgers.md +56 -0
  67. package/okf/entities/likes.md +40 -0
  68. package/okf/entities/links.md +70 -0
  69. package/okf/entities/mailinglists.md +67 -0
  70. package/okf/entities/mailingrecipients.md +45 -0
  71. package/okf/entities/mailservers.md +77 -0
  72. package/okf/entities/messagereads.md +40 -0
  73. package/okf/entities/messages.md +104 -0
  74. package/okf/entities/notes.md +73 -0
  75. package/okf/entities/objects.md +70 -0
  76. package/okf/entities/opportunities.md +87 -0
  77. package/okf/entities/participants.md +52 -0
  78. package/okf/entities/payments.md +76 -0
  79. package/okf/entities/permissions.md +46 -0
  80. package/okf/entities/pricelists.md +70 -0
  81. package/okf/entities/pricelists2accounts.md +46 -0
  82. package/okf/entities/prices.md +49 -0
  83. package/okf/entities/projects.md +72 -0
  84. package/okf/entities/records.md +75 -0
  85. package/okf/entities/relateditems.md +43 -0
  86. package/okf/entities/resources.md +55 -0
  87. package/okf/entities/services.md +64 -0
  88. package/okf/entities/stocktransactions.md +72 -0
  89. package/okf/entities/storages.md +56 -0
  90. package/okf/entities/suppliers.md +51 -0
  91. package/okf/entities/tasks.md +86 -0
  92. package/okf/entities/tickets.md +86 -0
  93. package/okf/entities/transactions.md +118 -0
  94. package/okf/entities/users.md +66 -0
  95. package/okf/entities/weblets.md +66 -0
  96. package/okf/index.md +11 -0
  97. package/okf/log.md +4 -0
  98. package/okf/metrics/cash-received.md +10 -0
  99. package/okf/metrics/index.md +6 -0
  100. package/okf/metrics/invoiced-net-revenue.md +16 -0
  101. package/okf/metrics/open-customers.md +14 -0
  102. package/okf/metrics/overdue-receivables.md +12 -0
  103. package/okf/playbooks/customer-360.md +12 -0
  104. package/okf/playbooks/index.md +5 -0
  105. package/okf/playbooks/revenue-this-year.md +19 -0
  106. package/okf/playbooks/ticket-work-packet.md +11 -0
  107. package/package.json +9 -5
  108. package/scripts/data/okf-curation.mjs +258 -0
  109. package/scripts/generate-client.mjs +4 -275
  110. package/scripts/generate-okf.mjs +241 -0
  111. package/scripts/lib/okf.mjs +272 -0
  112. package/scripts/lib/spec-model.mjs +325 -0
  113. package/src/index.js +4 -0
  114. package/src/runtime/client.js +199 -18
  115. package/src/runtime/okf.js +237 -0
  116. package/samples/missioncontrol/README.md +0 -106
  117. package/samples/missioncontrol/fetch-data.mjs +0 -341
  118. package/samples/missioncontrol/index.html +0 -419
@@ -0,0 +1,72 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Stock Transactions
4
+ description: Inventory movements.
5
+ resource: zeyos://api/stocktransactions
6
+ tags: [commerce, generated]
7
+ api_backed: true
8
+ list_operation: listStockTransactions
9
+ visibility_column: false
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | bigint | no | — | yes | — |
18
+ | `creator` | integer | yes | — | — | — |
19
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
20
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
21
+ | `item` | integer | no | — | yes | [items](/entities/items.md) |
22
+ | `storage` | integer | yes | — | yes | [storages](/entities/storages.md) |
23
+ | `transaction` | integer | yes | — | yes | [transactions](/entities/transactions.md) |
24
+ | `transfer` | bigint | yes | — | yes | [stocktransactions](/entities/stocktransactions.md) |
25
+ | `flag` | smallint | no | `0` | — | — |
26
+ | `date` | bigint | no | `date_part('epoch', now())` | yes | — |
27
+ | `chargenum` | text | no | `''` | yes | — |
28
+ | `location` | text | no | `''` | — | — |
29
+ | `reference` | text | no | `''` | yes | — |
30
+ | `amount` | double precision | no | — | — | — |
31
+ | `sellingprice` | double precision | no | `0` | — | — |
32
+ | `purchaseprice` | double precision | no | `0` | — | — |
33
+ | `serials` | text[] | yes | — | yes | — |
34
+ | `subtransactions` | bigint[] | yes | — | — | — |
35
+
36
+ # Foreign Keys
37
+
38
+ - `item` → [items](/entities/items.md) (`items.ID`)
39
+ - `storage` → [storages](/entities/storages.md) (`storages.ID`)
40
+ - `transaction` → [transactions](/entities/transactions.md) (`transactions.ID`)
41
+ - `transfer` → [stocktransactions](/entities/stocktransactions.md) (`stocktransactions.ID`)
42
+
43
+ # Enums
44
+
45
+ ### `flag`
46
+
47
+ `0` = BOOKED · `1` = RESERVED · `2` = CANCELLED
48
+
49
+ # Indexes
50
+
51
+ - `fk_stocktransactions_item` — btree on `item`
52
+ - `fk_stocktransactions_storage` — gin, partial on `storage`
53
+ - `fk_stocktransactions_transaction` — btree, partial on `transaction`
54
+ - `i_stocktransactions_date` — btree on `date`
55
+ - `i_stocktransactions_reservations` — btree, partial on `transaction`
56
+ - `i_stocktransactions_serials` — gin, partial on `serials`
57
+ - `s_stocktransactions_chargenum` — gin, partial on `chargenum`
58
+ - `s_stocktransactions_reference` — gin, partial on `reference`
59
+ - `s_stocktransactions_serials` — gin, partial on `f_safe_array_to_string(serials, ' ')`
60
+ - `u_stocktransactions_transfer` — btree, unique, partial on `transfer`
61
+
62
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
63
+
64
+ # Operations
65
+
66
+ - list: `listStockTransactions`
67
+ - get: `getStockTransaction`
68
+ - create: `createStockTransaction`
69
+ - update: `updateStockTransaction`
70
+ - delete: `deleteStockTransaction`
71
+ - exists: `existsStockTransaction`
72
+ <!-- okf:generated:end -->
@@ -0,0 +1,56 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Storages
4
+ description: Inventory storage locations.
5
+ resource: zeyos://api/storages
6
+ tags: [commerce, generated]
7
+ api_backed: true
8
+ list_operation: listStorages
9
+ visibility_column: true
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | integer | no | — | yes | — |
18
+ | `fork` | integer | yes | — | yes | [forks](/entities/forks.md) |
19
+ | `ownergroup` | integer | yes | — | yes | [groups](/entities/groups.md) |
20
+ | `creator` | integer | yes | — | — | — |
21
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
22
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
23
+ | `visibility` | smallint | no | `0` | — | — |
24
+ | `name` | text | no | — | yes | — |
25
+ | `description` | text | no | `''` | — | — |
26
+
27
+ # Foreign Keys
28
+
29
+ - `fork` → [forks](/entities/forks.md) (`forks.ID`)
30
+ - `ownergroup` → [groups](/entities/groups.md) (`groups.ID`)
31
+
32
+ # Enums
33
+
34
+ ### `visibility`
35
+
36
+ `0` = REGULAR · `1` = ARCHIVED · `2` = DELETED
37
+
38
+ # Indexes
39
+
40
+ - `fk_storages_fork` — gin, partial on `fork`
41
+ - `fk_storages_ownergroup` — gin on `ownergroup`
42
+ - `i_storages_nofork` — gin, partial on `fork`
43
+ - `i_storages_noowner` — gin, partial on `ownergroup`
44
+ - `s_storages_name` — gin on `name`
45
+
46
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
47
+
48
+ # Operations
49
+
50
+ - list: `listStorages`
51
+ - get: `getStorage`
52
+ - create: `createStorage`
53
+ - update: `updateStorage`
54
+ - delete: `deleteStorage`
55
+ - exists: `existsStorage`
56
+ <!-- okf:generated:end -->
@@ -0,0 +1,51 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Suppliers
4
+ description: Supplier-to-item links.
5
+ resource: zeyos://api/suppliers
6
+ tags: [commerce, generated]
7
+ api_backed: true
8
+ list_operation: listSuppliers
9
+ visibility_column: false
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | bigint | no | — | yes | — |
18
+ | `creator` | integer | yes | — | — | — |
19
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
20
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
21
+ | `item` | integer | no | — | yes | [items](/entities/items.md) |
22
+ | `account` | integer | no | — | yes | [accounts](/entities/accounts.md) |
23
+ | `itemnum` | text | no | `''` | yes | — |
24
+ | `price` | double precision | yes | — | — | — |
25
+ | `taxrate` | double precision | yes | — | — | — |
26
+ | `minamount` | double precision | no | `0` | — | — |
27
+ | `deliverytime` | smallint | yes | — | — | — |
28
+ | `stock` | double precision | yes | — | — | — |
29
+
30
+ # Foreign Keys
31
+
32
+ - `item` → [items](/entities/items.md) (`items.ID`)
33
+ - `account` → [accounts](/entities/accounts.md) (`accounts.ID`)
34
+
35
+ # Indexes
36
+
37
+ - `fk_suppliers_account` — gin on `account`
38
+ - `s_suppliers_itemnum` — gin, partial on `itemnum`
39
+ - `u_suppliers_item_account` — btree, unique on `item, account`
40
+
41
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
42
+
43
+ # Operations
44
+
45
+ - list: `listSuppliers`
46
+ - get: `getSupplier`
47
+ - create: `createSupplier`
48
+ - update: `updateSupplier`
49
+ - delete: `deleteSupplier`
50
+ - exists: `existsSupplier`
51
+ <!-- okf:generated:end -->
@@ -0,0 +1,86 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Tasks
4
+ description: Actionable delivery work.
5
+ resource: zeyos://api/tasks
6
+ tags: [work, generated]
7
+ api_backed: true
8
+ list_operation: listTasks
9
+ visibility_column: true
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | integer | no | — | yes | — |
18
+ | `fork` | integer | yes | — | yes | [forks](/entities/forks.md) |
19
+ | `owneruser` | integer | yes | — | yes | [users](/entities/users.md) |
20
+ | `ownergroup` | integer | yes | — | yes | [groups](/entities/groups.md) |
21
+ | `creator` | integer | yes | — | — | — |
22
+ | `assigneduser` | integer | yes | — | yes | [users](/entities/users.md) |
23
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
24
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
25
+ | `davserver` | integer | yes | — | yes | [davservers](/entities/davservers.md) |
26
+ | `ticket` | integer | yes | — | yes | [tickets](/entities/tickets.md) |
27
+ | `project` | integer | yes | — | yes | [projects](/entities/projects.md) |
28
+ | `visibility` | smallint | no | `0` | — | — |
29
+ | `name` | text | no | — | yes | — |
30
+ | `tasknum` | text | no | `''` | yes | — |
31
+ | `datefrom` | bigint | yes | — | — | — |
32
+ | `duedate` | bigint | yes | — | — | — |
33
+ | `status` | smallint | no | `0` | — | — |
34
+ | `priority` | smallint | no | `2` | — | — |
35
+ | `projectedeffort` | integer | no | `0` | — | — |
36
+ | `description` | text | no | `''` | — | — |
37
+
38
+ # Foreign Keys
39
+
40
+ - `fork` → [forks](/entities/forks.md) (`forks.ID`)
41
+ - `owneruser` → [users](/entities/users.md) (`users.ID`)
42
+ - `ownergroup` → [groups](/entities/groups.md) (`groups.ID`)
43
+ - `assigneduser` → [users](/entities/users.md) (`users.ID`)
44
+ - `davserver` → [davservers](/entities/davservers.md) (`davservers.ID`)
45
+ - `ticket` → [tickets](/entities/tickets.md) (`tickets.ID`)
46
+ - `project` → [projects](/entities/projects.md) (`projects.ID`)
47
+
48
+ # Enums
49
+
50
+ ### `visibility`
51
+
52
+ `0` = REGULAR · `1` = ARCHIVED · `2` = DELETED
53
+
54
+ ### `status`
55
+
56
+ `0` = NOTSTARTED · `1` = AWAITINGACCEPTANCE · `2` = ACCEPTED · `3` = REJECTED · `4` = ACTIVE · `5` = INACTIVE · `6` = FEEDBACKREQUIRED · `7` = TESTING · `8` = CANCELLED · `9` = COMPLETED · `10` = FAILED · `11` = BOOKED
57
+
58
+ ### `priority`
59
+
60
+ `0` = LOWEST · `1` = LOW · `2` = MEDIUM · `3` = HIGH · `4` = HIGHEST
61
+
62
+ # Indexes
63
+
64
+ - `fk_tasks_assigneduser` — gin, partial on `assigneduser`
65
+ - `fk_tasks_davserver` — gin, partial on `davserver`
66
+ - `fk_tasks_fork` — gin, partial on `fork`
67
+ - `fk_tasks_ownergroup` — gin, partial on `ownergroup`
68
+ - `fk_tasks_owneruser` — gin, partial on `owneruser`
69
+ - `fk_tasks_project` — gin, partial on `project`
70
+ - `fk_tasks_ticket` — btree, partial on `ticket`
71
+ - `i_tasks_nofork` — gin, partial on `fork`
72
+ - `i_tasks_noowner` — gin, partial on `ownergroup`
73
+ - `s_tasks_name` — gin on `name`
74
+ - `s_tasks_tasknum` — gin, partial on `tasknum`
75
+
76
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
77
+
78
+ # Operations
79
+
80
+ - list: `listTasks`
81
+ - get: `getTask`
82
+ - create: `createTask`
83
+ - update: `updateTask`
84
+ - delete: `deleteTask`
85
+ - exists: `existsTask`
86
+ <!-- okf:generated:end -->
@@ -0,0 +1,86 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Tickets
4
+ description: Support or service work items.
5
+ resource: zeyos://api/tickets
6
+ tags: [work, generated]
7
+ api_backed: true
8
+ list_operation: listTickets
9
+ visibility_column: true
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | integer | no | — | yes | — |
18
+ | `fork` | integer | yes | — | yes | [forks](/entities/forks.md) |
19
+ | `ownergroup` | integer | yes | — | yes | [groups](/entities/groups.md) |
20
+ | `creator` | integer | yes | — | — | — |
21
+ | `assigneduser` | integer | yes | — | yes | [users](/entities/users.md) |
22
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
23
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
24
+ | `account` | integer | yes | — | yes | [accounts](/entities/accounts.md) |
25
+ | `project` | integer | yes | — | yes | [projects](/entities/projects.md) |
26
+ | `visibility` | smallint | no | `0` | — | — |
27
+ | `name` | text | no | — | yes | — |
28
+ | `ticketnum` | text | no | `''` | yes | — |
29
+ | `date` | bigint | no | `date_part('epoch', now())` | yes | — |
30
+ | `duedate` | bigint | yes | — | — | — |
31
+ | `status` | smallint | no | `0` | — | — |
32
+ | `priority` | smallint | no | `2` | — | — |
33
+ | `description` | text | no | `''` | — | — |
34
+ | `billingitems` | json | yes | — | — | — |
35
+ | `procurementitems` | json | yes | — | — | — |
36
+
37
+ # Foreign Keys
38
+
39
+ - `fork` → [forks](/entities/forks.md) (`forks.ID`)
40
+ - `ownergroup` → [groups](/entities/groups.md) (`groups.ID`)
41
+ - `assigneduser` → [users](/entities/users.md) (`users.ID`)
42
+ - `account` → [accounts](/entities/accounts.md) (`accounts.ID`)
43
+ - `project` → [projects](/entities/projects.md) (`projects.ID`)
44
+
45
+ # Enums
46
+
47
+ ### `visibility`
48
+
49
+ `0` = REGULAR · `1` = ARCHIVED · `2` = DELETED
50
+
51
+ ### `status`
52
+
53
+ `0` = NOTSTARTED · `1` = AWAITINGACCEPTANCE · `2` = ACCEPTED · `3` = REJECTED · `4` = ACTIVE · `5` = INACTIVE · `6` = FEEDBACKREQUIRED · `7` = TESTING · `8` = CANCELLED · `9` = COMPLETED · `10` = FAILED · `11` = BOOKED
54
+
55
+ ### `priority`
56
+
57
+ `0` = LOWEST · `1` = LOW · `2` = MEDIUM · `3` = HIGH · `4` = HIGHEST
58
+
59
+ # Indexes
60
+
61
+ - `fk_tickets_account` — btree, partial on `account`
62
+ - `fk_tickets_assigneduser` — gin, partial on `assigneduser`
63
+ - `fk_tickets_fork` — gin, partial on `fork`
64
+ - `fk_tickets_ownergroup` — gin on `ownergroup`
65
+ - `fk_tickets_project` — gin, partial on `project`
66
+ - `i_tickets_date` — btree on `date`
67
+ - `i_tickets_nofork` — gin, partial on `fork`
68
+ - `i_tickets_noowner` — gin, partial on `ownergroup`
69
+ - `s_tickets_name` — gin on `name`
70
+ - `s_tickets_ticketnum` — gin, partial on `ticketnum`
71
+
72
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
73
+
74
+ # Operations
75
+
76
+ - list: `listTickets`
77
+ - get: `getTicket`
78
+ - create: `createTicket`
79
+ - update: `updateTicket`
80
+ - delete: `deleteTicket`
81
+ - exists: `existsTicket`
82
+ <!-- okf:generated:end -->
83
+
84
+ # Notes
85
+
86
+ Closed = `status` IN [9 (COMPLETED), 11 (BOOKED)]. Filter time windows on the indexed `date` field, not `creationdate`/`lastmodified` (unindexed → HTTP 503). Has a `visibility` column. `priority`: 0=LOWEST…4=HIGHEST.
@@ -0,0 +1,118 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Transactions
4
+ description: Billing, procurement, or production business transactions.
5
+ resource: zeyos://api/transactions
6
+ tags: [billing, generated]
7
+ api_backed: true
8
+ list_operation: listTransactions
9
+ visibility_column: false
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | integer | no | — | yes | — |
18
+ | `fork` | integer | yes | — | yes | [forks](/entities/forks.md) |
19
+ | `ownergroup` | integer | yes | — | yes | [groups](/entities/groups.md) |
20
+ | `creator` | integer | yes | — | — | — |
21
+ | `assigneduser` | integer | yes | — | yes | [users](/entities/users.md) |
22
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
23
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
24
+ | `account` | integer | yes | — | yes | [accounts](/entities/accounts.md) |
25
+ | `item` | integer | yes | — | yes | [items](/entities/items.md) |
26
+ | `contract` | integer | yes | — | yes | [contracts](/entities/contracts.md) |
27
+ | `transactionnum` | text | no | — | yes | — |
28
+ | `type` | smallint | no | `0` | yes | — |
29
+ | `date` | bigint | no | `date_part('epoch', now())` | yes | — |
30
+ | `duedate` | bigint | yes | — | — | — |
31
+ | `status` | smallint | no | `0` | — | — |
32
+ | `calculation` | smallint | no | `0` | — | — |
33
+ | `productionfactor` | integer | yes | — | — | — |
34
+ | `currency` | character varying(3) | no | — | — | — |
35
+ | `exchangerate` | double precision | no | `1` | — | — |
36
+ | `taxid` | text | no | `''` | — | — |
37
+ | `shippingrecipient` | text | no | `''` | — | — |
38
+ | `shippingaddress` | text | no | `''` | — | — |
39
+ | `shippingpostalcode` | text | no | `''` | — | — |
40
+ | `shippingcity` | text | no | `''` | — | — |
41
+ | `shippingregion` | text | no | `''` | — | — |
42
+ | `shippingcountry` | character varying(2) | no | `''` | — | — |
43
+ | `billingrecipient` | text | no | `''` | — | — |
44
+ | `billingaddress` | text | no | `''` | — | — |
45
+ | `billingpostalcode` | text | no | `''` | — | — |
46
+ | `billingcity` | text | no | `''` | — | — |
47
+ | `billingregion` | text | no | `''` | — | — |
48
+ | `billingcountry` | character varying(2) | no | `''` | — | — |
49
+ | `sellertaxid` | text | no | `''` | — | — |
50
+ | `sellername` | text | no | `''` | — | — |
51
+ | `selleraddress` | text | no | `''` | — | — |
52
+ | `sellerpostalcode` | text | no | `''` | — | — |
53
+ | `sellercity` | text | no | `''` | — | — |
54
+ | `sellerregion` | text | no | `''` | — | — |
55
+ | `sellercountry` | character varying(2) | no | `''` | — | — |
56
+ | `discount` | double precision | no | `0` | — | — |
57
+ | `netamount` | double precision | no | `0` | — | — |
58
+ | `tax` | double precision | no | `0` | — | — |
59
+ | `margin` | double precision | no | `0` | — | — |
60
+ | `weight` | double precision | no | `0` | — | — |
61
+ | `items` | json | yes | — | — | — |
62
+
63
+ # Foreign Keys
64
+
65
+ - `fork` → [forks](/entities/forks.md) (`forks.ID`)
66
+ - `ownergroup` → [groups](/entities/groups.md) (`groups.ID`)
67
+ - `assigneduser` → [users](/entities/users.md) (`users.ID`)
68
+ - `account` → [accounts](/entities/accounts.md) (`accounts.ID`)
69
+ - `item` → [items](/entities/items.md) (`items.ID`)
70
+ - `contract` → [contracts](/entities/contracts.md) (`contracts.ID`)
71
+
72
+ # Enums
73
+
74
+ ### `type`
75
+
76
+ `0` = BILLING_QUOTE · `1` = BILLING_ORDER · `2` = BILLING_DELIVERY · `3` = BILLING_INVOICE · `4` = BILLING_CREDIT · `5` = PROCUREMENT_REQUEST · `6` = PROCUREMENT_ORDER · `7` = PROCUREMENT_DELIVERY · `8` = PROCUREMENT_INVOICE · `9` = PROCUREMENT_CREDIT · `10` = PRODUCTION_FABRICATION · `11` = PRODUCTION_DISASSEMBLY
77
+
78
+ ### `status`
79
+
80
+ `0` = DRAFT · `1` = BOOKED · `2` = HOLD · `3` = CANCELLED · `4` = CLOSED · `5` = PARTLYORDERED · `6` = PARTLYORDERED_CANCELLED · `7` = PARTLYORDERED_CLOSED · `8` = ORDERED · `9` = PARTLYDELIVERED · `10` = PARTLYDELIVERED_CANCELLED · `11` = PARTLYDELIVERED_CLOSED · `12` = DELIVERED · `13` = PARTLYINVOICED · `14` = PARTLYINVOICED_CANCELLED · `15` = PARTLYINVOICED_CLOSED · `16` = INVOICED · `17` = PARTLYPAID · `18` = PARTLYPAID_CANCELLED · `19` = PARTLYPAID_CLOSED · `20` = PAID · `21` = OVERPAID · `22` = PROCESSED · `23` = PROCESSED_CANCELLED
81
+
82
+ ### `calculation`
83
+
84
+ `0` = NET · `1` = GROSS · `2` = EXACT · `3` = LEGACY · `4` = EXTERNAL
85
+
86
+ # Indexes
87
+
88
+ - `fk_transactions_account` — btree, partial on `account`
89
+ - `fk_transactions_assigneduser` — gin, partial on `assigneduser`
90
+ - `fk_transactions_contract` — btree, partial on `contract`
91
+ - `fk_transactions_fork` — gin, partial on `fork`
92
+ - `fk_transactions_item` — btree, partial on `item`
93
+ - `fk_transactions_ownergroup` — gin on `ownergroup`
94
+ - `i_transactions_billing_date` — btree, partial on `date`
95
+ - `i_transactions_collection_date` — btree, partial on `date`
96
+ - `i_transactions_nofork` — gin, partial on `fork`
97
+ - `i_transactions_noowner` — gin, partial on `ownergroup`
98
+ - `i_transactions_procurement_date` — btree, partial on `date`
99
+ - `i_transactions_production_date` — btree, partial on `date`
100
+ - `i_transactions_transactionnum` — btree on `transactionnum`
101
+ - `s_transactions_transactionnum` — gin on `transactionnum`
102
+ - `u_transactions_transactionnum_type` — btree, unique, partial on `transactionnum, type`
103
+
104
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
105
+
106
+ # Operations
107
+
108
+ - list: `listTransactions`
109
+ - get: `getTransaction`
110
+ - create: `createTransaction`
111
+ - update: `updateTransaction`
112
+ - delete: `deleteTransaction`
113
+ - exists: `existsTransaction`
114
+ <!-- okf:generated:end -->
115
+
116
+ # Notes
117
+
118
+ NO `visibility` column — adding `"visibility":0` to a filter 400s. Use `type` 3=billing invoice, 4=billing credit. Use `netamount` for invoiced revenue; sum client-side (no server-side SUM). Use `date` for period reporting.
@@ -0,0 +1,66 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Users
4
+ description: System users.
5
+ resource: zeyos://api/users
6
+ tags: [platform, generated]
7
+ api_backed: true
8
+ list_operation: listUsers
9
+ visibility_column: false
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | integer | no | — | yes | — |
18
+ | `creator` | integer | yes | — | — | — |
19
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
20
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
21
+ | `contact` | integer | yes | — | yes | [contacts](/entities/contacts.md) |
22
+ | `activity` | smallint | no | `0` | — | — |
23
+ | `name` | text | no | — | yes | — |
24
+ | `email` | text | no | — | yes | — |
25
+ | `nopublic` | smallint | no | `0` | — | — |
26
+ | `apionly` | smallint | no | `0` | — | — |
27
+ | `expdate` | bigint | yes | — | — | — |
28
+ | `password` | text | no | `''` | — | — |
29
+ | `resetlogintoken` | bytea | yes | — | — | — |
30
+ | `persistentlogintoken` | bytea | yes | — | yes | — |
31
+ | `signature` | bytea | yes | — | — | — |
32
+ | `description` | text | no | `''` | — | — |
33
+ | `otpsecret` | bytea | yes | — | — | — |
34
+ | `settings` | json | yes | — | — | — |
35
+
36
+ # Foreign Keys
37
+
38
+ - `contact` → [contacts](/entities/contacts.md) (`contacts.ID`)
39
+
40
+ # Enums
41
+
42
+ ### `activity`
43
+
44
+ `0` = ACTIVE · `1` = DEACTIVATED · `2` = DELETED
45
+
46
+ # Indexes
47
+
48
+ - `fk_users_contact` — btree, partial on `contact`
49
+ - `s_users_email` — gin on `email`
50
+ - `s_users_name` — gin on `name`
51
+ - `u_users_email` — btree, unique on `lower(email)`
52
+ - `u_users_name` — btree, unique on `lower(name)`
53
+ - `u_users_persistentlogintoken` — btree, unique, partial on `persistentlogintoken`
54
+
55
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
56
+
57
+ # Operations
58
+
59
+ - list: `listUsers`
60
+ - get: `getUser`
61
+ - exists: `existsUser`
62
+ <!-- okf:generated:end -->
63
+
64
+ # Notes
65
+
66
+ Resolve assignees/ownership here; user names may not match contact names.
@@ -0,0 +1,66 @@
1
+ ---
2
+ type: ZeyOS Entity
3
+ title: Weblets
4
+ description: UI modules with view/type metadata.
5
+ resource: zeyos://api/weblets
6
+ tags: [platform, generated]
7
+ api_backed: true
8
+ list_operation: listWeblets
9
+ visibility_column: false
10
+ ---
11
+
12
+ <!-- okf:generated:start — rewritten by scripts/generate-okf.mjs; do not edit by hand -->
13
+ # Schema
14
+
15
+ | Column | Type | Nullable | Default | Indexed | FK |
16
+ |---|---|---|---|---|---|
17
+ | `ID` | integer | no | — | yes | — |
18
+ | `creator` | integer | yes | — | — | — |
19
+ | `creationdate` | bigint | no | `date_part('epoch', now())` | — | — |
20
+ | `lastmodified` | bigint | no | `date_part('epoch', now())` | — | — |
21
+ | `application` | integer | yes | — | yes | [applications](/entities/applications.md) |
22
+ | `activity` | smallint | no | `0` | — | — |
23
+ | `name` | text | no | — | yes | — |
24
+ | `identifier` | character varying(200) | no | — | yes | — |
25
+ | `view` | text | no | `''` | — | — |
26
+ | `type` | smallint | no | `0` | — | — |
27
+ | `width` | smallint | no | `0` | — | — |
28
+ | `height` | smallint | no | `0` | — | — |
29
+ | `svgpath` | text | no | `''` | — | — |
30
+ | `color` | character varying(6) | no | `''` | — | — |
31
+ | `mimetype` | text | no | `'text/x-zymba'` | — | — |
32
+ | `langaliases` | json | yes | — | — | — |
33
+ | `binfile` | integer | yes | — | yes | [binfiles](/entities/binfiles.md) |
34
+ | `url` | text | no | `''` | — | — |
35
+
36
+ # Foreign Keys
37
+
38
+ - `application` → [applications](/entities/applications.md) (`applications.ID`)
39
+ - `binfile` → [binfiles](/entities/binfiles.md) (`binfiles.ID`)
40
+
41
+ # Enums
42
+
43
+ ### `activity`
44
+
45
+ `0` = ACTIVE · `1` = DEACTIVATED · `2` = DELETED
46
+
47
+ ### `type`
48
+
49
+ `0` = INTEGRATED · `1` = STANDALONE · `2` = DETACHED · `3` = POPUP_FRAMED · `4` = POPUP_PLAIN · `5` = EMBEDDED_FRAMED · `6` = EMBEDDED_COLLAPSED · `7` = EMBEDDED_PLAIN
50
+
51
+ # Indexes
52
+
53
+ - `fk_weblets_application` — gin, partial on `application`
54
+ - `fk_weblets_binfile` — btree, partial on `binfile`
55
+ - `s_weblets_identifier` — gin on `identifier`
56
+ - `s_weblets_name` — gin on `name`
57
+ - `u_weblets_identifier` — btree, unique on `identifier`
58
+
59
+ > Partial/GIN indexes back the `filters` (plural) query form for foreign-key fields. See [filters-vs-filter](/concepts/filters-vs-filter.md).
60
+
61
+ # Operations
62
+
63
+ - list: `listWeblets`
64
+ - get: `getWeblet`
65
+ - exists: `existsWeblet`
66
+ <!-- okf:generated:end -->
package/okf/index.md ADDED
@@ -0,0 +1,11 @@
1
+ ---
2
+ okf_version: 0.1
3
+ source_snapshot: 19d7df6ae9aa
4
+ ---
5
+
6
+ # ZeyOS Knowledge Bundle
7
+
8
+ * [Entities](entities/) - 64 API-backed entity concepts (schema, foreign keys, enums, indexes, operations).
9
+ * [Metrics](metrics/) - Business metric definitions.
10
+ * [Playbooks](playbooks/) - Step-by-step query workflows.
11
+ * [Concepts](concepts/) - Cross-cutting query rules and footguns.
package/okf/log.md ADDED
@@ -0,0 +1,4 @@
1
+ # OKF Update Log
2
+
3
+ ## 2026-06-22
4
+ * **Initialization**: OKF bundle initialized with 64 entity concepts.
@@ -0,0 +1,10 @@
1
+ ---
2
+ type: Metric
3
+ title: Cash Received
4
+ description: "Cash collected (settlement basis) over a date window."
5
+ tags: [billing, payments]
6
+ ---
7
+
8
+ **Definition.** Sum of `amount` over [payments](/entities/payments.md) with `date` in the window. This is cash basis — distinct from [invoiced-net-revenue](/metrics/invoiced-net-revenue.md) (accrual/billed basis).
9
+
10
+ Separate direct account payments from transaction-linked payments if the answer needs it. Sum client-side; there is no server-side SUM.
@@ -0,0 +1,6 @@
1
+ # Metrics
2
+
3
+ * [Cash Received](cash-received.md) - Cash collected (settlement basis) over a date window.
4
+ * [Invoiced Net Revenue](invoiced-net-revenue.md) - Net invoiced revenue from billing invoices over a date window.
5
+ * [Open Customers](open-customers.md) - Count of active customer accounts.
6
+ * [Overdue Receivables](overdue-receivables.md) - Receivables in collection, via dunning — not from transactions alone.
@@ -0,0 +1,16 @@
1
+ ---
2
+ type: Metric
3
+ title: Invoiced Net Revenue
4
+ description: "Net invoiced revenue from billing invoices over a date window."
5
+ tags: [billing, revenue]
6
+ ---
7
+
8
+ **Definition.** Sum of `netamount` over [transactions](/entities/transactions.md) where `type = 3` (billing invoice) and `date` falls in the window. For *net after credits*, also sum `type = 4` (billing credit) and subtract.
9
+
10
+ **Why `date`, not `lastmodified`.** `date` is the business-effective invoice date; `lastmodified` is change tracking. See [dates-unix-seconds](/concepts/dates-unix-seconds.md).
11
+
12
+ **No server-side SUM.** `list` the matching rows (high `--limit`, up to 10000) with `netamount` and add them up client-side. See [counting-and-sums](/concepts/counting-and-sums.md).
13
+
14
+ **Do not** add `"visibility":0` — `transactions` has no such column and it 400s. See [visibility-column](/concepts/visibility-column.md).
15
+
16
+ Related playbook: [revenue-this-year](/playbooks/revenue-this-year.md).
@@ -0,0 +1,14 @@
1
+ ---
2
+ type: Metric
3
+ title: Open Customers
4
+ description: "Count of active customer accounts."
5
+ tags: [crm]
6
+ ---
7
+
8
+ **Definition.** Count of [accounts](/entities/accounts.md) where `type = 1` (CUSTOMER), excluding archived (`visibility = 0`).
9
+
10
+ ```bash
11
+ zeyos count accounts --filter '{"type":1,"visibility":0}'
12
+ ```
13
+
14
+ Count server-side (`count`), never `list` + row length. See [counting-and-sums](/concepts/counting-and-sums.md). State the definition you used ("customer = type 1, excluding archived").