@spaceinvoices/react-ui 0.4.1 → 0.4.2

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 (191) hide show
  1. package/cli/dist/index.js +1 -1
  2. package/package.json +1 -1
  3. package/registry.json +25 -0
  4. package/src/components/advance-invoices/advance-invoices.hooks.ts +32 -2
  5. package/src/components/advance-invoices/create/create-advance-invoice-form.tsx +109 -4
  6. package/src/components/advance-invoices/create/locales/de.ts +2 -0
  7. package/src/components/advance-invoices/create/locales/es.ts +2 -0
  8. package/src/components/advance-invoices/create/locales/fr.ts +2 -0
  9. package/src/components/advance-invoices/create/locales/hr.ts +2 -0
  10. package/src/components/advance-invoices/create/locales/it.ts +2 -0
  11. package/src/components/advance-invoices/create/locales/nl.ts +2 -0
  12. package/src/components/advance-invoices/create/locales/pl.ts +2 -0
  13. package/src/components/advance-invoices/create/locales/pt.ts +2 -0
  14. package/src/components/advance-invoices/create/locales/sl.ts +2 -0
  15. package/src/components/advance-invoices/create/prepare-advance-invoice-submission.ts +17 -0
  16. package/src/components/advance-invoices/list/list-row-actions.tsx +3 -6
  17. package/src/components/advance-invoices/list/list-table.tsx +45 -2
  18. package/src/components/advance-invoices/list/locales/de.ts +3 -0
  19. package/src/components/advance-invoices/list/locales/en.ts +3 -0
  20. package/src/components/advance-invoices/list/locales/es.ts +3 -0
  21. package/src/components/advance-invoices/list/locales/fr.ts +3 -0
  22. package/src/components/advance-invoices/list/locales/hr.ts +3 -0
  23. package/src/components/advance-invoices/list/locales/it.ts +3 -0
  24. package/src/components/advance-invoices/list/locales/nl.ts +3 -0
  25. package/src/components/advance-invoices/list/locales/pl.ts +3 -0
  26. package/src/components/advance-invoices/list/locales/pt.ts +3 -0
  27. package/src/components/advance-invoices/list/locales/sl.ts +3 -0
  28. package/src/components/credit-notes/create/create-credit-note-form.tsx +177 -6
  29. package/src/components/credit-notes/create/locales/de.ts +8 -0
  30. package/src/components/credit-notes/create/locales/es.ts +8 -0
  31. package/src/components/credit-notes/create/locales/fr.ts +7 -0
  32. package/src/components/credit-notes/create/locales/hr.ts +7 -0
  33. package/src/components/credit-notes/create/locales/it.ts +9 -0
  34. package/src/components/credit-notes/create/locales/nl.ts +7 -0
  35. package/src/components/credit-notes/create/locales/pl.ts +7 -0
  36. package/src/components/credit-notes/create/locales/pt.ts +7 -0
  37. package/src/components/credit-notes/create/locales/sl.ts +7 -0
  38. package/src/components/credit-notes/credit-notes.hooks.ts +30 -0
  39. package/src/components/credit-notes/list/list-row-actions.tsx +3 -6
  40. package/src/components/credit-notes/list/list-table.tsx +45 -2
  41. package/src/components/credit-notes/list/locales/de.ts +3 -0
  42. package/src/components/credit-notes/list/locales/en.ts +3 -0
  43. package/src/components/credit-notes/list/locales/es.ts +3 -0
  44. package/src/components/credit-notes/list/locales/fr.ts +3 -0
  45. package/src/components/credit-notes/list/locales/hr.ts +3 -0
  46. package/src/components/credit-notes/list/locales/it.ts +3 -0
  47. package/src/components/credit-notes/list/locales/nl.ts +3 -0
  48. package/src/components/credit-notes/list/locales/pl.ts +3 -0
  49. package/src/components/credit-notes/list/locales/pt.ts +3 -0
  50. package/src/components/credit-notes/list/locales/sl.ts +3 -0
  51. package/src/components/customers/create-customer-form/create-customer-form.tsx +0 -1
  52. package/src/components/documents/create/document-details-section.tsx +67 -1
  53. package/src/components/documents/create/mark-as-paid-section.tsx +11 -2
  54. package/src/components/documents/view/document-actions-bar.tsx +30 -0
  55. package/src/components/documents/view/locales/de.ts +5 -0
  56. package/src/components/documents/view/locales/es.ts +5 -0
  57. package/src/components/documents/view/locales/fr.ts +5 -0
  58. package/src/components/documents/view/locales/hr.ts +5 -0
  59. package/src/components/documents/view/locales/it.ts +5 -0
  60. package/src/components/documents/view/locales/nl.ts +5 -0
  61. package/src/components/documents/view/locales/pl.ts +5 -0
  62. package/src/components/documents/view/locales/pt.ts +5 -0
  63. package/src/components/documents/view/locales/sl.ts +5 -0
  64. package/src/components/entities/create-entity-form.tsx +1 -1
  65. package/src/components/entities/entity-settings-form/entity-settings-form.tsx +2 -3
  66. package/src/components/entities/entity-settings-form/locales/es.ts +2 -0
  67. package/src/components/entities/entity-settings-form/locales/fr.ts +2 -0
  68. package/src/components/entities/entity-settings-form/locales/hr.ts +2 -0
  69. package/src/components/entities/entity-settings-form/locales/it.ts +2 -0
  70. package/src/components/entities/entity-settings-form/locales/nl.ts +2 -0
  71. package/src/components/entities/entity-settings-form/locales/pl.ts +2 -0
  72. package/src/components/entities/entity-settings-form/locales/pt.ts +2 -0
  73. package/src/components/entities/fina-settings-form/fina-operator-required-dialog.tsx +109 -0
  74. package/src/components/entities/fina-settings-form/fina-settings-form.tsx +365 -35
  75. package/src/components/entities/fina-settings-form/fina-settings.hooks.ts +101 -20
  76. package/src/components/entities/fina-settings-form/index.ts +1 -0
  77. package/src/components/entities/fina-settings-form/locales/de.ts +54 -34
  78. package/src/components/entities/fina-settings-form/locales/en.ts +51 -34
  79. package/src/components/entities/fina-settings-form/locales/es.ts +50 -34
  80. package/src/components/entities/fina-settings-form/locales/fr.ts +50 -34
  81. package/src/components/entities/fina-settings-form/locales/hr.ts +50 -34
  82. package/src/components/entities/fina-settings-form/locales/it.ts +50 -34
  83. package/src/components/entities/fina-settings-form/locales/nl.ts +50 -34
  84. package/src/components/entities/fina-settings-form/locales/pl.ts +50 -34
  85. package/src/components/entities/fina-settings-form/locales/pt.ts +50 -34
  86. package/src/components/entities/fina-settings-form/locales/sl.ts +50 -34
  87. package/src/components/entities/fina-settings-form/sections/certificate-settings-section.tsx +18 -0
  88. package/src/components/entities/fina-settings-form/sections/premises-management-section.tsx +64 -89
  89. package/src/components/entities/fina-settings-form/sections/register-premise-dialog.tsx +51 -323
  90. package/src/components/entities/furs-settings-form/furs-operator-required-dialog.tsx +106 -0
  91. package/src/components/entities/furs-settings-form/furs-settings-form.tsx +24 -10
  92. package/src/components/entities/furs-settings-form/furs-settings.hooks.ts +5 -9
  93. package/src/components/entities/furs-settings-form/index.ts +1 -0
  94. package/src/components/entities/furs-settings-form/locales/de.ts +27 -3
  95. package/src/components/entities/furs-settings-form/locales/en.ts +17 -3
  96. package/src/components/entities/furs-settings-form/locales/es.ts +26 -3
  97. package/src/components/entities/furs-settings-form/locales/fr.ts +26 -3
  98. package/src/components/entities/furs-settings-form/locales/hr.ts +26 -3
  99. package/src/components/entities/furs-settings-form/locales/it.ts +26 -3
  100. package/src/components/entities/furs-settings-form/locales/nl.ts +26 -3
  101. package/src/components/entities/furs-settings-form/locales/pl.ts +26 -3
  102. package/src/components/entities/furs-settings-form/locales/pt.ts +26 -3
  103. package/src/components/entities/furs-settings-form/locales/sl.ts +16 -3
  104. package/src/components/entities/furs-settings-form/sections/certificate-settings-section.tsx +22 -0
  105. package/src/components/entities/furs-settings-form/sections/general-settings-section.tsx +15 -2
  106. package/src/components/entities/furs-settings-form/sections/register-premise-dialog.tsx +14 -2
  107. package/src/components/entities/settings/tax-rules-settings-form.tsx +4 -4
  108. package/src/components/estimates/list/list-row-actions.tsx +3 -7
  109. package/src/components/estimates/list/list-table.tsx +35 -2
  110. package/src/components/estimates/list/locales/de.ts +3 -0
  111. package/src/components/estimates/list/locales/en.ts +3 -0
  112. package/src/components/estimates/list/locales/es.ts +3 -0
  113. package/src/components/estimates/list/locales/fr.ts +3 -0
  114. package/src/components/estimates/list/locales/hr.ts +3 -0
  115. package/src/components/estimates/list/locales/it.ts +3 -0
  116. package/src/components/estimates/list/locales/nl.ts +3 -0
  117. package/src/components/estimates/list/locales/pl.ts +3 -0
  118. package/src/components/estimates/list/locales/pt.ts +3 -0
  119. package/src/components/estimates/list/locales/sl.ts +3 -0
  120. package/src/components/export/document-export-form.tsx +34 -34
  121. package/src/components/invoices/create/create-invoice-form.tsx +107 -5
  122. package/src/components/invoices/create/prepare-invoice-submission.ts +17 -0
  123. package/src/components/invoices/invoices.hooks.ts +32 -2
  124. package/src/components/invoices/list/list-row-actions.tsx +23 -8
  125. package/src/components/invoices/list/list-table.tsx +53 -2
  126. package/src/components/invoices/list/locales/de.ts +4 -0
  127. package/src/components/invoices/list/locales/en.ts +4 -0
  128. package/src/components/invoices/list/locales/es.ts +4 -0
  129. package/src/components/invoices/list/locales/fr.ts +4 -0
  130. package/src/components/invoices/list/locales/hr.ts +4 -0
  131. package/src/components/invoices/list/locales/it.ts +4 -0
  132. package/src/components/invoices/list/locales/nl.ts +4 -0
  133. package/src/components/invoices/list/locales/pl.ts +4 -0
  134. package/src/components/invoices/list/locales/pt.ts +4 -0
  135. package/src/components/invoices/list/locales/sl.ts +4 -0
  136. package/src/components/invoices/view/fiscalization-status-card.tsx +4 -1
  137. package/src/components/items/item-list-table/item-list-row-actions.tsx +3 -7
  138. package/src/components/items/item-list-table/item-list-row.tsx +3 -2
  139. package/src/components/items/item-list-table/item-list-table.tsx +5 -1
  140. package/src/components/recurring-invoices/create-recurring-invoice-form/create-recurring-invoice-form.tsx +418 -0
  141. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/de.ts +45 -0
  142. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/es.ts +44 -0
  143. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/fr.ts +44 -0
  144. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/hr.ts +44 -0
  145. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/it.ts +44 -0
  146. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/nl.ts +44 -0
  147. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/pl.ts +44 -0
  148. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/pt.ts +44 -0
  149. package/src/components/recurring-invoices/create-recurring-invoice-form/locales/sl.ts +44 -0
  150. package/src/components/recurring-invoices/index.ts +3 -0
  151. package/src/components/recurring-invoices/list/index.ts +2 -0
  152. package/src/components/recurring-invoices/list/list-row-actions.tsx +139 -0
  153. package/src/components/recurring-invoices/list/list-table.tsx +179 -0
  154. package/src/components/recurring-invoices/list/locales/de.ts +27 -0
  155. package/src/components/recurring-invoices/list/locales/en.ts +5 -0
  156. package/src/components/recurring-invoices/list/locales/es.ts +27 -0
  157. package/src/components/recurring-invoices/list/locales/fr.ts +27 -0
  158. package/src/components/recurring-invoices/list/locales/hr.ts +27 -0
  159. package/src/components/recurring-invoices/list/locales/it.ts +27 -0
  160. package/src/components/recurring-invoices/list/locales/nl.ts +27 -0
  161. package/src/components/recurring-invoices/list/locales/pl.ts +27 -0
  162. package/src/components/recurring-invoices/list/locales/pt.ts +27 -0
  163. package/src/components/recurring-invoices/list/locales/sl.ts +27 -0
  164. package/src/components/recurring-invoices/recurring-invoices.hooks.ts +28 -0
  165. package/src/components/table/data-table.tsx +122 -5
  166. package/src/components/table/selection-toolbar.tsx +36 -0
  167. package/src/components/tax-reports/kir-export-form.tsx +75 -55
  168. package/src/components/taxes/tax-list-table/tax-list-row-actions.tsx +3 -6
  169. package/src/components/taxes/tax-list-table/tax-list-row.tsx +3 -2
  170. package/src/components/taxes/tax-list-table/tax-list-table.tsx +5 -1
  171. package/src/components/ui/checkbox.tsx +5 -5
  172. package/src/generate-schemas.ts +45 -18
  173. package/src/generated/schemas/authorizeshopify_body.ts +22 -0
  174. package/src/generated/schemas/creditnote.ts +0 -2
  175. package/src/generated/schemas/entity.ts +1 -1
  176. package/src/generated/schemas/index.ts +39 -28
  177. package/src/generated/schemas/order.ts +127 -0
  178. package/src/generated/schemas/orderintegration.ts +51 -0
  179. package/src/generated/schemas/payment.ts +2 -0
  180. package/src/generated/schemas/recurringinvoice.ts +61 -0
  181. package/src/generated/schemas/renderadvanceinvoicepreview_body.ts +107 -140
  182. package/src/generated/schemas/rendercreditnotepreview_body.ts +108 -141
  183. package/src/generated/schemas/renderestimatepreview_body.ts +78 -82
  184. package/src/generated/schemas/renderinvoicepreview_body.ts +108 -141
  185. package/src/generated/schemas/webhook.ts +42 -0
  186. package/src/lib/furs-error-utils.ts +36 -0
  187. package/src/lib/schemas/advance-invoice.ts +3 -3
  188. package/src/lib/schemas/credit-note.ts +3 -3
  189. package/src/lib/schemas/estimate.ts +3 -3
  190. package/src/lib/schemas/invoice.ts +3 -3
  191. package/src/providers/white-label-provider.tsx +3 -0
@@ -8,25 +8,6 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for renderestimatepreview_body endpoints
10
10
 
11
- // Dependency schema for renderestimatepreview_body
12
- const LineDiscount = z.object({
13
- value: z.number().gte(0),
14
- type: z.enum(["percent", "amount"]).optional().default("percent"),
15
- });
16
-
17
-
18
- // Dependency schema for renderestimatepreview_body
19
- const DocumentItemTax = z
20
- .object({
21
- rate: z.number(),
22
- tax_id: z.string(),
23
- classification: z.string(),
24
- reverse_charge: z.boolean(),
25
- amount: z.number(),
26
- })
27
- .partial();
28
-
29
-
30
11
  // Dependency schema for renderestimatepreview_body
31
12
  const DocumentEntity = z
32
13
  .object({
@@ -66,7 +47,19 @@ const DocumentEntity = z
66
47
 
67
48
 
68
49
  // Dependency schema for renderestimatepreview_body
69
- const CompleteEstimatePreview = z.object({
50
+ const CreateDocumentCustomer = DocumentEntity.and(
51
+ z.union([
52
+ z
53
+ .object({ save_customer: z.boolean().default(true) })
54
+ .partial()
55
+ .passthrough(),
56
+ z.null(),
57
+ ])
58
+ );
59
+
60
+
61
+ // Dependency schema for renderestimatepreview_body
62
+ const PartialEstimatePreview = z.object({
70
63
  is_draft: z.boolean().optional(),
71
64
  date: z
72
65
  .string()
@@ -74,15 +67,7 @@ const CompleteEstimatePreview = z.object({
74
67
  .optional(),
75
68
  issuer: DocumentEntity.optional(),
76
69
  customer_id: z.union([z.string(), z.null()]).optional(),
77
- customer: DocumentEntity.and(
78
- z.union([
79
- z
80
- .object({ save_customer: z.boolean().default(true) })
81
- .partial()
82
- .passthrough(),
83
- z.null(),
84
- ])
85
- ).optional(),
70
+ customer: CreateDocumentCustomer.optional(),
86
71
  note: z.union([z.string(), z.null()]).optional(),
87
72
  payment_terms: z.union([z.string(), z.null()]).optional(),
88
73
  tax_clause: z.union([z.string(), z.null()]).optional(),
@@ -95,28 +80,23 @@ const CompleteEstimatePreview = z.object({
95
80
  date_service_to: z.union([z.string(), z.null()]).optional(),
96
81
  items: z
97
82
  .array(
98
- z.object({
99
- name: z.string().min(1).optional(),
100
- description: z.union([z.string(), z.null()]).optional(),
101
- price: z.number().optional(),
102
- gross_price: z.number().optional(),
103
- quantity: z.number().gte(-140737488355328).lte(140737488355327),
104
- unit: z.union([z.string(), z.null()]).optional(),
105
- taxes: z.array(DocumentItemTax).optional(),
106
- discounts: z.array(LineDiscount).max(5).optional(),
107
- metadata: z
108
- .union([
109
- z.string(),
110
- z.number(),
111
- z.boolean(),
112
- z.null(),
113
- z.object({}).partial().passthrough(),
114
- z.array(z.unknown()),
115
- z.null(),
116
- ])
117
- .optional(),
118
- item_id: z.string().optional(),
119
- })
83
+ z
84
+ .object({
85
+ name: z.string(),
86
+ quantity: z.number(),
87
+ price: z.number(),
88
+ gross_price: z.number(),
89
+ description: z.string(),
90
+ taxes: z.array(
91
+ z
92
+ .object({ rate: z.number(), tax_id: z.string() })
93
+ .partial()
94
+ .passthrough()
95
+ ),
96
+ metadata: z.record(z.string(), z.any()),
97
+ })
98
+ .partial()
99
+ .passthrough()
120
100
  )
121
101
  .min(1),
122
102
  expected_total_with_tax: z.number().gt(0).optional(),
@@ -124,7 +104,51 @@ const CompleteEstimatePreview = z.object({
124
104
 
125
105
 
126
106
  // Dependency schema for renderestimatepreview_body
127
- const PartialEstimatePreview = z.object({
107
+ const DocumentItemTax = z
108
+ .object({
109
+ rate: z.number(),
110
+ tax_id: z.string(),
111
+ classification: z.string(),
112
+ reverse_charge: z.boolean(),
113
+ amount: z.number(),
114
+ })
115
+ .partial();
116
+
117
+
118
+ // Dependency schema for renderestimatepreview_body
119
+ const LineDiscount = z.object({
120
+ value: z.number().gte(0),
121
+ type: z.enum(["percent", "amount"]).optional().default("percent"),
122
+ });
123
+
124
+
125
+ // Dependency schema for renderestimatepreview_body
126
+ const CreateDocumentItem = z.object({
127
+ name: z.string().min(1).optional(),
128
+ description: z.union([z.string(), z.null()]).optional(),
129
+ price: z.number().optional(),
130
+ gross_price: z.number().optional(),
131
+ quantity: z.number().gte(-140737488355328).lte(140737488355327),
132
+ unit: z.union([z.string(), z.null()]).optional(),
133
+ taxes: z.array(DocumentItemTax).optional(),
134
+ discounts: z.array(LineDiscount).max(5).optional(),
135
+ metadata: z
136
+ .union([
137
+ z.string(),
138
+ z.number(),
139
+ z.boolean(),
140
+ z.null(),
141
+ z.object({}).partial().passthrough(),
142
+ z.array(z.unknown()),
143
+ z.null(),
144
+ ])
145
+ .optional(),
146
+ item_id: z.string().optional(),
147
+ });
148
+
149
+
150
+ // Dependency schema for renderestimatepreview_body
151
+ const CompleteEstimatePreview = z.object({
128
152
  is_draft: z.boolean().optional(),
129
153
  date: z
130
154
  .string()
@@ -132,15 +156,7 @@ const PartialEstimatePreview = z.object({
132
156
  .optional(),
133
157
  issuer: DocumentEntity.optional(),
134
158
  customer_id: z.union([z.string(), z.null()]).optional(),
135
- customer: DocumentEntity.and(
136
- z.union([
137
- z
138
- .object({ save_customer: z.boolean().default(true) })
139
- .partial()
140
- .passthrough(),
141
- z.null(),
142
- ])
143
- ).optional(),
159
+ customer: CreateDocumentCustomer.optional(),
144
160
  note: z.union([z.string(), z.null()]).optional(),
145
161
  payment_terms: z.union([z.string(), z.null()]).optional(),
146
162
  tax_clause: z.union([z.string(), z.null()]).optional(),
@@ -151,27 +167,7 @@ const PartialEstimatePreview = z.object({
151
167
  date_due: z.union([z.string(), z.null()]).optional(),
152
168
  date_service: z.union([z.string(), z.null()]).optional(),
153
169
  date_service_to: z.union([z.string(), z.null()]).optional(),
154
- items: z
155
- .array(
156
- z
157
- .object({
158
- name: z.string(),
159
- quantity: z.number(),
160
- price: z.number(),
161
- gross_price: z.number(),
162
- description: z.string(),
163
- taxes: z.array(
164
- z
165
- .object({ rate: z.number(), tax_id: z.string() })
166
- .partial()
167
- .passthrough()
168
- ),
169
- metadata: z.record(z.string(), z.any()),
170
- })
171
- .partial()
172
- .passthrough()
173
- )
174
- .min(1),
170
+ items: z.array(CreateDocumentItem).min(1),
175
171
  expected_total_with_tax: z.number().gt(0).optional(),
176
172
  });
177
173
 
@@ -8,25 +8,6 @@ import { z } from 'zod';
8
8
 
9
9
  // Schemas for renderinvoicepreview_body endpoints
10
10
 
11
- // Dependency schema for renderinvoicepreview_body
12
- const LineDiscount = z.object({
13
- value: z.number().gte(0),
14
- type: z.enum(["percent", "amount"]).optional().default("percent"),
15
- });
16
-
17
-
18
- // Dependency schema for renderinvoicepreview_body
19
- const DocumentItemTax = z
20
- .object({
21
- rate: z.number(),
22
- tax_id: z.string(),
23
- classification: z.string(),
24
- reverse_charge: z.boolean(),
25
- amount: z.number(),
26
- })
27
- .partial();
28
-
29
-
30
11
  // Dependency schema for renderinvoicepreview_body
31
12
  const DocumentEntity = z
32
13
  .object({
@@ -66,91 +47,48 @@ const DocumentEntity = z
66
47
 
67
48
 
68
49
  // Dependency schema for renderinvoicepreview_body
69
- const CompleteInvoicePreview = z.object({
70
- is_draft: z.boolean().optional(),
71
- date: z
72
- .string()
73
- .regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?)?$/)
74
- .optional(),
75
- issuer: DocumentEntity.optional(),
76
- customer_id: z.union([z.string(), z.null()]).optional(),
77
- customer: DocumentEntity.and(
78
- z.union([
79
- z
80
- .object({ save_customer: z.boolean().default(true) })
81
- .partial()
82
- .passthrough(),
83
- z.null(),
84
- ])
85
- ).optional(),
86
- note: z.union([z.string(), z.null()]).optional(),
87
- payment_terms: z.union([z.string(), z.null()]).optional(),
88
- tax_clause: z.union([z.string(), z.null()]).optional(),
89
- currency_code: z.string().max(3).optional(),
90
- metadata: z.union([z.record(z.string(), z.any()), z.null()]).optional(),
91
- date_due: z.union([z.string(), z.null()]).optional(),
92
- date_service: z.union([z.string(), z.null()]).optional(),
93
- date_service_to: z.union([z.string(), z.null()]).optional(),
94
- items: z
95
- .array(
96
- z.object({
97
- name: z.string().min(1).optional(),
98
- description: z.union([z.string(), z.null()]).optional(),
99
- price: z.number().optional(),
100
- gross_price: z.number().optional(),
101
- quantity: z.number().gte(-140737488355328).lte(140737488355327),
102
- unit: z.union([z.string(), z.null()]).optional(),
103
- taxes: z.array(DocumentItemTax).optional(),
104
- discounts: z.array(LineDiscount).max(5).optional(),
105
- metadata: z
106
- .union([
107
- z.string(),
108
- z.number(),
109
- z.boolean(),
110
- z.null(),
111
- z.object({}).partial().passthrough(),
112
- z.array(z.unknown()),
113
- z.null(),
114
- ])
115
- .optional(),
116
- item_id: z.string().optional(),
117
- })
118
- )
119
- .min(1),
120
- fina: z
121
- .union([
122
- z
123
- .object({
124
- premise_id: z
125
- .string()
126
- .min(1)
127
- .max(20)
128
- .regex(/^[0-9a-zA-Z]{1,20}$/),
129
- device_id: z
130
- .string()
131
- .min(1)
132
- .max(20)
133
- .regex(/^\d{1,20}$/),
134
- operator_oib: z.string().min(11).max(11),
135
- is_end_consumer: z.boolean(),
136
- payment_type: z.enum([
137
- "cash",
138
- "card",
139
- "online",
140
- "bank_transfer",
141
- "paypal",
142
- "crypto",
143
- "coupon",
144
- "other",
145
- ]),
146
- subsequent_submit: z.boolean(),
147
- })
148
- .partial(),
149
- z.null(),
150
- ])
151
- .optional(),
152
- expected_total_with_tax: z.number().gt(0).optional(),
153
- });
50
+ const CreateDocumentCustomer = DocumentEntity.and(
51
+ z.union([
52
+ z
53
+ .object({ save_customer: z.boolean().default(true) })
54
+ .partial()
55
+ .passthrough(),
56
+ z.null(),
57
+ ])
58
+ );
59
+
60
+
61
+ // Dependency schema for renderinvoicepreview_body
62
+ const CreateFinaInvoiceData = z.union([
63
+ z
64
+ .object({
65
+ premise_id: z
66
+ .string()
67
+ .min(1)
68
+ .max(20)
69
+ .regex(/^[0-9a-zA-Z]{1,20}$/),
70
+ device_id: z
71
+ .string()
72
+ .min(1)
73
+ .max(20)
74
+ .regex(/^\d{1,20}$/),
75
+ operator_oib: z.string().min(11).max(11),
76
+ is_end_consumer: z.boolean(),
77
+ payment_type: z.enum([
78
+ "cash",
79
+ "card",
80
+ "online",
81
+ "bank_transfer",
82
+ "paypal",
83
+ "crypto",
84
+ "coupon",
85
+ "other",
86
+ ]),
87
+ subsequent_submit: z.boolean(),
88
+ })
89
+ .partial(),
90
+ z.null(),
91
+ ]);
154
92
 
155
93
 
156
94
  // Dependency schema for renderinvoicepreview_body
@@ -162,15 +100,7 @@ const PartialInvoicePreview = z.object({
162
100
  .optional(),
163
101
  issuer: DocumentEntity.optional(),
164
102
  customer_id: z.union([z.string(), z.null()]).optional(),
165
- customer: DocumentEntity.and(
166
- z.union([
167
- z
168
- .object({ save_customer: z.boolean().default(true) })
169
- .partial()
170
- .passthrough(),
171
- z.null(),
172
- ])
173
- ).optional(),
103
+ customer: CreateDocumentCustomer.optional(),
174
104
  note: z.union([z.string(), z.null()]).optional(),
175
105
  payment_terms: z.union([z.string(), z.null()]).optional(),
176
106
  tax_clause: z.union([z.string(), z.null()]).optional(),
@@ -200,38 +130,75 @@ const PartialInvoicePreview = z.object({
200
130
  .passthrough()
201
131
  )
202
132
  .min(1),
203
- fina: z
133
+ fina: CreateFinaInvoiceData.optional(),
134
+ expected_total_with_tax: z.number().gt(0).optional(),
135
+ });
136
+
137
+
138
+ // Dependency schema for renderinvoicepreview_body
139
+ const DocumentItemTax = z
140
+ .object({
141
+ rate: z.number(),
142
+ tax_id: z.string(),
143
+ classification: z.string(),
144
+ reverse_charge: z.boolean(),
145
+ amount: z.number(),
146
+ })
147
+ .partial();
148
+
149
+
150
+ // Dependency schema for renderinvoicepreview_body
151
+ const LineDiscount = z.object({
152
+ value: z.number().gte(0),
153
+ type: z.enum(["percent", "amount"]).optional().default("percent"),
154
+ });
155
+
156
+
157
+ // Dependency schema for renderinvoicepreview_body
158
+ const CreateDocumentItem = z.object({
159
+ name: z.string().min(1).optional(),
160
+ description: z.union([z.string(), z.null()]).optional(),
161
+ price: z.number().optional(),
162
+ gross_price: z.number().optional(),
163
+ quantity: z.number().gte(-140737488355328).lte(140737488355327),
164
+ unit: z.union([z.string(), z.null()]).optional(),
165
+ taxes: z.array(DocumentItemTax).optional(),
166
+ discounts: z.array(LineDiscount).max(5).optional(),
167
+ metadata: z
204
168
  .union([
205
- z
206
- .object({
207
- premise_id: z
208
- .string()
209
- .min(1)
210
- .max(20)
211
- .regex(/^[0-9a-zA-Z]{1,20}$/),
212
- device_id: z
213
- .string()
214
- .min(1)
215
- .max(20)
216
- .regex(/^\d{1,20}$/),
217
- operator_oib: z.string().min(11).max(11),
218
- is_end_consumer: z.boolean(),
219
- payment_type: z.enum([
220
- "cash",
221
- "card",
222
- "online",
223
- "bank_transfer",
224
- "paypal",
225
- "crypto",
226
- "coupon",
227
- "other",
228
- ]),
229
- subsequent_submit: z.boolean(),
230
- })
231
- .partial(),
169
+ z.string(),
170
+ z.number(),
171
+ z.boolean(),
172
+ z.null(),
173
+ z.object({}).partial().passthrough(),
174
+ z.array(z.unknown()),
232
175
  z.null(),
233
176
  ])
234
177
  .optional(),
178
+ item_id: z.string().optional(),
179
+ });
180
+
181
+
182
+ // Dependency schema for renderinvoicepreview_body
183
+ const CompleteInvoicePreview = z.object({
184
+ is_draft: z.boolean().optional(),
185
+ date: z
186
+ .string()
187
+ .regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?)?$/)
188
+ .optional(),
189
+ issuer: DocumentEntity.optional(),
190
+ customer_id: z.union([z.string(), z.null()]).optional(),
191
+ customer: CreateDocumentCustomer.optional(),
192
+ note: z.union([z.string(), z.null()]).optional(),
193
+ payment_terms: z.union([z.string(), z.null()]).optional(),
194
+ tax_clause: z.union([z.string(), z.null()]).optional(),
195
+ currency_code: z.string().max(3).optional(),
196
+ metadata: z.union([z.record(z.string(), z.any()), z.null()]).optional(),
197
+ date_due: z.union([z.string(), z.null()]).optional(),
198
+ date_service: z.union([z.string(), z.null()]).optional(),
199
+ date_service_to: z.union([z.string(), z.null()]).optional(),
200
+ items: z.array(CreateDocumentItem).min(1),
201
+ fina: CreateFinaInvoiceData.optional(),
235
202
  expected_total_with_tax: z.number().gt(0).optional(),
236
203
  });
237
204
 
@@ -59,9 +59,30 @@ const createWebhookSchemaDefinition = z.object({
59
59
  "tax.deleted",
60
60
  "tax.restored",
61
61
  "tax.permanently_deleted",
62
+ "recurring_invoice.created",
63
+ "recurring_invoice.updated",
64
+ "recurring_invoice.deleted",
65
+ "recurring_invoice.restored",
66
+ "recurring_invoice.permanently_deleted",
67
+ "recurring_invoice.paused",
68
+ "recurring_invoice.resumed",
69
+ "recurring_invoice.invoice_generated",
70
+ "recurring_invoice.generation_failed",
71
+ "recurring_invoice.completed",
62
72
  "stripe_app.connected",
63
73
  "stripe_app.disconnected",
64
74
  "stripe_app.settings_updated",
75
+ "order.created",
76
+ "order.updated",
77
+ "order.deleted",
78
+ "order.restored",
79
+ "order.permanently_deleted",
80
+ "order.processed",
81
+ "order.cancelled",
82
+ "order.failed",
83
+ "order_integration.created",
84
+ "order_integration.updated",
85
+ "order_integration.deleted",
65
86
  ])
66
87
  )
67
88
  .min(1),
@@ -125,9 +146,30 @@ const updateWebhookSchemaDefinition = z
125
146
  "tax.deleted",
126
147
  "tax.restored",
127
148
  "tax.permanently_deleted",
149
+ "recurring_invoice.created",
150
+ "recurring_invoice.updated",
151
+ "recurring_invoice.deleted",
152
+ "recurring_invoice.restored",
153
+ "recurring_invoice.permanently_deleted",
154
+ "recurring_invoice.paused",
155
+ "recurring_invoice.resumed",
156
+ "recurring_invoice.invoice_generated",
157
+ "recurring_invoice.generation_failed",
158
+ "recurring_invoice.completed",
128
159
  "stripe_app.connected",
129
160
  "stripe_app.disconnected",
130
161
  "stripe_app.settings_updated",
162
+ "order.created",
163
+ "order.updated",
164
+ "order.deleted",
165
+ "order.restored",
166
+ "order.permanently_deleted",
167
+ "order.processed",
168
+ "order.cancelled",
169
+ "order.failed",
170
+ "order_integration.created",
171
+ "order_integration.updated",
172
+ "order_integration.deleted",
131
173
  ])
132
174
  )
133
175
  .min(1),
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Detect if an error is a FURS operator settings validation error (422).
3
+ * The API returns a ZodError with paths like ["furs", "operator_tax_number"]
4
+ * when operator settings are missing during document creation.
5
+ */
6
+ export function isFursOperatorError(error: unknown): boolean {
7
+ const data = (error as any)?.data;
8
+ if (!data?.cause?.issues) return false;
9
+ return data.cause.issues.some(
10
+ (issue: any) =>
11
+ issue.path?.[0] === "furs" && (issue.path?.[1] === "operator_tax_number" || issue.path?.[1] === "operator_label"),
12
+ );
13
+ }
14
+
15
+ /**
16
+ * Detect if an error is a FINA operator settings error.
17
+ * CIS requires OibOper (minOccurs="1" in FiskalizacijaSchema.xsd).
18
+ * Checks for Zod validation errors with paths like ["fina", "operator_oib"]
19
+ * or CIS XML validation errors mentioning OibOper.
20
+ */
21
+ export function isFinaOperatorError(error: unknown): boolean {
22
+ const data = (error as any)?.data;
23
+ // Check for Zod-style validation error
24
+ if (data?.cause?.issues) {
25
+ return data.cause.issues.some(
26
+ (issue: any) =>
27
+ issue.path?.[0] === "fina" && (issue.path?.[1] === "operator_oib" || issue.path?.[1] === "operator_label"),
28
+ );
29
+ }
30
+ // Check for CIS error message mentioning OibOper
31
+ const message = data?.message || (error as any)?.message || "";
32
+ if (typeof message === "string" && message.includes("OibOper")) {
33
+ return true;
34
+ }
35
+ return false;
36
+ }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Requires: ./shared.ts
5
5
  */
6
- import type { CreateAdvanceInvoiceBody } from "@spaceinvoices/js-sdk";
6
+ import type { CreateAdvanceInvoice } from "@spaceinvoices/js-sdk";
7
7
  import { z } from "zod";
8
8
  import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
9
9
 
@@ -35,9 +35,9 @@ export const advanceInvoiceFormSchema = z.object({
35
35
  export type AdvanceInvoiceFormValues = z.infer<typeof advanceInvoiceFormSchema>;
36
36
 
37
37
  /** Convert form values to API request */
38
- export function toCreateAdvanceInvoiceRequest(values: AdvanceInvoiceFormValues): CreateAdvanceInvoiceBody {
38
+ export function toCreateAdvanceInvoiceRequest(values: AdvanceInvoiceFormValues): CreateAdvanceInvoice {
39
39
  return {
40
40
  ...values,
41
41
  items: transformItemsForApi(values.items ?? []),
42
- } as CreateAdvanceInvoiceBody;
42
+ } as CreateAdvanceInvoice;
43
43
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Requires: ./shared.ts
5
5
  */
6
- import type { CreateCreditNoteBody } from "@spaceinvoices/js-sdk";
6
+ import type { CreateCreditNote } from "@spaceinvoices/js-sdk";
7
7
  import { z } from "zod";
8
8
  import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
9
9
 
@@ -24,9 +24,9 @@ export const creditNoteFormSchema = z.object({
24
24
  export type CreditNoteFormValues = z.infer<typeof creditNoteFormSchema>;
25
25
 
26
26
  /** Convert form values to API request */
27
- export function toCreateCreditNoteRequest(values: CreditNoteFormValues): CreateCreditNoteBody {
27
+ export function toCreateCreditNoteRequest(values: CreditNoteFormValues): CreateCreditNote {
28
28
  return {
29
29
  ...values,
30
30
  items: transformItemsForApi(values.items ?? []),
31
- } as CreateCreditNoteBody;
31
+ } as CreateCreditNote;
32
32
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Requires: ./shared.ts
5
5
  */
6
- import type { CreateEstimateBody } from "@spaceinvoices/js-sdk";
6
+ import type { CreateEstimate } from "@spaceinvoices/js-sdk";
7
7
  import { z } from "zod";
8
8
  import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
9
9
 
@@ -23,9 +23,9 @@ export const estimateFormSchema = z.object({
23
23
  export type EstimateFormValues = z.infer<typeof estimateFormSchema>;
24
24
 
25
25
  /** Convert form values to API request */
26
- export function toCreateEstimateRequest(values: EstimateFormValues): CreateEstimateBody {
26
+ export function toCreateEstimateRequest(values: EstimateFormValues): CreateEstimate {
27
27
  return {
28
28
  ...values,
29
29
  items: transformItemsForApi(values.items ?? []),
30
- } as CreateEstimateBody;
30
+ } as CreateEstimate;
31
31
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Requires: ./shared.ts
5
5
  */
6
- import type { CreateInvoiceBody } from "@spaceinvoices/js-sdk";
6
+ import type { CreateInvoice } from "@spaceinvoices/js-sdk";
7
7
  import { z } from "zod";
8
8
  import { customerSchema, lineItemSchema, transformItemsForApi } from "./shared";
9
9
 
@@ -35,9 +35,9 @@ export const invoiceFormSchema = z.object({
35
35
  export type InvoiceFormValues = z.infer<typeof invoiceFormSchema>;
36
36
 
37
37
  /** Convert form values to API request */
38
- export function toCreateInvoiceRequest(values: InvoiceFormValues): CreateInvoiceBody {
38
+ export function toCreateInvoiceRequest(values: InvoiceFormValues): CreateInvoice {
39
39
  return {
40
40
  ...values,
41
41
  items: transformItemsForApi(values.items ?? []),
42
- } as CreateInvoiceBody;
42
+ } as CreateInvoice;
43
43
  }