- Add modules: ai, audit, billing-usage, biometrics, branches, dashboard, feature-flags, invoices, mcp, mobile, notifications, partners, payment-terminals, products, profiles, purchases, reports, sales, storage, warehouses, webhooks, whatsapp - Add controllers, DTOs, entities, and services for each module - Add shared services and utilities Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
CreateDateColumn,
|
|
UpdateDateColumn,
|
|
DeleteDateColumn,
|
|
Index,
|
|
} from 'typeorm';
|
|
|
|
export type PaymentProvider = 'stripe' | 'mercadopago' | 'bank_transfer';
|
|
export type PaymentMethodType = 'card' | 'bank_account' | 'wallet';
|
|
|
|
/**
|
|
* Entidad para metodos de pago guardados por tenant.
|
|
* Almacena informacion tokenizada/encriptada de metodos de pago.
|
|
* Mapea a billing.payment_methods (DDL: 05-billing-usage.sql)
|
|
*/
|
|
@Entity({ name: 'payment_methods', schema: 'billing' })
|
|
export class BillingPaymentMethod {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Index()
|
|
@Column({ name: 'tenant_id', type: 'uuid' })
|
|
tenantId: string;
|
|
|
|
// Proveedor
|
|
@Index()
|
|
@Column({ type: 'varchar', length: 30 })
|
|
provider: PaymentProvider;
|
|
|
|
// Tipo
|
|
@Column({ name: 'method_type', type: 'varchar', length: 20 })
|
|
methodType: PaymentMethodType;
|
|
|
|
// Datos tokenizados del proveedor
|
|
@Column({ name: 'provider_customer_id', type: 'varchar', length: 255, nullable: true })
|
|
providerCustomerId: string;
|
|
|
|
@Column({ name: 'provider_method_id', type: 'varchar', length: 255, nullable: true })
|
|
providerMethodId: string;
|
|
|
|
// Display info (no sensible)
|
|
@Column({ name: 'display_name', type: 'varchar', length: 100, nullable: true })
|
|
displayName: string;
|
|
|
|
@Column({ name: 'card_brand', type: 'varchar', length: 20, nullable: true })
|
|
cardBrand: string;
|
|
|
|
@Column({ name: 'card_last_four', type: 'varchar', length: 4, nullable: true })
|
|
cardLastFour: string;
|
|
|
|
@Column({ name: 'card_exp_month', type: 'integer', nullable: true })
|
|
cardExpMonth: number;
|
|
|
|
@Column({ name: 'card_exp_year', type: 'integer', nullable: true })
|
|
cardExpYear: number;
|
|
|
|
@Column({ name: 'bank_name', type: 'varchar', length: 100, nullable: true })
|
|
bankName: string;
|
|
|
|
@Column({ name: 'bank_last_four', type: 'varchar', length: 4, nullable: true })
|
|
bankLastFour: string;
|
|
|
|
// Estado
|
|
@Index()
|
|
@Column({ name: 'is_default', type: 'boolean', default: false })
|
|
isDefault: boolean;
|
|
|
|
@Column({ name: 'is_active', type: 'boolean', default: true })
|
|
isActive: boolean;
|
|
|
|
@Column({ name: 'is_verified', type: 'boolean', default: false })
|
|
isVerified: boolean;
|
|
|
|
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
|
|
updatedAt: Date;
|
|
|
|
@DeleteDateColumn({ name: 'deleted_at', type: 'timestamptz', nullable: true })
|
|
deletedAt: Date;
|
|
}
|