@accounter/server
Version:
Accounter GraphQL server
406 lines (404 loc) • 14.9 kB
text/typescript
import type { UseCaseSpec } from '../../../fixtures/fixture-spec.js';
import { CountryCode, Currency } from '../../../shared/enums.js';
import { makeUUID } from '../../helpers/deterministic-uuid.js';
/**
* Monthly Expense Use-Case: Foreign Currency Transaction
*
* Demonstrates a US-based supplier invoice paid via bank transfer with
* exchange rate conversion from USD to ILS. This use-case validates:
* - Foreign currency transaction handling
* - Exchange rate application
* - Cross-border payment processing
* - Ledger generation with currency conversion
*/
export const monthlyExpenseForeignCurrency: UseCaseSpec = {
id: 'monthly-expense-foreign-currency',
name: 'Monthly Expense (Foreign Currency)',
description:
'US-based supplier invoice paid via bank transfer with exchange rate conversion from USD to ILS. Validates foreign currency handling and ledger generation.',
category: 'expenses',
fixtures: {
businesses: [
{
id: makeUUID('business', 'us-supplier-acme-llc'),
name: 'Acme Consulting LLC',
country: CountryCode['United States of America (the)'],
canSettleWithReceipt: false,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
],
taxCategories: [
{
id: makeUUID('tax-category', 'consulting-expenses'),
name: 'Consulting Expenses',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
],
financialAccounts: [
{
id: makeUUID('financial-account', 'bank-usd-account'),
accountNumber: '123-456-7890',
type: 'BANK_ACCOUNT',
currency: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
taxCategoryMappings: [
{
taxCategoryId: makeUUID('tax-category', 'consulting-expenses'),
currency: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
],
},
],
charges: [
{
id: makeUUID('charge', 'consulting-invoice-2024-01'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'January consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-02'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'February consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-03'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'March consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-04'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'April consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-05'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'May consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-06'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'June consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-07'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'July consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-08'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'August consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-09'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'September consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-10'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'October consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-11'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'November consulting services',
},
{
id: makeUUID('charge', 'consulting-invoice-2024-12'),
ownerId: '{{ADMIN_BUSINESS_ID}}',
userDescription: 'December consulting services',
},
],
transactions: [
{
id: makeUUID('transaction', 'consulting-payment-usd-01'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-01'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-01-15',
debitDate: '2024-01-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-02'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-02'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-02-15',
debitDate: '2024-02-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-03'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-03'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-03-15',
debitDate: '2024-03-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-04'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-04'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-04-15',
debitDate: '2024-04-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-05'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-05'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-05-15',
debitDate: '2024-05-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-06'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-06'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-06-15',
debitDate: '2024-06-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-07'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-07'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-07-15',
debitDate: '2024-07-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-08'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-08'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-08-15',
debitDate: '2024-08-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-09'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-09'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-09-15',
debitDate: '2024-09-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-10'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-10'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-10-15',
debitDate: '2024-10-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-11'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-11'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-11-15',
debitDate: '2024-11-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('transaction', 'consulting-payment-usd-12'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-12'),
businessId: makeUUID('business', 'us-supplier-acme-llc'),
amount: '-500.00',
currency: Currency.Usd,
eventDate: '2024-12-15',
debitDate: '2024-12-15',
accountNumber: '123-456-7890',
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
],
documents: [
{
id: makeUUID('document', 'consulting-invoice-inv-2024-01-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-01'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-01-15',
type: 'INVOICE',
date: '2024-01-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-02-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-02'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-02-15',
type: 'INVOICE',
date: '2024-02-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-03-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-03'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-03-15',
type: 'INVOICE',
date: '2024-03-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-04-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-04'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-04-15',
type: 'INVOICE',
date: '2024-04-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-05-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-05'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-05-15',
type: 'INVOICE',
date: '2024-05-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-06-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-06'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-06-15',
type: 'INVOICE',
date: '2024-06-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-07-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-07'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-07-15',
type: 'INVOICE',
date: '2024-07-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-08-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-08'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-08-15',
type: 'INVOICE',
date: '2024-08-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-09-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-09'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-09-15',
type: 'INVOICE',
date: '2024-09-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-10-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-10'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-10-15',
type: 'INVOICE',
date: '2024-10-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-11-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-11'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-11-15',
type: 'INVOICE',
date: '2024-11-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
{
id: makeUUID('document', 'consulting-invoice-inv-2024-12-15'),
chargeId: makeUUID('charge', 'consulting-invoice-2024-12'),
creditorId: makeUUID('business', 'us-supplier-acme-llc'),
debtorId: '{{ADMIN_BUSINESS_ID}}',
serialNumber: 'INV-2024-12-15',
type: 'INVOICE',
date: '2024-12-01',
totalAmount: '500.00',
currencyCode: Currency.Usd,
ownerId: '{{ADMIN_BUSINESS_ID}}',
},
],
},
metadata: {
author: 'demo-team',
createdAt: '2024-01-01',
updatedAt: '2024-01-01',
},
expectations: {
ledgerRecordCount: 24,
},
};