package company import ( "tm/pkg/mongo" "go.mongodb.org/mongo-driver/v2/bson" ) // CompanyStatus represents company account status type CompanyStatus string const ( CompanyStatusActive CompanyStatus = "active" CompanyStatusInactive CompanyStatus = "inactive" CompanyStatusSuspended CompanyStatus = "suspended" ) // CompanyType represents the type of company type CompanyType string const ( CompanyTypePrivate CompanyType = "private" CompanyTypePublic CompanyType = "public" CompanyTypeGovernment CompanyType = "government" CompanyTypeNgo CompanyType = "ngo" CompanyTypeStartup CompanyType = "startup" ) // Company represents a company in the tender management system type Company struct { mongo.Model `bson:",inline"` Name string `bson:"name" json:"name"` Type CompanyType `bson:"type" json:"type"` Status CompanyStatus `bson:"status" json:"status"` RegistrationNumber string `bson:"registration_number" json:"registration_number"` TaxID string `bson:"tax_id" json:"tax_id"` Industry string `bson:"industry" json:"industry"` Description *string `bson:"description,omitempty" json:"description,omitempty"` Website *string `bson:"website,omitempty" json:"website,omitempty"` // Business information EmployeeCount *int `bson:"employee_count,omitempty" json:"employee_count,omitempty"` AnnualRevenue *float64 `bson:"annual_revenue,omitempty" json:"annual_revenue,omitempty"` FoundedYear *int `bson:"founded_year,omitempty" json:"founded_year,omitempty"` // Address information Address *Address `bson:"address,omitempty" json:"address,omitempty"` // Contact information Phone *string `bson:"phone,omitempty" json:"phone,omitempty"` Email *string `bson:"email,omitempty" json:"email,omitempty"` // Tags for categorization and search Tags *CompanyTags `bson:"tags,omitempty" json:"tags,omitempty"` // Verification and compliance IsVerified bool `bson:"is_verified" json:"is_verified"` IsCompliant bool `bson:"is_compliant" json:"is_compliant"` ComplianceNotes *string `bson:"compliance_notes,omitempty" json:"compliance_notes,omitempty"` // Settings Language string `bson:"language" json:"language"` // Default: "en" Currency string `bson:"currency" json:"currency"` // Default: "USD" Timezone string `bson:"timezone" json:"timezone"` // Default: "UTC" } // SetID sets the company ID (implements IDSetter interface) func (c *Company) SetID(id string) { c.ID, _ = bson.ObjectIDFromHex(id) } // GetID returns the company ID (implements IDGetter interface) func (c *Company) GetID() string { return c.ID.Hex() } // SetCreatedAt sets the created timestamp (implements Timestamp interface) func (c *Company) SetCreatedAt(timestamp int64) { c.CreatedAt = timestamp } // SetUpdatedAt sets the updated timestamp (implements Timestamp interface) func (c *Company) SetUpdatedAt(timestamp int64) { c.UpdatedAt = timestamp } // GetCreatedAt returns the created timestamp (implements Timestamp interface) func (c *Company) GetCreatedAt() int64 { return c.CreatedAt } // GetUpdatedAt returns the updated timestamp (implements Timestamp interface) func (c *Company) GetUpdatedAt() int64 { return c.UpdatedAt } // Address represents a company's address type Address struct { Street string `bson:"street" json:"street"` City string `bson:"city" json:"city"` State string `bson:"state" json:"state"` PostalCode string `bson:"postal_code" json:"postal_code"` Country string `bson:"country" json:"country"` } // CompanyTags represents tags for company categorization and search type CompanyTags struct { // CPV codes (Common Procurement Vocabulary) CPVCodes []string `bson:"cpv_codes,omitempty" json:"cpv_codes,omitempty"` // Categories Categories []string `bson:"categories,omitempty" json:"categories,omitempty"` // Keywords for search and matching Keywords []string `bson:"keywords,omitempty" json:"keywords,omitempty"` // Specializations Specializations []string `bson:"specializations,omitempty" json:"specializations,omitempty"` // Certifications Certifications []string `bson:"certifications,omitempty" json:"certifications,omitempty"` }