47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
// journal_entry.go
|
|
package ledger
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/tech/sendico/pkg/model"
|
|
"github.com/tech/sendico/pkg/mservice"
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
// EntryType is a closed set of journal entry kinds.
|
|
type EntryType string
|
|
|
|
const (
|
|
EntryCredit EntryType = "credit"
|
|
EntryDebit EntryType = "debit"
|
|
EntryTransfer EntryType = "transfer"
|
|
EntryFX EntryType = "fx"
|
|
EntryFee EntryType = "fee"
|
|
EntryAdjust EntryType = "adjust"
|
|
EntryReverse EntryType = "reverse"
|
|
)
|
|
|
|
type JournalEntry struct {
|
|
model.PermissionBound `bson:",inline" json:",inline"`
|
|
|
|
// Idempotency/de-dup within your chosen scope (e.g., org/request)
|
|
IdempotencyKey string `bson:"idempotencyKey,omitempty" json:"idempotencyKey,omitempty"`
|
|
EventTime time.Time `bson:"eventTime" json:"eventTime"`
|
|
EntryType EntryType `bson:"entryType" json:"entryType"`
|
|
Description string `bson:"description,omitempty" json:"description,omitempty"`
|
|
|
|
// Monotonic ordering within your chosen scope (e.g., per org/ledger)
|
|
Version int64 `bson:"version" json:"version"`
|
|
|
|
// Denormalized set of all affected ledger accounts (for entry-level access control & queries)
|
|
LedgerAccountRefs []primitive.ObjectID `bson:"ledgerAccountRefs,omitempty" json:"ledgerAccountRefs,omitempty"`
|
|
|
|
// Optional backlink for reversals
|
|
ReversalOf *primitive.ObjectID `bson:"reversalOf,omitempty" json:"reversalOf,omitempty"`
|
|
}
|
|
|
|
func (j *JournalEntry) Collection() string {
|
|
return mservice.LedgerEntries
|
|
}
|