import { Tag } from "../tag";
import { Exchange, FinancialEntry } from "./financial_entry";
import { UnitaryCost } from "./unitary_cost";
export declare enum TransactionTarget {
    STORE = "STORE",
    SKUS = "SKUS",
    BINS = "BINS",
    LOTS = "LOTS"
}
export declare enum TransactionWeightType {
    VOLUMETRIC = "VOLUMETRIC",
    UNITARY = "UNITARY",
    MONETARY = "MONETARY"
}
export declare enum TransactionAccountableEntityType {
    TRANSACTION = "TRANSACTION",
    PURCHASE_ORDER = "PURCHASE_ORDER",
    INBOUND_SHIPMENT = "INBOUND_SHIPMENT",
    REMOVAL_ORDER = "REMOVAL_ORDER",
    PRODUCT = "PRODUCT",
    STORE = "STORE"
}
export declare enum TransactionNamespace {
    INTERNAL_COSTS = "internal/costs",
    INTERNAL_REIMBURSEMENTS = "internal/reimbursements",
    USER_COSTS = "user/costs",
    USER_REIMBURSEMENTS = "user/reimbursements",
    USER_PURCHASE_ORDERS = "user/purchase-orders"
}
export declare class TransactionRelation {
    relationObject: string;
    weight: number;
    constructor(relationObject: string, weight: number);
}
export declare class TransactionUnitaryCostPartition {
    subject: string;
    weight: number;
    additionalKeys: Array<string>;
    constructor(subject: string, weight: number, addKeys?: Array<string>);
}
export declare class TransactionUnitaryTagMask {
    source: string;
    dest: string;
    constructor(source: string, dest: string);
}
export declare class TransactionUnitaryCostConfiguration {
    partitions: Array<TransactionUnitaryCostPartition>;
    tagMasksRegex: Array<TransactionUnitaryTagMask>;
    constructor();
    addMaskRegex(source: string, dest: string): void;
    addPartition(subject: string, weight: number, addKeys?: string[]): void;
    maskTag(tag: Tag, chainable?: boolean): Tag;
}
export declare class Payment {
    date: Date;
    vat?: Array<Exchange>;
    amount: Array<Exchange>;
    tagTemplate: Tag;
    constructor(tagTemplate: Tag, date: Date, amount: Array<Exchange>);
    flatten(currency?: string): PaymentFlat | undefined;
}
export declare class PaymentFlat {
    date: Date;
    currency: string;
    vat?: number;
    amount: number;
    tagTemplate: Tag;
    constructor(tagTemplate: Tag, date: Date, currency: string, amount: number);
}
export declare class Transaction {
    id: string;
    accountableEntity: string;
    accountableEntityType: TransactionAccountableEntityType;
    date: Date;
    namespace: TransactionNamespace;
    title: string;
    notes: string;
    label: string;
    target: TransactionTarget;
    weightType: TransactionWeightType;
    payments: Array<Payment>;
    profitability: Array<FinancialEntry>;
    generatedUnitaryCosts: Array<UnitaryCost>;
    relations: Array<TransactionRelation>;
    unitaryCostConfiguration?: TransactionUnitaryCostConfiguration;
    isCashflow: boolean;
    generateProfitability: boolean;
    constructor(id: string, namespace: TransactionNamespace, accEntityType: TransactionAccountableEntityType, accEntity: string, date: Date, target: TransactionTarget);
    strip: () => void;
    getRelationObjects(): Array<string>;
}
