package eform // ===================================================== // ORGANIZATION STRUCTURE // ===================================================== // Organization represents any party involved in the procurement type Organization struct { ID string `json:"id" xml:"id" validate:"required,orgIDFormat"` Roles []OrganizationRole `json:"roles" xml:"roles" validate:"required,min=1,dive"` LegalName string `json:"legal_name" xml:"legal_name" validate:"required,max=500"` LegalType *OrganizationType `json:"legal_type,omitempty" xml:"legal_type,omitempty"` RegistrationID string `json:"registration_id,omitempty" xml:"registration_id,omitempty"` VATNumber string `json:"vat_number,omitempty" xml:"vat_number,omitempty" validate:"omitempty,vatFormat"` NationalID string `json:"national_id,omitempty" xml:"national_id,omitempty"` Address Address `json:"address" xml:"address" validate:"required"` ContactPoint ContactPoint `json:"contact_point" xml:"contact_point" validate:"required"` BuyerProfile string `json:"buyer_profile,omitempty" xml:"buyer_profile,omitempty" validate:"omitempty,url"` ProcurementActivity *ActivityType `json:"procurement_activity,omitempty" xml:"procurement_activity,omitempty"` SME bool `json:"sme" xml:"sme"` } // OrganizationRole defines the role of an organization in the procurement type OrganizationRole string const ( RoleBuyer OrganizationRole = "buyer" RoleServiceProvider OrganizationRole = "service-provider" RoleTEDeSender OrganizationRole = "ted-esen" RoleWinner OrganizationRole = "winner" RoleSubcontractor OrganizationRole = "subcontractor" RoleReviewBody OrganizationRole = "review-body" RoleReviewOrg OrganizationRole = "review-org" RoleMediationBody OrganizationRole = "mediation-body" RoleLeadBuyer OrganizationRole = "lead-buyer" RoleCentralBuyer OrganizationRole = "central-buyer" RoleAcquirer OrganizationRole = "acquirer" ) // OrganizationType represents the legal type of organization type OrganizationType string const ( OrgTypeBodyPublicLaw OrganizationType = "body-pl" OrgTypeCentralGov OrganizationType = "cga" OrgTypeLocalAuthority OrganizationType = "la" OrgTypeSubsidized OrganizationType = "org-sub" OrgTypePublicUndertaking OrganizationType = "pub-undert" OrgTypeEUInstitution OrganizationType = "eu-ins-bod-ag" OrgTypeOther OrganizationType = "org-other" ) // ActivityType represents main procurement activity type ActivityType string const ( ActivityAuthority ActivityType = "auth-oth" ActivityDefence ActivityType = "def" ActivityEconomicAffairs ActivityType = "econ-aff" ActivityEducation ActivityType = "edu" ActivityEnvironment ActivityType = "env" ActivityGeneralPublic ActivityType = "gen-pub" ActivityHealth ActivityType = "health" ActivityHousingCommunity ActivityType = "hous-com" ActivityPublicOrderSafety ActivityType = "pub-os" ActivityRecreationCulture ActivityType = "rec-com" ActivitySocialProtection ActivityType = "soc-pro" ActivityWater ActivityType = "water" ActivityAirport ActivityType = "airport" ActivityElectricity ActivityType = "electricity" ActivityExplorationExtract ActivityType = "exploration-extraction" ActivityGasHeat ActivityType = "gas-heat" ActivityPort ActivityType = "port" ActivityPost ActivityType = "post" ActivityRailway ActivityType = "rail" ActivityUrbanRailway ActivityType = "urban-railway" ActivityWaterUtility ActivityType = "water" ) // Address represents physical address information type Address struct { StreetAddress string `json:"street_address" xml:"street_address" validate:"required,max=200"` Locality string `json:"locality" xml:"locality" validate:"required,max=100"` PostalCode string `json:"postal_code" xml:"postal_code" validate:"required,max=20"` CountrySubdivision string `json:"country_subdivision,omitempty" xml:"country_subdivision,omitempty" validate:"max=100"` CountryCode string `json:"country_code" xml:"country_code" validate:"required,iso3166_1_alpha2"` NUTSCodes []string `json:"nuts_codes,omitempty" xml:"nuts_codes,omitempty" validate:"dive,nutsCode"` } // ContactPoint represents contact information type ContactPoint struct { Name string `json:"name,omitempty" xml:"name,omitempty" validate:"max=200"` Email string `json:"email" xml:"email" validate:"required,email"` Telephone string `json:"telephone,omitempty" xml:"telephone,omitempty" validate:"max=30"` Fax string `json:"fax,omitempty" xml:"fax,omitempty" validate:"max=30"` URL string `json:"url,omitempty" xml:"url,omitempty" validate:"omitempty,url"` }