package entities import ( "time" ) // PaymentAllocation merepresentasikan hasil FIFO matching dari 1 payment ke // tepat 1 sub-row anak (purchase_item / marketing_delivery_product / // expense_realization). DB constraint memastikan hanya satu FK yang non-null. type PaymentAllocation struct { Id uint64 `gorm:"primaryKey;autoIncrement"` PaymentId uint `gorm:"not null;index"` PurchaseItemId *uint `gorm:"column:purchase_item_id"` MarketingDeliveryProductId *uint `gorm:"column:marketing_delivery_product_id"` ExpenseRealizationId *uint64 `gorm:"column:expense_realization_id"` Amount float64 `gorm:"type:numeric(15,3);not null"` AllocatedAt time.Time `gorm:"type:timestamptz;not null;default:NOW()"` Payment *Payment `gorm:"foreignKey:PaymentId;references:Id"` PurchaseItem *PurchaseItem `gorm:"foreignKey:PurchaseItemId;references:Id"` MarketingDeliveryProduct *MarketingDeliveryProduct `gorm:"foreignKey:MarketingDeliveryProductId;references:Id"` ExpenseRealization *ExpenseRealization `gorm:"foreignKey:ExpenseRealizationId;references:Id"` }