@quantyapp/quanty-mcp-server 1.0.10 → 1.2.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.
- package/dist/bin/quanty-mcp-server.exe +0 -0
- package/dist/core/analysisService.d.ts +27 -0
- package/dist/core/analysisService.d.ts.map +1 -1
- package/dist/core/analysisService.js +84 -0
- package/dist/core/bankService.d.ts +26 -1
- package/dist/core/bankService.d.ts.map +1 -1
- package/dist/core/bankService.js +114 -5
- package/dist/core/budgetService.d.ts +190 -0
- package/dist/core/budgetService.d.ts.map +1 -1
- package/dist/core/budgetService.js +628 -4
- package/dist/core/learningService.d.ts +94 -0
- package/dist/core/learningService.d.ts.map +1 -0
- package/dist/core/learningService.js +462 -0
- package/dist/core/matchingService.d.ts +76 -0
- package/dist/core/matchingService.d.ts.map +1 -0
- package/dist/core/matchingService.js +437 -0
- package/dist/mcp/index.js +1180 -189
- package/package.json +10 -1
|
Binary file
|
|
@@ -32,4 +32,31 @@ export declare function suggestMissingItems(auth: AuthContext, budgetId: string)
|
|
|
32
32
|
* Calculates average cost per unit (e.g., R$/m³ de concreto)
|
|
33
33
|
*/
|
|
34
34
|
export declare function calculateCostPerUnit(auth: AuthContext, category: string, driver: string): Promise<CostMetric>;
|
|
35
|
+
export interface AbcItem {
|
|
36
|
+
id: string;
|
|
37
|
+
description: string;
|
|
38
|
+
unit: string;
|
|
39
|
+
quantity: number;
|
|
40
|
+
unitCost: number;
|
|
41
|
+
total: number;
|
|
42
|
+
percentage: number;
|
|
43
|
+
accumulated: number;
|
|
44
|
+
class: 'A' | 'B' | 'C';
|
|
45
|
+
}
|
|
46
|
+
export interface AbcCurveResult {
|
|
47
|
+
totalValue: number;
|
|
48
|
+
classAThreshold: number;
|
|
49
|
+
classBThreshold: number;
|
|
50
|
+
classACount: number;
|
|
51
|
+
classBCount: number;
|
|
52
|
+
classCCount: number;
|
|
53
|
+
items: AbcItem[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Generates ABC Curve analysis for a budget
|
|
57
|
+
* Class A: items representing ~80% of total value (high impact)
|
|
58
|
+
* Class B: items representing next ~15% of value (medium impact)
|
|
59
|
+
* Class C: remaining items representing ~5% of value (low impact)
|
|
60
|
+
*/
|
|
61
|
+
export declare function generateAbcCurve(auth: AuthContext, budgetId: string, classAThreshold?: number, classBThreshold?: number): Promise<AbcCurveResult>;
|
|
35
62
|
//# sourceMappingURL=analysisService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysisService.d.ts","sourceRoot":"","sources":["../../src/core/analysisService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA+CtG;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0DvG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAmDrB"}
|
|
1
|
+
{"version":3,"file":"analysisService.d.ts","sourceRoot":"","sources":["../../src/core/analysisService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA+CtG;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0DvG;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAmDrB;AAID,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,MAAW,EAC5B,eAAe,GAAE,MAAW,GAC7B,OAAO,CAAC,cAAc,CAAC,CAwFzB"}
|
|
@@ -149,3 +149,87 @@ export async function calculateCostPerUnit(auth, category, driver) {
|
|
|
149
149
|
p90Cost: Math.round(ratios[p90Index] * 100) / 100
|
|
150
150
|
};
|
|
151
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Generates ABC Curve analysis for a budget
|
|
154
|
+
* Class A: items representing ~80% of total value (high impact)
|
|
155
|
+
* Class B: items representing next ~15% of value (medium impact)
|
|
156
|
+
* Class C: remaining items representing ~5% of value (low impact)
|
|
157
|
+
*/
|
|
158
|
+
export async function generateAbcCurve(auth, budgetId, classAThreshold = 80, classBThreshold = 95) {
|
|
159
|
+
const { data, error } = await supabase
|
|
160
|
+
.from('budgets')
|
|
161
|
+
.select('data')
|
|
162
|
+
.eq('id', budgetId)
|
|
163
|
+
.single();
|
|
164
|
+
if (error)
|
|
165
|
+
throw new Error(`Failed to get budget: ${error.message}`);
|
|
166
|
+
const rows = data?.data?.rows || [];
|
|
167
|
+
// Filter only rows with actual values (non-empty rows)
|
|
168
|
+
const validRows = rows.filter(r => r.description && r.description.trim() !== '' &&
|
|
169
|
+
r.quantity > 0 && r.unitCost > 0);
|
|
170
|
+
// Calculate totals
|
|
171
|
+
const itemsWithTotal = validRows.map(r => ({
|
|
172
|
+
id: r.id,
|
|
173
|
+
description: r.description,
|
|
174
|
+
unit: r.unit,
|
|
175
|
+
quantity: r.quantity,
|
|
176
|
+
unitCost: r.unitCost,
|
|
177
|
+
total: r.quantity * r.unitCost
|
|
178
|
+
}));
|
|
179
|
+
// Sort by total value descending
|
|
180
|
+
itemsWithTotal.sort((a, b) => b.total - a.total);
|
|
181
|
+
const totalValue = itemsWithTotal.reduce((sum, item) => sum + item.total, 0);
|
|
182
|
+
if (totalValue === 0) {
|
|
183
|
+
return {
|
|
184
|
+
totalValue: 0,
|
|
185
|
+
classAThreshold,
|
|
186
|
+
classBThreshold,
|
|
187
|
+
classACount: 0,
|
|
188
|
+
classBCount: 0,
|
|
189
|
+
classCCount: 0,
|
|
190
|
+
items: []
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// Calculate percentages and classifications
|
|
194
|
+
let accumulated = 0;
|
|
195
|
+
let classACount = 0;
|
|
196
|
+
let classBCount = 0;
|
|
197
|
+
let classCCount = 0;
|
|
198
|
+
const items = itemsWithTotal.map(item => {
|
|
199
|
+
const percentage = (item.total / totalValue) * 100;
|
|
200
|
+
accumulated += percentage;
|
|
201
|
+
let itemClass;
|
|
202
|
+
if (accumulated <= classAThreshold) {
|
|
203
|
+
itemClass = 'A';
|
|
204
|
+
classACount++;
|
|
205
|
+
}
|
|
206
|
+
else if (accumulated <= classBThreshold) {
|
|
207
|
+
itemClass = 'B';
|
|
208
|
+
classBCount++;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
itemClass = 'C';
|
|
212
|
+
classCCount++;
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
id: item.id,
|
|
216
|
+
description: item.description,
|
|
217
|
+
unit: item.unit,
|
|
218
|
+
quantity: item.quantity,
|
|
219
|
+
unitCost: item.unitCost,
|
|
220
|
+
total: Math.round(item.total * 100) / 100,
|
|
221
|
+
percentage: Math.round(percentage * 100) / 100,
|
|
222
|
+
accumulated: Math.round(accumulated * 100) / 100,
|
|
223
|
+
class: itemClass
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
return {
|
|
227
|
+
totalValue: Math.round(totalValue * 100) / 100,
|
|
228
|
+
classAThreshold,
|
|
229
|
+
classBThreshold,
|
|
230
|
+
classACount,
|
|
231
|
+
classBCount,
|
|
232
|
+
classCCount,
|
|
233
|
+
items
|
|
234
|
+
};
|
|
235
|
+
}
|
|
@@ -49,7 +49,7 @@ export declare function searchBankItems(bankId: string, query: string, limit?: n
|
|
|
49
49
|
/**
|
|
50
50
|
* Prepares importing an item from bank to budget
|
|
51
51
|
*/
|
|
52
|
-
export declare function prepareImportItem(budgetId: string, bankItem: BankItem, quantity: number): {
|
|
52
|
+
export declare function prepareImportItem(budgetId: string, bankItem: BankItem, quantity: number, level?: number): {
|
|
53
53
|
action: string;
|
|
54
54
|
preview: string;
|
|
55
55
|
data: any;
|
|
@@ -62,4 +62,29 @@ export declare function getBankItemById(bankId: string, itemId: string): Promise
|
|
|
62
62
|
* NOVA FUNÇÃO: Lista todos os itens de uma categoria específica
|
|
63
63
|
*/
|
|
64
64
|
export declare function getCategoryItems(bankId: string, categoryId: string): Promise<BankItem[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Creates a private bank for the user
|
|
67
|
+
*/
|
|
68
|
+
export declare function createPrivateBank(auth: AuthContext, name: string, description?: string): Promise<string>;
|
|
69
|
+
/**
|
|
70
|
+
* Edits a bank's metadata (title, description, image)
|
|
71
|
+
*/
|
|
72
|
+
export declare function editBank(auth: AuthContext, bankId: string, updates: {
|
|
73
|
+
title?: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
background_image?: string;
|
|
76
|
+
versionDate?: string;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Adds an item to a private bank
|
|
80
|
+
*/
|
|
81
|
+
export declare function addItemToBank(auth: AuthContext, bankId: string, categoryId: string, item: {
|
|
82
|
+
code: string;
|
|
83
|
+
description: string;
|
|
84
|
+
unit: string;
|
|
85
|
+
unitCost: number;
|
|
86
|
+
itemType?: string;
|
|
87
|
+
isComposition?: boolean;
|
|
88
|
+
composition?: any[];
|
|
89
|
+
}): Promise<string>;
|
|
65
90
|
//# sourceMappingURL=bankService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bankService.d.ts","sourceRoot":"","sources":["../../src/core/bankService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;IAClD,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACrB;AA+CD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAkBzE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgB/E;AAgBD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAwF5G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"bankService.d.ts","sourceRoot":"","sources":["../../src/core/bankService.ts"],"names":[],"mappings":"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"}
|
package/dist/core/bankService.js
CHANGED
|
@@ -32,9 +32,9 @@ function toBankItem(item) {
|
|
|
32
32
|
return {
|
|
33
33
|
id: item.id,
|
|
34
34
|
code: item.code || '',
|
|
35
|
-
description: item.description || '',
|
|
36
|
-
unit: item.unit || '',
|
|
37
|
-
unitCost: item.unitCost || 0,
|
|
35
|
+
description: item.description || item.name || item.title || item.descricao || '',
|
|
36
|
+
unit: item.unit || item.unidade || '',
|
|
37
|
+
unitCost: item.unitCost || item.unit_cost || item.custoUnitario || item.custo_unitario || 0,
|
|
38
38
|
itemType: isComp ? 'Composição' : (item.itemType || 'Insumo'),
|
|
39
39
|
isComposition: isComp,
|
|
40
40
|
composition: inputs.length > 0 ? inputs : undefined
|
|
@@ -184,7 +184,7 @@ export async function searchBankItems(bankId, query, limit = 50) {
|
|
|
184
184
|
/**
|
|
185
185
|
* Prepares importing an item from bank to budget
|
|
186
186
|
*/
|
|
187
|
-
export function prepareImportItem(budgetId, bankItem, quantity) {
|
|
187
|
+
export function prepareImportItem(budgetId, bankItem, quantity, level) {
|
|
188
188
|
let compositionForBudget = undefined;
|
|
189
189
|
if (bankItem.isComposition && bankItem.composition && bankItem.composition.length > 0) {
|
|
190
190
|
compositionForBudget = bankItem.composition.map(input => ({
|
|
@@ -209,7 +209,8 @@ export function prepareImportItem(budgetId, bankItem, quantity) {
|
|
|
209
209
|
quantity: quantity,
|
|
210
210
|
unitCost: bankItem.unitCost,
|
|
211
211
|
isComposition: bankItem.isComposition,
|
|
212
|
-
composition: compositionForBudget
|
|
212
|
+
composition: compositionForBudget,
|
|
213
|
+
level: level ?? 0
|
|
213
214
|
}
|
|
214
215
|
}
|
|
215
216
|
};
|
|
@@ -303,3 +304,111 @@ export async function getCategoryItems(bankId, categoryId) {
|
|
|
303
304
|
}
|
|
304
305
|
return items;
|
|
305
306
|
}
|
|
307
|
+
// ================ BANK MANAGEMENT ================
|
|
308
|
+
/**
|
|
309
|
+
* Creates a private bank for the user
|
|
310
|
+
*/
|
|
311
|
+
export async function createPrivateBank(auth, name, description) {
|
|
312
|
+
const now = new Date().toISOString();
|
|
313
|
+
const bankData = {
|
|
314
|
+
title: name,
|
|
315
|
+
description: description || '',
|
|
316
|
+
author: auth.userName,
|
|
317
|
+
visibility: 'private',
|
|
318
|
+
tenant_id: auth.tenantId,
|
|
319
|
+
user_id: auth.userId,
|
|
320
|
+
created_at: now,
|
|
321
|
+
updated_at: now,
|
|
322
|
+
data: {
|
|
323
|
+
categories: []
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
const { data, error } = await supabase
|
|
327
|
+
.from('composition_banks')
|
|
328
|
+
.insert(bankData)
|
|
329
|
+
.select('id')
|
|
330
|
+
.single();
|
|
331
|
+
if (error)
|
|
332
|
+
throw new Error(`Failed to create bank: ${error.message}`);
|
|
333
|
+
return data.id;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Edits a bank's metadata (title, description, image)
|
|
337
|
+
*/
|
|
338
|
+
export async function editBank(auth, bankId, updates) {
|
|
339
|
+
const updatePayload = {
|
|
340
|
+
updated_at: new Date().toISOString()
|
|
341
|
+
};
|
|
342
|
+
if (updates.title !== undefined)
|
|
343
|
+
updatePayload.title = updates.title;
|
|
344
|
+
if (updates.description !== undefined)
|
|
345
|
+
updatePayload.description = updates.description;
|
|
346
|
+
if (updates.background_image !== undefined)
|
|
347
|
+
updatePayload.background_image = updates.background_image;
|
|
348
|
+
if (updates.versionDate !== undefined)
|
|
349
|
+
updatePayload.version_date = updates.versionDate;
|
|
350
|
+
const { error } = await supabase
|
|
351
|
+
.from('composition_banks')
|
|
352
|
+
.update(updatePayload)
|
|
353
|
+
.eq('id', bankId)
|
|
354
|
+
.or(`tenant_id.eq.${auth.tenantId},user_id.eq.${auth.userId}`);
|
|
355
|
+
if (error)
|
|
356
|
+
throw new Error(`Failed to edit bank: ${error.message}`);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Adds an item to a private bank
|
|
360
|
+
*/
|
|
361
|
+
export async function addItemToBank(auth, bankId, categoryId, item) {
|
|
362
|
+
// Get current bank data
|
|
363
|
+
const { data: bank, error: fetchError } = await supabase
|
|
364
|
+
.from('composition_banks')
|
|
365
|
+
.select('data')
|
|
366
|
+
.eq('id', bankId)
|
|
367
|
+
.or(`tenant_id.eq.${auth.tenantId},user_id.eq.${auth.userId}`)
|
|
368
|
+
.single();
|
|
369
|
+
if (fetchError || !bank)
|
|
370
|
+
throw new Error('Bank not found or not accessible');
|
|
371
|
+
const categories = bank.data?.categories || [];
|
|
372
|
+
// Find category and add item
|
|
373
|
+
let found = false;
|
|
374
|
+
const findAndAddToCategory = (nodes) => {
|
|
375
|
+
for (const node of nodes) {
|
|
376
|
+
if (node.id === categoryId) {
|
|
377
|
+
if (!node.items)
|
|
378
|
+
node.items = [];
|
|
379
|
+
node.items.push({
|
|
380
|
+
id: crypto.randomUUID(),
|
|
381
|
+
...item
|
|
382
|
+
});
|
|
383
|
+
found = true;
|
|
384
|
+
return true;
|
|
385
|
+
}
|
|
386
|
+
if (node.children && findAndAddToCategory(node.children)) {
|
|
387
|
+
return true;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return false;
|
|
391
|
+
};
|
|
392
|
+
findAndAddToCategory(categories);
|
|
393
|
+
if (!found) {
|
|
394
|
+
// Create a new category if not found
|
|
395
|
+
categories.push({
|
|
396
|
+
id: categoryId,
|
|
397
|
+
name: 'Itens Personalizados',
|
|
398
|
+
items: [{
|
|
399
|
+
id: crypto.randomUUID(),
|
|
400
|
+
...item
|
|
401
|
+
}]
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
const { error } = await supabase
|
|
405
|
+
.from('composition_banks')
|
|
406
|
+
.update({
|
|
407
|
+
data: { categories },
|
|
408
|
+
updated_at: new Date().toISOString()
|
|
409
|
+
})
|
|
410
|
+
.eq('id', bankId);
|
|
411
|
+
if (error)
|
|
412
|
+
throw new Error(`Failed to add item to bank: ${error.message}`);
|
|
413
|
+
return 'Item added successfully';
|
|
414
|
+
}
|
|
@@ -14,6 +14,7 @@ export interface BudgetRow {
|
|
|
14
14
|
export interface Budget {
|
|
15
15
|
id: string;
|
|
16
16
|
title: string;
|
|
17
|
+
baseDate?: string;
|
|
17
18
|
createdAt: string;
|
|
18
19
|
lastModified: string;
|
|
19
20
|
creator: string;
|
|
@@ -61,6 +62,33 @@ export declare function prepareAddItem(budgetId: string, item: {
|
|
|
61
62
|
unit: string;
|
|
62
63
|
quantity: number;
|
|
63
64
|
unitCost: number;
|
|
65
|
+
level?: number;
|
|
66
|
+
}): {
|
|
67
|
+
action: string;
|
|
68
|
+
preview: string;
|
|
69
|
+
data: any;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Interface para insumos de uma composição
|
|
73
|
+
*/
|
|
74
|
+
export interface CompositionInput {
|
|
75
|
+
code?: string;
|
|
76
|
+
description: string;
|
|
77
|
+
unit: string;
|
|
78
|
+
quantity: number;
|
|
79
|
+
unitCost: number;
|
|
80
|
+
itemType?: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Prepares adding a COMPOSITION (with inputs) to a budget
|
|
84
|
+
*/
|
|
85
|
+
export declare function prepareAddComposition(budgetId: string, composition: {
|
|
86
|
+
code?: string;
|
|
87
|
+
description: string;
|
|
88
|
+
unit: string;
|
|
89
|
+
quantity: number;
|
|
90
|
+
level?: number;
|
|
91
|
+
insumos: CompositionInput[];
|
|
64
92
|
}): {
|
|
65
93
|
action: string;
|
|
66
94
|
preview: string;
|
|
@@ -88,4 +116,166 @@ export declare function executeDeleteItem(auth: AuthContext, data: any): Promise
|
|
|
88
116
|
* Gets composition details (inputs/children) for a specific item in a budget
|
|
89
117
|
*/
|
|
90
118
|
export declare function getCompositionDetails(auth: AuthContext, budgetId: string, itemId: string): Promise<any[]>;
|
|
119
|
+
/**
|
|
120
|
+
* Prepares updating BDI values for a budget
|
|
121
|
+
*/
|
|
122
|
+
export declare function prepareUpdateBdi(budgetId: string, bdiPrincipal?: number, bdiDiferenciado?: number): {
|
|
123
|
+
action: string;
|
|
124
|
+
preview: string;
|
|
125
|
+
data: any;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Executes BDI update
|
|
129
|
+
*/
|
|
130
|
+
export declare function executeUpdateBdi(auth: AuthContext, data: any): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Prepares editing an existing item
|
|
133
|
+
*/
|
|
134
|
+
export declare function prepareEditItem(budgetId: string, itemId: string, updates: {
|
|
135
|
+
description?: string;
|
|
136
|
+
unit?: string;
|
|
137
|
+
quantity?: number;
|
|
138
|
+
unitCost?: number;
|
|
139
|
+
level?: number;
|
|
140
|
+
code?: string;
|
|
141
|
+
}): {
|
|
142
|
+
action: string;
|
|
143
|
+
preview: string;
|
|
144
|
+
data: any;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Executes item edit
|
|
148
|
+
*/
|
|
149
|
+
export declare function executeEditItem(auth: AuthContext, data: any): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Prepares duplicating a budget
|
|
152
|
+
*/
|
|
153
|
+
export declare function prepareDuplicateBudget(auth: AuthContext, budgetId: string, newTitle: string): {
|
|
154
|
+
action: string;
|
|
155
|
+
preview: string;
|
|
156
|
+
data: any;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Executes budget duplication
|
|
160
|
+
*/
|
|
161
|
+
export declare function executeDuplicateBudget(auth: AuthContext, data: any): Promise<string>;
|
|
162
|
+
/**
|
|
163
|
+
* Prepares moving an item to a different level
|
|
164
|
+
*/
|
|
165
|
+
export declare function prepareMoveItem(budgetId: string, itemId: string, newLevel: number, itemDescription: string): {
|
|
166
|
+
action: string;
|
|
167
|
+
preview: string;
|
|
168
|
+
data: any;
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Prepares editing budget metadata
|
|
172
|
+
*/
|
|
173
|
+
export declare function prepareEditBudget(budgetId: string, updates: {
|
|
174
|
+
title?: string;
|
|
175
|
+
baseDate?: string;
|
|
176
|
+
bdiPrincipal?: number;
|
|
177
|
+
bdiDiferenciado?: number;
|
|
178
|
+
}): {
|
|
179
|
+
action: string;
|
|
180
|
+
preview: string;
|
|
181
|
+
data: any;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* Executes budget metadata editing
|
|
185
|
+
*/
|
|
186
|
+
export declare function executeEditBudget(auth: AuthContext, data: any): Promise<void>;
|
|
187
|
+
/**
|
|
188
|
+
* Prepares setting BDI type for an item
|
|
189
|
+
*/
|
|
190
|
+
export declare function prepareSetBdiType(budgetId: string, itemId: string, bdiType: 'Principal' | 'Diferenciado', itemDescription: string): {
|
|
191
|
+
action: string;
|
|
192
|
+
preview: string;
|
|
193
|
+
data: any;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Prepares ABC classification for an item
|
|
197
|
+
*/
|
|
198
|
+
export declare function prepareSetAbcClassification(budgetId: string, itemId: string, classification: 'Custo' | 'Material' | 'Mão de Obra' | 'Equipamento', itemDescription: string): {
|
|
199
|
+
action: string;
|
|
200
|
+
preview: string;
|
|
201
|
+
data: any;
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Executes ABC classification setting
|
|
205
|
+
*/
|
|
206
|
+
export declare function executeSetAbcClassification(auth: AuthContext, data: any): Promise<void>;
|
|
207
|
+
/**
|
|
208
|
+
* Prepares editing inputs of a composition
|
|
209
|
+
*/
|
|
210
|
+
export declare function prepareEditCompositionInput(budgetId: string, compositionId: string, inputId: string, updates: {
|
|
211
|
+
code?: string;
|
|
212
|
+
description?: string;
|
|
213
|
+
unit?: string;
|
|
214
|
+
quantity?: number;
|
|
215
|
+
unitCost?: number;
|
|
216
|
+
itemType?: string;
|
|
217
|
+
}, inputDescription: string): {
|
|
218
|
+
action: string;
|
|
219
|
+
preview: string;
|
|
220
|
+
data: any;
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Executes editing composition input
|
|
224
|
+
*/
|
|
225
|
+
export declare function executeEditCompositionInput(auth: AuthContext, data: any): Promise<void>;
|
|
226
|
+
/**
|
|
227
|
+
* Prepares adding an input to a composition
|
|
228
|
+
*/
|
|
229
|
+
export declare function prepareAddCompositionInput(budgetId: string, compositionId: string, input: {
|
|
230
|
+
code?: string;
|
|
231
|
+
description: string;
|
|
232
|
+
unit: string;
|
|
233
|
+
quantity: number;
|
|
234
|
+
unitCost: number;
|
|
235
|
+
itemType?: string;
|
|
236
|
+
}): {
|
|
237
|
+
action: string;
|
|
238
|
+
preview: string;
|
|
239
|
+
data: any;
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* Executes adding input to composition
|
|
243
|
+
*/
|
|
244
|
+
export declare function executeAddCompositionInput(auth: AuthContext, data: any): Promise<void>;
|
|
245
|
+
/**
|
|
246
|
+
* Prepares removing an input from a composition
|
|
247
|
+
*/
|
|
248
|
+
export declare function prepareRemoveCompositionInput(budgetId: string, compositionId: string, inputId: string, inputDescription: string): {
|
|
249
|
+
action: string;
|
|
250
|
+
preview: string;
|
|
251
|
+
data: any;
|
|
252
|
+
};
|
|
253
|
+
/**
|
|
254
|
+
* Executes removing input from composition
|
|
255
|
+
*/
|
|
256
|
+
export declare function executeRemoveCompositionInput(auth: AuthContext, data: any): Promise<void>;
|
|
257
|
+
/**
|
|
258
|
+
* Prepares converting a simple cost item to a composition
|
|
259
|
+
*/
|
|
260
|
+
export declare function prepareConvertToComposition(budgetId: string, itemId: string, itemDescription: string): {
|
|
261
|
+
action: string;
|
|
262
|
+
preview: string;
|
|
263
|
+
data: any;
|
|
264
|
+
};
|
|
265
|
+
/**
|
|
266
|
+
* Executes converting a cost item to a composition
|
|
267
|
+
*/
|
|
268
|
+
export declare function executeConvertToComposition(auth: AuthContext, data: any): Promise<void>;
|
|
269
|
+
/**
|
|
270
|
+
* Prepares converting a composition back to simple cost
|
|
271
|
+
*/
|
|
272
|
+
export declare function prepareConvertToCost(budgetId: string, itemId: string, itemDescription: string): {
|
|
273
|
+
action: string;
|
|
274
|
+
preview: string;
|
|
275
|
+
data: any;
|
|
276
|
+
};
|
|
277
|
+
/**
|
|
278
|
+
* Executes converting a composition back to cost
|
|
279
|
+
*/
|
|
280
|
+
export declare function executeConvertToCost(auth: AuthContext, data: any): Promise<void>;
|
|
91
281
|
//# sourceMappingURL=budgetService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budgetService.d.ts","sourceRoot":"","sources":["../../src/core/budgetService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC;IACvC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0BjG;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"budgetService.d.ts","sourceRoot":"","sources":["../../src/core/budgetService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC;IACvC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0BjG;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0B3F;AAqBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAMpH;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CvF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAOhD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC/B,GACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAoChD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ChF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAM3I;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBnF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAmD/G;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAUhD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBlF;AAID;;GAEG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IACL,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,GACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAchD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCjF;AAID;;GAEG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACjB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAMhD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAkC1F;AAID;;GAEG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAUhD;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,GACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAYhD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BnF;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,GAAG,cAAc,EACrC,eAAe,EAAE,MAAM,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAUhD;AAID;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,EACpE,eAAe,EAAE,MAAM,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAMhD;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7F;AAID;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACL,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,gBAAgB,EAAE,MAAM,GACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAYhD;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D7F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,GACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAOhD;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD5F;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CACzC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GACzB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAMhD;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C/F;AAID;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAMhD;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD7F;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAMhD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCtF"}
|