Files
sendico/api/ledger/internal/model/jentry.go
Stephan D 62a6631b9a
All checks were successful
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/nats Pipeline was successful
service backend
2025-11-07 18:35:26 +01:00

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
}