import { Prisma } from '@prisma/client';
import { PrismaService } from '../../../prisma/prisma.service';
import { AuthenticatedUser } from '../../../common/decorators/current-user.decorator';
interface CreateExpenseInput {
    complexId: string;
    supplierId?: string;
    category: string;
    amount: number;
    currency?: string;
    invoiceNumber?: string;
    invoiceDate: Date;
    invoicePdfUrl?: string;
    repartitionKeyId?: string;
    notes?: string;
}
export declare class ExpensesService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    private assertComplexAccess;
    create(user: AuthenticatedUser, dto: CreateExpenseInput): Promise<{
        id: string;
        currency: string;
        createdAt: Date;
        complexId: string;
        category: string;
        repartitionKeyId: string | null;
        notes: string | null;
        supplierId: string | null;
        amount: Prisma.Decimal;
        invoiceNumber: string | null;
        invoiceDate: Date;
        invoicePdfUrl: string | null;
    }>;
    list(user: AuthenticatedUser, complexId: string): Promise<({
        repartitionKey: {
            id: string;
            code: string;
            label: string;
            description: string | null;
            createdAt: Date;
            complexId: string;
            type: import(".prisma/client").$Enums.RepartitionKeyType;
            scopeSpatialUnitId: string | null;
        } | null;
        supplier: {
            id: string;
            name: string;
            createdAt: Date;
            legalId: string | null;
            tenantId: string;
            contact: string | null;
            iban: string | null;
        } | null;
    } & {
        id: string;
        currency: string;
        createdAt: Date;
        complexId: string;
        category: string;
        repartitionKeyId: string | null;
        notes: string | null;
        supplierId: string | null;
        amount: Prisma.Decimal;
        invoiceNumber: string | null;
        invoiceDate: Date;
        invoicePdfUrl: string | null;
    })[]>;
    findOne(user: AuthenticatedUser, id: string): Promise<{
        complex: {
            id: string;
            name: string;
            createdAt: Date;
            updatedAt: Date;
            city: string | null;
            country: string;
            status: string;
            tenantId: string;
            type: import(".prisma/client").$Enums.ComplexType;
            address: string | null;
            gpsLat: number | null;
            gpsLng: number | null;
        };
        repartitionKey: {
            id: string;
            code: string;
            label: string;
            description: string | null;
            createdAt: Date;
            complexId: string;
            type: import(".prisma/client").$Enums.RepartitionKeyType;
            scopeSpatialUnitId: string | null;
        } | null;
        supplier: {
            id: string;
            name: string;
            createdAt: Date;
            legalId: string | null;
            tenantId: string;
            contact: string | null;
            iban: string | null;
        } | null;
    } & {
        id: string;
        currency: string;
        createdAt: Date;
        complexId: string;
        category: string;
        repartitionKeyId: string | null;
        notes: string | null;
        supplierId: string | null;
        amount: Prisma.Decimal;
        invoiceNumber: string | null;
        invoiceDate: Date;
        invoicePdfUrl: string | null;
    }>;
    remove(user: AuthenticatedUser, id: string): Promise<{
        deleted: boolean;
    }>;
    budgetConsumption(user: AuthenticatedUser, complexId: string): Promise<{
        complexId: string;
        fiscalYearId: string | null;
        totalBudget: number;
        totalSpent: number;
        byCategory: {
            category: string;
            estimated: number;
            spent: number;
        }[];
    }>;
}
export {};
