@stupidcodefactory/freeagent-mcp-server 1.0.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/README.md +187 -0
- package/dist/api/freeagent-client.d.ts +12 -0
- package/dist/api/freeagent-client.d.ts.map +1 -0
- package/dist/api/freeagent-client.js +114 -0
- package/dist/api/freeagent-client.js.map +1 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +4 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/rate-limiter.d.ts +15 -0
- package/dist/api/rate-limiter.d.ts.map +1 -0
- package/dist/api/rate-limiter.js +62 -0
- package/dist/api/rate-limiter.js.map +1 -0
- package/dist/api/retry-handler.d.ts +14 -0
- package/dist/api/retry-handler.d.ts.map +1 -0
- package/dist/api/retry-handler.js +49 -0
- package/dist/api/retry-handler.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth.d.ts +16 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +64 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/token-manager.d.ts +10 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +71 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/auth/token-store.d.ts +10 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +84 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/config.d.ts +73 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +46 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/cash-flow-forecast.d.ts +12 -0
- package/dist/prompts/cash-flow-forecast.d.ts.map +1 -0
- package/dist/prompts/cash-flow-forecast.js +93 -0
- package/dist/prompts/cash-flow-forecast.js.map +1 -0
- package/dist/prompts/index.d.ts +8 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +8 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/invoice-from-description.d.ts +12 -0
- package/dist/prompts/invoice-from-description.d.ts.map +1 -0
- package/dist/prompts/invoice-from-description.js +49 -0
- package/dist/prompts/invoice-from-description.js.map +1 -0
- package/dist/prompts/monthly-expense-summary.d.ts +12 -0
- package/dist/prompts/monthly-expense-summary.d.ts.map +1 -0
- package/dist/prompts/monthly-expense-summary.js +84 -0
- package/dist/prompts/monthly-expense-summary.js.map +1 -0
- package/dist/prompts/overdue-invoice-followup.d.ts +12 -0
- package/dist/prompts/overdue-invoice-followup.d.ts.map +1 -0
- package/dist/prompts/overdue-invoice-followup.js +63 -0
- package/dist/prompts/overdue-invoice-followup.js.map +1 -0
- package/dist/prompts/project-profitability.d.ts +12 -0
- package/dist/prompts/project-profitability.d.ts.map +1 -0
- package/dist/prompts/project-profitability.js +103 -0
- package/dist/prompts/project-profitability.js.map +1 -0
- package/dist/prompts/quarterly-tax-estimate.d.ts +12 -0
- package/dist/prompts/quarterly-tax-estimate.d.ts.map +1 -0
- package/dist/prompts/quarterly-tax-estimate.js +132 -0
- package/dist/prompts/quarterly-tax-estimate.js.map +1 -0
- package/dist/prompts/transaction-categorization.d.ts +12 -0
- package/dist/prompts/transaction-categorization.d.ts.map +1 -0
- package/dist/prompts/transaction-categorization.js +81 -0
- package/dist/prompts/transaction-categorization.js.map +1 -0
- package/dist/resources/bank-accounts.d.ts +8 -0
- package/dist/resources/bank-accounts.d.ts.map +1 -0
- package/dist/resources/bank-accounts.js +34 -0
- package/dist/resources/bank-accounts.js.map +1 -0
- package/dist/resources/bank-transactions.d.ts +11 -0
- package/dist/resources/bank-transactions.d.ts.map +1 -0
- package/dist/resources/bank-transactions.js +34 -0
- package/dist/resources/bank-transactions.js.map +1 -0
- package/dist/resources/bills.d.ts +13 -0
- package/dist/resources/bills.d.ts.map +1 -0
- package/dist/resources/bills.js +38 -0
- package/dist/resources/bills.js.map +1 -0
- package/dist/resources/categories.d.ts +4 -0
- package/dist/resources/categories.d.ts.map +1 -0
- package/dist/resources/categories.js +21 -0
- package/dist/resources/categories.js.map +1 -0
- package/dist/resources/company.d.ts +3 -0
- package/dist/resources/company.d.ts.map +1 -0
- package/dist/resources/company.js +12 -0
- package/dist/resources/company.js.map +1 -0
- package/dist/resources/contacts.d.ts +9 -0
- package/dist/resources/contacts.d.ts.map +1 -0
- package/dist/resources/contacts.js +37 -0
- package/dist/resources/contacts.js.map +1 -0
- package/dist/resources/expenses.d.ts +12 -0
- package/dist/resources/expenses.d.ts.map +1 -0
- package/dist/resources/expenses.js +36 -0
- package/dist/resources/expenses.js.map +1 -0
- package/dist/resources/index.d.ts +20 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +12 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/invoices.d.ts +14 -0
- package/dist/resources/invoices.d.ts.map +1 -0
- package/dist/resources/invoices.js +40 -0
- package/dist/resources/invoices.js.map +1 -0
- package/dist/resources/projects.d.ts +10 -0
- package/dist/resources/projects.d.ts.map +1 -0
- package/dist/resources/projects.js +39 -0
- package/dist/resources/projects.js.map +1 -0
- package/dist/resources/timeslips.d.ts +12 -0
- package/dist/resources/timeslips.d.ts.map +1 -0
- package/dist/resources/timeslips.js +36 -0
- package/dist/resources/timeslips.js.map +1 -0
- package/dist/resources/users.d.ts +5 -0
- package/dist/resources/users.d.ts.map +1 -0
- package/dist/resources/users.js +30 -0
- package/dist/resources/users.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +568 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/bank-tools.d.ts +112 -0
- package/dist/tools/bank-tools.d.ts.map +1 -0
- package/dist/tools/bank-tools.js +143 -0
- package/dist/tools/bank-tools.js.map +1 -0
- package/dist/tools/bill-tools.d.ts +129 -0
- package/dist/tools/bill-tools.d.ts.map +1 -0
- package/dist/tools/bill-tools.js +121 -0
- package/dist/tools/bill-tools.js.map +1 -0
- package/dist/tools/contact-tools.d.ts +147 -0
- package/dist/tools/contact-tools.d.ts.map +1 -0
- package/dist/tools/contact-tools.js +140 -0
- package/dist/tools/contact-tools.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +13 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/invoice-tools.d.ts +171 -0
- package/dist/tools/invoice-tools.d.ts.map +1 -0
- package/dist/tools/invoice-tools.js +168 -0
- package/dist/tools/invoice-tools.js.map +1 -0
- package/dist/tools/project-tools.d.ts +117 -0
- package/dist/tools/project-tools.d.ts.map +1 -0
- package/dist/tools/project-tools.js +153 -0
- package/dist/tools/project-tools.js.map +1 -0
- package/dist/tools/query-tools.d.ts +91 -0
- package/dist/tools/query-tools.d.ts.map +1 -0
- package/dist/tools/query-tools.js +127 -0
- package/dist/tools/query-tools.js.map +1 -0
- package/dist/transformers/bank-transformer.d.ts +8 -0
- package/dist/transformers/bank-transformer.d.ts.map +1 -0
- package/dist/transformers/bank-transformer.js +46 -0
- package/dist/transformers/bank-transformer.js.map +1 -0
- package/dist/transformers/bill-transformer.d.ts +6 -0
- package/dist/transformers/bill-transformer.d.ts.map +1 -0
- package/dist/transformers/bill-transformer.js +34 -0
- package/dist/transformers/bill-transformer.js.map +1 -0
- package/dist/transformers/category-transformer.d.ts +5 -0
- package/dist/transformers/category-transformer.d.ts.map +1 -0
- package/dist/transformers/category-transformer.js +14 -0
- package/dist/transformers/category-transformer.js.map +1 -0
- package/dist/transformers/common.d.ts +7 -0
- package/dist/transformers/common.d.ts.map +1 -0
- package/dist/transformers/common.js +33 -0
- package/dist/transformers/common.js.map +1 -0
- package/dist/transformers/company-transformer.d.ts +4 -0
- package/dist/transformers/company-transformer.d.ts.map +1 -0
- package/dist/transformers/company-transformer.js +10 -0
- package/dist/transformers/company-transformer.js.map +1 -0
- package/dist/transformers/contact-transformer.d.ts +5 -0
- package/dist/transformers/contact-transformer.d.ts.map +1 -0
- package/dist/transformers/contact-transformer.js +18 -0
- package/dist/transformers/contact-transformer.js.map +1 -0
- package/dist/transformers/expense-transformer.d.ts +5 -0
- package/dist/transformers/expense-transformer.d.ts.map +1 -0
- package/dist/transformers/expense-transformer.js +19 -0
- package/dist/transformers/expense-transformer.js.map +1 -0
- package/dist/transformers/index.d.ts +11 -0
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +11 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/transformers/invoice-transformer.d.ts +6 -0
- package/dist/transformers/invoice-transformer.d.ts.map +1 -0
- package/dist/transformers/invoice-transformer.js +39 -0
- package/dist/transformers/invoice-transformer.js.map +1 -0
- package/dist/transformers/project-transformer.d.ts +9 -0
- package/dist/transformers/project-transformer.d.ts.map +1 -0
- package/dist/transformers/project-transformer.js +53 -0
- package/dist/transformers/project-transformer.js.map +1 -0
- package/dist/transformers/user-transformer.d.ts +5 -0
- package/dist/transformers/user-transformer.d.ts.map +1 -0
- package/dist/transformers/user-transformer.js +14 -0
- package/dist/transformers/user-transformer.js.map +1 -0
- package/dist/types/freeagent/index.d.ts +256 -0
- package/dist/types/freeagent/index.d.ts.map +1 -0
- package/dist/types/freeagent/index.js +3 -0
- package/dist/types/freeagent/index.js.map +1 -0
- package/dist/types/llm/index.d.ts +159 -0
- package/dist/types/llm/index.d.ts.map +1 -0
- package/dist/types/llm/index.js +3 -0
- package/dist/types/llm/index.js.map +1 -0
- package/dist/utils/error-handler.d.ts +11 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +57 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/sanitizer.d.ts +4 -0
- package/dist/utils/sanitizer.d.ts.map +1 -0
- package/dist/utils/sanitizer.js +42 -0
- package/dist/utils/sanitizer.js.map +1 -0
- package/dist/utils/validators.d.ts +19 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +83 -0
- package/dist/utils/validators.js.map +1 -0
- package/dist/utils/zod-to-json-schema.d.ts +24 -0
- package/dist/utils/zod-to-json-schema.d.ts.map +1 -0
- package/dist/utils/zod-to-json-schema.js +141 -0
- package/dist/utils/zod-to-json-schema.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getInvoices } from '../resources/invoices.js';
|
|
3
|
+
import { getBankAccounts, buildBankAccountNameLookup } from '../resources/bank-accounts.js';
|
|
4
|
+
import { getBankTransactions } from '../resources/bank-transactions.js';
|
|
5
|
+
import { handleToolError } from '../utils/error-handler.js';
|
|
6
|
+
// List unpaid invoices schema
|
|
7
|
+
export const listUnpaidInvoicesSchema = z.object({
|
|
8
|
+
contact_id: z.string().optional(),
|
|
9
|
+
include_overdue_only: z.boolean().default(false),
|
|
10
|
+
from_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
11
|
+
});
|
|
12
|
+
export async function listUnpaidInvoices(client, input, contactNameLookup) {
|
|
13
|
+
try {
|
|
14
|
+
const validated = listUnpaidInvoicesSchema.parse(input);
|
|
15
|
+
const filters = {
|
|
16
|
+
view: 'recent_open_or_overdue',
|
|
17
|
+
};
|
|
18
|
+
if (validated.contact_id)
|
|
19
|
+
filters.contact = validated.contact_id;
|
|
20
|
+
if (validated.from_date)
|
|
21
|
+
filters.fromDate = validated.from_date;
|
|
22
|
+
let invoices = await getInvoices(client, filters, contactNameLookup);
|
|
23
|
+
if (validated.include_overdue_only) {
|
|
24
|
+
invoices = invoices.filter((inv) => inv.status === 'Overdue');
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
invoices = invoices.filter((inv) => inv.status === 'Open' || inv.status === 'Overdue');
|
|
28
|
+
}
|
|
29
|
+
const overdueInvoices = invoices.filter((inv) => inv.status === 'Overdue');
|
|
30
|
+
const currency = invoices.length > 0 ? invoices[0].currency : 'GBP';
|
|
31
|
+
return {
|
|
32
|
+
invoices,
|
|
33
|
+
totalCount: invoices.length,
|
|
34
|
+
totalDue: invoices.reduce((sum, inv) => sum + inv.dueValue, 0),
|
|
35
|
+
totalOverdue: overdueInvoices.reduce((sum, inv) => sum + inv.dueValue, 0),
|
|
36
|
+
overdueCount: overdueInvoices.length,
|
|
37
|
+
currency,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
handleToolError(error, 'list_unpaid_invoices');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Get bank summary schema
|
|
45
|
+
export const getBankSummarySchema = z.object({
|
|
46
|
+
view: z.enum(['all', 'standard', 'paypal_accounts', 'credit_card_accounts']).default('all'),
|
|
47
|
+
});
|
|
48
|
+
export async function getBankSummary(client, input) {
|
|
49
|
+
try {
|
|
50
|
+
const validated = getBankSummarySchema.parse(input);
|
|
51
|
+
const accounts = await getBankAccounts(client, { view: validated.view });
|
|
52
|
+
const activeAccounts = accounts.filter((acc) => acc.status === 'Active');
|
|
53
|
+
// Group by currency
|
|
54
|
+
const gbpAccounts = activeAccounts.filter((acc) => acc.currency === 'GBP');
|
|
55
|
+
const totalGbp = gbpAccounts.reduce((sum, acc) => sum + acc.currentBalance, 0);
|
|
56
|
+
return {
|
|
57
|
+
accounts: activeAccounts,
|
|
58
|
+
totalBalance: totalGbp,
|
|
59
|
+
currency: 'GBP',
|
|
60
|
+
accountCount: activeAccounts.length,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
handleToolError(error, 'get_bank_summary');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Search transactions schema
|
|
68
|
+
export const searchTransactionsSchema = z.object({
|
|
69
|
+
bank_account_id: z.string().min(1),
|
|
70
|
+
query: z.string().min(1),
|
|
71
|
+
from_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
72
|
+
to_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
73
|
+
unexplained_only: z.boolean().default(false),
|
|
74
|
+
});
|
|
75
|
+
export async function searchTransactions(client, input) {
|
|
76
|
+
try {
|
|
77
|
+
const validated = searchTransactionsSchema.parse(input);
|
|
78
|
+
const bankAccountNameLookup = await buildBankAccountNameLookup(client);
|
|
79
|
+
const transactions = await getBankTransactions(client, {
|
|
80
|
+
bankAccount: validated.bank_account_id,
|
|
81
|
+
fromDate: validated.from_date,
|
|
82
|
+
toDate: validated.to_date,
|
|
83
|
+
view: validated.unexplained_only ? 'unexplained' : 'all',
|
|
84
|
+
}, bankAccountNameLookup);
|
|
85
|
+
// Simple text search on description
|
|
86
|
+
const queryLower = validated.query.toLowerCase();
|
|
87
|
+
const filtered = transactions.filter((tx) => tx.description?.toLowerCase().includes(queryLower));
|
|
88
|
+
return {
|
|
89
|
+
transactions: filtered,
|
|
90
|
+
matchCount: filtered.length,
|
|
91
|
+
searchQuery: validated.query,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
handleToolError(error, 'search_transactions');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Get unexplained transactions schema
|
|
99
|
+
export const getUnexplainedTransactionsSchema = z.object({
|
|
100
|
+
bank_account_id: z.string().min(1),
|
|
101
|
+
from_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
102
|
+
to_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
103
|
+
limit: z.number().int().positive().default(50),
|
|
104
|
+
});
|
|
105
|
+
export async function getUnexplainedTransactions(client, input) {
|
|
106
|
+
try {
|
|
107
|
+
const validated = getUnexplainedTransactionsSchema.parse(input);
|
|
108
|
+
const bankAccountNameLookup = await buildBankAccountNameLookup(client);
|
|
109
|
+
const transactions = await getBankTransactions(client, {
|
|
110
|
+
bankAccount: validated.bank_account_id,
|
|
111
|
+
fromDate: validated.from_date,
|
|
112
|
+
toDate: validated.to_date,
|
|
113
|
+
view: 'unexplained',
|
|
114
|
+
}, bankAccountNameLookup);
|
|
115
|
+
const limited = transactions.slice(0, validated.limit);
|
|
116
|
+
const totalUnexplained = limited.reduce((sum, tx) => sum + Math.abs(tx.unexplainedAmount), 0);
|
|
117
|
+
return {
|
|
118
|
+
transactions: limited,
|
|
119
|
+
count: limited.length,
|
|
120
|
+
totalUnexplainedAmount: totalUnexplained,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
handleToolError(error, 'get_unexplained_transactions');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=query-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-tools.js","sourceRoot":"","sources":["../../src/tools/query-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FreeAgentBankAccount, FreeAgentBankTransaction, FreeAgentBankTransactionExplanation } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMBankAccount, LLMBankTransaction, LLMBankTransactionExplanation } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformBankAccount(account: FreeAgentBankAccount): LLMBankAccount;
|
|
4
|
+
export declare function transformBankAccounts(accounts: FreeAgentBankAccount[]): LLMBankAccount[];
|
|
5
|
+
export declare function transformBankTransactionExplanation(explanation: FreeAgentBankTransactionExplanation): LLMBankTransactionExplanation;
|
|
6
|
+
export declare function transformBankTransaction(transaction: FreeAgentBankTransaction, bankAccountNameLookup?: Map<string, string>): LLMBankTransaction;
|
|
7
|
+
export declare function transformBankTransactions(transactions: FreeAgentBankTransaction[], bankAccountNameLookup?: Map<string, string>): LLMBankTransaction[];
|
|
8
|
+
//# sourceMappingURL=bank-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bank-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/bank-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,mCAAmC,EACpC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,6BAA6B,EAC9B,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc,CAYlF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,cAAc,EAAE,CAExF;AAED,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,mCAAmC,GAC/C,6BAA6B,CAQ/B;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,wBAAwB,EACrC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,kBAAkB,CAmBpB;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,wBAAwB,EAAE,EACxC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1C,kBAAkB,EAAE,CAEtB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { extractId, parseNumericString } from './common.js';
|
|
2
|
+
export function transformBankAccount(account) {
|
|
3
|
+
return {
|
|
4
|
+
id: extractId(account.url),
|
|
5
|
+
name: account.name,
|
|
6
|
+
type: account.type,
|
|
7
|
+
currency: account.currency,
|
|
8
|
+
currentBalance: parseNumericString(account.current_balance),
|
|
9
|
+
openingBalance: parseNumericString(account.opening_balance),
|
|
10
|
+
status: account.status,
|
|
11
|
+
isPrimary: account.is_primary,
|
|
12
|
+
latestActivityDate: account.latest_activity_date,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function transformBankAccounts(accounts) {
|
|
16
|
+
return accounts.map(transformBankAccount);
|
|
17
|
+
}
|
|
18
|
+
export function transformBankTransactionExplanation(explanation) {
|
|
19
|
+
return {
|
|
20
|
+
category: explanation.category ? extractId(explanation.category) : undefined,
|
|
21
|
+
description: explanation.description,
|
|
22
|
+
matchedInvoiceId: explanation.paid_invoice ? extractId(explanation.paid_invoice) : undefined,
|
|
23
|
+
matchedBillId: explanation.paid_bill ? extractId(explanation.paid_bill) : undefined,
|
|
24
|
+
value: parseNumericString(explanation.gross_value),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function transformBankTransaction(transaction, bankAccountNameLookup) {
|
|
28
|
+
const bankAccountId = extractId(transaction.bank_account);
|
|
29
|
+
const bankAccountName = bankAccountNameLookup?.get(transaction.bank_account) ?? bankAccountId;
|
|
30
|
+
const explanations = transaction.bank_transaction_explanations?.map(transformBankTransactionExplanation);
|
|
31
|
+
return {
|
|
32
|
+
id: extractId(transaction.url),
|
|
33
|
+
bankAccountId,
|
|
34
|
+
bankAccountName,
|
|
35
|
+
datedOn: transaction.dated_on,
|
|
36
|
+
amount: parseNumericString(transaction.amount),
|
|
37
|
+
description: transaction.description,
|
|
38
|
+
isExplained: parseNumericString(transaction.unexplained_amount) === 0,
|
|
39
|
+
unexplainedAmount: parseNumericString(transaction.unexplained_amount),
|
|
40
|
+
explanations,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function transformBankTransactions(transactions, bankAccountNameLookup) {
|
|
44
|
+
return transactions.map((tx) => transformBankTransaction(tx, bankAccountNameLookup));
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=bank-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bank-transformer.js","sourceRoot":"","sources":["../../src/transformers/bank-transformer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,UAAU,oBAAoB,CAAC,OAA6B;IAChE,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC;QAC3D,cAAc,EAAE,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC;QAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,kBAAkB,EAAE,OAAO,CAAC,oBAAoB;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgC;IACpE,OAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,WAAgD;IAEhD,OAAO;QACL,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5E,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,gBAAgB,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5F,aAAa,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QACnF,KAAK,EAAE,kBAAkB,CAAC,WAAW,CAAC,WAAW,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,WAAqC,EACrC,qBAA2C;IAE3C,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,qBAAqB,EAAE,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC;IAE9F,MAAM,YAAY,GAAG,WAAW,CAAC,6BAA6B,EAAE,GAAG,CACjE,mCAAmC,CACpC,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC;QAC9B,aAAa;QACb,eAAe;QACf,OAAO,EAAE,WAAW,CAAC,QAAQ;QAC7B,MAAM,EAAE,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC;QAC9C,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,WAAW,EAAE,kBAAkB,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC;QACrE,iBAAiB,EAAE,kBAAkB,CAAC,WAAW,CAAC,kBAAkB,CAAC;QACrE,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,YAAwC,EACxC,qBAA2C;IAE3C,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,wBAAwB,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FreeAgentBill, FreeAgentBillItem } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMBill, LLMBillItem } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformBillItem(item: FreeAgentBillItem): LLMBillItem;
|
|
4
|
+
export declare function transformBill(bill: FreeAgentBill, contactNameLookup?: Map<string, string>): LLMBill;
|
|
5
|
+
export declare function transformBills(bills: FreeAgentBill[], contactNameLookup?: Map<string, string>): LLMBill[];
|
|
6
|
+
//# sourceMappingURL=bill-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bill-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/bill-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGlE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,CAQtE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EACnB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAoBT;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EAAE,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,EAAE,CAEX"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { extractId, parseNumericString } from './common.js';
|
|
2
|
+
export function transformBillItem(item) {
|
|
3
|
+
return {
|
|
4
|
+
category: extractId(item.category),
|
|
5
|
+
description: item.description,
|
|
6
|
+
totalValue: parseNumericString(item.total_value),
|
|
7
|
+
salesTaxRate: item.sales_tax_rate ? parseNumericString(item.sales_tax_rate) : undefined,
|
|
8
|
+
projectId: item.project ? extractId(item.project) : undefined,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function transformBill(bill, contactNameLookup) {
|
|
12
|
+
const contactId = extractId(bill.contact);
|
|
13
|
+
const contactName = contactNameLookup?.get(bill.contact) ?? contactId;
|
|
14
|
+
return {
|
|
15
|
+
id: extractId(bill.url),
|
|
16
|
+
contactId,
|
|
17
|
+
contactName,
|
|
18
|
+
reference: bill.reference,
|
|
19
|
+
datedOn: bill.dated_on,
|
|
20
|
+
dueOn: bill.due_on,
|
|
21
|
+
currency: bill.currency,
|
|
22
|
+
totalValue: parseNumericString(bill.total_value),
|
|
23
|
+
salesTaxValue: parseNumericString(bill.sales_tax_value),
|
|
24
|
+
paidValue: parseNumericString(bill.paid_value),
|
|
25
|
+
dueValue: parseNumericString(bill.due_value),
|
|
26
|
+
status: bill.status,
|
|
27
|
+
items: bill.bill_items?.map(transformBillItem),
|
|
28
|
+
comments: bill.comments,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function transformBills(bills, contactNameLookup) {
|
|
32
|
+
return bills.map((bill) => transformBill(bill, contactNameLookup));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=bill-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bill-transformer.js","sourceRoot":"","sources":["../../src/transformers/bill-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;QAChD,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;QACvF,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAmB,EACnB,iBAAuC;IAEvC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,iBAAiB,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IAEtE,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,SAAS;QACT,WAAW;QACX,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,QAAQ;QACtB,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;QAChD,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;QACvD,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9C,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5C,MAAM,EAAE,IAAI,CAAC,MAA2B;QACxC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,iBAAiB,CAAC;QAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAsB,EACtB,iBAAuC;IAEvC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FreeAgentCategory } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMCategory } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformCategory(category: FreeAgentCategory): LLMCategory;
|
|
4
|
+
export declare function transformCategories(categories: FreeAgentCategory[]): LLMCategory[];
|
|
5
|
+
//# sourceMappingURL=category-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/category-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,WAAW,CAQ1E;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CAElF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { extractId } from './common.js';
|
|
2
|
+
export function transformCategory(category) {
|
|
3
|
+
return {
|
|
4
|
+
id: extractId(category.url),
|
|
5
|
+
description: category.description,
|
|
6
|
+
nominalCode: category.nominal_code,
|
|
7
|
+
groupDescription: category.group_description,
|
|
8
|
+
allowableForTax: category.allowable_for_tax,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function transformCategories(categories) {
|
|
12
|
+
return categories.map(transformCategory);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=category-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-transformer.js","sourceRoot":"","sources":["../../src/transformers/category-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC3D,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,WAAW,EAAE,QAAQ,CAAC,YAAY;QAClC,gBAAgB,EAAE,QAAQ,CAAC,iBAAiB;QAC5C,eAAe,EAAE,QAAQ,CAAC,iBAAiB;KAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAA+B;IACjE,OAAO,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { extractId, parseNumericString } from '../utils/validators.js';
|
|
2
|
+
export { extractId, parseNumericString };
|
|
3
|
+
export declare function computeDaysOverdue(dueDate: string, status: string): number | undefined;
|
|
4
|
+
export declare function computeFullName(firstName?: string, lastName?: string, organisationName?: string): string;
|
|
5
|
+
export declare function parseDate(dateString: string | undefined | null): string | undefined;
|
|
6
|
+
export declare function computeLineTotal(quantity: string, price: string): number;
|
|
7
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/transformers/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAEzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CActF;AAED,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAKxG;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAMnF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { extractId, parseNumericString } from '../utils/validators.js';
|
|
2
|
+
export { extractId, parseNumericString };
|
|
3
|
+
export function computeDaysOverdue(dueDate, status) {
|
|
4
|
+
if (status !== 'Overdue') {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
const due = new Date(dueDate);
|
|
8
|
+
const today = new Date();
|
|
9
|
+
today.setHours(0, 0, 0, 0);
|
|
10
|
+
due.setHours(0, 0, 0, 0);
|
|
11
|
+
const diffTime = today.getTime() - due.getTime();
|
|
12
|
+
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
|
13
|
+
return diffDays > 0 ? diffDays : undefined;
|
|
14
|
+
}
|
|
15
|
+
export function computeFullName(firstName, lastName, organisationName) {
|
|
16
|
+
if (firstName || lastName) {
|
|
17
|
+
return [firstName, lastName].filter(Boolean).join(' ');
|
|
18
|
+
}
|
|
19
|
+
return organisationName ?? 'Unknown';
|
|
20
|
+
}
|
|
21
|
+
export function parseDate(dateString) {
|
|
22
|
+
if (!dateString) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
// FreeAgent dates are already in YYYY-MM-DD format
|
|
26
|
+
return dateString;
|
|
27
|
+
}
|
|
28
|
+
export function computeLineTotal(quantity, price) {
|
|
29
|
+
const qty = parseNumericString(quantity);
|
|
30
|
+
const prc = parseNumericString(price);
|
|
31
|
+
return Math.round(qty * prc * 100) / 100;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/transformers/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,MAAc;IAChE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAE7D,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAkB,EAAE,QAAiB,EAAE,gBAAyB;IAC9F,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,gBAAgB,IAAI,SAAS,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,UAAqC;IAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,mDAAmD;IACnD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,KAAa;IAC9D,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/company-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAQtE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function transformCompany(company) {
|
|
2
|
+
return {
|
|
3
|
+
name: company.name,
|
|
4
|
+
currency: company.currency,
|
|
5
|
+
type: company.type,
|
|
6
|
+
startDate: company.company_start_date,
|
|
7
|
+
salesTaxRegistered: company.sales_tax_registration_status === 'Registered',
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=company-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company-transformer.js","sourceRoot":"","sources":["../../src/transformers/company-transformer.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACxD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,kBAAkB;QACrC,kBAAkB,EAAE,OAAO,CAAC,6BAA6B,KAAK,YAAY;KAC3E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FreeAgentContact } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMContact } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformContact(contact: FreeAgentContact): LLMContact;
|
|
4
|
+
export declare function transformContacts(contacts: FreeAgentContact[]): LLMContact[];
|
|
5
|
+
//# sourceMappingURL=contact-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/contact-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAYtE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,UAAU,EAAE,CAE5E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { extractId, parseNumericString, computeFullName } from './common.js';
|
|
2
|
+
export function transformContact(contact) {
|
|
3
|
+
return {
|
|
4
|
+
id: extractId(contact.url),
|
|
5
|
+
name: computeFullName(contact.first_name, contact.last_name, contact.organisation_name),
|
|
6
|
+
organisationName: contact.organisation_name,
|
|
7
|
+
email: contact.email,
|
|
8
|
+
phoneNumber: contact.phone_number,
|
|
9
|
+
accountBalance: parseNumericString(contact.account_balance),
|
|
10
|
+
status: contact.status,
|
|
11
|
+
activeProjectsCount: contact.active_projects_count,
|
|
12
|
+
paymentTermsDays: contact.default_payment_terms_in_days,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function transformContacts(contacts) {
|
|
16
|
+
return contacts.map(transformContact);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=contact-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contact-transformer.js","sourceRoot":"","sources":["../../src/transformers/contact-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACxD,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC;QACvF,gBAAgB,EAAE,OAAO,CAAC,iBAAiB;QAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,YAAY;QACjC,cAAc,EAAE,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC;QAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,mBAAmB,EAAE,OAAO,CAAC,qBAAqB;QAClD,gBAAgB,EAAE,OAAO,CAAC,6BAA6B;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA4B;IAC5D,OAAO,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FreeAgentExpense } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMExpense } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformExpense(expense: FreeAgentExpense): LLMExpense;
|
|
4
|
+
export declare function transformExpenses(expenses: FreeAgentExpense[]): LLMExpense[];
|
|
5
|
+
//# sourceMappingURL=expense-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expense-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/expense-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAatE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,UAAU,EAAE,CAE5E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { extractId, parseNumericString } from './common.js';
|
|
2
|
+
export function transformExpense(expense) {
|
|
3
|
+
return {
|
|
4
|
+
id: extractId(expense.url),
|
|
5
|
+
userId: extractId(expense.user),
|
|
6
|
+
category: extractId(expense.category),
|
|
7
|
+
datedOn: expense.dated_on,
|
|
8
|
+
currency: expense.currency,
|
|
9
|
+
grossValue: parseNumericString(expense.gross_value),
|
|
10
|
+
salesTaxValue: expense.sales_tax_value ? parseNumericString(expense.sales_tax_value) : undefined,
|
|
11
|
+
description: expense.description,
|
|
12
|
+
projectId: expense.project ? extractId(expense.project) : undefined,
|
|
13
|
+
status: expense.status,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function transformExpenses(expenses) {
|
|
17
|
+
return expenses.map(transformExpense);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=expense-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expense-transformer.js","sourceRoot":"","sources":["../../src/transformers/expense-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACxD,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/B,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrC,OAAO,EAAE,OAAO,CAAC,QAAQ;QACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC;QACnD,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;QAChG,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA4B;IAC5D,OAAO,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { extractId, parseNumericString, computeDaysOverdue, computeFullName, parseDate, computeLineTotal } from './common.js';
|
|
2
|
+
export { transformCompany } from './company-transformer.js';
|
|
3
|
+
export { transformContact, transformContacts } from './contact-transformer.js';
|
|
4
|
+
export { transformInvoice, transformInvoices, transformInvoiceItem } from './invoice-transformer.js';
|
|
5
|
+
export { transformBill, transformBills, transformBillItem } from './bill-transformer.js';
|
|
6
|
+
export { transformBankAccount, transformBankAccounts, transformBankTransaction, transformBankTransactions } from './bank-transformer.js';
|
|
7
|
+
export { transformProject, transformProjects, transformTask, transformTasks, transformTimeslip, transformTimeslips } from './project-transformer.js';
|
|
8
|
+
export { transformExpense, transformExpenses } from './expense-transformer.js';
|
|
9
|
+
export { transformCategory, transformCategories } from './category-transformer.js';
|
|
10
|
+
export { transformUser, transformUsers } from './user-transformer.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9H,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACrJ,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { extractId, parseNumericString, computeDaysOverdue, computeFullName, parseDate, computeLineTotal } from './common.js';
|
|
2
|
+
export { transformCompany } from './company-transformer.js';
|
|
3
|
+
export { transformContact, transformContacts } from './contact-transformer.js';
|
|
4
|
+
export { transformInvoice, transformInvoices, transformInvoiceItem } from './invoice-transformer.js';
|
|
5
|
+
export { transformBill, transformBills, transformBillItem } from './bill-transformer.js';
|
|
6
|
+
export { transformBankAccount, transformBankAccounts, transformBankTransaction, transformBankTransactions } from './bank-transformer.js';
|
|
7
|
+
export { transformProject, transformProjects, transformTask, transformTasks, transformTimeslip, transformTimeslips } from './project-transformer.js';
|
|
8
|
+
export { transformExpense, transformExpenses } from './expense-transformer.js';
|
|
9
|
+
export { transformCategory, transformCategories } from './category-transformer.js';
|
|
10
|
+
export { transformUser, transformUsers } from './user-transformer.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC9H,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACrJ,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FreeAgentInvoice, FreeAgentInvoiceItem } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMInvoice, LLMInvoiceItem } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformInvoiceItem(item: FreeAgentInvoiceItem): LLMInvoiceItem;
|
|
4
|
+
export declare function transformInvoice(invoice: FreeAgentInvoice, contactNameLookup?: Map<string, string>): LLMInvoice;
|
|
5
|
+
export declare function transformInvoices(invoices: FreeAgentInvoice[], contactNameLookup?: Map<string, string>): LLMInvoice[];
|
|
6
|
+
//# sourceMappingURL=invoice-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoice-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/invoice-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGxE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,CAS/E;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,UAAU,CAwBZ;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,UAAU,EAAE,CAEd"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { extractId, parseNumericString, computeDaysOverdue, computeLineTotal } from './common.js';
|
|
2
|
+
export function transformInvoiceItem(item) {
|
|
3
|
+
return {
|
|
4
|
+
description: item.description ?? '',
|
|
5
|
+
itemType: item.item_type,
|
|
6
|
+
quantity: parseNumericString(item.quantity),
|
|
7
|
+
price: parseNumericString(item.price),
|
|
8
|
+
salesTaxRate: item.sales_tax_rate ? parseNumericString(item.sales_tax_rate) : undefined,
|
|
9
|
+
lineTotal: computeLineTotal(item.quantity, item.price),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function transformInvoice(invoice, contactNameLookup) {
|
|
13
|
+
const contactId = extractId(invoice.contact);
|
|
14
|
+
const contactName = contactNameLookup?.get(invoice.contact) ?? contactId;
|
|
15
|
+
return {
|
|
16
|
+
id: extractId(invoice.url),
|
|
17
|
+
reference: invoice.reference,
|
|
18
|
+
contactId,
|
|
19
|
+
contactName,
|
|
20
|
+
projectId: invoice.project ? extractId(invoice.project) : undefined,
|
|
21
|
+
datedOn: invoice.dated_on,
|
|
22
|
+
dueOn: invoice.due_on,
|
|
23
|
+
currency: invoice.currency,
|
|
24
|
+
netValue: parseNumericString(invoice.net_value),
|
|
25
|
+
taxValue: parseNumericString(invoice.sales_tax_value),
|
|
26
|
+
totalValue: parseNumericString(invoice.total_value),
|
|
27
|
+
paidValue: parseNumericString(invoice.paid_value),
|
|
28
|
+
dueValue: parseNumericString(invoice.due_value),
|
|
29
|
+
status: invoice.status,
|
|
30
|
+
daysOverdue: computeDaysOverdue(invoice.due_on, invoice.status),
|
|
31
|
+
items: invoice.invoice_items.map(transformInvoiceItem),
|
|
32
|
+
comments: invoice.comments,
|
|
33
|
+
paymentTermsDays: invoice.payment_terms_in_days,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function transformInvoices(invoices, contactNameLookup) {
|
|
37
|
+
return invoices.map((inv) => transformInvoice(inv, contactNameLookup));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=invoice-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoice-transformer.js","sourceRoot":"","sources":["../../src/transformers/invoice-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElG,MAAM,UAAU,oBAAoB,CAAC,IAA0B;IAC7D,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;QACnC,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3C,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;QACvF,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAyB,EACzB,iBAAuC;IAEvC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IAEzE,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS;QACT,WAAW;QACX,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,OAAO,EAAE,OAAO,CAAC,QAAQ;QACzB,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC;QAC/C,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC;QACrD,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC;QACnD,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC;QACjD,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC;QAC/C,MAAM,EAAE,OAAO,CAAC,MAA8B;QAC9C,WAAW,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;QAC/D,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACtD,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,gBAAgB,EAAE,OAAO,CAAC,qBAAqB;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAA4B,EAC5B,iBAAuC;IAEvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FreeAgentProject, FreeAgentTask, FreeAgentTimeslip } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMProject, LLMTask, LLMTimeslip } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformProject(project: FreeAgentProject, contactNameLookup?: Map<string, string>): LLMProject;
|
|
4
|
+
export declare function transformProjects(projects: FreeAgentProject[], contactNameLookup?: Map<string, string>): LLMProject[];
|
|
5
|
+
export declare function transformTask(task: FreeAgentTask): LLMTask;
|
|
6
|
+
export declare function transformTasks(tasks: FreeAgentTask[]): LLMTask[];
|
|
7
|
+
export declare function transformTimeslip(timeslip: FreeAgentTimeslip): LLMTimeslip;
|
|
8
|
+
export declare function transformTimeslips(timeslips: FreeAgentTimeslip[]): LLMTimeslip[];
|
|
9
|
+
//# sourceMappingURL=project-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-transformer.d.ts","sourceRoot":"","sources":["../../src/transformers/project-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAG9E,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,UAAU,CAkBZ;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,UAAU,EAAE,CAEd;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAU1D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,WAAW,CAY1E;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CAEhF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { extractId, parseNumericString } from './common.js';
|
|
2
|
+
export function transformProject(project, contactNameLookup) {
|
|
3
|
+
const contactId = extractId(project.contact);
|
|
4
|
+
const contactName = contactNameLookup?.get(project.contact) ?? contactId;
|
|
5
|
+
return {
|
|
6
|
+
id: extractId(project.url),
|
|
7
|
+
name: project.name,
|
|
8
|
+
contactId,
|
|
9
|
+
contactName,
|
|
10
|
+
status: project.status,
|
|
11
|
+
currency: project.currency,
|
|
12
|
+
budget: parseNumericString(project.budget),
|
|
13
|
+
budgetUnits: project.budget_units,
|
|
14
|
+
billingRate: project.normal_billing_rate ? parseNumericString(project.normal_billing_rate) : undefined,
|
|
15
|
+
isIR35: project.is_ir35,
|
|
16
|
+
startsOn: project.starts_on,
|
|
17
|
+
endsOn: project.ends_on,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function transformProjects(projects, contactNameLookup) {
|
|
21
|
+
return projects.map((p) => transformProject(p, contactNameLookup));
|
|
22
|
+
}
|
|
23
|
+
export function transformTask(task) {
|
|
24
|
+
return {
|
|
25
|
+
id: extractId(task.url),
|
|
26
|
+
projectId: extractId(task.project),
|
|
27
|
+
name: task.name,
|
|
28
|
+
status: task.status,
|
|
29
|
+
isBillable: task.is_billable,
|
|
30
|
+
billingRate: task.billing_rate ? parseNumericString(task.billing_rate) : undefined,
|
|
31
|
+
budget: task.budget ? parseNumericString(task.budget) : undefined,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function transformTasks(tasks) {
|
|
35
|
+
return tasks.map(transformTask);
|
|
36
|
+
}
|
|
37
|
+
export function transformTimeslip(timeslip) {
|
|
38
|
+
return {
|
|
39
|
+
id: extractId(timeslip.url),
|
|
40
|
+
userId: extractId(timeslip.user),
|
|
41
|
+
projectId: extractId(timeslip.project),
|
|
42
|
+
taskId: extractId(timeslip.task),
|
|
43
|
+
datedOn: timeslip.dated_on,
|
|
44
|
+
hours: parseNumericString(timeslip.hours),
|
|
45
|
+
comment: timeslip.comment,
|
|
46
|
+
status: timeslip.status,
|
|
47
|
+
billedOnInvoiceId: timeslip.billed_on_invoice ? extractId(timeslip.billed_on_invoice) : undefined,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function transformTimeslips(timeslips) {
|
|
51
|
+
return timeslips.map(transformTimeslip);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=project-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-transformer.js","sourceRoot":"","sources":["../../src/transformers/project-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAC9B,OAAyB,EACzB,iBAAuC;IAEvC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IAEzE,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS;QACT,WAAW;QACX,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,WAAW,EAAE,OAAO,CAAC,YAAY;QACjC,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS;QACtG,MAAM,EAAE,OAAO,CAAC,OAAO;QACvB,QAAQ,EAAE,OAAO,CAAC,SAAS;QAC3B,MAAM,EAAE,OAAO,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAA4B,EAC5B,iBAAuC;IAEvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QACvB,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,WAAW;QAC5B,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAClF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC3D,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC3B,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC,OAAO,EAAE,QAAQ,CAAC,QAAQ;QAC1B,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzC,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;KAClG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAA8B;IAC/D,OAAO,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FreeAgentUser } from '../types/freeagent/index.js';
|
|
2
|
+
import type { LLMUser } from '../types/llm/index.js';
|
|
3
|
+
export declare function transformUser(user: FreeAgentUser): LLMUser;
|
|
4
|
+
export declare function transformUsers(users: FreeAgentUser[]): LLMUser[];
|
|
5
|
+
//# sourceMappingURL=user-transformer.d.ts.map
|