From aa7e79d26cb924a58461f6ff959e28b6ef0fdc47 Mon Sep 17 00:00:00 2001 From: despiegk Date: Mon, 4 Aug 2025 10:44:17 +0200 Subject: [PATCH] Update git remote URL from git.threefold.info to git.ourworld.tf --- specs/models/biz/company.v | 57 +++++------ specs/models/biz/payment.v | 28 ++++++ specs/models/biz/product.v | 57 +++++------ specs/models/biz/sale.v | 60 +++++------ specs/models/biz/shareholder.v | 33 +++---- specs/models/calendar/calendar.v | 15 +++ specs/models/calendar/contacts.v | 36 +++++++ specs/models/calendar/event.v | 53 ++++++++++ specs/models/calendar/message.v | 49 +++++++++ specs/models/circle/circle.v | 32 ++++++ specs/models/circle/member.v | 33 +++++++ specs/models/circle/name.v | 27 +++++ specs/models/circle/wallet.v | 33 +++++++ specs/models/core/base.v | 12 +++ specs/models/core/comment.v | 20 ++++ specs/models/finance/account.v | 29 ++++-- specs/models/finance/asset.v | 49 ++++----- specs/models/finance/marketplace.v | 76 +++++--------- specs/models/gov/committee.v | 24 +++++ specs/models/gov/company.v | 28 ++++++ specs/models/gov/meeting.v | 30 ++++++ specs/models/gov/resolution.v | 18 ++++ specs/models/gov/shareholder.v | 15 +++ specs/models/gov/types.v | 82 +++++++++++++++ specs/models/gov/user.v | 12 +++ specs/models/gov/vote.v | 27 +++++ specs/models/governance/activity.v | 25 +++++ specs/models/governance/attached_file.v | 17 ++++ specs/models/governance/committee.v | 39 ++++++++ specs/models/governance/company.v | 45 +++++++++ specs/models/governance/meeting.v | 44 +++++++++ specs/models/governance/proposal.v | 89 +++++++---------- specs/models/governance/resolution.v | 40 ++++++++ specs/models/governance/user.v | 48 +++++++++ specs/models/governance/vote.v | 34 +++++++ specs/models/legal/contract.v | 99 ++++++++----------- specs/models/library/book.v | 30 ++++++ specs/models/library/collection.v | 27 +++++ specs/models/library/image.v | 21 ++++ specs/models/library/markdown.v | 15 +++ specs/models/library/pdf.v | 18 ++++ specs/models/library/slideshow.v | 27 +++++ specs/models/projects/base.v | 42 ++++---- specs/models/projects/epic.v | 43 +++----- specs/models/projects/sprint.v | 47 +++------ specs/models/projects/task.v | 42 ++++++++ specs/{models => modelsold}/base/base.v | 0 specs/modelsold/biz/company.v | 43 ++++++++ specs/modelsold/biz/product.v | 44 +++++++++ specs/modelsold/biz/sale.v | 43 ++++++++ specs/modelsold/biz/shareholder.v | 27 +++++ specs/{models => modelsold}/biz/user.v | 0 .../{models => modelsold}/circle/attachment.v | 0 specs/{models => modelsold}/circle/config.v | 0 .../circle/domainnames.v | 0 specs/{models => modelsold}/circle/group.v | 0 specs/{models => modelsold}/circle/user.v | 0 specs/{models => modelsold}/crm/account.v | 0 specs/{models => modelsold}/crm/call.v | 0 specs/{models => modelsold}/crm/campaign.v | 0 specs/{models => modelsold}/crm/case.v | 0 specs/{models => modelsold}/crm/contact.v | 0 specs/{models => modelsold}/crm/lead.v | 0 specs/{models => modelsold}/crm/opportunity.v | 0 specs/{models => modelsold}/crm/task.v | 0 specs/modelsold/finance/account.v | 16 +++ specs/modelsold/finance/asset.v | 31 ++++++ specs/modelsold/finance/marketplace.v | 61 ++++++++++++ specs/{models => modelsold}/flow/flow.v | 0 specs/modelsold/governance/proposal.v | 62 ++++++++++++ specs/modelsold/legal/contract.v | 68 +++++++++++++ specs/{models => modelsold}/mcc/README.md | 0 specs/{models => modelsold}/mcc/calendar.v | 0 specs/{models => modelsold}/mcc/contacts.v | 0 specs/{models => modelsold}/mcc/message.v | 0 specs/modelsold/projects/base.v | 53 ++++++++++ specs/modelsold/projects/epic.v | 37 +++++++ specs/{models => modelsold}/projects/issue.v | 0 specs/{models => modelsold}/projects/kanban.v | 0 specs/modelsold/projects/sprint.v | 45 +++++++++ specs/{models => modelsold}/projects/story.v | 0 specs/{models => modelsold}/ticket/ticket.v | 0 .../ticket/ticket_comment.v | 0 .../ticket/ticket_enums.v | 0 specs/{models => modelsold}/user.v | 0 85 files changed, 1865 insertions(+), 392 deletions(-) create mode 100644 specs/models/biz/payment.v create mode 100644 specs/models/calendar/calendar.v create mode 100644 specs/models/calendar/contacts.v create mode 100644 specs/models/calendar/event.v create mode 100644 specs/models/calendar/message.v create mode 100644 specs/models/circle/circle.v create mode 100644 specs/models/circle/member.v create mode 100644 specs/models/circle/name.v create mode 100644 specs/models/circle/wallet.v create mode 100644 specs/models/core/base.v create mode 100644 specs/models/core/comment.v create mode 100644 specs/models/gov/committee.v create mode 100644 specs/models/gov/company.v create mode 100644 specs/models/gov/meeting.v create mode 100644 specs/models/gov/resolution.v create mode 100644 specs/models/gov/shareholder.v create mode 100644 specs/models/gov/types.v create mode 100644 specs/models/gov/user.v create mode 100644 specs/models/gov/vote.v create mode 100644 specs/models/governance/activity.v create mode 100644 specs/models/governance/attached_file.v create mode 100644 specs/models/governance/committee.v create mode 100644 specs/models/governance/company.v create mode 100644 specs/models/governance/meeting.v create mode 100644 specs/models/governance/resolution.v create mode 100644 specs/models/governance/user.v create mode 100644 specs/models/governance/vote.v create mode 100644 specs/models/library/book.v create mode 100644 specs/models/library/collection.v create mode 100644 specs/models/library/image.v create mode 100644 specs/models/library/markdown.v create mode 100644 specs/models/library/pdf.v create mode 100644 specs/models/library/slideshow.v create mode 100644 specs/models/projects/task.v rename specs/{models => modelsold}/base/base.v (100%) create mode 100644 specs/modelsold/biz/company.v create mode 100644 specs/modelsold/biz/product.v create mode 100644 specs/modelsold/biz/sale.v create mode 100644 specs/modelsold/biz/shareholder.v rename specs/{models => modelsold}/biz/user.v (100%) rename specs/{models => modelsold}/circle/attachment.v (100%) rename specs/{models => modelsold}/circle/config.v (100%) rename specs/{models => modelsold}/circle/domainnames.v (100%) rename specs/{models => modelsold}/circle/group.v (100%) rename specs/{models => modelsold}/circle/user.v (100%) rename specs/{models => modelsold}/crm/account.v (100%) rename specs/{models => modelsold}/crm/call.v (100%) rename specs/{models => modelsold}/crm/campaign.v (100%) rename specs/{models => modelsold}/crm/case.v (100%) rename specs/{models => modelsold}/crm/contact.v (100%) rename specs/{models => modelsold}/crm/lead.v (100%) rename specs/{models => modelsold}/crm/opportunity.v (100%) rename specs/{models => modelsold}/crm/task.v (100%) create mode 100644 specs/modelsold/finance/account.v create mode 100644 specs/modelsold/finance/asset.v create mode 100644 specs/modelsold/finance/marketplace.v rename specs/{models => modelsold}/flow/flow.v (100%) create mode 100644 specs/modelsold/governance/proposal.v create mode 100644 specs/modelsold/legal/contract.v rename specs/{models => modelsold}/mcc/README.md (100%) rename specs/{models => modelsold}/mcc/calendar.v (100%) rename specs/{models => modelsold}/mcc/contacts.v (100%) rename specs/{models => modelsold}/mcc/message.v (100%) create mode 100644 specs/modelsold/projects/base.v create mode 100644 specs/modelsold/projects/epic.v rename specs/{models => modelsold}/projects/issue.v (100%) rename specs/{models => modelsold}/projects/kanban.v (100%) create mode 100644 specs/modelsold/projects/sprint.v rename specs/{models => modelsold}/projects/story.v (100%) rename specs/{models => modelsold}/ticket/ticket.v (100%) rename specs/{models => modelsold}/ticket/ticket_comment.v (100%) rename specs/{models => modelsold}/ticket/ticket_enums.v (100%) rename specs/{models => modelsold}/user.v (100%) diff --git a/specs/models/biz/company.v b/specs/models/biz/company.v index b959323..7329836 100644 --- a/specs/models/biz/company.v +++ b/specs/models/biz/company.v @@ -1,17 +1,34 @@ module biz -import base -import freeflowuniverse.herolib.data.ourtime +import freeflowuniverse.herolib.hero.models.core - -// CompanyStatus represents the status of a company -pub enum CompanyStatus { - active - inactive - suspended +// Company represents a business entity with all necessary details +pub struct Company { + core.Base +pub mut: + name string // Company legal name @[index: 'company_name_idx'] + 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 { coop single @@ -19,25 +36,3 @@ pub enum BusinessType { 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 -} diff --git a/specs/models/biz/payment.v b/specs/models/biz/payment.v new file mode 100644 index 0000000..1adb333 --- /dev/null +++ b/specs/models/biz/payment.v @@ -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 +} diff --git a/specs/models/biz/product.v b/specs/models/biz/product.v index dedf232..2770157 100644 --- a/specs/models/biz/product.v +++ b/specs/models/biz/product.v @@ -1,44 +1,39 @@ module biz -import base -import freeflowuniverse.herolib.data.ourtime +import freeflowuniverse.herolib.hero.models.core -import freeflowuniverse.herolib.data.currency -// import freeflowuniverse.herolib.core.texttools { name_fix } +// Product represents goods or services offered by a company +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 { product service } -// ProductStatus represents the status of a product +// ProductStatus indicates availability 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 -} diff --git a/specs/models/biz/sale.v b/specs/models/biz/sale.v index 6ba37ea..a7cd1b2 100644 --- a/specs/models/biz/sale.v +++ b/specs/models/biz/sale.v @@ -1,43 +1,35 @@ 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 { 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 -} diff --git a/specs/models/biz/shareholder.v b/specs/models/biz/shareholder.v index 852f0e6..02165de 100644 --- a/specs/models/biz/shareholder.v +++ b/specs/models/biz/shareholder.v @@ -1,27 +1,22 @@ 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 { 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 -} diff --git a/specs/models/calendar/calendar.v b/specs/models/calendar/calendar.v new file mode 100644 index 0000000..b3c9888 --- /dev/null +++ b/specs/models/calendar/calendar.v @@ -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 +} diff --git a/specs/models/calendar/contacts.v b/specs/models/calendar/contacts.v new file mode 100644 index 0000000..26f37ca --- /dev/null +++ b/specs/models/calendar/contacts.v @@ -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] +} diff --git a/specs/models/calendar/event.v b/specs/models/calendar/event.v new file mode 100644 index 0000000..a8e51a7 --- /dev/null +++ b/specs/models/calendar/event.v @@ -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 +} diff --git a/specs/models/calendar/message.v b/specs/models/calendar/message.v new file mode 100644 index 0000000..aec378b --- /dev/null +++ b/specs/models/calendar/message.v @@ -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 +} diff --git a/specs/models/circle/circle.v b/specs/models/circle/circle.v new file mode 100644 index 0000000..28c6915 --- /dev/null +++ b/specs/models/circle/circle.v @@ -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 +} diff --git a/specs/models/circle/member.v b/specs/models/circle/member.v new file mode 100644 index 0000000..b87e88e --- /dev/null +++ b/specs/models/circle/member.v @@ -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 +} diff --git a/specs/models/circle/name.v b/specs/models/circle/name.v new file mode 100644 index 0000000..0205665 --- /dev/null +++ b/specs/models/circle/name.v @@ -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 +} diff --git a/specs/models/circle/wallet.v b/specs/models/circle/wallet.v new file mode 100644 index 0000000..8e70cdb --- /dev/null +++ b/specs/models/circle/wallet.v @@ -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 +} diff --git a/specs/models/core/base.v b/specs/models/core/base.v new file mode 100644 index 0000000..0795230 --- /dev/null +++ b/specs/models/core/base.v @@ -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 +} diff --git a/specs/models/core/comment.v b/specs/models/core/comment.v new file mode 100644 index 0000000..b4d26f6 --- /dev/null +++ b/specs/models/core/comment.v @@ -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 +} diff --git a/specs/models/finance/account.v b/specs/models/finance/account.v index ed68423..743a5ae 100644 --- a/specs/models/finance/account.v +++ b/specs/models/finance/account.v @@ -1,16 +1,27 @@ 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 { - base.Base + core.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 + name string // User-friendly account name + account_type AccountType + balance f64 // Current balance in the account's currency + currency string // Currency code (USD, EUR, etc.) + description string // Optional description of the account + is_active bool // Whether the account is currently active } +// AccountType defines the different types of financial accounts +pub enum AccountType { + checking + savings + investment + credit + loan + crypto + other +} diff --git a/specs/models/finance/asset.v b/specs/models/finance/asset.v index 12990bf..4a44d3e 100644 --- a/specs/models/finance/asset.v +++ b/specs/models/finance/asset.v @@ -1,31 +1,34 @@ module finance -import base - -pub enum AssetType { - erc20 - erc721 - erc1155 - native -} +import freeflowuniverse.herolib.hero.models.core +// Asset represents any valuable resource owned by an entity +// Can be financial (stocks, bonds) or physical (real estate, commodities) pub struct Asset { - base.Base + core.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 + name string // Asset name or identifier + symbol string // Trading symbol or identifier @[index] + asset_type AssetType + quantity f64 // Amount of the asset held + unit_price f64 // Price per unit in the asset's currency + 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 { - return { - 'name': self.name - } -} - -pub fn (self Asset) ftindex_keys() map[string]string { - return map[string]string{} +// AssetType defines the classification of assets +pub enum AssetType { + stock + bond + crypto + commodity + real_estate + currency + nft + other } diff --git a/specs/models/finance/marketplace.v b/specs/models/finance/marketplace.v index 1e35cef..3372fb0 100644 --- a/specs/models/finance/marketplace.v +++ b/specs/models/finance/marketplace.v @@ -1,61 +1,29 @@ -module marketplace +module finance -import base -import freeflowuniverse.herolib.data.ourtime -import asset // For AssetType -// ListingStatus, ListingType enums and Bid struct are used from the same module +import freeflowuniverse.herolib.hero.models.core -// Listing represents a marketplace listing for an asset -pub struct Listing { - base.Base // Provides id, created_at, updated_at +// Marketplace represents a platform for buying and selling goods/services +// Can be internal or external marketplace configurations +pub struct Marketplace { + core.Base 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 + name string // Marketplace name (e.g., "Amazon", "eBay") @[index] + marketplace_type MarketplaceType + api_endpoint string // API endpoint for marketplace integration + api_key string // Authentication key for API access + currency string // Default currency for transactions + fee_percentage f64 // Marketplace fee as percentage (0.0-100.0) + is_active bool // Whether marketplace is currently enabled + description string // Detailed marketplace description + support_email string // Contact email for support issues } -// 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 +// MarketplaceType defines the type of marketplace platform +pub enum MarketplaceType { + centralized + decentralized + peer_to_peer 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 -} \ No newline at end of file diff --git a/specs/models/gov/committee.v b/specs/models/gov/committee.v new file mode 100644 index 0000000..3f3c7a2 --- /dev/null +++ b/specs/models/gov/committee.v @@ -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 +} diff --git a/specs/models/gov/company.v b/specs/models/gov/company.v new file mode 100644 index 0000000..7800006 --- /dev/null +++ b/specs/models/gov/company.v @@ -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 +} diff --git a/specs/models/gov/meeting.v b/specs/models/gov/meeting.v new file mode 100644 index 0000000..6e0d0d3 --- /dev/null +++ b/specs/models/gov/meeting.v @@ -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 +} diff --git a/specs/models/gov/resolution.v b/specs/models/gov/resolution.v new file mode 100644 index 0000000..ad60ab4 --- /dev/null +++ b/specs/models/gov/resolution.v @@ -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 +} diff --git a/specs/models/gov/shareholder.v b/specs/models/gov/shareholder.v new file mode 100644 index 0000000..6563128 --- /dev/null +++ b/specs/models/gov/shareholder.v @@ -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 +} diff --git a/specs/models/gov/types.v b/specs/models/gov/types.v new file mode 100644 index 0000000..86e8416 --- /dev/null +++ b/specs/models/gov/types.v @@ -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 +} diff --git a/specs/models/gov/user.v b/specs/models/gov/user.v new file mode 100644 index 0000000..9e08806 --- /dev/null +++ b/specs/models/gov/user.v @@ -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 +} diff --git a/specs/models/gov/vote.v b/specs/models/gov/vote.v new file mode 100644 index 0000000..14e46a5 --- /dev/null +++ b/specs/models/gov/vote.v @@ -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 +} diff --git a/specs/models/governance/activity.v b/specs/models/governance/activity.v new file mode 100644 index 0000000..224f749 --- /dev/null +++ b/specs/models/governance/activity.v @@ -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 +} diff --git a/specs/models/governance/attached_file.v b/specs/models/governance/attached_file.v new file mode 100644 index 0000000..ffcd5bc --- /dev/null +++ b/specs/models/governance/attached_file.v @@ -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] +} diff --git a/specs/models/governance/committee.v b/specs/models/governance/committee.v new file mode 100644 index 0000000..4e597b8 --- /dev/null +++ b/specs/models/governance/committee.v @@ -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 +} diff --git a/specs/models/governance/company.v b/specs/models/governance/company.v new file mode 100644 index 0000000..b8dc8be --- /dev/null +++ b/specs/models/governance/company.v @@ -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 +} diff --git a/specs/models/governance/meeting.v b/specs/models/governance/meeting.v new file mode 100644 index 0000000..9a564e3 --- /dev/null +++ b/specs/models/governance/meeting.v @@ -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] +} diff --git a/specs/models/governance/proposal.v b/specs/models/governance/proposal.v index 8485855..6ee9a8a 100644 --- a/specs/models/governance/proposal.v +++ b/specs/models/governance/proposal.v @@ -1,62 +1,47 @@ module governance -import base -import freeflowuniverse.herolib.data.ourtime -// ProposalStatus enum is used from governance_enums.v in the same module +import freeflowuniverse.herolib.hero.models.core -// 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 +// ProposalStatus tracks the state of a governance proposal 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 + draft + pending_review + active + voting + passed + rejected + implemented + 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 +// ProposalType categorizes proposals +pub enum ProposalType { + constitutional + policy + budget + election + merger + dissolution + other } -// VoteOption represents a specific choice that can be voted on within a proposal's voting event -pub struct VoteOption { +// Proposal represents a governance proposal +pub struct Proposal { + core.Base 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 + company_id u32 // Reference to company @[index] + title string // Proposal title @[index] + description string // Detailed description + proposal_type ProposalType // Category of proposal + status ProposalStatus // Current state + proposer_id u32 // User who created @[index] + target_committee_id u32 // Target committee @[index] + voting_start u64 // Start timestamp + voting_end u64 // End timestamp + quorum_required f64 // Percentage required + approval_threshold f64 // Percentage for approval + votes_for u32 // Votes in favor + votes_against u32 // Votes against + votes_abstain u32 // Abstention votes + implementation_notes string // Post-implementation notes } diff --git a/specs/models/governance/resolution.v b/specs/models/governance/resolution.v new file mode 100644 index 0000000..0187739 --- /dev/null +++ b/specs/models/governance/resolution.v @@ -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 +} diff --git a/specs/models/governance/user.v b/specs/models/governance/user.v new file mode 100644 index 0000000..4b227b7 --- /dev/null +++ b/specs/models/governance/user.v @@ -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 +} diff --git a/specs/models/governance/vote.v b/specs/models/governance/vote.v new file mode 100644 index 0000000..6df0735 --- /dev/null +++ b/specs/models/governance/vote.v @@ -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 +} diff --git a/specs/models/legal/contract.v b/specs/models/legal/contract.v index 227bca1..0eef275 100644 --- a/specs/models/legal/contract.v +++ b/specs/models/legal/contract.v @@ -1,68 +1,55 @@ -module contract +module legal -import base -import freeflowuniverse.herolib.data.ourtime +import freeflowuniverse.herolib.hero.models.core -// 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 +// ContractStatus represents the current state of a legal contract pub enum ContractStatus { draft - pending_signatures - signed + pending active expired + terminated 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) +// ContractType categorizes the type of legal agreement +pub enum ContractType { + service + sales + lease + employment + partnership + nda + other } -// SignerStatus defines the status of a contract signer -pub enum SignerStatus { - pending - signed - rejected +// Contract represents a legal agreement between parties +// This model stores essential information about contracts including parties, terms, and status +pub struct Contract { + core.Base +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 } diff --git a/specs/models/library/book.v b/specs/models/library/book.v new file mode 100644 index 0000000..3e73378 --- /dev/null +++ b/specs/models/library/book.v @@ -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 +} diff --git a/specs/models/library/collection.v b/specs/models/library/collection.v new file mode 100644 index 0000000..85f14db --- /dev/null +++ b/specs/models/library/collection.v @@ -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 +} diff --git a/specs/models/library/image.v b/specs/models/library/image.v new file mode 100644 index 0000000..5411d44 --- /dev/null +++ b/specs/models/library/image.v @@ -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 +} diff --git a/specs/models/library/markdown.v b/specs/models/library/markdown.v new file mode 100644 index 0000000..c220c61 --- /dev/null +++ b/specs/models/library/markdown.v @@ -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 +} diff --git a/specs/models/library/pdf.v b/specs/models/library/pdf.v new file mode 100644 index 0000000..ad15a46 --- /dev/null +++ b/specs/models/library/pdf.v @@ -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 +} diff --git a/specs/models/library/slideshow.v b/specs/models/library/slideshow.v new file mode 100644 index 0000000..6704c94 --- /dev/null +++ b/specs/models/library/slideshow.v @@ -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 +} diff --git a/specs/models/projects/base.v b/specs/models/projects/base.v index 0f231f1..40b0c2e 100644 --- a/specs/models/projects/base.v +++ b/specs/models/projects/base.v @@ -1,8 +1,8 @@ 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 { critical high @@ -11,7 +11,7 @@ pub enum Priority { none } -// Status represents the current status of a project item +// Status values for project lifecycle pub enum Status { todo in_progress @@ -20,7 +20,7 @@ pub enum Status { archived } -// ItemType represents the type of a project item +// Types of items in the project hierarchy pub enum ItemType { epic story @@ -30,24 +30,28 @@ pub enum ItemType { 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 { - base.Base + core.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 + name string @[index] // Project name + description string // Detailed project description + owner_id u64 @[index] // User ID of the project owner + member_ids []u64 @[index] // List of user IDs who are members + board_ids []u64 // List of associated board IDs + sprint_ids []u64 @[index] // List of sprint IDs in this project + epic_ids []u64 @[index] // List of epic IDs in this project + 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 { - base.Base + core.Base pub mut: - name string - color string // Hex color code -} \ No newline at end of file + name string @[index] // Label name + color string @[index] // Hex color code for the label +} diff --git a/specs/models/projects/epic.v b/specs/models/projects/epic.v index e1450d9..00d1ae2 100644 --- a/specs/models/projects/epic.v +++ b/specs/models/projects/epic.v @@ -1,37 +1,18 @@ 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 { - base.Base + core.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 + name string @[index] // Epic name + description string // Detailed epic description + status Status @[index] // Current epic status + project_id u64 @[index] // Link to parent project + start_date u64 // Epic start timestamp (Unix) + due_date u64 // Epic due timestamp (Unix) + tags []string @[index] // Epic tags for categorization + child_task_ids []u64 @[index] // List of task IDs belonging to this epic } - -// 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) -} \ No newline at end of file diff --git a/specs/models/projects/sprint.v b/specs/models/projects/sprint.v index c0376b3..6ca70ba 100644 --- a/specs/models/projects/sprint.v +++ b/specs/models/projects/sprint.v @@ -1,45 +1,26 @@ 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 { planning active - review 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 { - base.Base + core.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 + name string @[index] // Sprint name + description string // Sprint description + status SprintStatus @[index] // Current sprint status + goal string // Sprint goal/objective + project_id u64 @[index] // Link to parent project + start_date u64 // Sprint start timestamp (Unix) + end_date u64 // Sprint end timestamp (Unix) + task_ids []u64 @[index] // List of task IDs in this sprint } - -// 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 -} \ No newline at end of file diff --git a/specs/models/projects/task.v b/specs/models/projects/task.v new file mode 100644 index 0000000..473f52a --- /dev/null +++ b/specs/models/projects/task.v @@ -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 +} diff --git a/specs/models/base/base.v b/specs/modelsold/base/base.v similarity index 100% rename from specs/models/base/base.v rename to specs/modelsold/base/base.v diff --git a/specs/modelsold/biz/company.v b/specs/modelsold/biz/company.v new file mode 100644 index 0000000..b959323 --- /dev/null +++ b/specs/modelsold/biz/company.v @@ -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 +} diff --git a/specs/modelsold/biz/product.v b/specs/modelsold/biz/product.v new file mode 100644 index 0000000..dedf232 --- /dev/null +++ b/specs/modelsold/biz/product.v @@ -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 +} diff --git a/specs/modelsold/biz/sale.v b/specs/modelsold/biz/sale.v new file mode 100644 index 0000000..6ba37ea --- /dev/null +++ b/specs/modelsold/biz/sale.v @@ -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 +} diff --git a/specs/modelsold/biz/shareholder.v b/specs/modelsold/biz/shareholder.v new file mode 100644 index 0000000..852f0e6 --- /dev/null +++ b/specs/modelsold/biz/shareholder.v @@ -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 +} diff --git a/specs/models/biz/user.v b/specs/modelsold/biz/user.v similarity index 100% rename from specs/models/biz/user.v rename to specs/modelsold/biz/user.v diff --git a/specs/models/circle/attachment.v b/specs/modelsold/circle/attachment.v similarity index 100% rename from specs/models/circle/attachment.v rename to specs/modelsold/circle/attachment.v diff --git a/specs/models/circle/config.v b/specs/modelsold/circle/config.v similarity index 100% rename from specs/models/circle/config.v rename to specs/modelsold/circle/config.v diff --git a/specs/models/circle/domainnames.v b/specs/modelsold/circle/domainnames.v similarity index 100% rename from specs/models/circle/domainnames.v rename to specs/modelsold/circle/domainnames.v diff --git a/specs/models/circle/group.v b/specs/modelsold/circle/group.v similarity index 100% rename from specs/models/circle/group.v rename to specs/modelsold/circle/group.v diff --git a/specs/models/circle/user.v b/specs/modelsold/circle/user.v similarity index 100% rename from specs/models/circle/user.v rename to specs/modelsold/circle/user.v diff --git a/specs/models/crm/account.v b/specs/modelsold/crm/account.v similarity index 100% rename from specs/models/crm/account.v rename to specs/modelsold/crm/account.v diff --git a/specs/models/crm/call.v b/specs/modelsold/crm/call.v similarity index 100% rename from specs/models/crm/call.v rename to specs/modelsold/crm/call.v diff --git a/specs/models/crm/campaign.v b/specs/modelsold/crm/campaign.v similarity index 100% rename from specs/models/crm/campaign.v rename to specs/modelsold/crm/campaign.v diff --git a/specs/models/crm/case.v b/specs/modelsold/crm/case.v similarity index 100% rename from specs/models/crm/case.v rename to specs/modelsold/crm/case.v diff --git a/specs/models/crm/contact.v b/specs/modelsold/crm/contact.v similarity index 100% rename from specs/models/crm/contact.v rename to specs/modelsold/crm/contact.v diff --git a/specs/models/crm/lead.v b/specs/modelsold/crm/lead.v similarity index 100% rename from specs/models/crm/lead.v rename to specs/modelsold/crm/lead.v diff --git a/specs/models/crm/opportunity.v b/specs/modelsold/crm/opportunity.v similarity index 100% rename from specs/models/crm/opportunity.v rename to specs/modelsold/crm/opportunity.v diff --git a/specs/models/crm/task.v b/specs/modelsold/crm/task.v similarity index 100% rename from specs/models/crm/task.v rename to specs/modelsold/crm/task.v diff --git a/specs/modelsold/finance/account.v b/specs/modelsold/finance/account.v new file mode 100644 index 0000000..ed68423 --- /dev/null +++ b/specs/modelsold/finance/account.v @@ -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 +} + diff --git a/specs/modelsold/finance/asset.v b/specs/modelsold/finance/asset.v new file mode 100644 index 0000000..12990bf --- /dev/null +++ b/specs/modelsold/finance/asset.v @@ -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{} +} diff --git a/specs/modelsold/finance/marketplace.v b/specs/modelsold/finance/marketplace.v new file mode 100644 index 0000000..1e35cef --- /dev/null +++ b/specs/modelsold/finance/marketplace.v @@ -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 +} \ No newline at end of file diff --git a/specs/models/flow/flow.v b/specs/modelsold/flow/flow.v similarity index 100% rename from specs/models/flow/flow.v rename to specs/modelsold/flow/flow.v diff --git a/specs/modelsold/governance/proposal.v b/specs/modelsold/governance/proposal.v new file mode 100644 index 0000000..8485855 --- /dev/null +++ b/specs/modelsold/governance/proposal.v @@ -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 +} diff --git a/specs/modelsold/legal/contract.v b/specs/modelsold/legal/contract.v new file mode 100644 index 0000000..227bca1 --- /dev/null +++ b/specs/modelsold/legal/contract.v @@ -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 +} diff --git a/specs/models/mcc/README.md b/specs/modelsold/mcc/README.md similarity index 100% rename from specs/models/mcc/README.md rename to specs/modelsold/mcc/README.md diff --git a/specs/models/mcc/calendar.v b/specs/modelsold/mcc/calendar.v similarity index 100% rename from specs/models/mcc/calendar.v rename to specs/modelsold/mcc/calendar.v diff --git a/specs/models/mcc/contacts.v b/specs/modelsold/mcc/contacts.v similarity index 100% rename from specs/models/mcc/contacts.v rename to specs/modelsold/mcc/contacts.v diff --git a/specs/models/mcc/message.v b/specs/modelsold/mcc/message.v similarity index 100% rename from specs/models/mcc/message.v rename to specs/modelsold/mcc/message.v diff --git a/specs/modelsold/projects/base.v b/specs/modelsold/projects/base.v new file mode 100644 index 0000000..0f231f1 --- /dev/null +++ b/specs/modelsold/projects/base.v @@ -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 +} \ No newline at end of file diff --git a/specs/modelsold/projects/epic.v b/specs/modelsold/projects/epic.v new file mode 100644 index 0000000..e1450d9 --- /dev/null +++ b/specs/modelsold/projects/epic.v @@ -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) +} \ No newline at end of file diff --git a/specs/models/projects/issue.v b/specs/modelsold/projects/issue.v similarity index 100% rename from specs/models/projects/issue.v rename to specs/modelsold/projects/issue.v diff --git a/specs/models/projects/kanban.v b/specs/modelsold/projects/kanban.v similarity index 100% rename from specs/models/projects/kanban.v rename to specs/modelsold/projects/kanban.v diff --git a/specs/modelsold/projects/sprint.v b/specs/modelsold/projects/sprint.v new file mode 100644 index 0000000..c0376b3 --- /dev/null +++ b/specs/modelsold/projects/sprint.v @@ -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 +} \ No newline at end of file diff --git a/specs/models/projects/story.v b/specs/modelsold/projects/story.v similarity index 100% rename from specs/models/projects/story.v rename to specs/modelsold/projects/story.v diff --git a/specs/models/ticket/ticket.v b/specs/modelsold/ticket/ticket.v similarity index 100% rename from specs/models/ticket/ticket.v rename to specs/modelsold/ticket/ticket.v diff --git a/specs/models/ticket/ticket_comment.v b/specs/modelsold/ticket/ticket_comment.v similarity index 100% rename from specs/models/ticket/ticket_comment.v rename to specs/modelsold/ticket/ticket_comment.v diff --git a/specs/models/ticket/ticket_enums.v b/specs/modelsold/ticket/ticket_enums.v similarity index 100% rename from specs/models/ticket/ticket_enums.v rename to specs/modelsold/ticket/ticket_enums.v diff --git a/specs/models/user.v b/specs/modelsold/user.v similarity index 100% rename from specs/models/user.v rename to specs/modelsold/user.v