friday-widgets
Version:
Professional embeddable accounting widgets for vertical SaaS platforms. Layer Financial-inspired design with comprehensive financial reporting capabilities.
372 lines • 11.1 kB
TypeScript
/**
* TypeScript definitions for Friday Accounting System
* Based on Django backend models and API structure
*/
export interface BaseEntity {
id: string;
created_at: string;
updated_at: string;
external_id?: string;
metadata?: Record<string, any>;
}
export interface PartnerAuth {
api_key: string;
partner_id?: string;
}
export interface Business extends BaseEntity {
legal_name: string;
name: string;
entity_type: 'limited' | 'llp' | 'sole_trader' | 'partnership' | 'plc' | 'other';
country: 'GB' | 'DE' | 'FR' | 'NL' | 'ES' | 'IT' | 'IE' | 'BE' | 'AT' | 'PT';
email?: string;
phone_number?: string;
vat_number?: string;
company_number?: string;
base_currency: 'GBP' | 'EUR' | 'USD';
accounting_method: 'cash' | 'accrual';
fiscal_year_end?: string;
is_active: boolean;
}
export interface JournalEntry extends BaseEntity {
business_id: string;
sequence_number: string;
entry_date: string;
reference: string;
description: string;
is_posted: boolean;
posted_at?: string;
auto_post_eligible: boolean;
requires_review: boolean;
ai_confidence_score?: number;
created_by: 'ai' | 'manual' | 'system' | 'import';
bank_transaction_id?: string;
accounting_period_id: string;
lines: JournalEntryLine[];
total_debits_cents: number;
total_credits_cents: number;
total_debits: number;
total_credits: number;
is_balanced: boolean;
balance_difference_cents: number;
can_be_posted: boolean;
}
export interface JournalEntryLine extends BaseEntity {
journal_entry_id: string;
ledger_account_id: string;
debit_amount_cents: number;
credit_amount_cents: number;
description?: string;
line_number: number;
external_reference?: string;
account?: Account;
account_code: string;
account_name: string;
amount_cents: number;
amount: number;
display_amount: string;
is_debit: boolean;
is_credit: boolean;
side: 'DR' | 'CR';
}
export interface NewJournalEntry {
entry_date: string;
reference: string;
description: string;
lines: NewJournalEntryLine[];
created_by?: 'manual';
}
export interface NewJournalEntryLine {
ledger_account_id: string;
debit_amount_cents?: number;
credit_amount_cents?: number;
description?: string;
line_number: number;
}
export interface Customer extends BaseEntity {
business_id: string;
reference_number?: string;
individual_name?: string;
company_name?: string;
email?: string;
mobile_phone?: string;
office_phone?: string;
address_line1?: string;
address_line2?: string;
city?: string;
postal_code?: string;
country: string;
vat_number?: string;
status: 'active' | 'archived' | 'suspended';
payment_terms_days?: number;
}
export interface Invoice extends BaseEntity {
business_id: string;
customer: string;
customer_name?: string;
invoice_number: string;
invoice_type: 'invoice' | 'credit_note' | 'proforma';
status: 'draft' | 'sent' | 'paid' | 'partially_paid' | 'overdue' | 'cancelled' | 'refunded';
issue_date: string;
due_date: string;
currency: 'GBP' | 'EUR' | 'USD';
subtotal: number;
tax_amount: number;
total_amount: number;
paid_amount: number;
outstanding_amount: number;
tax_rate: number;
tax_inclusive: boolean;
payment_terms_days?: number;
description?: string;
purchase_order_number?: string;
project_reference?: string;
}
export interface InvoiceLineItem extends BaseEntity {
invoice_id: string;
line_number: number;
description: string;
quantity: number;
unit_price_cents: number;
tax_rate: number;
line_total_cents: number;
revenue_account_id?: string;
}
export interface Payment extends BaseEntity {
business_id: string;
customer: string;
payment_reference?: string;
payment_date: string;
payment_method: 'bank_transfer' | 'credit_card' | 'cash' | 'check' | 'other';
currency: 'GBP' | 'EUR' | 'USD';
total_amount: number;
allocated_amount: number;
unallocated_amount: number;
processing_fee?: number;
status: 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';
processor_reference?: string;
bank_reference?: string;
notes?: string;
}
export interface PaymentAllocation extends BaseEntity {
payment_id: string;
invoice_id: string;
invoice?: Invoice;
amount_cents: number;
allocation_date: string;
}
export interface Account extends BaseEntity {
business_id: string;
code: string;
account_type: 'current_asset' | 'fixed_asset' | 'other_asset' | 'current_liability' | 'long_term_liability' | 'equity' | 'revenue' | 'operating_expense' | 'cost_of_goods_sold';
account_subtype?: string;
custom_name?: string;
parent_account?: string;
institution_name?: string;
iban?: string;
sort_code?: string;
account_number_mask?: string;
current_balance: number;
is_active: boolean;
ai_keywords?: string[];
name?: string;
normal_balance: 'debit' | 'credit';
}
export interface ApiResponse<T> {
success: boolean;
data?: T;
error?: string;
details?: string;
}
export interface PaginatedResponse<T> {
results: T[];
count: number;
next?: string;
previous?: string;
}
export interface DjangoResponse<T> extends T {
}
export interface CreateBusinessRequest {
external_id?: string;
legal_name: string;
name: string;
entity_type: 'limited' | 'llp' | 'sole_trader' | 'partnership' | 'plc' | 'other';
country: 'GB' | 'DE' | 'FR' | 'NL' | 'ES' | 'IT' | 'IE' | 'BE' | 'AT' | 'PT';
email?: string;
phone_number?: string;
vat_number?: string;
company_number?: string;
base_currency: 'GBP' | 'EUR' | 'USD';
accounting_method: 'cash' | 'accrual';
fiscal_year_end?: string;
metadata?: Record<string, any>;
}
export interface CreateCustomerRequest {
business_id: string;
external_id?: string;
reference_number?: string;
individual_name?: string;
company_name?: string;
email?: string;
mobile_phone?: string;
office_phone?: string;
address_line1?: string;
address_line2?: string;
city?: string;
postal_code?: string;
country: string;
vat_number?: string;
payment_terms_days?: number;
metadata?: Record<string, any>;
}
export interface CreateInvoiceRequest {
business_id: string;
external_id?: string;
customer: string;
invoice_number?: string;
invoice_type?: 'invoice' | 'credit_note' | 'proforma';
issue_date: string;
due_date: string;
currency: 'GBP' | 'EUR' | 'USD';
subtotal: number;
tax_amount: number;
total_amount: number;
tax_rate: number;
tax_inclusive: boolean;
payment_terms_days?: number;
description?: string;
purchase_order_number?: string;
project_reference?: string;
metadata?: Record<string, any>;
}
export interface CreateAccountRequest {
business_id: string;
code: string;
account_type: 'current_asset' | 'fixed_asset' | 'other_asset' | 'current_liability' | 'long_term_liability' | 'equity' | 'revenue' | 'operating_expense' | 'cost_of_goods_sold';
account_subtype?: string;
custom_name?: string;
parent_account?: string;
institution_name?: string;
iban?: string;
sort_code?: string;
account_number_mask?: string;
ai_keywords?: string[];
metadata?: Record<string, any>;
}
export interface CreatePaymentRequest {
business_id: string;
external_id?: string;
customer: string;
payment_reference?: string;
payment_date: string;
payment_method: 'bank_transfer' | 'credit_card' | 'cash' | 'check' | 'other';
currency: 'GBP' | 'EUR' | 'USD';
total_amount: number;
processing_fee?: number;
processor_reference?: string;
bank_reference?: string;
notes?: string;
metadata?: Record<string, any>;
}
export interface PaymentRequest {
payment_amount: number;
payment_date: string;
payment_method: 'bank_transfer' | 'credit_card' | 'cash' | 'check' | 'other';
reference?: string;
}
export interface InvoiceFilters {
status?: 'draft' | 'sent' | 'paid' | 'partially_paid' | 'overdue' | 'cancelled' | 'refunded';
customer_id?: string;
date_from?: string;
date_to?: string;
overdue?: boolean;
outstanding?: boolean;
search?: string;
}
export interface AccountFilters {
account_type?: string;
is_active?: boolean;
search?: string;
}
export interface PaymentFilters {
status?: 'pending' | 'processing' | 'completed' | 'failed' | 'cancelled';
customer_id?: string;
date_from?: string;
date_to?: string;
search?: string;
}
export interface BusinessStats {
business_id: string;
summary: {
total_customers: number;
total_invoices: number;
total_payments: number;
outstanding_amount: number;
overdue_amount: number;
};
financial: {
total_revenue: number;
total_received: number;
outstanding_invoices: number;
overdue_invoices: number;
};
recent_activity: {
recent_invoices: Invoice[];
recent_payments: Payment[];
};
}
export interface WidgetConfig {
apiKey: string;
businessId: string;
theme?: 'light' | 'dark' | 'auto';
baseUrl?: string;
}
export interface WidgetEvent<T = any> {
type: string;
data: T;
timestamp: number;
}
export interface ApiError {
code: string;
message: string;
details?: Record<string, any>;
}
export interface BankTransaction extends BaseEntity {
business_id: string;
account_id: string;
account?: Account;
source_transaction_id: string;
amount_cents: number;
currency: string;
direction: 'debit' | 'credit';
description: string;
date: string;
transaction_type?: string;
categorization_status: 'pending' | 'categorized' | 'reviewed' | 'ignored';
suggested_category?: string;
confidence_score?: number;
category_id?: string;
notes?: string;
tags?: string[];
merchant_name?: string;
location?: string;
is_duplicate?: boolean;
duplicate_of?: string;
}
export interface BankTransactionFilters {
amount_min?: number;
amount_max?: number;
account_id?: string;
direction?: 'debit' | 'credit';
categorization_status?: 'pending' | 'categorized' | 'reviewed' | 'ignored';
date_from?: string;
date_to?: string;
category_id?: string;
search?: string;
}
export type Currency = 'GBP' | 'EUR' | 'USD';
export type PaymentMethod = 'bank_transfer' | 'card' | 'cash' | 'cheque' | 'other';
export type InvoiceStatus = 'draft' | 'sent' | 'viewed' | 'partial' | 'paid' | 'overdue' | 'cancelled';
export type PaymentStatus = 'pending' | 'completed' | 'failed' | 'cancelled';
export type TransactionDirection = 'debit' | 'credit';
export type CategorizationStatus = 'pending' | 'categorized' | 'reviewed' | 'ignored';
//# sourceMappingURL=types.d.ts.map