import { Amount } from '../../../commonStateTypes/amount'; import { ID } from '../../../commonStateTypes/common'; import { ZeniDate } from '../../../zeniDayJS'; import { InvoicingPriceType } from '../invoicingCommonPayload'; import { InvoicingInvoiceStatus } from './invoiceTypes'; export interface InvoicingLineItem { amount: Amount; description: string; quantity: number; unitAmount: Amount; dateFrom?: ZeniDate; dateTo?: ZeniDate; discountAmount?: Amount; entityDescription?: string; entityType?: string; id?: ID; isTaxed?: boolean; itemLevelDiscountAmount?: Amount; subscriptionID?: ID; taxAmount?: Amount; taxExemptReason?: string; taxRate?: number; usagePercentage?: number; } export interface InvoicingLinkedPayment { appliedAmount: Amount; txnID: ID; appliedAt?: ZeniDate; txnAmount?: Amount; txnDate?: ZeniDate; txnStatus?: string; } export interface InvoicingIssuedCreditNote { cnID: ID; cnStatus: string; cnTotal: Amount; } export interface InvoicingDunningAttempt { attempt: number; createdAt?: ZeniDate; dunningType?: string; transactionID?: ID; } export interface InvoicingInvoiceNote { note: string; entityID?: ID; entityType?: string; } export interface InvoicingInvoiceDiscount { amount: Amount; description: string; entityID: string; entityType: string; lineItemID?: ID | null; } export interface InvoicingInvoice { customerID: ID; date: ZeniDate; id: ID; status: InvoicingInvoiceStatus; total: Amount; adjustmentCreditNotes?: ID[]; amountAdjusted?: Amount; amountDue?: Amount; amountPaid?: Amount; amountToCollect?: Amount; billingAddressId?: ID; createdAt?: ZeniDate; creditsApplied?: Amount; currencyCode?: string; customerEmail?: string; customerName?: string; discounts?: InvoicingInvoiceDiscount[]; dueDate?: ZeniDate; dunningAttempts?: InvoicingDunningAttempt[]; dunningStatus?: string; firstInvoice?: boolean; generatedAt?: ZeniDate; grossSubTotal?: Amount; hasAdvanceCharges?: boolean; invoiceNumber?: string; invoiceType?: 'one_time' | 'recurring'; issuedCreditNotes?: InvoicingIssuedCreditNote[]; lineItems?: InvoicingLineItem[]; linkedPayments?: InvoicingLinkedPayment[]; netTermDays?: number; nextRetryAt?: ZeniDate; notes?: InvoicingInvoiceNote[]; paidAt?: ZeniDate; pdfFileId?: ID; pdfUrl?: string; poNumber?: string; priceType?: InvoicingPriceType; recurring?: boolean; roundOffAmount?: Amount; shippingAddressId?: ID; subscriptionID?: ID; subscriptionName?: string; subTotal?: Amount; tax?: Amount; updatedAt?: ZeniDate; writeOffAmount?: Amount; } export interface InvoicingInvoiceKPIs { dueTotal: Amount; paidTotal: Amount; pendingTotal: Amount; totalInvoiced: Amount; } export interface InvoiceState { invoiceByID: Record; }