@things-factory/saas 0.0.0-stage → 10.1.234

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 (83) hide show
  1. package/README.md +19 -2
  2. package/dist-client/bootstrap.d.ts +1 -0
  3. package/dist-client/bootstrap.js +5 -0
  4. package/dist-client/bootstrap.js.map +1 -0
  5. package/dist-client/components/saas-bill-editor.d.ts +59 -0
  6. package/dist-client/components/saas-bill-editor.js +211 -0
  7. package/dist-client/components/saas-bill-editor.js.map +1 -0
  8. package/dist-client/entity360/saas-account-360.d.ts +12 -0
  9. package/dist-client/entity360/saas-account-360.js +231 -0
  10. package/dist-client/entity360/saas-account-360.js.map +1 -0
  11. package/dist-client/index.d.ts +3 -0
  12. package/dist-client/index.js +4 -0
  13. package/dist-client/index.js.map +1 -0
  14. package/dist-client/pages/saas-account-list.d.ts +57 -0
  15. package/dist-client/pages/saas-account-list.js +175 -0
  16. package/dist-client/pages/saas-account-list.js.map +1 -0
  17. package/dist-client/pages/saas-account-page.d.ts +54 -0
  18. package/dist-client/pages/saas-account-page.js +352 -0
  19. package/dist-client/pages/saas-account-page.js.map +1 -0
  20. package/dist-client/pages/saas-cost-trend.d.ts +23 -0
  21. package/dist-client/pages/saas-cost-trend.js +219 -0
  22. package/dist-client/pages/saas-cost-trend.js.map +1 -0
  23. package/dist-client/route.d.ts +1 -0
  24. package/dist-client/route.js +16 -0
  25. package/dist-client/route.js.map +1 -0
  26. package/dist-client/tsconfig.tsbuildinfo +1 -0
  27. package/dist-client/words.d.ts +47 -0
  28. package/dist-client/words.js +39 -0
  29. package/dist-client/words.js.map +1 -0
  30. package/dist-server/index.d.ts +1 -0
  31. package/dist-server/index.js +9 -0
  32. package/dist-server/index.js.map +1 -0
  33. package/dist-server/role-tasks.d.ts +2 -0
  34. package/dist-server/role-tasks.js +16 -0
  35. package/dist-server/role-tasks.js.map +1 -0
  36. package/dist-server/service/checks.d.ts +32 -0
  37. package/dist-server/service/checks.js +83 -0
  38. package/dist-server/service/checks.js.map +1 -0
  39. package/dist-server/service/index.d.ts +20 -0
  40. package/dist-server/service/index.js +38 -0
  41. package/dist-server/service/index.js.map +1 -0
  42. package/dist-server/service/saas-access.d.ts +20 -0
  43. package/dist-server/service/saas-access.js +36 -0
  44. package/dist-server/service/saas-access.js.map +1 -0
  45. package/dist-server/service/saas-account.d.ts +43 -0
  46. package/dist-server/service/saas-account.js +166 -0
  47. package/dist-server/service/saas-account.js.map +1 -0
  48. package/dist-server/service/saas-bill.d.ts +41 -0
  49. package/dist-server/service/saas-bill.js +160 -0
  50. package/dist-server/service/saas-bill.js.map +1 -0
  51. package/dist-server/service/saas-mutation.d.ts +12 -0
  52. package/dist-server/service/saas-mutation.js +103 -0
  53. package/dist-server/service/saas-mutation.js.map +1 -0
  54. package/dist-server/service/saas-query.d.ts +69 -0
  55. package/dist-server/service/saas-query.js +215 -0
  56. package/dist-server/service/saas-query.js.map +1 -0
  57. package/dist-server/service/saas-rules.d.ts +138 -0
  58. package/dist-server/service/saas-rules.js +217 -0
  59. package/dist-server/service/saas-rules.js.map +1 -0
  60. package/dist-server/service/saas-seat.d.ts +25 -0
  61. package/dist-server/service/saas-seat.js +105 -0
  62. package/dist-server/service/saas-seat.js.map +1 -0
  63. package/dist-server/service/saas-service.d.ts +119 -0
  64. package/dist-server/service/saas-service.js +492 -0
  65. package/dist-server/service/saas-service.js.map +1 -0
  66. package/dist-server/service/saas-subscription.d.ts +44 -0
  67. package/dist-server/service/saas-subscription.js +174 -0
  68. package/dist-server/service/saas-subscription.js.map +1 -0
  69. package/dist-server/service/saas-trend-type.d.ts +9 -0
  70. package/dist-server/service/saas-trend-type.js +37 -0
  71. package/dist-server/service/saas-trend-type.js.map +1 -0
  72. package/dist-server/service/saas-type.d.ts +113 -0
  73. package/dist-server/service/saas-type.js +430 -0
  74. package/dist-server/service/saas-type.js.map +1 -0
  75. package/dist-server/tsconfig.tsbuildinfo +1 -0
  76. package/package.json +49 -4
  77. package/things-factory.config.js +13 -0
  78. package/translations/en.json +185 -0
  79. package/translations/es.json +185 -0
  80. package/translations/ja.json +185 -0
  81. package/translations/ko.json +185 -0
  82. package/translations/ms.json +185 -0
  83. package/translations/zh.json +185 -0
package/package.json CHANGED
@@ -1,6 +1,51 @@
1
1
  {
2
2
  "name": "@things-factory/saas",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "10.1.234",
4
+ "main": "dist-server/index.js",
5
+ "browser": "dist-client/index.js",
6
+ "things-factory": true,
7
+ "license": "MIT",
8
+ "author": "heartyoh <heartyoh@hatiolab.com>",
9
+ "description": "What the company subscribes to online and pays for again and again - SaaS, cloud, domains, certificates - and the licenses it owns: the accounts, what is subscribed under each, who holds the seats, the bills month by month and the cost they trace",
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "@things-factory:registry": "https://registry.npmjs.org"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/hatiolab/things-factory.git",
17
+ "directory": "packages/saas"
18
+ },
19
+ "scripts": {
20
+ "build": "npm run build:server && npm run build:client",
21
+ "copy:files": "copyfiles -e \"./client/**/*.{ts,js,json}\" -u 1 \"./client/**/*\" dist-client",
22
+ "build:client": "npm run clean:client && npm run copy:files && npx tsc --p ./client/tsconfig.json",
23
+ "build:server": "npm run clean:server && npx tsc --p ./server/tsconfig.json",
24
+ "clean:server": "rm -rf dist-server",
25
+ "clean:client": "rm -rf dist-client",
26
+ "clean": "npm run clean:server && npm run clean:client",
27
+ "test": "node --test test/*.test.mjs"
28
+ },
29
+ "dependencies": {
30
+ "@material/web": "^2.0.0",
31
+ "@operato/data-grist": "^10.29.61",
32
+ "@operato/graphql": "^10.29.39",
33
+ "@operato/i18n": "^10.0.0",
34
+ "@operato/layout": "^10.29.49",
35
+ "@operato/popup": "^10.29.39",
36
+ "@operato/shell": "^10.29.39",
37
+ "@operato/styles": "^10.29.1",
38
+ "@operato/utils": "^10.0.0",
39
+ "@things-factory/accounting": "^10.1.234",
40
+ "@things-factory/asset": "^10.1.234",
41
+ "@things-factory/auth-base": "^10.1.234",
42
+ "@things-factory/biz-base": "^10.1.234",
43
+ "@things-factory/fact-change": "^10.1.234",
44
+ "@things-factory/i18n-base": "^10.1.234",
45
+ "@things-factory/organization": "^10.1.234",
46
+ "@things-factory/shell": "^10.1.234",
47
+ "graphql-tag": "^2.12.6",
48
+ "lit": "^3.1.2"
49
+ },
50
+ "gitHead": "92f29853680fff527a5f1d167ab3ad9b27837ba9"
51
+ }
@@ -0,0 +1,13 @@
1
+ import route from './dist-client/route.js'
2
+ import bootstrap from './dist-client/bootstrap.js'
3
+
4
+ export default {
5
+ route,
6
+ routes: [
7
+ { tagname: 'saas-account-list', page: 'saas-account-list' },
8
+ { tagname: 'my-saas-account-list', page: 'my-saas-account-list' },
9
+ { tagname: 'saas-account-page', page: 'saas-account-page' },
10
+ { tagname: 'saas-cost-trend', page: 'saas-cost-trend' }
11
+ ],
12
+ bootstrap
13
+ }
@@ -0,0 +1,185 @@
1
+ {
2
+ "button.saas-bill-add-line": "Add a line",
3
+ "button.saas-bill-new": "Write a bill",
4
+ "button.saas-cost-trend": "Cost trend",
5
+ "button.saas-open-account": "Account screen",
6
+ "error.saas-account-name-required": "Name the service.",
7
+ "error.saas-account-not-found": "The account was not found - reload and try again.",
8
+ "error.saas-admin-not-found": "An admin is an employee of this domain.",
9
+ "error.saas-alert-rate-invalid": "Give the rise alert rate as a part from 0 to 10 (0.2 for 20%).",
10
+ "error.saas-amount-invalid": "Give the amount as a number of zero or more.",
11
+ "error.saas-amount-required": "A fixed fee or a commitment takes what one billing costs.",
12
+ "error.saas-asset-not-found": "The asset was not found.",
13
+ "error.saas-bill-lines-required": "A bill takes at least one line.",
14
+ "error.saas-bill-month-taken": "The account already has a bill for {month} - change that one.",
15
+ "error.saas-bill-not-found": "The bill was not found - reload and try again.",
16
+ "error.saas-bill-on-sub-account": "An account under another is billed by its parent.",
17
+ "error.saas-bill-subscription-not-found": "A line names a subscription not of this account.",
18
+ "error.saas-billing-day-invalid": "The billing day is a whole number from {min} to {max}.",
19
+ "error.saas-billing-invalid": "Pick how it is billed.",
20
+ "error.saas-closed-on-required": "Give the day it was closed.",
21
+ "error.saas-counterparty-not-found": "The vendor was not found.",
22
+ "error.saas-currency-invalid": "'{value}' is not a currency code (KRW, USD).",
23
+ "error.saas-day-invalid": "Write the day as YYYY-MM-DD.",
24
+ "error.saas-department-not-found": "The department was not found.",
25
+ "error.saas-ended-before-start": "It ended before it started.",
26
+ "error.saas-ended-on-required": "Give the day it ended.",
27
+ "error.saas-every-months-invalid": "Every is a whole number of months from {min} to {max}.",
28
+ "error.saas-month-invalid": "Give the months as YYYY-MM, the first before the last.",
29
+ "error.saas-notice-days-invalid": "The notice is a whole number of days from {min} to {max}.",
30
+ "error.saas-owned-asset-required": "A license owned points at its asset in the register - its cost is there.",
31
+ "error.saas-parent-has-subscriptions": "An account with subscriptions cannot go under another.",
32
+ "error.saas-parent-invalid": "An account is under a top account only, and not under itself.",
33
+ "error.saas-parent-not-found": "The parent account was not found.",
34
+ "error.saas-payment-account-not-found": "The payment account was not found.",
35
+ "error.saas-renewal-on-required": "Not renewing takes the day it would renew.",
36
+ "error.saas-seat-employee-not-found": "The employee was not found.",
37
+ "error.saas-seat-holder-required": "Pick the employee who holds the seat, or write a name.",
38
+ "error.saas-seat-price-required": "A seat plan takes its seats (one or more) and the price of one.",
39
+ "error.saas-seat-until-before-from": "It was taken back before it was given.",
40
+ "error.saas-start-on-invalid": "Write the day it started as YYYY-MM-DD.",
41
+ "error.saas-subscription-name-required": "Name the product or plan.",
42
+ "error.saas-subscription-not-found": "The subscription was not found - reload and try again.",
43
+ "error.saas-subscription-on-sub-account": "An account under another is billed by its parent - subscribe there.",
44
+ "error.saas-term-end-required": "A commitment takes the day its term ends.",
45
+ "error.saas-trend-too-long": "Up to {max} months at once.",
46
+ "field.saas-account-admins": "Admins",
47
+ "field.saas-account-billing-day": "Billing day",
48
+ "field.saas-account-billing-email": "Billing email",
49
+ "field.saas-account-closed-on": "Closed on",
50
+ "field.saas-account-counterparty": "Vendor",
51
+ "field.saas-account-currency": "Currency",
52
+ "field.saas-account-description": "Notes",
53
+ "field.saas-account-identifier": "Account id",
54
+ "field.saas-account-increase-alert-rate": "Rise alert rate",
55
+ "field.saas-account-name": "Service",
56
+ "field.saas-account-parent": "Parent account",
57
+ "field.saas-account-payment-account": "Paid from",
58
+ "field.saas-account-purpose": "Purpose",
59
+ "field.saas-account-secret-location": "Secrets kept at",
60
+ "field.saas-account-status": "Status",
61
+ "field.saas-account-trend": "Last 12 months",
62
+ "field.saas-admin-employee": "Admin",
63
+ "field.saas-bill-billed-on": "Billed on",
64
+ "field.saas-bill-description": "Notes",
65
+ "field.saas-bill-line-amount": "Amount",
66
+ "field.saas-bill-line-label": "Label",
67
+ "field.saas-bill-line-subscription": "Subscription",
68
+ "field.saas-bill-lines": "Lines",
69
+ "field.saas-bill-month": "Month",
70
+ "field.saas-bill-total": "Total",
71
+ "field.saas-seat-description": "Notes",
72
+ "field.saas-seat-employee": "Employee",
73
+ "field.saas-seat-from-on": "From",
74
+ "field.saas-seat-holder": "Other holder",
75
+ "field.saas-seat-until-on": "Taken back",
76
+ "field.saas-subscription-amount": "Amount",
77
+ "field.saas-subscription-asset": "Asset",
78
+ "field.saas-subscription-auto-renew": "Auto-renew",
79
+ "field.saas-subscription-billing": "Billing",
80
+ "field.saas-subscription-budget": "Monthly budget",
81
+ "field.saas-subscription-department": "Department",
82
+ "field.saas-subscription-description": "Notes",
83
+ "field.saas-subscription-ended-on": "Ended",
84
+ "field.saas-subscription-every-months": "Every (months)",
85
+ "field.saas-subscription-name": "Product / plan",
86
+ "field.saas-subscription-notice-days": "Notice (days)",
87
+ "field.saas-subscription-quantity": "Qty",
88
+ "field.saas-subscription-renewal-on": "Renews",
89
+ "field.saas-subscription-seats-held": "Seats held",
90
+ "field.saas-subscription-start-on": "Started",
91
+ "field.saas-subscription-status": "Status",
92
+ "field.saas-subscription-unit-price": "Unit price",
93
+ "field.saas-trend-account": "Account / subscription",
94
+ "field.saas-trend-currency": "Currency",
95
+ "field.saas-trend-department": "Department",
96
+ "field.saas-trend-month-over-month": "vs last month",
97
+ "field.saas-trend-total": "Total",
98
+ "field.saas-trend-year-over-year": "vs last year",
99
+ "task.saas.administering.description": "Reads and changes the subscriptions, seats and bills of the accounts one is named an admin of - not the account or its admins.",
100
+ "task.saas.administering.name": "Subscription account admin",
101
+ "task.saas.keeping.description": "Reads and changes the subscription accounts, subscriptions, seats and bills.",
102
+ "task.saas.keeping.name": "Keeping subscriptions",
103
+ "task.saas.reading.description": "Reads the subscription accounts, subscriptions, seats, bills and the cost trend.",
104
+ "task.saas.reading.name": "Reading subscriptions",
105
+ "text.my-saas-account-empty": "You administer no account.",
106
+ "text.my-saas-account-empty-description": "An account's admins are named by finance.",
107
+ "text.saas-360-budget": "budget {budget} a month",
108
+ "text.saas-360-changes": "What changed",
109
+ "text.saas-360-changes-empty": "Nothing changed. Changes are kept from 2026-10-30.",
110
+ "text.saas-360-months": "The last 12 months and the next 3",
111
+ "text.saas-360-next-renewal": "Next renewal",
112
+ "text.saas-360-payments": "Paid to {vendor}",
113
+ "text.saas-360-payments-empty": "No bank line paid this vendor.",
114
+ "text.saas-360-payments-no-vendor": "Name the vendor to see the bank lines that paid it here.",
115
+ "text.saas-360-seats": "{quantity} seats · {held} held",
116
+ "text.saas-360-source-bank": "bank",
117
+ "text.saas-360-source-bill": "bill",
118
+ "text.saas-account-billing-day": "paid on day {day}",
119
+ "text.saas-account-empty": "No accounts yet.",
120
+ "text.saas-account-empty-description": "Add the accounts bills come from - AWS, Microsoft 365, a domain registrar.",
121
+ "text.saas-account-secret-at": "secrets at: {where}",
122
+ "text.saas-account-status-active": "In use",
123
+ "text.saas-account-status-closed": "Closed",
124
+ "text.saas-account-under": "under {name}",
125
+ "text.saas-admins-empty": "No admins.",
126
+ "text.saas-alert-bill-increased": "{account}: billed {amount} - over the {limit} allowed after last month",
127
+ "text.saas-alert-seat-bill-differs": "{account} · {subscription}: billed {amount} - not seats times price {limit}",
128
+ "text.saas-alert-usage-over-budget": "{account} · {subscription}: usage {amount} - over the monthly budget {limit}",
129
+ "text.saas-bill-line-none": "(no subscription - tax, credits)",
130
+ "text.saas-bill-saved": "The bill of {month} is saved.",
131
+ "text.saas-bill-total": "Total {total} {currency}",
132
+ "text.saas-billing-commitment": "Commitment",
133
+ "text.saas-billing-fixed": "Fixed",
134
+ "text.saas-billing-owned": "Owned",
135
+ "text.saas-billing-seat": "Seats",
136
+ "text.saas-billing-usage": "Usage",
137
+ "text.saas-bills-empty": "No bills.",
138
+ "text.saas-change-field-amount": "amount",
139
+ "text.saas-change-field-assetId": "asset",
140
+ "text.saas-change-field-autoRenew": "auto-renew",
141
+ "text.saas-change-field-billing": "billing",
142
+ "text.saas-change-field-billingDay": "billing day",
143
+ "text.saas-change-field-budget": "budget",
144
+ "text.saas-change-field-closedOn": "closed on",
145
+ "text.saas-change-field-counterpartyId": "vendor",
146
+ "text.saas-change-field-currency": "currency",
147
+ "text.saas-change-field-departmentId": "department",
148
+ "text.saas-change-field-endedOn": "ended",
149
+ "text.saas-change-field-everyMonths": "every (months)",
150
+ "text.saas-change-field-identifier": "account id",
151
+ "text.saas-change-field-increaseAlertRate": "rise alert rate",
152
+ "text.saas-change-field-name": "name",
153
+ "text.saas-change-field-noticeDays": "notice",
154
+ "text.saas-change-field-parentId": "parent account",
155
+ "text.saas-change-field-paymentAccountId": "paid from",
156
+ "text.saas-change-field-quantity": "quantity",
157
+ "text.saas-change-field-renewalOn": "renews",
158
+ "text.saas-change-field-startOn": "started",
159
+ "text.saas-change-field-status": "status",
160
+ "text.saas-change-field-unitPrice": "unit price",
161
+ "text.saas-seats-empty": "No seats.",
162
+ "text.saas-seats-no-plan": "No seat plan. Set a subscription's billing to Seats on the Subscriptions tab to write its seats here.",
163
+ "text.saas-subscription-status-active": "In use",
164
+ "text.saas-subscription-status-cancelled": "Ended",
165
+ "text.saas-subscription-status-cancelling": "Not renewing",
166
+ "text.saas-subscriptions-empty": "No subscriptions.",
167
+ "text.saas-tab-admins": "Admins",
168
+ "text.saas-tab-bills": "Bills",
169
+ "text.saas-tab-seats": "Seats",
170
+ "text.saas-tab-subscriptions": "Subscriptions",
171
+ "text.saas-trend-accounts": "By account and subscription",
172
+ "text.saas-trend-alerts": "Worth telling in the bills of {month}",
173
+ "text.saas-trend-all": "All",
174
+ "text.saas-trend-departments": "By department",
175
+ "text.saas-trend-empty": "No bills in these months. Write them month by month on an account's Bills tab.",
176
+ "text.saas-trend-expected": "expected",
177
+ "text.saas-trend-no-department": "(no department)",
178
+ "text.saas-trend-rest": "(no subscription - tax, credits)",
179
+ "title.my-saas-account-list": "Subscriptions I administer",
180
+ "title.saas-account-list": "Subscriptions",
181
+ "title.saas-account-page": "Subscription account",
182
+ "title.saas-bill-edit": "Bill of {month}",
183
+ "title.saas-bill-new": "Write a bill",
184
+ "title.saas-cost-trend": "Subscription cost trend"
185
+ }
@@ -0,0 +1,185 @@
1
+ {
2
+ "button.saas-bill-add-line": "Add a line",
3
+ "button.saas-bill-new": "Write a bill",
4
+ "button.saas-cost-trend": "Cost trend",
5
+ "button.saas-open-account": "Account screen",
6
+ "error.saas-account-name-required": "Name the service.",
7
+ "error.saas-account-not-found": "The account was not found - reload and try again.",
8
+ "error.saas-admin-not-found": "An admin is an employee of this domain.",
9
+ "error.saas-alert-rate-invalid": "Give the rise alert rate as a part from 0 to 10 (0.2 for 20%).",
10
+ "error.saas-amount-invalid": "Give the amount as a number of zero or more.",
11
+ "error.saas-amount-required": "A fixed fee or a commitment takes what one billing costs.",
12
+ "error.saas-asset-not-found": "The asset was not found.",
13
+ "error.saas-bill-lines-required": "A bill takes at least one line.",
14
+ "error.saas-bill-month-taken": "The account already has a bill for {month} - change that one.",
15
+ "error.saas-bill-not-found": "The bill was not found - reload and try again.",
16
+ "error.saas-bill-on-sub-account": "An account under another is billed by its parent.",
17
+ "error.saas-bill-subscription-not-found": "A line names a subscription not of this account.",
18
+ "error.saas-billing-day-invalid": "The billing day is a whole number from {min} to {max}.",
19
+ "error.saas-billing-invalid": "Pick how it is billed.",
20
+ "error.saas-closed-on-required": "Give the day it was closed.",
21
+ "error.saas-counterparty-not-found": "The vendor was not found.",
22
+ "error.saas-currency-invalid": "'{value}' is not a currency code (KRW, USD).",
23
+ "error.saas-day-invalid": "Write the day as YYYY-MM-DD.",
24
+ "error.saas-department-not-found": "The department was not found.",
25
+ "error.saas-ended-before-start": "It ended before it started.",
26
+ "error.saas-ended-on-required": "Give the day it ended.",
27
+ "error.saas-every-months-invalid": "Every is a whole number of months from {min} to {max}.",
28
+ "error.saas-month-invalid": "Give the months as YYYY-MM, the first before the last.",
29
+ "error.saas-notice-days-invalid": "The notice is a whole number of days from {min} to {max}.",
30
+ "error.saas-owned-asset-required": "A license owned points at its asset in the register - its cost is there.",
31
+ "error.saas-parent-has-subscriptions": "An account with subscriptions cannot go under another.",
32
+ "error.saas-parent-invalid": "An account is under a top account only, and not under itself.",
33
+ "error.saas-parent-not-found": "The parent account was not found.",
34
+ "error.saas-payment-account-not-found": "The payment account was not found.",
35
+ "error.saas-renewal-on-required": "Not renewing takes the day it would renew.",
36
+ "error.saas-seat-employee-not-found": "The employee was not found.",
37
+ "error.saas-seat-holder-required": "Pick the employee who holds the seat, or write a name.",
38
+ "error.saas-seat-price-required": "A seat plan takes its seats (one or more) and the price of one.",
39
+ "error.saas-seat-until-before-from": "It was taken back before it was given.",
40
+ "error.saas-start-on-invalid": "Write the day it started as YYYY-MM-DD.",
41
+ "error.saas-subscription-name-required": "Name the product or plan.",
42
+ "error.saas-subscription-not-found": "The subscription was not found - reload and try again.",
43
+ "error.saas-subscription-on-sub-account": "An account under another is billed by its parent - subscribe there.",
44
+ "error.saas-term-end-required": "A commitment takes the day its term ends.",
45
+ "error.saas-trend-too-long": "Up to {max} months at once.",
46
+ "field.saas-account-admins": "Admins",
47
+ "field.saas-account-billing-day": "Billing day",
48
+ "field.saas-account-billing-email": "Billing email",
49
+ "field.saas-account-closed-on": "Closed on",
50
+ "field.saas-account-counterparty": "Vendor",
51
+ "field.saas-account-currency": "Currency",
52
+ "field.saas-account-description": "Notes",
53
+ "field.saas-account-identifier": "Account id",
54
+ "field.saas-account-increase-alert-rate": "Rise alert rate",
55
+ "field.saas-account-name": "Service",
56
+ "field.saas-account-parent": "Parent account",
57
+ "field.saas-account-payment-account": "Paid from",
58
+ "field.saas-account-purpose": "Purpose",
59
+ "field.saas-account-secret-location": "Secrets kept at",
60
+ "field.saas-account-status": "Status",
61
+ "field.saas-account-trend": "Last 12 months",
62
+ "field.saas-admin-employee": "Admin",
63
+ "field.saas-bill-billed-on": "Billed on",
64
+ "field.saas-bill-description": "Notes",
65
+ "field.saas-bill-line-amount": "Amount",
66
+ "field.saas-bill-line-label": "Label",
67
+ "field.saas-bill-line-subscription": "Subscription",
68
+ "field.saas-bill-lines": "Lines",
69
+ "field.saas-bill-month": "Month",
70
+ "field.saas-bill-total": "Total",
71
+ "field.saas-seat-description": "Notes",
72
+ "field.saas-seat-employee": "Employee",
73
+ "field.saas-seat-from-on": "From",
74
+ "field.saas-seat-holder": "Other holder",
75
+ "field.saas-seat-until-on": "Taken back",
76
+ "field.saas-subscription-amount": "Amount",
77
+ "field.saas-subscription-asset": "Asset",
78
+ "field.saas-subscription-auto-renew": "Auto-renew",
79
+ "field.saas-subscription-billing": "Billing",
80
+ "field.saas-subscription-budget": "Monthly budget",
81
+ "field.saas-subscription-department": "Department",
82
+ "field.saas-subscription-description": "Notes",
83
+ "field.saas-subscription-ended-on": "Ended",
84
+ "field.saas-subscription-every-months": "Every (months)",
85
+ "field.saas-subscription-name": "Product / plan",
86
+ "field.saas-subscription-notice-days": "Notice (days)",
87
+ "field.saas-subscription-quantity": "Qty",
88
+ "field.saas-subscription-renewal-on": "Renews",
89
+ "field.saas-subscription-seats-held": "Seats held",
90
+ "field.saas-subscription-start-on": "Started",
91
+ "field.saas-subscription-status": "Status",
92
+ "field.saas-subscription-unit-price": "Unit price",
93
+ "field.saas-trend-account": "Account / subscription",
94
+ "field.saas-trend-currency": "Currency",
95
+ "field.saas-trend-department": "Department",
96
+ "field.saas-trend-month-over-month": "vs last month",
97
+ "field.saas-trend-total": "Total",
98
+ "field.saas-trend-year-over-year": "vs last year",
99
+ "task.saas.administering.description": "Reads and changes the subscriptions, seats and bills of the accounts one is named an admin of - not the account or its admins.",
100
+ "task.saas.administering.name": "Subscription account admin",
101
+ "task.saas.keeping.description": "Reads and changes the subscription accounts, subscriptions, seats and bills.",
102
+ "task.saas.keeping.name": "Keeping subscriptions",
103
+ "task.saas.reading.description": "Reads the subscription accounts, subscriptions, seats, bills and the cost trend.",
104
+ "task.saas.reading.name": "Reading subscriptions",
105
+ "text.my-saas-account-empty": "You administer no account.",
106
+ "text.my-saas-account-empty-description": "An account's admins are named by finance.",
107
+ "text.saas-360-budget": "budget {budget} a month",
108
+ "text.saas-360-changes": "What changed",
109
+ "text.saas-360-changes-empty": "Nothing changed. Changes are kept from 2026-10-30.",
110
+ "text.saas-360-months": "The last 12 months and the next 3",
111
+ "text.saas-360-next-renewal": "Next renewal",
112
+ "text.saas-360-payments": "Paid to {vendor}",
113
+ "text.saas-360-payments-empty": "No bank line paid this vendor.",
114
+ "text.saas-360-payments-no-vendor": "Name the vendor to see the bank lines that paid it here.",
115
+ "text.saas-360-seats": "{quantity} seats · {held} held",
116
+ "text.saas-360-source-bank": "bank",
117
+ "text.saas-360-source-bill": "bill",
118
+ "text.saas-account-billing-day": "paid on day {day}",
119
+ "text.saas-account-empty": "No accounts yet.",
120
+ "text.saas-account-empty-description": "Add the accounts bills come from - AWS, Microsoft 365, a domain registrar.",
121
+ "text.saas-account-secret-at": "secrets at: {where}",
122
+ "text.saas-account-status-active": "In use",
123
+ "text.saas-account-status-closed": "Closed",
124
+ "text.saas-account-under": "under {name}",
125
+ "text.saas-admins-empty": "No admins.",
126
+ "text.saas-alert-bill-increased": "{account}: billed {amount} - over the {limit} allowed after last month",
127
+ "text.saas-alert-seat-bill-differs": "{account} · {subscription}: billed {amount} - not seats times price {limit}",
128
+ "text.saas-alert-usage-over-budget": "{account} · {subscription}: usage {amount} - over the monthly budget {limit}",
129
+ "text.saas-bill-line-none": "(no subscription - tax, credits)",
130
+ "text.saas-bill-saved": "The bill of {month} is saved.",
131
+ "text.saas-bill-total": "Total {total} {currency}",
132
+ "text.saas-billing-commitment": "Commitment",
133
+ "text.saas-billing-fixed": "Fixed",
134
+ "text.saas-billing-owned": "Owned",
135
+ "text.saas-billing-seat": "Seats",
136
+ "text.saas-billing-usage": "Usage",
137
+ "text.saas-bills-empty": "No bills.",
138
+ "text.saas-change-field-amount": "amount",
139
+ "text.saas-change-field-assetId": "asset",
140
+ "text.saas-change-field-autoRenew": "auto-renew",
141
+ "text.saas-change-field-billing": "billing",
142
+ "text.saas-change-field-billingDay": "billing day",
143
+ "text.saas-change-field-budget": "budget",
144
+ "text.saas-change-field-closedOn": "closed on",
145
+ "text.saas-change-field-counterpartyId": "vendor",
146
+ "text.saas-change-field-currency": "currency",
147
+ "text.saas-change-field-departmentId": "department",
148
+ "text.saas-change-field-endedOn": "ended",
149
+ "text.saas-change-field-everyMonths": "every (months)",
150
+ "text.saas-change-field-identifier": "account id",
151
+ "text.saas-change-field-increaseAlertRate": "rise alert rate",
152
+ "text.saas-change-field-name": "name",
153
+ "text.saas-change-field-noticeDays": "notice",
154
+ "text.saas-change-field-parentId": "parent account",
155
+ "text.saas-change-field-paymentAccountId": "paid from",
156
+ "text.saas-change-field-quantity": "quantity",
157
+ "text.saas-change-field-renewalOn": "renews",
158
+ "text.saas-change-field-startOn": "started",
159
+ "text.saas-change-field-status": "status",
160
+ "text.saas-change-field-unitPrice": "unit price",
161
+ "text.saas-seats-empty": "No seats.",
162
+ "text.saas-seats-no-plan": "No seat plan. Set a subscription's billing to Seats on the Subscriptions tab to write its seats here.",
163
+ "text.saas-subscription-status-active": "In use",
164
+ "text.saas-subscription-status-cancelled": "Ended",
165
+ "text.saas-subscription-status-cancelling": "Not renewing",
166
+ "text.saas-subscriptions-empty": "No subscriptions.",
167
+ "text.saas-tab-admins": "Admins",
168
+ "text.saas-tab-bills": "Bills",
169
+ "text.saas-tab-seats": "Seats",
170
+ "text.saas-tab-subscriptions": "Subscriptions",
171
+ "text.saas-trend-accounts": "By account and subscription",
172
+ "text.saas-trend-alerts": "Worth telling in the bills of {month}",
173
+ "text.saas-trend-all": "All",
174
+ "text.saas-trend-departments": "By department",
175
+ "text.saas-trend-empty": "No bills in these months. Write them month by month on an account's Bills tab.",
176
+ "text.saas-trend-expected": "expected",
177
+ "text.saas-trend-no-department": "(no department)",
178
+ "text.saas-trend-rest": "(no subscription - tax, credits)",
179
+ "title.my-saas-account-list": "Subscriptions I administer",
180
+ "title.saas-account-list": "Subscriptions",
181
+ "title.saas-account-page": "Subscription account",
182
+ "title.saas-bill-edit": "Bill of {month}",
183
+ "title.saas-bill-new": "Write a bill",
184
+ "title.saas-cost-trend": "Subscription cost trend"
185
+ }
@@ -0,0 +1,185 @@
1
+ {
2
+ "button.saas-bill-add-line": "Add a line",
3
+ "button.saas-bill-new": "Write a bill",
4
+ "button.saas-cost-trend": "Cost trend",
5
+ "button.saas-open-account": "Account screen",
6
+ "error.saas-account-name-required": "Name the service.",
7
+ "error.saas-account-not-found": "The account was not found - reload and try again.",
8
+ "error.saas-admin-not-found": "An admin is an employee of this domain.",
9
+ "error.saas-alert-rate-invalid": "Give the rise alert rate as a part from 0 to 10 (0.2 for 20%).",
10
+ "error.saas-amount-invalid": "Give the amount as a number of zero or more.",
11
+ "error.saas-amount-required": "A fixed fee or a commitment takes what one billing costs.",
12
+ "error.saas-asset-not-found": "The asset was not found.",
13
+ "error.saas-bill-lines-required": "A bill takes at least one line.",
14
+ "error.saas-bill-month-taken": "The account already has a bill for {month} - change that one.",
15
+ "error.saas-bill-not-found": "The bill was not found - reload and try again.",
16
+ "error.saas-bill-on-sub-account": "An account under another is billed by its parent.",
17
+ "error.saas-bill-subscription-not-found": "A line names a subscription not of this account.",
18
+ "error.saas-billing-day-invalid": "The billing day is a whole number from {min} to {max}.",
19
+ "error.saas-billing-invalid": "Pick how it is billed.",
20
+ "error.saas-closed-on-required": "Give the day it was closed.",
21
+ "error.saas-counterparty-not-found": "The vendor was not found.",
22
+ "error.saas-currency-invalid": "'{value}' is not a currency code (KRW, USD).",
23
+ "error.saas-day-invalid": "Write the day as YYYY-MM-DD.",
24
+ "error.saas-department-not-found": "The department was not found.",
25
+ "error.saas-ended-before-start": "It ended before it started.",
26
+ "error.saas-ended-on-required": "Give the day it ended.",
27
+ "error.saas-every-months-invalid": "Every is a whole number of months from {min} to {max}.",
28
+ "error.saas-month-invalid": "Give the months as YYYY-MM, the first before the last.",
29
+ "error.saas-notice-days-invalid": "The notice is a whole number of days from {min} to {max}.",
30
+ "error.saas-owned-asset-required": "A license owned points at its asset in the register - its cost is there.",
31
+ "error.saas-parent-has-subscriptions": "An account with subscriptions cannot go under another.",
32
+ "error.saas-parent-invalid": "An account is under a top account only, and not under itself.",
33
+ "error.saas-parent-not-found": "The parent account was not found.",
34
+ "error.saas-payment-account-not-found": "The payment account was not found.",
35
+ "error.saas-renewal-on-required": "Not renewing takes the day it would renew.",
36
+ "error.saas-seat-employee-not-found": "The employee was not found.",
37
+ "error.saas-seat-holder-required": "Pick the employee who holds the seat, or write a name.",
38
+ "error.saas-seat-price-required": "A seat plan takes its seats (one or more) and the price of one.",
39
+ "error.saas-seat-until-before-from": "It was taken back before it was given.",
40
+ "error.saas-start-on-invalid": "Write the day it started as YYYY-MM-DD.",
41
+ "error.saas-subscription-name-required": "Name the product or plan.",
42
+ "error.saas-subscription-not-found": "The subscription was not found - reload and try again.",
43
+ "error.saas-subscription-on-sub-account": "An account under another is billed by its parent - subscribe there.",
44
+ "error.saas-term-end-required": "A commitment takes the day its term ends.",
45
+ "error.saas-trend-too-long": "Up to {max} months at once.",
46
+ "field.saas-account-admins": "Admins",
47
+ "field.saas-account-billing-day": "Billing day",
48
+ "field.saas-account-billing-email": "Billing email",
49
+ "field.saas-account-closed-on": "Closed on",
50
+ "field.saas-account-counterparty": "Vendor",
51
+ "field.saas-account-currency": "Currency",
52
+ "field.saas-account-description": "Notes",
53
+ "field.saas-account-identifier": "Account id",
54
+ "field.saas-account-increase-alert-rate": "Rise alert rate",
55
+ "field.saas-account-name": "Service",
56
+ "field.saas-account-parent": "Parent account",
57
+ "field.saas-account-payment-account": "Paid from",
58
+ "field.saas-account-purpose": "Purpose",
59
+ "field.saas-account-secret-location": "Secrets kept at",
60
+ "field.saas-account-status": "Status",
61
+ "field.saas-account-trend": "Last 12 months",
62
+ "field.saas-admin-employee": "Admin",
63
+ "field.saas-bill-billed-on": "Billed on",
64
+ "field.saas-bill-description": "Notes",
65
+ "field.saas-bill-line-amount": "Amount",
66
+ "field.saas-bill-line-label": "Label",
67
+ "field.saas-bill-line-subscription": "Subscription",
68
+ "field.saas-bill-lines": "Lines",
69
+ "field.saas-bill-month": "Month",
70
+ "field.saas-bill-total": "Total",
71
+ "field.saas-seat-description": "Notes",
72
+ "field.saas-seat-employee": "Employee",
73
+ "field.saas-seat-from-on": "From",
74
+ "field.saas-seat-holder": "Other holder",
75
+ "field.saas-seat-until-on": "Taken back",
76
+ "field.saas-subscription-amount": "Amount",
77
+ "field.saas-subscription-asset": "Asset",
78
+ "field.saas-subscription-auto-renew": "Auto-renew",
79
+ "field.saas-subscription-billing": "Billing",
80
+ "field.saas-subscription-budget": "Monthly budget",
81
+ "field.saas-subscription-department": "Department",
82
+ "field.saas-subscription-description": "Notes",
83
+ "field.saas-subscription-ended-on": "Ended",
84
+ "field.saas-subscription-every-months": "Every (months)",
85
+ "field.saas-subscription-name": "Product / plan",
86
+ "field.saas-subscription-notice-days": "Notice (days)",
87
+ "field.saas-subscription-quantity": "Qty",
88
+ "field.saas-subscription-renewal-on": "Renews",
89
+ "field.saas-subscription-seats-held": "Seats held",
90
+ "field.saas-subscription-start-on": "Started",
91
+ "field.saas-subscription-status": "Status",
92
+ "field.saas-subscription-unit-price": "Unit price",
93
+ "field.saas-trend-account": "Account / subscription",
94
+ "field.saas-trend-currency": "Currency",
95
+ "field.saas-trend-department": "Department",
96
+ "field.saas-trend-month-over-month": "vs last month",
97
+ "field.saas-trend-total": "Total",
98
+ "field.saas-trend-year-over-year": "vs last year",
99
+ "task.saas.administering.description": "Reads and changes the subscriptions, seats and bills of the accounts one is named an admin of - not the account or its admins.",
100
+ "task.saas.administering.name": "Subscription account admin",
101
+ "task.saas.keeping.description": "Reads and changes the subscription accounts, subscriptions, seats and bills.",
102
+ "task.saas.keeping.name": "Keeping subscriptions",
103
+ "task.saas.reading.description": "Reads the subscription accounts, subscriptions, seats, bills and the cost trend.",
104
+ "task.saas.reading.name": "Reading subscriptions",
105
+ "text.my-saas-account-empty": "You administer no account.",
106
+ "text.my-saas-account-empty-description": "An account's admins are named by finance.",
107
+ "text.saas-360-budget": "budget {budget} a month",
108
+ "text.saas-360-changes": "What changed",
109
+ "text.saas-360-changes-empty": "Nothing changed. Changes are kept from 2026-10-30.",
110
+ "text.saas-360-months": "The last 12 months and the next 3",
111
+ "text.saas-360-next-renewal": "Next renewal",
112
+ "text.saas-360-payments": "Paid to {vendor}",
113
+ "text.saas-360-payments-empty": "No bank line paid this vendor.",
114
+ "text.saas-360-payments-no-vendor": "Name the vendor to see the bank lines that paid it here.",
115
+ "text.saas-360-seats": "{quantity} seats · {held} held",
116
+ "text.saas-360-source-bank": "bank",
117
+ "text.saas-360-source-bill": "bill",
118
+ "text.saas-account-billing-day": "paid on day {day}",
119
+ "text.saas-account-empty": "No accounts yet.",
120
+ "text.saas-account-empty-description": "Add the accounts bills come from - AWS, Microsoft 365, a domain registrar.",
121
+ "text.saas-account-secret-at": "secrets at: {where}",
122
+ "text.saas-account-status-active": "In use",
123
+ "text.saas-account-status-closed": "Closed",
124
+ "text.saas-account-under": "under {name}",
125
+ "text.saas-admins-empty": "No admins.",
126
+ "text.saas-alert-bill-increased": "{account}: billed {amount} - over the {limit} allowed after last month",
127
+ "text.saas-alert-seat-bill-differs": "{account} · {subscription}: billed {amount} - not seats times price {limit}",
128
+ "text.saas-alert-usage-over-budget": "{account} · {subscription}: usage {amount} - over the monthly budget {limit}",
129
+ "text.saas-bill-line-none": "(no subscription - tax, credits)",
130
+ "text.saas-bill-saved": "The bill of {month} is saved.",
131
+ "text.saas-bill-total": "Total {total} {currency}",
132
+ "text.saas-billing-commitment": "Commitment",
133
+ "text.saas-billing-fixed": "Fixed",
134
+ "text.saas-billing-owned": "Owned",
135
+ "text.saas-billing-seat": "Seats",
136
+ "text.saas-billing-usage": "Usage",
137
+ "text.saas-bills-empty": "No bills.",
138
+ "text.saas-change-field-amount": "amount",
139
+ "text.saas-change-field-assetId": "asset",
140
+ "text.saas-change-field-autoRenew": "auto-renew",
141
+ "text.saas-change-field-billing": "billing",
142
+ "text.saas-change-field-billingDay": "billing day",
143
+ "text.saas-change-field-budget": "budget",
144
+ "text.saas-change-field-closedOn": "closed on",
145
+ "text.saas-change-field-counterpartyId": "vendor",
146
+ "text.saas-change-field-currency": "currency",
147
+ "text.saas-change-field-departmentId": "department",
148
+ "text.saas-change-field-endedOn": "ended",
149
+ "text.saas-change-field-everyMonths": "every (months)",
150
+ "text.saas-change-field-identifier": "account id",
151
+ "text.saas-change-field-increaseAlertRate": "rise alert rate",
152
+ "text.saas-change-field-name": "name",
153
+ "text.saas-change-field-noticeDays": "notice",
154
+ "text.saas-change-field-parentId": "parent account",
155
+ "text.saas-change-field-paymentAccountId": "paid from",
156
+ "text.saas-change-field-quantity": "quantity",
157
+ "text.saas-change-field-renewalOn": "renews",
158
+ "text.saas-change-field-startOn": "started",
159
+ "text.saas-change-field-status": "status",
160
+ "text.saas-change-field-unitPrice": "unit price",
161
+ "text.saas-seats-empty": "No seats.",
162
+ "text.saas-seats-no-plan": "No seat plan. Set a subscription's billing to Seats on the Subscriptions tab to write its seats here.",
163
+ "text.saas-subscription-status-active": "In use",
164
+ "text.saas-subscription-status-cancelled": "Ended",
165
+ "text.saas-subscription-status-cancelling": "Not renewing",
166
+ "text.saas-subscriptions-empty": "No subscriptions.",
167
+ "text.saas-tab-admins": "Admins",
168
+ "text.saas-tab-bills": "Bills",
169
+ "text.saas-tab-seats": "Seats",
170
+ "text.saas-tab-subscriptions": "Subscriptions",
171
+ "text.saas-trend-accounts": "By account and subscription",
172
+ "text.saas-trend-alerts": "Worth telling in the bills of {month}",
173
+ "text.saas-trend-all": "All",
174
+ "text.saas-trend-departments": "By department",
175
+ "text.saas-trend-empty": "No bills in these months. Write them month by month on an account's Bills tab.",
176
+ "text.saas-trend-expected": "expected",
177
+ "text.saas-trend-no-department": "(no department)",
178
+ "text.saas-trend-rest": "(no subscription - tax, credits)",
179
+ "title.my-saas-account-list": "Subscriptions I administer",
180
+ "title.saas-account-list": "Subscriptions",
181
+ "title.saas-account-page": "Subscription account",
182
+ "title.saas-bill-edit": "Bill of {month}",
183
+ "title.saas-bill-new": "Write a bill",
184
+ "title.saas-cost-trend": "Subscription cost trend"
185
+ }