News

BBBEE for doing business in South Africa

Image
Image
"Those who won't be counselled can't be helped."
Benjamin Franklin
In 2003 the South African government introduced the Broad-Based Black Economic Empowerment Act 53 of 2003 (the BEE Act) in an attempt to address the inequalities suffered by black South African citizens as a result of the apartheid regime. 

The aim of BEE is to increase the participation of black people in the management, ownership and control of South Africa's economy by measuring the economic involvement of black people over a range of specified BEE elements. 

These elements are introduced through the BEE Act by the issuance of the Generic Codes of Good Practice. The generic codes were initially gazetted in February 2007 by the Minister of Trade and Industry and were amended in October 2013, coming into effect in May 2015. 

The BEE Act also makes provision for the issuance of sector-specific codes of good practice, such as the agricultural, financial, information and communication technology, property and tourism sector codes. These codes, rather than the generic codes, apply to the respective industries.

While the generic and sector codes (collectively the BEE Codes) typically do not place an enforceable legal obligation on entities to comply, certain direct and indirect incentives are put in place to promote compliance. 

Directly, if an entity wants to do business with the government or a parastatal, it would have to comply with the BEE Codes to ensure that licenses, quotas, tenders or other permissions are issued or awarded. 

Indirectly, an entity will be pressured into complying with the BEE Codes when other entities or the government have procurement policies in place that require their suppliers to hold a particular BEE status or level. There are, however, certain industry sectors where compliance is mandatory, such as the mining sector, where it is a legislative requirement for the relevant prospective mineral right holder to be BEE compliant before being able to obtain a mining right. 

In order to become BEE compliant, the relevant entity will have to be audited, either partially or fully, by a verification agency to determine its BEE status at that time. During the BEE verification process, the entity has to submit physical proof of activity, spending and contributions to the five elements of empowerment. 

These are:
  • Ownership
  • Management control
  • Skills development
  • Enterprise and supplier development 
  • Socio-economic development
An entity has to prove that:
  • Ownership is in the hands of black people.
  • There are black people in top, senior middle and junior management positions.
  • It made considerable contributions to skills development of black people.
  • It sourced its goods and/or services from BEE compliant suppliers.
  • It made contributions towards its employees, the employees' families as well as the surrounding communities. 
Each empowerment element has its own scorecard and measurement principles to ensure that the overall BEE targets are met. But the BEE Codes classify ownership, skills development, and enterprise and supplier development as priority elements. If the minimum thresholds in respect of these elements are not met, the entity will be penalised by the reduction of its BEE status by one level.

The BEE Codes further classify entities based on their annual turnover:
  • Entities with a turnover of less than ZAR10 million are regarded as an exempted micro enterprise (EME). 
  • Entities whose turnover is more than ZAR10 million, but less than ZAR50 million are regarded as qualifying small enterprises (QSE).
  • Entities with an annual turnover of more than ZAR50 million are regarded as large enterprises. 

While both QSEs and large enterprises need to have their BEE compliance measured in respect of all five elements, EMEs are automatically regarded as Level Four BEE contributors. 

Entities looking to do business in South Africa need to evaluate the relevance of BEE on their business and ensure compliance from the outset.


Error while rendering the view [Custom Container] Please, make sure the rendering is configured properly or contact your administrator.

  • System.Web.HttpUnhandledException (0x80004005): An unhandled exception occurred. ---> Sitecore.ContentSearch.Exceptions.IndexNotFoundException: Index (EMPTY) was not found
  • at Sitecore.ContentSearch.ContentSearchManager.GetIndex(String name)
  • at Sitecore.ContentSearch.Client.Pipelines.ParseDataSource.GetDataSourceItemByQuery.CreateSearchContext(ParseDataSourceArgs args)
  • at Sitecore.ContentSearch.Client.Pipelines.ParseDataSource.GetDataSourceItemByQuery.Process(ParseDataSourceArgs args)
  • at (Object , Object )
  • at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, Boolean failIfNotExists)
  • at Sitecore.Pipelines.ParseDataSource.ParseDataSourcePipeline.Run(BaseCorePipelineManager pipelineManager, Database database, String dataSource, Item relativeRootItem)
  • at Sitecore.Mvc.Data.ItemLocator.GetItemsFromDataSource(String dataSource, Item relativeRootItem)
  • at Sitecore.Mvc.Presentation.Rendering.GetStaticItem()
  • at Sitecore.Mvc.Presentation.Rendering.get_StaticItem()
  • at Sitecore.Mvc.Presentation.Rendering.get_Item()
  • at Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer.GetItemToRender(Rendering rendering, GetRendererArgs args)
  • at Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer.GetRenderer(Rendering rendering, GetRendererArgs args)
  • at Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer.Process(GetRendererArgs args)
  • at (Object , Object )
  • at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
  • at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](String pipelineName, TArgs args)
  • at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs,TResult](String pipelineName, TArgs args, Func`2 resultGetter)
  • at Sitecore.Mvc.Presentation.Rendering.GetRenderer()
  • at Sitecore.Mvc.Presentation.Rendering.get_Renderer()
  • at Sitecore.Mvc.Presentation.Rendering.ToString()
  • at Sitecore.Mvc.Pipelines.Response.RenderRendering.InitializeProfiling.StartProfiling(RenderRenderingArgs args)
  • at Sitecore.Mvc.Pipelines.Response.RenderRendering.InitializeProfiling.Process(RenderRenderingArgs args)
  • at (Object , Object )
  • at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
  • at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](String pipelineName, TArgs args)
  • at Sitecore.Mvc.Pipelines.Response.RenderPlaceholder.PerformRendering.Render(String placeholderName, TextWriter writer, RenderPlaceholderArgs args)
  • at (Object , Object )
  • at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
  • at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](String pipelineName, TArgs args)
  • at Sitecore.Mvc.Helpers.SitecoreHelper.RenderPlaceholderCore(String placeholderName, TextWriter writer)
  • at Sitecore.Mvc.Helpers.SitecoreHelper.Placeholder(String placeholderName)
  • at ASP._Page_Views_Container_CustomContainer_cshtml.Execute() in c:\home\site\wwwroot\Views\Container\CustomContainer.cshtml:line 18
  • at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
  • at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
  • at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
  • at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
  • at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
  • at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
  • at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
  • at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
  • at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
  • at Sitecore.Mvc.Pipelines.MvcEvents.Exception.ShowAspNetErrorMessage.ShowErrorMessage(ExceptionContext exceptionContext, ExceptionArgs args)
  • at Sitecore.Mvc.Pipelines.MvcEvents.Exception.ShowAspNetErrorMessage.Process(ExceptionArgs args)
  • at (Object , Object )
  • at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
  • at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
  • at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](String pipelineName, TArgs args)
  • at Sitecore.Mvc.Filters.PipelineBasedRequestFilter.OnException(ExceptionContext exceptionContext)
  • at System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList`1 filters, Exception exception)
  • at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
  • at System.Web.Mvc.Controller.ExecuteCore()
  • at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
  • at Sitecore.Mvc.Controllers.ControllerRunner.ExecuteController(Controller controller)
  • at Sitecore.Mvc.Controllers.ControllerRunner.Execute(TextWriter writer)
  • at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Render(Renderer renderer, TextWriter writer, RenderRenderingArgs args)
  • at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args)
  • at HL.Foundation.ExceptionHandling.ExceptionHandlining.GetExceptionSafeViewRenderer.Process(RenderRenderingArgs args)

View more insights and analysis

Register now to receive personalized content and more!