Update git remote URL from git.threefold.info to git.ourworld.tf
This commit is contained in:
parent
0cf66642a2
commit
aa7e79d26c
@ -1,17 +1,34 @@
|
|||||||
module biz
|
module biz
|
||||||
import base
|
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Company represents a business entity with all necessary details
|
||||||
// CompanyStatus represents the status of a company
|
pub struct Company {
|
||||||
pub enum CompanyStatus {
|
core.Base
|
||||||
active
|
pub mut:
|
||||||
inactive
|
name string // Company legal name @[index: 'company_name_idx']
|
||||||
suspended
|
registration_number string // Official registration number @[index: 'company_reg_idx']
|
||||||
|
incorporation_date u64 // Unix timestamp
|
||||||
|
fiscal_year_end string // Format: MM-DD
|
||||||
|
email string
|
||||||
|
phone string
|
||||||
|
website string
|
||||||
|
address string
|
||||||
|
business_type BusinessType
|
||||||
|
industry string // Industry classification
|
||||||
|
description string // Company description
|
||||||
|
status CompanyStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
// BusinessType represents the type of a business
|
// CompanyStatus tracks the operational state of a company
|
||||||
|
pub enum CompanyStatus {
|
||||||
|
pending_payment
|
||||||
|
active
|
||||||
|
suspended
|
||||||
|
inactive
|
||||||
|
}
|
||||||
|
|
||||||
|
// BusinessType categorizes the company structure
|
||||||
pub enum BusinessType {
|
pub enum BusinessType {
|
||||||
coop
|
coop
|
||||||
single
|
single
|
||||||
@ -19,25 +36,3 @@ pub enum BusinessType {
|
|||||||
starter
|
starter
|
||||||
global
|
global
|
||||||
}
|
}
|
||||||
|
|
||||||
// Company represents a company registered in the Freezone
|
|
||||||
pub struct Company {
|
|
||||||
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
|
||||||
pub mut:
|
|
||||||
// id u32 is provided by base.Base
|
|
||||||
name string
|
|
||||||
registration_number string
|
|
||||||
incorporation_date ourtime.OurTime
|
|
||||||
fiscal_year_end string
|
|
||||||
email string
|
|
||||||
phone string
|
|
||||||
website string
|
|
||||||
address string
|
|
||||||
business_type BusinessType
|
|
||||||
industry string
|
|
||||||
description string
|
|
||||||
status CompanyStatus
|
|
||||||
// created_at is provided by base.Base.creation_time
|
|
||||||
// updated_at is provided by base.Base.mod_time
|
|
||||||
shareholders []Shareholder
|
|
||||||
}
|
|
||||||
|
28
specs/models/biz/payment.v
Normal file
28
specs/models/biz/payment.v
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
module biz
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Payment handles financial transactions for companies
|
||||||
|
pub struct Payment {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
payment_intent_id string // Stripe payment intent ID @[index: 'payment_intent_idx']
|
||||||
|
company_id u32 // Associated company @[index: 'payment_company_idx']
|
||||||
|
payment_plan string // monthly/yearly/two_year
|
||||||
|
setup_fee f64
|
||||||
|
monthly_fee f64
|
||||||
|
total_amount f64
|
||||||
|
currency string // Default: usd
|
||||||
|
status PaymentStatus
|
||||||
|
stripe_customer_id string
|
||||||
|
completed_at u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// PaymentStatus tracks the lifecycle of a payment
|
||||||
|
pub enum PaymentStatus {
|
||||||
|
pending
|
||||||
|
processing
|
||||||
|
completed
|
||||||
|
failed
|
||||||
|
refunded
|
||||||
|
}
|
@ -1,44 +1,39 @@
|
|||||||
module biz
|
module biz
|
||||||
import base
|
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.currency
|
// Product represents goods or services offered by a company
|
||||||
// import freeflowuniverse.herolib.core.texttools { name_fix }
|
pub struct Product {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
price f64
|
||||||
|
type_ ProductType
|
||||||
|
category string
|
||||||
|
status ProductStatus
|
||||||
|
max_amount u16
|
||||||
|
purchase_till u64 // Unix timestamp
|
||||||
|
active_till u64 // Unix timestamp
|
||||||
|
components []ProductComponent
|
||||||
|
}
|
||||||
|
|
||||||
// ProductType represents the type of a product
|
// ProductComponent represents sub-parts of a complex product
|
||||||
|
pub struct ProductComponent {
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
quantity u32
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProductType differentiates between products and services
|
||||||
pub enum ProductType {
|
pub enum ProductType {
|
||||||
product
|
product
|
||||||
service
|
service
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProductStatus represents the status of a product
|
// ProductStatus indicates availability
|
||||||
pub enum ProductStatus {
|
pub enum ProductStatus {
|
||||||
available
|
available
|
||||||
unavailable
|
unavailable
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProductComponent represents a component or sub-part of a product.
|
|
||||||
// Its lifecycle is tied to the parent Product and it does not have its own independent ID.
|
|
||||||
pub struct ProductComponent {
|
|
||||||
pub mut:
|
|
||||||
name string
|
|
||||||
description string
|
|
||||||
quantity int
|
|
||||||
}
|
|
||||||
|
|
||||||
// Product represents a product or service offered
|
|
||||||
pub struct Product {
|
|
||||||
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
|
||||||
pub mut:
|
|
||||||
name string
|
|
||||||
description string
|
|
||||||
price currency.Currency
|
|
||||||
type_ ProductType
|
|
||||||
category string
|
|
||||||
status ProductStatus
|
|
||||||
max_amount u16 // Maximum available quantity of this product, if applicable
|
|
||||||
purchase_till ourtime.OurTime // Date until which this product can be purchased
|
|
||||||
active_till ourtime.OurTime // Date until which this product/service remains active (e.g., for subscriptions)
|
|
||||||
components []ProductComponent // List of components that make up this product
|
|
||||||
}
|
|
||||||
|
@ -1,43 +1,35 @@
|
|||||||
module biz
|
module biz
|
||||||
import base
|
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.currency
|
// Sale represents a transaction linking buyers to products
|
||||||
|
pub struct Sale {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32
|
||||||
|
buyer_id u32
|
||||||
|
transaction_id u32
|
||||||
|
total_amount f64
|
||||||
|
status SaleStatus
|
||||||
|
sale_date u64 // Unix timestamp
|
||||||
|
items []SaleItem
|
||||||
|
notes string
|
||||||
|
}
|
||||||
|
|
||||||
// SaleStatus represents the status of a sale
|
// SaleItem captures product details at time of sale
|
||||||
|
pub struct SaleItem {
|
||||||
|
pub mut:
|
||||||
|
product_id u32
|
||||||
|
name string // Product name snapshot
|
||||||
|
quantity i32
|
||||||
|
unit_price f64
|
||||||
|
subtotal f64
|
||||||
|
service_active_until u64 // Optional service expiry
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaleStatus tracks transaction state
|
||||||
pub enum SaleStatus {
|
pub enum SaleStatus {
|
||||||
pending
|
pending
|
||||||
completed
|
completed
|
||||||
cancelled
|
cancelled
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sale represents a sale of products or services
|
|
||||||
pub struct Sale {
|
|
||||||
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
|
||||||
pub mut:
|
|
||||||
// id u32 is provided by base.Base
|
|
||||||
company_id u32 // Reference to Company.id that made the sale
|
|
||||||
buyer_name string
|
|
||||||
buyer_email string
|
|
||||||
total_amount currency.Currency
|
|
||||||
status SaleStatus
|
|
||||||
sale_date ourtime.OurTime
|
|
||||||
// created_at is provided by base.Base.creation_time
|
|
||||||
// updated_at is provided by base.Base.mod_time
|
|
||||||
items []SaleItem
|
|
||||||
}
|
|
||||||
|
|
||||||
// SaleItem represents an individual item within a Sale.
|
|
||||||
// Its lifecycle is tied to the parent Sale.
|
|
||||||
pub struct SaleItem {
|
|
||||||
pub mut:
|
|
||||||
// id u32 - Removed, component of Sale
|
|
||||||
// sale_id u32 - Removed, implicit link to parent Sale
|
|
||||||
product_id u32 // Reference to Product.id
|
|
||||||
name string // Denormalized product name at time of sale
|
|
||||||
quantity int
|
|
||||||
unit_price currency.Currency // Price per unit at time of sale
|
|
||||||
subtotal currency.Currency
|
|
||||||
service_active_until ourtime.OurTime? // Optional: For services, date until this specific purchased instance is active
|
|
||||||
}
|
|
||||||
|
@ -1,27 +1,22 @@
|
|||||||
module biz
|
module biz
|
||||||
import base
|
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Shareholder tracks company ownership details
|
||||||
|
pub struct Shareholder {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32
|
||||||
|
user_id u32
|
||||||
|
name string
|
||||||
|
shares f64
|
||||||
|
percentage f64
|
||||||
|
type_ ShareholderType
|
||||||
|
since u64 // Unix timestamp
|
||||||
|
}
|
||||||
|
|
||||||
// ShareholderType represents the type of shareholder
|
// ShareholderType distinguishes between individual and corporate owners
|
||||||
pub enum ShareholderType {
|
pub enum ShareholderType {
|
||||||
individual
|
individual
|
||||||
corporate
|
corporate
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shareholder represents a shareholder of a company
|
|
||||||
pub struct Shareholder {
|
|
||||||
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
|
||||||
pub mut:
|
|
||||||
// id u32 is provided by base.Base
|
|
||||||
company_id u32 // Reference to Company.id
|
|
||||||
user_id u32 // Reference to User.id (if individual) or another entity ID (if corporate)
|
|
||||||
name string // Denormalized name of the shareholder (user or corporate entity)
|
|
||||||
shares f64 // Number of shares held
|
|
||||||
percentage f64 // Percentage of ownership
|
|
||||||
type_ ShareholderType
|
|
||||||
since ourtime.OurTime // Date since becoming a shareholder
|
|
||||||
// created_at is provided by base.Base.creation_time
|
|
||||||
// updated_at is provided by base.Base.mod_time
|
|
||||||
}
|
|
||||||
|
15
specs/models/calendar/calendar.v
Normal file
15
specs/models/calendar/calendar.v
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module calendar
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Calendar represents a calendar with events and scheduling capabilities
|
||||||
|
pub struct Calendar {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string @[index]
|
||||||
|
description string
|
||||||
|
color string // hex color code
|
||||||
|
timezone string
|
||||||
|
owner_id u32 @[index]
|
||||||
|
is_public bool
|
||||||
|
}
|
36
specs/models/calendar/contacts.v
Normal file
36
specs/models/calendar/contacts.v
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
module calendar
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Contact represents a contact or address book entry
|
||||||
|
pub struct Contact {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string @[index]
|
||||||
|
email string @[index]
|
||||||
|
phone string
|
||||||
|
address string
|
||||||
|
company string
|
||||||
|
job_title string
|
||||||
|
notes string
|
||||||
|
tags []string
|
||||||
|
birthday u64
|
||||||
|
is_favorite bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactGroup represents a group of contacts
|
||||||
|
pub struct ContactGroup {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string @[index]
|
||||||
|
description string
|
||||||
|
color string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactGroupMembership links contacts to groups
|
||||||
|
pub struct ContactGroupMembership {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
contact_id u32 @[index]
|
||||||
|
group_id u32 @[index]
|
||||||
|
}
|
53
specs/models/calendar/event.v
Normal file
53
specs/models/calendar/event.v
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
module calendar
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// EventStatus represents the current status of an event
|
||||||
|
pub enum EventStatus {
|
||||||
|
scheduled
|
||||||
|
ongoing
|
||||||
|
completed
|
||||||
|
cancelled
|
||||||
|
postponed
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventType categorizes different types of events
|
||||||
|
pub enum EventType {
|
||||||
|
meeting
|
||||||
|
appointment
|
||||||
|
reminder
|
||||||
|
task
|
||||||
|
call
|
||||||
|
conference
|
||||||
|
}
|
||||||
|
|
||||||
|
// Event represents a calendar event
|
||||||
|
pub struct Event {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
calendar_id u32 @[index]
|
||||||
|
title string @[index]
|
||||||
|
description string
|
||||||
|
start_time u64 @[index]
|
||||||
|
end_time u64 @[index]
|
||||||
|
location string
|
||||||
|
status EventStatus
|
||||||
|
event_type EventType
|
||||||
|
priority u8 // 1-5 scale
|
||||||
|
is_all_day bool
|
||||||
|
recurrence_rule string // RFC 5545 recurrence rule
|
||||||
|
parent_event_id u32 // for recurring events
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventParticipant represents a participant in an event
|
||||||
|
pub struct EventParticipant {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
event_id u32 @[index]
|
||||||
|
user_id u32 @[index]
|
||||||
|
email string @[index]
|
||||||
|
name string
|
||||||
|
role string // attendee, organizer, optional
|
||||||
|
status string // accepted, declined, tentative, pending
|
||||||
|
response_time u64
|
||||||
|
}
|
49
specs/models/calendar/message.v
Normal file
49
specs/models/calendar/message.v
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
module calendar
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// MessageStatus represents the delivery status of a message
|
||||||
|
pub enum MessageStatus {
|
||||||
|
draft
|
||||||
|
sent
|
||||||
|
delivered
|
||||||
|
read
|
||||||
|
failed
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageType categorizes different types of messages
|
||||||
|
pub enum MessageType {
|
||||||
|
email
|
||||||
|
sms
|
||||||
|
notification
|
||||||
|
reminder
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message represents a communication message
|
||||||
|
pub struct Message {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
sender_id u32 @[index]
|
||||||
|
recipient_id u32 @[index]
|
||||||
|
subject string
|
||||||
|
body string
|
||||||
|
message_type MessageType
|
||||||
|
status MessageStatus
|
||||||
|
scheduled_at u64
|
||||||
|
sent_at u64
|
||||||
|
read_at u64
|
||||||
|
priority u8 // 1-5 scale
|
||||||
|
attachments []string // file paths or URLs
|
||||||
|
tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reminder represents a scheduled reminder
|
||||||
|
pub struct Reminder {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
event_id u32 @[index]
|
||||||
|
message string
|
||||||
|
reminder_time u64 @[index]
|
||||||
|
is_sent bool
|
||||||
|
snooze_count u8
|
||||||
|
}
|
32
specs/models/circle/circle.v
Normal file
32
specs/models/circle/circle.v
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
module circle
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Circle represents a circle entity with configuration and metadata
|
||||||
|
@[heap]
|
||||||
|
pub struct Circle {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string // Human-readable name of the circle
|
||||||
|
description string // Detailed description of the circle's purpose
|
||||||
|
domain string // Primary domain name for the circle @[index]
|
||||||
|
config CircleConfig // Configuration settings for the circle
|
||||||
|
status CircleStatus // Current operational status
|
||||||
|
}
|
||||||
|
|
||||||
|
// CircleConfig holds configuration settings for a circle
|
||||||
|
pub struct CircleConfig {
|
||||||
|
pub mut:
|
||||||
|
max_members u32 // Maximum number of members allowed
|
||||||
|
allow_guests bool // Whether to allow guest access
|
||||||
|
auto_approve bool // Whether new members are auto-approved
|
||||||
|
theme string // Visual theme identifier
|
||||||
|
}
|
||||||
|
|
||||||
|
// CircleStatus represents the operational status of a circle
|
||||||
|
pub enum CircleStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
suspended
|
||||||
|
archived
|
||||||
|
}
|
33
specs/models/circle/member.v
Normal file
33
specs/models/circle/member.v
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
module circle
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Member represents a member within a circle
|
||||||
|
pub struct Member {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
circle_id u32 // Reference to the circle this member belongs to @[index]
|
||||||
|
user_id u32 // Reference to the user entity @[index]
|
||||||
|
role MemberRole // Member's role within the circle
|
||||||
|
status MemberStatus // Current membership status
|
||||||
|
joined_at u64 // Unix timestamp when member joined
|
||||||
|
invited_by u32 // User ID of who invited this member
|
||||||
|
permissions []string // List of custom permissions
|
||||||
|
}
|
||||||
|
|
||||||
|
// MemberRole defines the possible roles a member can have
|
||||||
|
pub enum MemberRole {
|
||||||
|
owner
|
||||||
|
admin
|
||||||
|
moderator
|
||||||
|
member
|
||||||
|
guest
|
||||||
|
}
|
||||||
|
|
||||||
|
// MemberStatus represents the current status of membership
|
||||||
|
pub enum MemberStatus {
|
||||||
|
active
|
||||||
|
pending
|
||||||
|
suspended
|
||||||
|
removed
|
||||||
|
}
|
27
specs/models/circle/name.v
Normal file
27
specs/models/circle/name.v
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
module circle
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Name represents a domain name configuration for a circle
|
||||||
|
pub struct Name {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
circle_id u32 // Reference to the circle this name belongs to @[index]
|
||||||
|
domain string // The actual domain name @[index]
|
||||||
|
subdomain string // Optional subdomain
|
||||||
|
record_type NameType // Type of DNS record
|
||||||
|
value string // DNS record value/target
|
||||||
|
priority u32 // Priority for MX records
|
||||||
|
ttl u32 // Time to live in seconds
|
||||||
|
is_active bool // Whether this record is currently active
|
||||||
|
}
|
||||||
|
|
||||||
|
// NameType defines the supported DNS record types
|
||||||
|
pub enum NameType {
|
||||||
|
a
|
||||||
|
aaaa
|
||||||
|
cname
|
||||||
|
mx
|
||||||
|
txt
|
||||||
|
srv
|
||||||
|
}
|
33
specs/models/circle/wallet.v
Normal file
33
specs/models/circle/wallet.v
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
module circle
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Wallet represents a wallet associated with a circle for financial operations
|
||||||
|
pub struct Wallet {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
circle_id u32 // Reference to the circle this wallet belongs to @[index]
|
||||||
|
address string // Blockchain address for this wallet @[index]
|
||||||
|
type WalletType // Type of wallet (custodial/non-custodial)
|
||||||
|
balance f64 // Current balance in the wallet
|
||||||
|
currency string // Currency type (e.g., "USD", "BTC", "ETH")
|
||||||
|
is_primary bool // Whether this is the primary wallet for the circle
|
||||||
|
status WalletStatus // Current wallet status
|
||||||
|
last_activity u64 // Unix timestamp of last transaction
|
||||||
|
}
|
||||||
|
|
||||||
|
// WalletType defines the types of wallets supported
|
||||||
|
pub enum WalletType {
|
||||||
|
custodial
|
||||||
|
non_custodial
|
||||||
|
hardware
|
||||||
|
software
|
||||||
|
}
|
||||||
|
|
||||||
|
// WalletStatus represents the operational status of a wallet
|
||||||
|
pub enum WalletStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
frozen
|
||||||
|
archived
|
||||||
|
}
|
12
specs/models/core/base.v
Normal file
12
specs/models/core/base.v
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
module core
|
||||||
|
|
||||||
|
// BaseData provides common fields for all models
|
||||||
|
pub struct Base {
|
||||||
|
pub mut:
|
||||||
|
id u32
|
||||||
|
created u64 // Unix timestamp of creation
|
||||||
|
updated u64 // Unix timestamp of last update
|
||||||
|
deleted bool
|
||||||
|
version u32
|
||||||
|
comments []Comment
|
||||||
|
}
|
20
specs/models/core/comment.v
Normal file
20
specs/models/core/comment.v
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
module core
|
||||||
|
|
||||||
|
// Comment represents a generic comment that can be associated with any model
|
||||||
|
// It supports threaded conversations with parent/child relationships
|
||||||
|
pub struct Comment {
|
||||||
|
pub mut:
|
||||||
|
// Unique identifier for the comment
|
||||||
|
id u32 // Unique identifier for the comment @[index]
|
||||||
|
// Timestamp when the comment was created
|
||||||
|
created_at u64 // Timestamp when the comment was created
|
||||||
|
// Timestamp when the comment was last updated
|
||||||
|
updated_at u64 // Timestamp when the comment was last updated
|
||||||
|
// ID of the user who posted this comment
|
||||||
|
user_id u32 // ID of the user who posted this comment @[index]
|
||||||
|
// The actual text content of the comment
|
||||||
|
content string
|
||||||
|
// Optional ID of the parent comment for threaded conversations
|
||||||
|
// None indicates this is a top-level comment
|
||||||
|
parent_comment_id u32
|
||||||
|
}
|
@ -1,16 +1,27 @@
|
|||||||
module finance
|
module finance
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Account represents a financial account for tracking balances and transactions
|
||||||
|
// Supports multiple account types (checking, savings, investment, etc.)
|
||||||
pub struct Account {
|
pub struct Account {
|
||||||
base.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
name string // internal name of the account for the user
|
name string // User-friendly account name
|
||||||
user_id u32 // user id of the owner of the account
|
account_type AccountType
|
||||||
description string // optional description of the account
|
balance f64 // Current balance in the account's currency
|
||||||
ledger string // describes the ledger/blockchain where the account is located e.g. "ethereum", "bitcoin" or other institutions
|
currency string // Currency code (USD, EUR, etc.)
|
||||||
address string // address of the account on the blockchain
|
description string // Optional description of the account
|
||||||
pubkey string
|
is_active bool // Whether the account is currently active
|
||||||
assets []Asset
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AccountType defines the different types of financial accounts
|
||||||
|
pub enum AccountType {
|
||||||
|
checking
|
||||||
|
savings
|
||||||
|
investment
|
||||||
|
credit
|
||||||
|
loan
|
||||||
|
crypto
|
||||||
|
other
|
||||||
|
}
|
||||||
|
@ -1,31 +1,34 @@
|
|||||||
module finance
|
module finance
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
pub enum AssetType {
|
|
||||||
erc20
|
|
||||||
erc721
|
|
||||||
erc1155
|
|
||||||
native
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Asset represents any valuable resource owned by an entity
|
||||||
|
// Can be financial (stocks, bonds) or physical (real estate, commodities)
|
||||||
pub struct Asset {
|
pub struct Asset {
|
||||||
base.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
name string
|
name string // Asset name or identifier
|
||||||
description string
|
symbol string // Trading symbol or identifier @[index]
|
||||||
amount f64
|
asset_type AssetType
|
||||||
address string // address of the asset on the blockchain or bank
|
quantity f64 // Amount of the asset held
|
||||||
asset_type AssetType // type of the asset
|
unit_price f64 // Price per unit in the asset's currency
|
||||||
decimals u8 // number of decimals of the asset
|
total_value f64 // total_value = quantity * unit_price
|
||||||
|
currency string // Currency for pricing (USD, EUR, etc.)
|
||||||
|
category string // Asset category (stocks, bonds, crypto, etc.)
|
||||||
|
exchange string // Exchange where asset is traded
|
||||||
|
description string // Detailed description of the asset
|
||||||
|
is_active bool // Whether the asset is currently tracked
|
||||||
|
purchase_date u64 // Unix timestamp of purchase/acquisition
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (self Asset) index_keys() map[string]string {
|
// AssetType defines the classification of assets
|
||||||
return {
|
pub enum AssetType {
|
||||||
'name': self.name
|
stock
|
||||||
}
|
bond
|
||||||
}
|
crypto
|
||||||
|
commodity
|
||||||
pub fn (self Asset) ftindex_keys() map[string]string {
|
real_estate
|
||||||
return map[string]string{}
|
currency
|
||||||
|
nft
|
||||||
|
other
|
||||||
}
|
}
|
||||||
|
@ -1,61 +1,29 @@
|
|||||||
module marketplace
|
module finance
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
|
||||||
import asset // For AssetType
|
|
||||||
// ListingStatus, ListingType enums and Bid struct are used from the same module
|
|
||||||
|
|
||||||
// Listing represents a marketplace listing for an asset
|
// Marketplace represents a platform for buying and selling goods/services
|
||||||
pub struct Listing {
|
// Can be internal or external marketplace configurations
|
||||||
base.Base // Provides id, created_at, updated_at
|
pub struct Marketplace {
|
||||||
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
title string
|
name string // Marketplace name (e.g., "Amazon", "eBay") @[index]
|
||||||
description string
|
marketplace_type MarketplaceType
|
||||||
asset_id string
|
api_endpoint string // API endpoint for marketplace integration
|
||||||
asset_type asset.AssetType // Enum from the asset model
|
api_key string // Authentication key for API access
|
||||||
seller_id string
|
currency string // Default currency for transactions
|
||||||
price f64 // Initial price for fixed price, or starting price for auction
|
fee_percentage f64 // Marketplace fee as percentage (0.0-100.0)
|
||||||
currency string
|
is_active bool // Whether marketplace is currently enabled
|
||||||
listing_type ListingType
|
description string // Detailed marketplace description
|
||||||
status ListingStatus
|
support_email string // Contact email for support issues
|
||||||
expires_at ourtime.OurTime // Optional
|
|
||||||
sold_at ourtime.OurTime // Optional
|
|
||||||
buyer_id string // Optional
|
|
||||||
sale_price f64 // Optional
|
|
||||||
bids []Bid // List of bids for auction type listings
|
|
||||||
tags []string
|
|
||||||
image_url string // Optional
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListingStatus defines the status of a marketplace listing
|
// MarketplaceType defines the type of marketplace platform
|
||||||
pub enum ListingStatus {
|
pub enum MarketplaceType {
|
||||||
active
|
centralized
|
||||||
sold
|
decentralized
|
||||||
cancelled
|
peer_to_peer
|
||||||
expired
|
|
||||||
}
|
|
||||||
|
|
||||||
// ListingType defines the type of marketplace listing
|
|
||||||
pub enum ListingType {
|
|
||||||
fixed_price
|
|
||||||
auction
|
auction
|
||||||
exchange
|
classified
|
||||||
|
other
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bid represents a bid on an auction listing
|
|
||||||
pub struct Bid {
|
|
||||||
pub mut:
|
|
||||||
listing_id string // ID of the listing this bid belongs to
|
|
||||||
bidder_id u32
|
|
||||||
amount f64
|
|
||||||
currency string
|
|
||||||
status BidStatus
|
|
||||||
}
|
|
||||||
|
|
||||||
// BidStatus defines the status of a bid on an auction listing
|
|
||||||
pub enum BidStatus {
|
|
||||||
active
|
|
||||||
accepted
|
|
||||||
rejected
|
|
||||||
cancelled
|
|
||||||
}
|
|
24
specs/models/gov/committee.v
Normal file
24
specs/models/gov/committee.v
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// CommitteeMember represents a member of a committee
|
||||||
|
pub struct CommitteeMember {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
user_id u32
|
||||||
|
name string
|
||||||
|
role CommitteeRole
|
||||||
|
joined_date u64 // Unix timestamp
|
||||||
|
notes string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Committee represents a committee in the governance system
|
||||||
|
pub struct Committee {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 @[index]
|
||||||
|
name string @[index]
|
||||||
|
description string
|
||||||
|
members []CommitteeMember
|
||||||
|
}
|
28
specs/models/gov/company.v
Normal file
28
specs/models/gov/company.v
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// BusinessType represents the type of a business
|
||||||
|
pub struct BusinessType {
|
||||||
|
pub mut:
|
||||||
|
type_name string
|
||||||
|
description string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Company represents a company in the governance system
|
||||||
|
pub struct Company {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string @[index]
|
||||||
|
registration_number string @[index]
|
||||||
|
incorporation_date u64 // Unix timestamp
|
||||||
|
fiscal_year_end string
|
||||||
|
email string
|
||||||
|
phone string
|
||||||
|
website string
|
||||||
|
address string
|
||||||
|
business_type BusinessType
|
||||||
|
industry string
|
||||||
|
description string
|
||||||
|
status CompanyStatus
|
||||||
|
}
|
30
specs/models/gov/meeting.v
Normal file
30
specs/models/gov/meeting.v
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Attendee represents an attendee of a meeting
|
||||||
|
pub struct Attendee {
|
||||||
|
pub mut:
|
||||||
|
user_id u32
|
||||||
|
name string
|
||||||
|
role string
|
||||||
|
status AttendanceStatus
|
||||||
|
notes string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Meeting represents a meeting in the governance system
|
||||||
|
pub struct Meeting {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 @[index]
|
||||||
|
title string @[index]
|
||||||
|
description string
|
||||||
|
meeting_type MeetingType
|
||||||
|
status MeetingStatus
|
||||||
|
start_time u64 // Unix timestamp
|
||||||
|
end_time u64 // Unix timestamp
|
||||||
|
location string
|
||||||
|
agenda string
|
||||||
|
minutes string
|
||||||
|
attendees []Attendee
|
||||||
|
}
|
18
specs/models/gov/resolution.v
Normal file
18
specs/models/gov/resolution.v
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Resolution represents a resolution in the governance system
|
||||||
|
pub struct Resolution {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 @[index]
|
||||||
|
title string @[index]
|
||||||
|
description string
|
||||||
|
resolution_type ResolutionType
|
||||||
|
status ResolutionStatus
|
||||||
|
proposed_date u64 // Unix timestamp
|
||||||
|
effective_date ?u64 // Unix timestamp
|
||||||
|
expiry_date ?u64 // Unix timestamp
|
||||||
|
approvals []string
|
||||||
|
}
|
15
specs/models/gov/shareholder.v
Normal file
15
specs/models/gov/shareholder.v
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Shareholder represents a shareholder in the governance system
|
||||||
|
pub struct Shareholder {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 @[index]
|
||||||
|
name string @[index]
|
||||||
|
shareholder_type ShareholderType
|
||||||
|
contact_info string @[index]
|
||||||
|
shares u32
|
||||||
|
percentage f64
|
||||||
|
}
|
82
specs/models/gov/types.v
Normal file
82
specs/models/gov/types.v
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
pub enum CompanyStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
dissolved
|
||||||
|
suspended
|
||||||
|
pending
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ShareholderType {
|
||||||
|
individual
|
||||||
|
corporate
|
||||||
|
trust
|
||||||
|
partnership
|
||||||
|
government
|
||||||
|
other
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum CommitteeRole {
|
||||||
|
chair
|
||||||
|
vice_chair
|
||||||
|
secretary
|
||||||
|
treasurer
|
||||||
|
member
|
||||||
|
observer
|
||||||
|
advisor
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum MeetingStatus {
|
||||||
|
scheduled
|
||||||
|
in_progress
|
||||||
|
completed
|
||||||
|
cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum MeetingType {
|
||||||
|
board_meeting
|
||||||
|
committee_meeting
|
||||||
|
general_assembly
|
||||||
|
annual_general_meeting
|
||||||
|
extraordinary_general_meeting
|
||||||
|
other
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum AttendanceStatus {
|
||||||
|
invited
|
||||||
|
confirmed
|
||||||
|
declined
|
||||||
|
attended
|
||||||
|
absent
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ResolutionStatus {
|
||||||
|
draft
|
||||||
|
proposed
|
||||||
|
approved
|
||||||
|
rejected
|
||||||
|
expired
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ResolutionType {
|
||||||
|
ordinary
|
||||||
|
special
|
||||||
|
unanimous
|
||||||
|
written
|
||||||
|
other
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum VoteStatus {
|
||||||
|
draft
|
||||||
|
open
|
||||||
|
closed
|
||||||
|
cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum VoteOption {
|
||||||
|
yes
|
||||||
|
no
|
||||||
|
abstain
|
||||||
|
custom
|
||||||
|
}
|
12
specs/models/gov/user.v
Normal file
12
specs/models/gov/user.v
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// User represents a user in the governance system
|
||||||
|
pub struct User {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string @[index]
|
||||||
|
email string @[index]
|
||||||
|
role string
|
||||||
|
}
|
27
specs/models/gov/vote.v
Normal file
27
specs/models/gov/vote.v
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
module gov
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Ballot represents a ballot cast in a vote
|
||||||
|
pub struct Ballot {
|
||||||
|
pub mut:
|
||||||
|
user_id u32
|
||||||
|
option VoteOption
|
||||||
|
weight f64
|
||||||
|
cast_at u64 // Unix timestamp
|
||||||
|
notes string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vote represents a vote in the governance system
|
||||||
|
pub struct Vote {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 @[index]
|
||||||
|
resolution_id u32 @[index]
|
||||||
|
title string @[index]
|
||||||
|
description string
|
||||||
|
status VoteStatus
|
||||||
|
start_date u64 // Unix timestamp
|
||||||
|
end_date u64 // Unix timestamp
|
||||||
|
ballots []Ballot
|
||||||
|
}
|
25
specs/models/governance/activity.v
Normal file
25
specs/models/governance/activity.v
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
pub struct GovernanceActivity {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 // Reference to company @[index]
|
||||||
|
activity_type string // Type of activity (proposal, vote, meeting, etc.) @[index]
|
||||||
|
description string // Detailed description
|
||||||
|
initiator_id u32 // User who initiated @[index]
|
||||||
|
target_id u32 // Target entity ID
|
||||||
|
target_type string // Type of target (user, proposal, etc.)
|
||||||
|
metadata string // JSON metadata
|
||||||
|
}
|
||||||
|
|
||||||
|
// Activity types
|
||||||
|
pub enum ActivityType {
|
||||||
|
proposal_created
|
||||||
|
proposal_updated
|
||||||
|
vote_cast
|
||||||
|
meeting_scheduled
|
||||||
|
resolution_passed
|
||||||
|
shareholder_added
|
||||||
|
}
|
17
specs/models/governance/attached_file.v
Normal file
17
specs/models/governance/attached_file.v
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// AttachedFile represents files attached to governance entities
|
||||||
|
pub struct AttachedFile {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
entity_id u32 // ID of entity this file is attached to @[index]
|
||||||
|
entity_type string // Type of entity (proposal, meeting, etc.) @[index]
|
||||||
|
filename string // Original filename
|
||||||
|
content_type string // MIME type
|
||||||
|
size u64 // File size in bytes
|
||||||
|
path string // Storage path
|
||||||
|
description string // Optional description
|
||||||
|
uploaded_by u32 // User who uploaded @[index]
|
||||||
|
}
|
39
specs/models/governance/committee.v
Normal file
39
specs/models/governance/committee.v
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// CommitteeType defines committee categories
|
||||||
|
pub enum CommitteeType {
|
||||||
|
board
|
||||||
|
executive
|
||||||
|
audit
|
||||||
|
compensation
|
||||||
|
nomination
|
||||||
|
governance
|
||||||
|
finance
|
||||||
|
risk
|
||||||
|
other
|
||||||
|
}
|
||||||
|
|
||||||
|
// CommitteeStatus tracks committee state
|
||||||
|
pub enum CommitteeStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
dissolved
|
||||||
|
}
|
||||||
|
|
||||||
|
// Committee represents a governance committee
|
||||||
|
pub struct Committee {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 // Reference to company @[index]
|
||||||
|
name string // Committee name @[index]
|
||||||
|
committee_type CommitteeType // Type of committee
|
||||||
|
description string // Detailed description
|
||||||
|
status CommitteeStatus // Current state
|
||||||
|
chairman_id u32 // Committee chair @[index]
|
||||||
|
term_start u64 // Start of term
|
||||||
|
term_end u64 // End of term
|
||||||
|
meeting_frequency string // e.g., "monthly", "quarterly"
|
||||||
|
quorum_size u32 // Minimum members for quorum
|
||||||
|
}
|
45
specs/models/governance/company.v
Normal file
45
specs/models/governance/company.v
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// CompanyType categorizes companies
|
||||||
|
pub enum CompanyType {
|
||||||
|
corporation
|
||||||
|
llc
|
||||||
|
partnership
|
||||||
|
cooperative
|
||||||
|
nonprofit
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompanyStatus tracks company state
|
||||||
|
pub enum CompanyStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
dissolved
|
||||||
|
merged
|
||||||
|
acquired
|
||||||
|
}
|
||||||
|
|
||||||
|
// Company represents a governance entity
|
||||||
|
pub struct Company {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
name string // Company name @[index]
|
||||||
|
legal_name string // Legal entity name @[index]
|
||||||
|
company_type CompanyType // Type of company
|
||||||
|
status CompanyStatus // Current state
|
||||||
|
incorporation_date u64 // Unix timestamp
|
||||||
|
jurisdiction string // Country/state of incorporation
|
||||||
|
registration_number string // Government registration @[index]
|
||||||
|
tax_id string // Tax identification
|
||||||
|
address string // Primary address
|
||||||
|
headquarters string // City/country of HQ
|
||||||
|
website string // Company website
|
||||||
|
phone string // Contact phone
|
||||||
|
email string // Contact email
|
||||||
|
shares_authorized u64 // Total authorized shares
|
||||||
|
shares_issued u64 // Currently issued shares
|
||||||
|
par_value f64 // Par value per share
|
||||||
|
currency string // Currency code
|
||||||
|
fiscal_year_end string // "MM-DD" format
|
||||||
|
}
|
44
specs/models/governance/meeting.v
Normal file
44
specs/models/governance/meeting.v
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// MeetingType defines meeting categories
|
||||||
|
pub enum MeetingType {
|
||||||
|
annual_general
|
||||||
|
extraordinary_general
|
||||||
|
board
|
||||||
|
committee
|
||||||
|
special
|
||||||
|
}
|
||||||
|
|
||||||
|
// MeetingStatus tracks meeting state
|
||||||
|
pub enum MeetingStatus {
|
||||||
|
scheduled
|
||||||
|
in_progress
|
||||||
|
completed
|
||||||
|
cancelled
|
||||||
|
postponed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Meeting represents a governance meeting
|
||||||
|
pub struct Meeting {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 // Reference to company @[index]
|
||||||
|
committee_id u32 // Reference to committee @[index]
|
||||||
|
meeting_type MeetingType // Type of meeting
|
||||||
|
title string // Meeting title @[index]
|
||||||
|
description string // Detailed description
|
||||||
|
status MeetingStatus // Current state
|
||||||
|
scheduled_start u64 // Scheduled start time
|
||||||
|
scheduled_end u64 // Scheduled end time
|
||||||
|
actual_start u64 // Actual start time
|
||||||
|
actual_end u64 // Actual end time
|
||||||
|
location string // Physical/virtual location
|
||||||
|
meeting_url string // Video conference link
|
||||||
|
agenda string // Meeting agenda
|
||||||
|
minutes string // Meeting minutes
|
||||||
|
quorum_required u32 // Members required for quorum
|
||||||
|
quorum_present bool // Whether quorum was achieved
|
||||||
|
created_by u32 // User who scheduled @[index]
|
||||||
|
}
|
@ -1,62 +1,47 @@
|
|||||||
module governance
|
module governance
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
|
||||||
// ProposalStatus enum is used from governance_enums.v in the same module
|
|
||||||
|
|
||||||
// Proposal represents a governance proposal that can be voted upon.
|
// ProposalStatus tracks the state of a governance proposal
|
||||||
// It now incorporates the voting mechanism from biz/vote.v.
|
|
||||||
pub struct Proposal {
|
|
||||||
base.Base // Provides Proposal's own ID, created_at, updated_at
|
|
||||||
pub mut:
|
|
||||||
// Fields from original Proposal struct
|
|
||||||
creator_id string // User ID of the proposal creator
|
|
||||||
title string // Title of the proposal
|
|
||||||
description string // Detailed description of the proposal
|
|
||||||
status ProposalStatus // Status of the proposal lifecycle (draft, active, approved etc.)
|
|
||||||
|
|
||||||
// Fields from biz/vote.v's Vote struct (representing the voting event aspects of the proposal)
|
|
||||||
vote_start_date ourtime.OurTime // When voting on this proposal starts
|
|
||||||
vote_end_date ourtime.OurTime // When voting on this proposal ends
|
|
||||||
vote_status VoteEventStatus // Status of the voting event (open, closed, cancelled)
|
|
||||||
options []VoteOption // The choices users can vote for
|
|
||||||
ballots []Ballot // The cast votes by users
|
|
||||||
private_group []u32 // Optional: list of user IDs who are eligible to vote
|
|
||||||
}
|
|
||||||
|
|
||||||
// ProposalStatus defines the lifecycle status of a governance proposal itself
|
|
||||||
pub enum ProposalStatus {
|
pub enum ProposalStatus {
|
||||||
draft // Proposal is being prepared
|
draft
|
||||||
active // Proposal is active (might be pre-voting, during voting, or post-voting but not yet finalized)
|
pending_review
|
||||||
approved // Proposal has been formally approved
|
active
|
||||||
rejected // Proposal has been formally rejected
|
voting
|
||||||
cancelled// Proposal was cancelled
|
passed
|
||||||
|
rejected
|
||||||
|
implemented
|
||||||
|
cancelled
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Structures from biz/vote.v, adapted for integration --
|
// ProposalType categorizes proposals
|
||||||
|
pub enum ProposalType {
|
||||||
// VoteEventStatus represents the status of the voting process for a proposal
|
constitutional
|
||||||
// Renamed from VoteStatus in biz/vote.v to avoid confusion with ProposalStatus
|
policy
|
||||||
pub enum VoteEventStatus {
|
budget
|
||||||
open // Voting is currently open
|
election
|
||||||
closed // Voting has finished
|
merger
|
||||||
cancelled // The voting event was cancelled
|
dissolution
|
||||||
|
other
|
||||||
}
|
}
|
||||||
|
|
||||||
// VoteOption represents a specific choice that can be voted on within a proposal's voting event
|
// Proposal represents a governance proposal
|
||||||
pub struct VoteOption {
|
pub struct Proposal {
|
||||||
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
id u8 // Simple identifier for this option within this proposal's vote (e.g., 1, 2, 3)
|
company_id u32 // Reference to company @[index]
|
||||||
text string // The descriptive text of the option (e.g., "Option A: Approve budget")
|
title string // Proposal title @[index]
|
||||||
count int // How many votes this option has received
|
description string // Detailed description
|
||||||
min_valid int // Optional: minimum votes needed for this option to be considered valid
|
proposal_type ProposalType // Category of proposal
|
||||||
}
|
status ProposalStatus // Current state
|
||||||
|
proposer_id u32 // User who created @[index]
|
||||||
// Ballot represents an individual vote cast by a user for a specific proposal
|
target_committee_id u32 // Target committee @[index]
|
||||||
pub struct Ballot {
|
voting_start u64 // Start timestamp
|
||||||
base.Base // Provides Ballot's own ID, created_at, updated_at
|
voting_end u64 // End timestamp
|
||||||
pub mut:
|
quorum_required f64 // Percentage required
|
||||||
user_id u32 // The ID of the user who cast this ballot
|
approval_threshold f64 // Percentage for approval
|
||||||
vote_option_id u8 // The 'id' of the VoteOption chosen by the user
|
votes_for u32 // Votes in favor
|
||||||
shares_count int // Number of shares/tokens/voting power used for this ballot
|
votes_against u32 // Votes against
|
||||||
|
votes_abstain u32 // Abstention votes
|
||||||
|
implementation_notes string // Post-implementation notes
|
||||||
}
|
}
|
||||||
|
40
specs/models/governance/resolution.v
Normal file
40
specs/models/governance/resolution.v
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// ResolutionStatus tracks resolution state
|
||||||
|
pub enum ResolutionStatus {
|
||||||
|
proposed
|
||||||
|
voting
|
||||||
|
passed
|
||||||
|
failed
|
||||||
|
implemented
|
||||||
|
withdrawn
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResolutionType categorizes resolutions
|
||||||
|
pub enum ResolutionType {
|
||||||
|
ordinary
|
||||||
|
special
|
||||||
|
unanimous
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolution represents a formal resolution
|
||||||
|
pub struct Resolution {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
company_id u32 // Reference to company @[index]
|
||||||
|
meeting_id u32 // Reference to meeting @[index]
|
||||||
|
proposal_id u32 // Reference to proposal @[index]
|
||||||
|
resolution_number string // Unique resolution number @[index]
|
||||||
|
title string // Resolution title @[index]
|
||||||
|
description string // Detailed description
|
||||||
|
resolution_type ResolutionType // Category
|
||||||
|
status ResolutionStatus // Current state
|
||||||
|
mover_id u32 // Person who moved @[index]
|
||||||
|
seconder_id u32 // Person who seconded @[index]
|
||||||
|
votes_for u32 // Votes in favor
|
||||||
|
votes_against u32 // Votes against
|
||||||
|
votes_abstain u32 // Abstention votes
|
||||||
|
effective_date u64 // When resolution takes effect
|
||||||
|
}
|
48
specs/models/governance/user.v
Normal file
48
specs/models/governance/user.v
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// UserType defines user categories
|
||||||
|
pub enum UserType {
|
||||||
|
individual
|
||||||
|
corporate
|
||||||
|
system
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserStatus tracks user state
|
||||||
|
pub enum UserStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
suspended
|
||||||
|
pending
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserRole defines governance roles
|
||||||
|
pub enum UserRole {
|
||||||
|
shareholder
|
||||||
|
director
|
||||||
|
officer
|
||||||
|
employee
|
||||||
|
auditor
|
||||||
|
consultant
|
||||||
|
administrator
|
||||||
|
}
|
||||||
|
|
||||||
|
// User represents a governance participant
|
||||||
|
pub struct User {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
username string // Unique username @[index]
|
||||||
|
email string // Email address @[index]
|
||||||
|
first_name string // First name
|
||||||
|
last_name string // Last name
|
||||||
|
display_name string // Preferred display name
|
||||||
|
user_type UserType // Type of user
|
||||||
|
status UserStatus // Current state
|
||||||
|
roles []UserRole // Governance roles
|
||||||
|
company_id u32 // Primary company @[index]
|
||||||
|
phone string // Contact phone
|
||||||
|
address string // Contact address
|
||||||
|
profile_picture string // Profile picture URL
|
||||||
|
last_login u64 // Last login timestamp
|
||||||
|
}
|
34
specs/models/governance/vote.v
Normal file
34
specs/models/governance/vote.v
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// VoteValue represents voting choices
|
||||||
|
pub enum VoteValue {
|
||||||
|
yes
|
||||||
|
no
|
||||||
|
abstain
|
||||||
|
}
|
||||||
|
|
||||||
|
// VoteStatus tracks vote state
|
||||||
|
pub enum VoteStatus {
|
||||||
|
pending
|
||||||
|
cast
|
||||||
|
changed
|
||||||
|
retracted
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vote represents a governance vote
|
||||||
|
pub struct Vote {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
proposal_id u32 // Reference to proposal @[index]
|
||||||
|
resolution_id u32 // Reference to resolution @[index]
|
||||||
|
voter_id u32 // User who voted @[index]
|
||||||
|
company_id u32 // Reference to company @[index]
|
||||||
|
vote_value VoteValue // Voting choice
|
||||||
|
status VoteStatus // Current state
|
||||||
|
weight u32 // Vote weight (for weighted voting)
|
||||||
|
comments string // Optional comments
|
||||||
|
proxy_voter_id u32 // If voting by proxy @[index]
|
||||||
|
ip_address string // IP address for verification
|
||||||
|
}
|
@ -1,68 +1,55 @@
|
|||||||
module contract
|
module legal
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
|
||||||
|
|
||||||
// Contract represents a legal agreement
|
// ContractStatus represents the current state of a legal contract
|
||||||
pub struct Contract {
|
|
||||||
base.Base // Base struct for common fields
|
|
||||||
pub mut:
|
|
||||||
id string // Unique ID for the contract (UUID string)
|
|
||||||
title string
|
|
||||||
description string
|
|
||||||
contract_type string // service, employment, nda, sla, partnership, distribution, license, membership, other
|
|
||||||
status ContractStatus
|
|
||||||
created_at ourtime.OurTime
|
|
||||||
updated_at ourtime.OurTime
|
|
||||||
created_by string // User ID or name of the creator
|
|
||||||
terms_and_conditions string // JSON string or markdown
|
|
||||||
start_date ourtime.OurTime // Optional
|
|
||||||
end_date ourtime.OurTime // Optional
|
|
||||||
renewal_period_days int // Optional (0 if not applicable)
|
|
||||||
next_renewal_date ourtime.OurTime // Optional
|
|
||||||
signers []ContractSigner
|
|
||||||
revisions []ContractRevision
|
|
||||||
current_version u32
|
|
||||||
last_signed_date ourtime.OurTime // Optional
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContractRevision represents a version of the contract content
|
|
||||||
pub struct ContractRevision {
|
|
||||||
// base.Base // If applicable
|
|
||||||
pub mut:
|
|
||||||
version u32
|
|
||||||
content string // The actual content of the contract revision
|
|
||||||
created_at ourtime.OurTime
|
|
||||||
created_by string // User ID or name of the creator
|
|
||||||
comments string // Optional in Rust, string can be empty
|
|
||||||
}
|
|
||||||
|
|
||||||
// ContractStatus defines the possible statuses of a contract
|
|
||||||
pub enum ContractStatus {
|
pub enum ContractStatus {
|
||||||
draft
|
draft
|
||||||
pending_signatures
|
pending
|
||||||
signed
|
|
||||||
active
|
active
|
||||||
expired
|
expired
|
||||||
|
terminated
|
||||||
cancelled
|
cancelled
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContractSigner represents a party involved in signing a contract
|
// ContractType categorizes the type of legal agreement
|
||||||
pub struct ContractSigner {
|
pub enum ContractType {
|
||||||
pub mut:
|
service
|
||||||
id string // Unique ID for the signer (UUID string)
|
sales
|
||||||
name string
|
lease
|
||||||
email string
|
employment
|
||||||
status SignerStatus
|
partnership
|
||||||
signed_at ourtime.OurTime // Optional in Rust, OurTime can be zero
|
nda
|
||||||
comments string // Optional in Rust, string can be empty
|
other
|
||||||
last_reminder_mail_sent_at ourtime.OurTime // Unix timestamp of last reminder sent
|
|
||||||
signature_data string // Base64 encoded signature image data (Optional in Rust)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignerStatus defines the status of a contract signer
|
// Contract represents a legal agreement between parties
|
||||||
pub enum SignerStatus {
|
// This model stores essential information about contracts including parties, terms, and status
|
||||||
pending
|
pub struct Contract {
|
||||||
signed
|
core.Base
|
||||||
rejected
|
pub mut:
|
||||||
|
title string // Human-readable title of the contract @[index]
|
||||||
|
contract_type ContractType // Type/category of the contract
|
||||||
|
status ContractStatus // Current status of the contract
|
||||||
|
party_a string // First party identifier (company, individual, etc.) @[index]
|
||||||
|
party_b string // Second party identifier @[index]
|
||||||
|
effective_date u64 // Unix timestamp when contract becomes effective
|
||||||
|
|
||||||
|
expiration_date u64 // Unix timestamp when contract expires
|
||||||
|
|
||||||
|
total_value f64 // Monetary value of the contract
|
||||||
|
|
||||||
|
currency string // Currency code (USD, EUR, etc.)
|
||||||
|
|
||||||
|
terms string // Full text of the contract terms
|
||||||
|
|
||||||
|
signature_date u64 // Unix timestamp when contract was signed
|
||||||
|
|
||||||
|
version string // Version identifier for contract revisions
|
||||||
|
|
||||||
|
parent_contract_id ?u32 // Optional reference to parent contract for amendments @[index]
|
||||||
|
|
||||||
|
attachment_urls []string // URLs or paths to attached documents
|
||||||
|
|
||||||
|
notes string // Additional notes and comments
|
||||||
}
|
}
|
||||||
|
30
specs/models/library/book.v
Normal file
30
specs/models/library/book.v
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
module library
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// TocEntry represents a table of contents entry for a book
|
||||||
|
pub struct TocEntry {
|
||||||
|
// Title of the chapter/section
|
||||||
|
title string
|
||||||
|
|
||||||
|
// Page number (index in the pages array)
|
||||||
|
page u32
|
||||||
|
|
||||||
|
// Optional subsections
|
||||||
|
subsections []TocEntry
|
||||||
|
}
|
||||||
|
|
||||||
|
// Book represents a Book library item (collection of markdown pages with TOC)
|
||||||
|
pub struct Book {
|
||||||
|
core.Base // Title of the book
|
||||||
|
title string @[index]
|
||||||
|
|
||||||
|
// Optional description of the book
|
||||||
|
description ?string
|
||||||
|
|
||||||
|
// Table of contents
|
||||||
|
table_of_contents []TocEntry
|
||||||
|
|
||||||
|
// Pages content (markdown strings)
|
||||||
|
pages []string
|
||||||
|
}
|
27
specs/models/library/collection.v
Normal file
27
specs/models/library/collection.v
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
module library
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Collection represents a collection of library items
|
||||||
|
pub struct Collection {
|
||||||
|
core.Base // Title of the collection
|
||||||
|
title string @[index]
|
||||||
|
|
||||||
|
// Optional description of the collection
|
||||||
|
description ?string
|
||||||
|
|
||||||
|
// List of image item IDs belonging to this collection
|
||||||
|
images []u32
|
||||||
|
|
||||||
|
// List of PDF item IDs belonging to this collection
|
||||||
|
pdfs []u32
|
||||||
|
|
||||||
|
// List of Markdown item IDs belonging to this collection
|
||||||
|
markdowns []u32
|
||||||
|
|
||||||
|
// List of Book item IDs belonging to this collection
|
||||||
|
books []u32
|
||||||
|
|
||||||
|
// List of Slides item IDs belonging to this collection
|
||||||
|
slides []u32
|
||||||
|
}
|
21
specs/models/library/image.v
Normal file
21
specs/models/library/image.v
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
module library
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Image represents an Image library item
|
||||||
|
pub struct Image {
|
||||||
|
core.Base // Title of the image
|
||||||
|
title string @[index]
|
||||||
|
|
||||||
|
// Optional description of the image
|
||||||
|
description ?string
|
||||||
|
|
||||||
|
// URL of the image
|
||||||
|
url string
|
||||||
|
|
||||||
|
// Width of the image in pixels
|
||||||
|
width u32
|
||||||
|
|
||||||
|
// Height of the image in pixels
|
||||||
|
height u32
|
||||||
|
}
|
15
specs/models/library/markdown.v
Normal file
15
specs/models/library/markdown.v
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module library
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Markdown represents a Markdown document library item
|
||||||
|
pub struct Markdown {
|
||||||
|
core.Base // Title of the document
|
||||||
|
title string @[index]
|
||||||
|
|
||||||
|
// Optional description of the document
|
||||||
|
description ?string
|
||||||
|
|
||||||
|
// The markdown content
|
||||||
|
content string
|
||||||
|
}
|
18
specs/models/library/pdf.v
Normal file
18
specs/models/library/pdf.v
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module library
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Pdf represents a PDF document library item
|
||||||
|
pub struct Pdf {
|
||||||
|
core.Base // Title of the PDF
|
||||||
|
title string @[index]
|
||||||
|
|
||||||
|
// Optional description of the PDF
|
||||||
|
description ?string
|
||||||
|
|
||||||
|
// URL of the PDF file
|
||||||
|
url string
|
||||||
|
|
||||||
|
// Number of pages in the PDF
|
||||||
|
page_count u32
|
||||||
|
}
|
27
specs/models/library/slideshow.v
Normal file
27
specs/models/library/slideshow.v
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
module library
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// Slide represents a single slide in a slideshow
|
||||||
|
pub struct Slide {
|
||||||
|
// URL of the image for this slide
|
||||||
|
image_url string
|
||||||
|
|
||||||
|
// Optional title for the slide
|
||||||
|
title ?string
|
||||||
|
|
||||||
|
// Optional description for the slide
|
||||||
|
description ?string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slideshow represents a Slideshow library item (collection of images for slideshow)
|
||||||
|
pub struct Slideshow {
|
||||||
|
core.Base // Title of the slideshow
|
||||||
|
title string @[index]
|
||||||
|
|
||||||
|
// Optional description of the slideshow
|
||||||
|
description ?string
|
||||||
|
|
||||||
|
// List of slides
|
||||||
|
slides []Slide
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
module projects
|
module projects
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
// Priority represents the priority level of a project item
|
// Priority levels for project items
|
||||||
pub enum Priority {
|
pub enum Priority {
|
||||||
critical
|
critical
|
||||||
high
|
high
|
||||||
@ -11,7 +11,7 @@ pub enum Priority {
|
|||||||
none
|
none
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status represents the current status of a project item
|
// Status values for project lifecycle
|
||||||
pub enum Status {
|
pub enum Status {
|
||||||
todo
|
todo
|
||||||
in_progress
|
in_progress
|
||||||
@ -20,7 +20,7 @@ pub enum Status {
|
|||||||
archived
|
archived
|
||||||
}
|
}
|
||||||
|
|
||||||
// ItemType represents the type of a project item
|
// Types of items in the project hierarchy
|
||||||
pub enum ItemType {
|
pub enum ItemType {
|
||||||
epic
|
epic
|
||||||
story
|
story
|
||||||
@ -30,24 +30,28 @@ pub enum ItemType {
|
|||||||
feature
|
feature
|
||||||
}
|
}
|
||||||
|
|
||||||
// Project represents a project in the system
|
// Project represents a high-level container for organizing work
|
||||||
|
// A Project holds information about its members and contains lists of associated epics, sprints, and boards
|
||||||
pub struct Project {
|
pub struct Project {
|
||||||
base.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
name string
|
name string @[index] // Project name
|
||||||
description string
|
description string // Detailed project description
|
||||||
owner_id u32 // ID of the user who owns this project
|
owner_id u64 @[index] // User ID of the project owner
|
||||||
member_ids []u32 // IDs of the users who are members of this project
|
member_ids []u64 @[index] // List of user IDs who are members
|
||||||
board_ids []u32 // IDs of the kanban boards in this project
|
board_ids []u64 // List of associated board IDs
|
||||||
sprint_ids []u32 // IDs of the sprints in this project
|
sprint_ids []u64 @[index] // List of sprint IDs in this project
|
||||||
epic_ids []u32 // IDs of the epics in this project
|
epic_ids []u64 @[index] // List of epic IDs in this project
|
||||||
tags []string
|
tags []string @[index] // Project tags for categorization
|
||||||
|
status Status @[index] // Current project status
|
||||||
|
priority Priority @[index] // Project priority level
|
||||||
|
item_type ItemType @[index] // Type of project item
|
||||||
}
|
}
|
||||||
|
|
||||||
// Label represents a label that can be applied to project items
|
// Label represents a tag with name and color for categorization
|
||||||
pub struct Label {
|
pub struct Label {
|
||||||
base.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
name string
|
name string @[index] // Label name
|
||||||
color string // Hex color code
|
color string @[index] // Hex color code for the label
|
||||||
}
|
}
|
||||||
|
@ -1,37 +1,18 @@
|
|||||||
module projects
|
module projects
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
// Epic represents a large body of work that can be broken down into stories
|
// Epic represents a large body of work or major feature
|
||||||
|
// An Epic is broken down into smaller tasks and can be associated with a project
|
||||||
pub struct Epic {
|
pub struct Epic {
|
||||||
base.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
title string
|
name string @[index] // Epic name
|
||||||
description string
|
description string // Detailed epic description
|
||||||
project_id u32 // ID of the project this epic belongs to
|
status Status @[index] // Current epic status
|
||||||
owner_id u32 // ID of the user who owns this epic
|
project_id u64 @[index] // Link to parent project
|
||||||
assignee_id u32 // ID of the user assigned to this epic
|
start_date u64 // Epic start timestamp (Unix)
|
||||||
status Status
|
due_date u64 // Epic due timestamp (Unix)
|
||||||
priority Priority
|
tags []string @[index] // Epic tags for categorization
|
||||||
story_ids []u32 // IDs of the stories in this epic
|
child_task_ids []u64 @[index] // List of task IDs belonging to this epic
|
||||||
issue_ids []u32 // IDs of the issues in this epic
|
|
||||||
label_ids []u32 // IDs of the labels applied to this epic
|
|
||||||
start_date string // Start date in ISO format
|
|
||||||
due_date string // Due date in ISO format
|
|
||||||
progress f32 // Progress as a percentage (0-100)
|
|
||||||
dependencies []u32 // IDs of epics that this epic depends on
|
|
||||||
blockers []string // List of blockers preventing progress
|
|
||||||
tags []string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// EpicProgress represents the progress of an epic
|
|
||||||
pub struct EpicProgress {
|
|
||||||
base.Base
|
|
||||||
pub mut:
|
|
||||||
epic_id u32
|
|
||||||
total_stories u32 // Total number of stories in the epic
|
|
||||||
completed_stories u32 // Number of completed stories
|
|
||||||
total_points f32 // Total number of story points
|
|
||||||
completed_points f32 // Number of completed story points
|
|
||||||
progress f32 // Progress as a percentage (0-100)
|
|
||||||
}
|
|
@ -1,45 +1,26 @@
|
|||||||
module projects
|
module projects
|
||||||
|
|
||||||
import base
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
// SprintStatus represents the status of a sprint
|
// SprintStatus defines the possible states of a sprint
|
||||||
pub enum SprintStatus {
|
pub enum SprintStatus {
|
||||||
planning
|
planning
|
||||||
active
|
active
|
||||||
review
|
|
||||||
completed
|
completed
|
||||||
cancelled
|
paused
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sprint represents a time-boxed period in which specific work has to be completed
|
// Sprint represents a time-boxed iteration for completing work
|
||||||
|
// Typically used in agile methodologies (e.g., two-week sprints)
|
||||||
pub struct Sprint {
|
pub struct Sprint {
|
||||||
base.Base
|
core.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
name string
|
name string @[index] // Sprint name
|
||||||
description string
|
description string // Sprint description
|
||||||
project_id u32 // ID of the project this sprint belongs to
|
status SprintStatus @[index] // Current sprint status
|
||||||
status SprintStatus
|
goal string // Sprint goal/objective
|
||||||
start_date string // Start date in ISO format
|
project_id u64 @[index] // Link to parent project
|
||||||
end_date string // End date in ISO format
|
start_date u64 // Sprint start timestamp (Unix)
|
||||||
goal string // The goal of this sprint
|
end_date u64 // Sprint end timestamp (Unix)
|
||||||
story_ids []u32 // IDs of the stories in this sprint
|
task_ids []u64 @[index] // List of task IDs in this sprint
|
||||||
issue_ids []u32 // IDs of the issues in this sprint
|
|
||||||
epic_ids []u32 // IDs of the epics this sprint contributes to
|
|
||||||
velocity f32 // Planned velocity for this sprint
|
|
||||||
actual_points f32 // Actual story points completed
|
|
||||||
retrospective string // Notes from the sprint retrospective
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SprintReport represents a report generated at the end of a sprint
|
|
||||||
pub struct SprintReport {
|
|
||||||
base.Base
|
|
||||||
pub mut:
|
|
||||||
sprint_id u32
|
|
||||||
completed_items u32 // Number of items completed
|
|
||||||
total_items u32 // Total number of items
|
|
||||||
completed_points f32 // Number of story points completed
|
|
||||||
total_points f32 // Total number of story points
|
|
||||||
blockers []string // List of blockers encountered
|
|
||||||
achievements []string // List of achievements
|
|
||||||
lessons []string // Lessons learned
|
|
||||||
}
|
|
42
specs/models/projects/task.v
Normal file
42
specs/models/projects/task.v
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
module projects
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.hero.models.core
|
||||||
|
|
||||||
|
// TaskStatus defines the possible states of a task
|
||||||
|
pub enum TaskStatus {
|
||||||
|
todo
|
||||||
|
in_progress
|
||||||
|
in_review
|
||||||
|
done
|
||||||
|
blocked
|
||||||
|
backlog
|
||||||
|
}
|
||||||
|
|
||||||
|
// TaskPriority defines the priority levels for tasks
|
||||||
|
pub enum TaskPriority {
|
||||||
|
low
|
||||||
|
medium
|
||||||
|
high
|
||||||
|
urgent
|
||||||
|
}
|
||||||
|
|
||||||
|
// Task represents the most granular unit of work
|
||||||
|
// Tasks can be linked to projects, epics, and sprints
|
||||||
|
pub struct Task {
|
||||||
|
core.Base
|
||||||
|
pub mut:
|
||||||
|
title string @[index] // Task title
|
||||||
|
description string // Task description
|
||||||
|
status TaskStatus @[index] // Current task status
|
||||||
|
priority TaskPriority @[index] // Task priority level
|
||||||
|
assignee_id u64 @[index] // User ID of task assignee
|
||||||
|
reporter_id u64 @[index] // User ID of task reporter
|
||||||
|
parent_task_id u64 // For subtasks - parent task ID
|
||||||
|
epic_id u64 @[index] // Link to parent epic
|
||||||
|
sprint_id u64 @[index] // Link to parent sprint
|
||||||
|
project_id u64 @[index] // Link to parent project
|
||||||
|
due_date u64 // Task due timestamp (Unix)
|
||||||
|
estimated_time_hours f32 // Estimated hours to complete
|
||||||
|
logged_time_hours f32 // Actual hours logged
|
||||||
|
tags []string @[index] // Task tags for categorization
|
||||||
|
}
|
43
specs/modelsold/biz/company.v
Normal file
43
specs/modelsold/biz/company.v
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
module biz
|
||||||
|
import base
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
|
|
||||||
|
// CompanyStatus represents the status of a company
|
||||||
|
pub enum CompanyStatus {
|
||||||
|
active
|
||||||
|
inactive
|
||||||
|
suspended
|
||||||
|
}
|
||||||
|
|
||||||
|
// BusinessType represents the type of a business
|
||||||
|
pub enum BusinessType {
|
||||||
|
coop
|
||||||
|
single
|
||||||
|
twin
|
||||||
|
starter
|
||||||
|
global
|
||||||
|
}
|
||||||
|
|
||||||
|
// Company represents a company registered in the Freezone
|
||||||
|
pub struct Company {
|
||||||
|
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
||||||
|
pub mut:
|
||||||
|
// id u32 is provided by base.Base
|
||||||
|
name string
|
||||||
|
registration_number string
|
||||||
|
incorporation_date ourtime.OurTime
|
||||||
|
fiscal_year_end string
|
||||||
|
email string
|
||||||
|
phone string
|
||||||
|
website string
|
||||||
|
address string
|
||||||
|
business_type BusinessType
|
||||||
|
industry string
|
||||||
|
description string
|
||||||
|
status CompanyStatus
|
||||||
|
// created_at is provided by base.Base.creation_time
|
||||||
|
// updated_at is provided by base.Base.mod_time
|
||||||
|
shareholders []Shareholder
|
||||||
|
}
|
44
specs/modelsold/biz/product.v
Normal file
44
specs/modelsold/biz/product.v
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
module biz
|
||||||
|
import base
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.data.currency
|
||||||
|
// import freeflowuniverse.herolib.core.texttools { name_fix }
|
||||||
|
|
||||||
|
// ProductType represents the type of a product
|
||||||
|
pub enum ProductType {
|
||||||
|
product
|
||||||
|
service
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProductStatus represents the status of a product
|
||||||
|
pub enum ProductStatus {
|
||||||
|
available
|
||||||
|
unavailable
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProductComponent represents a component or sub-part of a product.
|
||||||
|
// Its lifecycle is tied to the parent Product and it does not have its own independent ID.
|
||||||
|
pub struct ProductComponent {
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
quantity int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Product represents a product or service offered
|
||||||
|
pub struct Product {
|
||||||
|
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
price currency.Currency
|
||||||
|
type_ ProductType
|
||||||
|
category string
|
||||||
|
status ProductStatus
|
||||||
|
max_amount u16 // Maximum available quantity of this product, if applicable
|
||||||
|
purchase_till ourtime.OurTime // Date until which this product can be purchased
|
||||||
|
active_till ourtime.OurTime // Date until which this product/service remains active (e.g., for subscriptions)
|
||||||
|
components []ProductComponent // List of components that make up this product
|
||||||
|
}
|
43
specs/modelsold/biz/sale.v
Normal file
43
specs/modelsold/biz/sale.v
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
module biz
|
||||||
|
import base
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.data.currency
|
||||||
|
|
||||||
|
// SaleStatus represents the status of a sale
|
||||||
|
pub enum SaleStatus {
|
||||||
|
pending
|
||||||
|
completed
|
||||||
|
cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sale represents a sale of products or services
|
||||||
|
pub struct Sale {
|
||||||
|
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
||||||
|
pub mut:
|
||||||
|
// id u32 is provided by base.Base
|
||||||
|
company_id u32 // Reference to Company.id that made the sale
|
||||||
|
buyer_name string
|
||||||
|
buyer_email string
|
||||||
|
total_amount currency.Currency
|
||||||
|
status SaleStatus
|
||||||
|
sale_date ourtime.OurTime
|
||||||
|
// created_at is provided by base.Base.creation_time
|
||||||
|
// updated_at is provided by base.Base.mod_time
|
||||||
|
items []SaleItem
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaleItem represents an individual item within a Sale.
|
||||||
|
// Its lifecycle is tied to the parent Sale.
|
||||||
|
pub struct SaleItem {
|
||||||
|
pub mut:
|
||||||
|
// id u32 - Removed, component of Sale
|
||||||
|
// sale_id u32 - Removed, implicit link to parent Sale
|
||||||
|
product_id u32 // Reference to Product.id
|
||||||
|
name string // Denormalized product name at time of sale
|
||||||
|
quantity int
|
||||||
|
unit_price currency.Currency // Price per unit at time of sale
|
||||||
|
subtotal currency.Currency
|
||||||
|
service_active_until ourtime.OurTime? // Optional: For services, date until this specific purchased instance is active
|
||||||
|
}
|
27
specs/modelsold/biz/shareholder.v
Normal file
27
specs/modelsold/biz/shareholder.v
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
module biz
|
||||||
|
import base
|
||||||
|
|
||||||
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
|
|
||||||
|
// ShareholderType represents the type of shareholder
|
||||||
|
pub enum ShareholderType {
|
||||||
|
individual
|
||||||
|
corporate
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shareholder represents a shareholder of a company
|
||||||
|
pub struct Shareholder {
|
||||||
|
base.Base // Provides id u32, creation_time, mod_time, comments []u32
|
||||||
|
pub mut:
|
||||||
|
// id u32 is provided by base.Base
|
||||||
|
company_id u32 // Reference to Company.id
|
||||||
|
user_id u32 // Reference to User.id (if individual) or another entity ID (if corporate)
|
||||||
|
name string // Denormalized name of the shareholder (user or corporate entity)
|
||||||
|
shares f64 // Number of shares held
|
||||||
|
percentage f64 // Percentage of ownership
|
||||||
|
type_ ShareholderType
|
||||||
|
since ourtime.OurTime // Date since becoming a shareholder
|
||||||
|
// created_at is provided by base.Base.creation_time
|
||||||
|
// updated_at is provided by base.Base.mod_time
|
||||||
|
}
|
16
specs/modelsold/finance/account.v
Normal file
16
specs/modelsold/finance/account.v
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
module finance
|
||||||
|
|
||||||
|
import base
|
||||||
|
|
||||||
|
pub struct Account {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string // internal name of the account for the user
|
||||||
|
user_id u32 // user id of the owner of the account
|
||||||
|
description string // optional description of the account
|
||||||
|
ledger string // describes the ledger/blockchain where the account is located e.g. "ethereum", "bitcoin" or other institutions
|
||||||
|
address string // address of the account on the blockchain
|
||||||
|
pubkey string
|
||||||
|
assets []Asset
|
||||||
|
}
|
||||||
|
|
31
specs/modelsold/finance/asset.v
Normal file
31
specs/modelsold/finance/asset.v
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
module finance
|
||||||
|
|
||||||
|
import base
|
||||||
|
|
||||||
|
pub enum AssetType {
|
||||||
|
erc20
|
||||||
|
erc721
|
||||||
|
erc1155
|
||||||
|
native
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Asset {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
amount f64
|
||||||
|
address string // address of the asset on the blockchain or bank
|
||||||
|
asset_type AssetType // type of the asset
|
||||||
|
decimals u8 // number of decimals of the asset
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn (self Asset) index_keys() map[string]string {
|
||||||
|
return {
|
||||||
|
'name': self.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn (self Asset) ftindex_keys() map[string]string {
|
||||||
|
return map[string]string{}
|
||||||
|
}
|
61
specs/modelsold/finance/marketplace.v
Normal file
61
specs/modelsold/finance/marketplace.v
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
module marketplace
|
||||||
|
|
||||||
|
import base
|
||||||
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
import asset // For AssetType
|
||||||
|
// ListingStatus, ListingType enums and Bid struct are used from the same module
|
||||||
|
|
||||||
|
// Listing represents a marketplace listing for an asset
|
||||||
|
pub struct Listing {
|
||||||
|
base.Base // Provides id, created_at, updated_at
|
||||||
|
pub mut:
|
||||||
|
title string
|
||||||
|
description string
|
||||||
|
asset_id string
|
||||||
|
asset_type asset.AssetType // Enum from the asset model
|
||||||
|
seller_id string
|
||||||
|
price f64 // Initial price for fixed price, or starting price for auction
|
||||||
|
currency string
|
||||||
|
listing_type ListingType
|
||||||
|
status ListingStatus
|
||||||
|
expires_at ourtime.OurTime // Optional
|
||||||
|
sold_at ourtime.OurTime // Optional
|
||||||
|
buyer_id string // Optional
|
||||||
|
sale_price f64 // Optional
|
||||||
|
bids []Bid // List of bids for auction type listings
|
||||||
|
tags []string
|
||||||
|
image_url string // Optional
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListingStatus defines the status of a marketplace listing
|
||||||
|
pub enum ListingStatus {
|
||||||
|
active
|
||||||
|
sold
|
||||||
|
cancelled
|
||||||
|
expired
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListingType defines the type of marketplace listing
|
||||||
|
pub enum ListingType {
|
||||||
|
fixed_price
|
||||||
|
auction
|
||||||
|
exchange
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bid represents a bid on an auction listing
|
||||||
|
pub struct Bid {
|
||||||
|
pub mut:
|
||||||
|
listing_id string // ID of the listing this bid belongs to
|
||||||
|
bidder_id u32
|
||||||
|
amount f64
|
||||||
|
currency string
|
||||||
|
status BidStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
// BidStatus defines the status of a bid on an auction listing
|
||||||
|
pub enum BidStatus {
|
||||||
|
active
|
||||||
|
accepted
|
||||||
|
rejected
|
||||||
|
cancelled
|
||||||
|
}
|
62
specs/modelsold/governance/proposal.v
Normal file
62
specs/modelsold/governance/proposal.v
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
module governance
|
||||||
|
|
||||||
|
import base
|
||||||
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
// ProposalStatus enum is used from governance_enums.v in the same module
|
||||||
|
|
||||||
|
// Proposal represents a governance proposal that can be voted upon.
|
||||||
|
// It now incorporates the voting mechanism from biz/vote.v.
|
||||||
|
pub struct Proposal {
|
||||||
|
base.Base // Provides Proposal's own ID, created_at, updated_at
|
||||||
|
pub mut:
|
||||||
|
// Fields from original Proposal struct
|
||||||
|
creator_id string // User ID of the proposal creator
|
||||||
|
title string // Title of the proposal
|
||||||
|
description string // Detailed description of the proposal
|
||||||
|
status ProposalStatus // Status of the proposal lifecycle (draft, active, approved etc.)
|
||||||
|
|
||||||
|
// Fields from biz/vote.v's Vote struct (representing the voting event aspects of the proposal)
|
||||||
|
vote_start_date ourtime.OurTime // When voting on this proposal starts
|
||||||
|
vote_end_date ourtime.OurTime // When voting on this proposal ends
|
||||||
|
vote_status VoteEventStatus // Status of the voting event (open, closed, cancelled)
|
||||||
|
options []VoteOption // The choices users can vote for
|
||||||
|
ballots []Ballot // The cast votes by users
|
||||||
|
private_group []u32 // Optional: list of user IDs who are eligible to vote
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProposalStatus defines the lifecycle status of a governance proposal itself
|
||||||
|
pub enum ProposalStatus {
|
||||||
|
draft // Proposal is being prepared
|
||||||
|
active // Proposal is active (might be pre-voting, during voting, or post-voting but not yet finalized)
|
||||||
|
approved // Proposal has been formally approved
|
||||||
|
rejected // Proposal has been formally rejected
|
||||||
|
cancelled// Proposal was cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Structures from biz/vote.v, adapted for integration --
|
||||||
|
|
||||||
|
// VoteEventStatus represents the status of the voting process for a proposal
|
||||||
|
// Renamed from VoteStatus in biz/vote.v to avoid confusion with ProposalStatus
|
||||||
|
pub enum VoteEventStatus {
|
||||||
|
open // Voting is currently open
|
||||||
|
closed // Voting has finished
|
||||||
|
cancelled // The voting event was cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
// VoteOption represents a specific choice that can be voted on within a proposal's voting event
|
||||||
|
pub struct VoteOption {
|
||||||
|
pub mut:
|
||||||
|
id u8 // Simple identifier for this option within this proposal's vote (e.g., 1, 2, 3)
|
||||||
|
text string // The descriptive text of the option (e.g., "Option A: Approve budget")
|
||||||
|
count int // How many votes this option has received
|
||||||
|
min_valid int // Optional: minimum votes needed for this option to be considered valid
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ballot represents an individual vote cast by a user for a specific proposal
|
||||||
|
pub struct Ballot {
|
||||||
|
base.Base // Provides Ballot's own ID, created_at, updated_at
|
||||||
|
pub mut:
|
||||||
|
user_id u32 // The ID of the user who cast this ballot
|
||||||
|
vote_option_id u8 // The 'id' of the VoteOption chosen by the user
|
||||||
|
shares_count int // Number of shares/tokens/voting power used for this ballot
|
||||||
|
}
|
68
specs/modelsold/legal/contract.v
Normal file
68
specs/modelsold/legal/contract.v
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
module contract
|
||||||
|
|
||||||
|
import base
|
||||||
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
|
// Contract represents a legal agreement
|
||||||
|
pub struct Contract {
|
||||||
|
base.Base // Base struct for common fields
|
||||||
|
pub mut:
|
||||||
|
id string // Unique ID for the contract (UUID string)
|
||||||
|
title string
|
||||||
|
description string
|
||||||
|
contract_type string // service, employment, nda, sla, partnership, distribution, license, membership, other
|
||||||
|
status ContractStatus
|
||||||
|
created_at ourtime.OurTime
|
||||||
|
updated_at ourtime.OurTime
|
||||||
|
created_by string // User ID or name of the creator
|
||||||
|
terms_and_conditions string // JSON string or markdown
|
||||||
|
start_date ourtime.OurTime // Optional
|
||||||
|
end_date ourtime.OurTime // Optional
|
||||||
|
renewal_period_days int // Optional (0 if not applicable)
|
||||||
|
next_renewal_date ourtime.OurTime // Optional
|
||||||
|
signers []ContractSigner
|
||||||
|
revisions []ContractRevision
|
||||||
|
current_version u32
|
||||||
|
last_signed_date ourtime.OurTime // Optional
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContractRevision represents a version of the contract content
|
||||||
|
pub struct ContractRevision {
|
||||||
|
// base.Base // If applicable
|
||||||
|
pub mut:
|
||||||
|
version u32
|
||||||
|
content string // The actual content of the contract revision
|
||||||
|
created_at ourtime.OurTime
|
||||||
|
created_by string // User ID or name of the creator
|
||||||
|
comments string // Optional in Rust, string can be empty
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContractStatus defines the possible statuses of a contract
|
||||||
|
pub enum ContractStatus {
|
||||||
|
draft
|
||||||
|
pending_signatures
|
||||||
|
signed
|
||||||
|
active
|
||||||
|
expired
|
||||||
|
cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContractSigner represents a party involved in signing a contract
|
||||||
|
pub struct ContractSigner {
|
||||||
|
pub mut:
|
||||||
|
id string // Unique ID for the signer (UUID string)
|
||||||
|
name string
|
||||||
|
email string
|
||||||
|
status SignerStatus
|
||||||
|
signed_at ourtime.OurTime // Optional in Rust, OurTime can be zero
|
||||||
|
comments string // Optional in Rust, string can be empty
|
||||||
|
last_reminder_mail_sent_at ourtime.OurTime // Unix timestamp of last reminder sent
|
||||||
|
signature_data string // Base64 encoded signature image data (Optional in Rust)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SignerStatus defines the status of a contract signer
|
||||||
|
pub enum SignerStatus {
|
||||||
|
pending
|
||||||
|
signed
|
||||||
|
rejected
|
||||||
|
}
|
53
specs/modelsold/projects/base.v
Normal file
53
specs/modelsold/projects/base.v
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
module projects
|
||||||
|
|
||||||
|
import base
|
||||||
|
|
||||||
|
// Priority represents the priority level of a project item
|
||||||
|
pub enum Priority {
|
||||||
|
critical
|
||||||
|
high
|
||||||
|
medium
|
||||||
|
low
|
||||||
|
none
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status represents the current status of a project item
|
||||||
|
pub enum Status {
|
||||||
|
todo
|
||||||
|
in_progress
|
||||||
|
review
|
||||||
|
done
|
||||||
|
archived
|
||||||
|
}
|
||||||
|
|
||||||
|
// ItemType represents the type of a project item
|
||||||
|
pub enum ItemType {
|
||||||
|
epic
|
||||||
|
story
|
||||||
|
task
|
||||||
|
bug
|
||||||
|
improvement
|
||||||
|
feature
|
||||||
|
}
|
||||||
|
|
||||||
|
// Project represents a project in the system
|
||||||
|
pub struct Project {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
owner_id u32 // ID of the user who owns this project
|
||||||
|
member_ids []u32 // IDs of the users who are members of this project
|
||||||
|
board_ids []u32 // IDs of the kanban boards in this project
|
||||||
|
sprint_ids []u32 // IDs of the sprints in this project
|
||||||
|
epic_ids []u32 // IDs of the epics in this project
|
||||||
|
tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Label represents a label that can be applied to project items
|
||||||
|
pub struct Label {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
color string // Hex color code
|
||||||
|
}
|
37
specs/modelsold/projects/epic.v
Normal file
37
specs/modelsold/projects/epic.v
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
module projects
|
||||||
|
|
||||||
|
import base
|
||||||
|
|
||||||
|
// Epic represents a large body of work that can be broken down into stories
|
||||||
|
pub struct Epic {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
title string
|
||||||
|
description string
|
||||||
|
project_id u32 // ID of the project this epic belongs to
|
||||||
|
owner_id u32 // ID of the user who owns this epic
|
||||||
|
assignee_id u32 // ID of the user assigned to this epic
|
||||||
|
status Status
|
||||||
|
priority Priority
|
||||||
|
story_ids []u32 // IDs of the stories in this epic
|
||||||
|
issue_ids []u32 // IDs of the issues in this epic
|
||||||
|
label_ids []u32 // IDs of the labels applied to this epic
|
||||||
|
start_date string // Start date in ISO format
|
||||||
|
due_date string // Due date in ISO format
|
||||||
|
progress f32 // Progress as a percentage (0-100)
|
||||||
|
dependencies []u32 // IDs of epics that this epic depends on
|
||||||
|
blockers []string // List of blockers preventing progress
|
||||||
|
tags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
// EpicProgress represents the progress of an epic
|
||||||
|
pub struct EpicProgress {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
epic_id u32
|
||||||
|
total_stories u32 // Total number of stories in the epic
|
||||||
|
completed_stories u32 // Number of completed stories
|
||||||
|
total_points f32 // Total number of story points
|
||||||
|
completed_points f32 // Number of completed story points
|
||||||
|
progress f32 // Progress as a percentage (0-100)
|
||||||
|
}
|
45
specs/modelsold/projects/sprint.v
Normal file
45
specs/modelsold/projects/sprint.v
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
module projects
|
||||||
|
|
||||||
|
import base
|
||||||
|
|
||||||
|
// SprintStatus represents the status of a sprint
|
||||||
|
pub enum SprintStatus {
|
||||||
|
planning
|
||||||
|
active
|
||||||
|
review
|
||||||
|
completed
|
||||||
|
cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sprint represents a time-boxed period in which specific work has to be completed
|
||||||
|
pub struct Sprint {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
project_id u32 // ID of the project this sprint belongs to
|
||||||
|
status SprintStatus
|
||||||
|
start_date string // Start date in ISO format
|
||||||
|
end_date string // End date in ISO format
|
||||||
|
goal string // The goal of this sprint
|
||||||
|
story_ids []u32 // IDs of the stories in this sprint
|
||||||
|
issue_ids []u32 // IDs of the issues in this sprint
|
||||||
|
epic_ids []u32 // IDs of the epics this sprint contributes to
|
||||||
|
velocity f32 // Planned velocity for this sprint
|
||||||
|
actual_points f32 // Actual story points completed
|
||||||
|
retrospective string // Notes from the sprint retrospective
|
||||||
|
}
|
||||||
|
|
||||||
|
// SprintReport represents a report generated at the end of a sprint
|
||||||
|
pub struct SprintReport {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
sprint_id u32
|
||||||
|
completed_items u32 // Number of items completed
|
||||||
|
total_items u32 // Total number of items
|
||||||
|
completed_points f32 // Number of story points completed
|
||||||
|
total_points f32 // Total number of story points
|
||||||
|
blockers []string // List of blockers encountered
|
||||||
|
achievements []string // List of achievements
|
||||||
|
lessons []string // Lessons learned
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user