Cerrar

menu-img-alt vale-wave
Imagem de header interno Imagem de header interno
Corruption is a crime and fighting this illegal practice is still a global challenge. International Anti-Corruption Day is held every year on December 9 to raise awareness of the importance of fighting corruption as part of efforts to build a build a fairer and more equal society.

We spoke to some of our leaders about our company’s anti-corruption commitment. Read on to see what we have been doing about this issue. 

How is the commitment to fighting corruption linked to our company’s strategy?

This connection starts when we think about what is behind our strategy. We want to build a better Vale. We want to be a leader in creating and sharing value, not only with our investors but the whole of society. All this requires us to take responsibility in the fight against corruption. Our commitment to fighting corruption is part of our ethical principles and also our ESG [environmental, social and governance] agenda. Through more and more transparency and solid governance, we are contributing to this global agenda, which matters to each of us as citizens.”

José Luciano Duarte Penido
Vale's Chairman

Does fighting corruption also mean putting our purpose into practice?

Without a doubt. How are we going to transform the future if we don’t fight a crime that diverts resources that could otherwise be used to improve the health, safety and education of our society? This is our basic commitment and it cannot be otherwise. When we act with integrity, we cannot tolerate any unfair way of doing business. At our company, there is no room for any kind of corruption or bribery. This depends on each one of us, starting with leaders, who must set an example. We must always put ethics, our values and our purpose into practice in every decision we make.” 

Eduardo Bartolomeo
Vale's CEO

In 2022, we saw many cases of corruption, some involving companies in the mining sector. How is our company evolving in managing this risk?

Fighting corruption is one of the challenges that guides our Ethics & Compliance Program. Since the program was launched in March 2021, we have made significant progress in managing the risk of corruption. We have implemented new controls and tests and we are automating some deviation detection processes. All of this is about compliance, enforcing the rules. However, we believe there is something bigger than that: ethics. Fighting corruption depends on the individual behavior of everyone who makes up Vale. That is why we are also investing in communication actions and training on this topic, such as the Anti-Corruption Course that we launched this year during Ethics Week. We need to be trained and aligned with the values of our company. That is how we will make decisions ethically and responsibly to fight against corruption.”

Denis Cuenca
Vale’s Chief Audit and Compliance Officer
Se ha producido un error al procesar la plantilla.
Syntax error in template "44549#44620#460359" in line 28, column 59:
Naming convention mismatch. Identifiers that are part of the template language (not the user specified ones) must consistently use the same naming convention within the same template. This template uses legacy naming convention (directive (tag) names are like examplename, everything else is like example_name) estabilished by auto-detection at line 28, column 45 by token "has_content", but the problematic token, "newsTopicCategory", uses a different convention.
1<#assign 
2    images_path = "/documents/d/guest/" 
3    namespace = "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_" + stringUtil.randomId() 
4/> 
5 
6<#attempt> 
7	<#assign newsTopicVocabularyId = 64872 /> 
8<#recover> 
9	<#assign newsTopicVocabularyId = 0 /> 
10</#attempt> 
11 
12<#function getDisplayPageUrl asset> 
13    <#local 
14        assetRenderer = asset.getAssetRenderer() 
15        baseViewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, asset, !stringUtil.equals(assetLinkBehavior, "showFullContent"))?split("?")?first?split("/-/")?first 
16    /> 
17    <#return baseViewURL?replace(themeDisplay.getURLPortal(), "")/> 
18</#function> 
19 
20<#function getCategoryFilterEndpoint asset> 
21	  <#attempt> 
22   <!-- <#local 
23        newsTopicCategory = asset.getCategories()?filter(category -> category.getVocabularyId() == newsTopicVocabularyId)?first 
24        newsTopicCategoryId = newsTopicCategory.getCategoryId() 
25    /> --> 
26			<#local 
27    newsTopicCategory = asset.getCategories()?filter(category -> category.getVocabularyId() == newsTopicVocabularyId)?first!null 
28    newsTopicCategoryId = newsTopicCategory?has_content ? newsTopicCategory.getCategoryId() : null 
29    /> 
30		<#recover> 
31			<#assign newsTopicCategoryId = 0 /> 
32		</#attempt> 
33    <#return  "/-/categories/" + newsTopicCategoryId /> 
34</#function> 
35 
36<#function getDDMFormFieldsValue DDMFormFieldsReferencesMap DDMFormFieldValuesMap fieldReference> 
37    <#local field = DDMFormFieldsReferencesMap[fieldReference].name /> 
38    <#return DDMFormFieldValuesMap[field][0].getValue().getString(locale)!"" /> 
39</#function> 
40 
41<#function getCustomDisplayPageDataAttr customDisplayPageJson categoryFilterEndpoint> 
42    <#local 
43        groupId = customDisplayPageJson.getLong("groupId") 
44        uuid = customDisplayPageJson.getString("id") 
45        privateLayout = customDisplayPageJson.getBoolean("privateLayout") 
46    /> 
47    <#local customDisplayPageDataAttr> 
48        data-vale-custom-display-page='{"groupId":${groupId},"uuid":"${uuid}","privateLayout":${privateLayout?c}}' 
49        data-vale-category-endpoint=${categoryFilterEndpoint} 
50    </#local> 
51    <#return customDisplayPageDataAttr/> 
52</#function> 
53 
54<section class="vale-widget-noticias-relacionadas bg-verde-vale" id="vale-widget-noticias-relacionadas-${namespace}"> 
55    <div class="fragment-container overflow-hidden"> 
56        <div class="container"> 
57            <div class="titulo d-flex justify-content-between mt-7 mb-5"> 
58                <h2 class="text-amarelo-vale"> 
59			            <@liferay.language key="related-news" /> 
60                </h2> 
61                <div class="d-none d-md-flex align-self-center justify-content-end"> 
62                    <img 
63                        class="${namespace} carrossel-card-branco-categoria-button-prev btn btn-primary border-amarelo-vale bg-amarelo-vale mr-3 p-1 rounded-circle" 
64                        src="${images_path}seta-2-esq_bra" 
65                        alt="button-prev" 
66												loading="lazy" 
67                    /> 
68                    <img 
69                        class="${namespace} carrossel-card-branco-categoria-button-next btn btn-primary border-amarelo-vale bg-amarelo-vale p-1 rounded-circle" 
70                        src="${images_path}seta-2-dir_bra" 
71                        alt="button-next" 
72												loading="lazy" 
73                    /> 
74                </div> 
75            </div> 
76            <div class="swiper ${namespace} carrossel-card-branco-categoria"> 
77                <div class="swiper-wrapper mb-sm-6"> 
78                    <#if entries?has_content> 
79                        <#list entries as curEntry> 
80                            <#assign 
81                                assetRenderer = curEntry.getAssetRenderer() 
82                                article = assetRenderer.getArticle() 
83 
84                                categoryFilterEndpoint = getCategoryFilterEndpoint(curEntry) 
85 
86                                DDMFormFieldValuesMap = assetRenderer.getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValuesMap() 
87                                DDMFormFieldsReferencesMap = assetRenderer.article.DDMStructure.DDMForm.getDDMFormFieldsReferencesMap(true) 
88 
89                                customDisplayPageJsonString = getDDMFormFieldsValue(DDMFormFieldsReferencesMap, DDMFormFieldValuesMap, "customDisplayPage") 
90                                customDisplayPageJson = jsonFactoryUtil.createJSONObject(customDisplayPageJsonString) 
91 
92                                hasCustomDisplayPage = customDisplayPageJson.getString("groupId")?has_content 
93                                customDisplayPageDataAttr = hasCustomDisplayPage?then( 
94                                    getCustomDisplayPageDataAttr(customDisplayPageJson, categoryFilterEndpoint), "") 
95 
96                                displayPageUrl = getDisplayPageUrl(curEntry) + categoryFilterEndpoint 
97                            /> 
98                            <div class="swiper-slide"> 
99                            <a href="${displayPageUrl}" class="text-decoration-none" ${customDisplayPageDataAttr}> 
100                                <div class="box d-flex flex-column justify-content-between p-3"> 
101                                    <div> 
102                                        <p class="text-amarelo-vale mb-2"> 
103                                            <#assign categories = curEntry.getCategories() /> 
104                                            <#list categories as category> 
105                                                <#if category.vocabularyId == newsTopicVocabularyId> 
106                                                    ${category.name} 
107                                                    <#break> 
108                                                </#if> 
109                                            </#list> 
110                                        </p> 
111                                        <p class="text-verde-aqua"> 
112                                            ${curEntry.getTitle(locale)} 
113                                        </p> 
114                                    </div> 
115                                    <p class="text-cinza-escuro m-0"> 
116                                        <#assign dataField = DDMFormFieldsReferencesMap['data'].name /> 
117                                        <#assign data = DDMFormFieldValuesMap[dataField][0].getValue().getString(locale) /> 
118                                        <#assign date_localized = dateUtil.formatDate("yyyy-MM-dd", data, locale)/> 
119 
120                                        ${date_localized} 
121                                    </p> 
122                                    <img 
123                                        class="onda position-absolute" 
124                                        src="${images_path}onda_verde" 
125																				loading="lazy" 
126                                    /> 
127                                </div> 
128                            </a> 
129                            </div> 
130                        </#list> 
131                    </#if> 
132                </div> 
133            </div> 
134            <a  
135                class="bg-amarelo-vale border-amarelo-vale btn btn-nm btn-primary mb-6"  
136                href="${(locale == 'pt_BR')?then('/todas-as-noticias','/all-then-news')}"  
137                target="_blank" 
138
139                <@liferay.language key="access-all-news" /> 
140            </a> 
141        </div> 
142    </div> 
143</section> 
144 
145<style> 
146.vale-widget-noticias-relacionadas .onda { 
147    position: absolute; 
148    bottom: 1.875rem; 
149    right: -0.125rem; 
150
151 
152.vale-widget-noticias-relacionadas .box { 
153    background-color: var(--branco); 
154    border-left: 10px solid var(--amarelo-vale); 
155    height: 14.6875rem; 
156    margin-bottom: 2rem; 
157
158 
159.vale-widget-noticias-relacionadas p { 
160    display: -webkit-box;  
161    line-clamp: 4; 
162    overflow: hidden; 
163    -webkit-line-clamp: 4; 
164    -webkit-box-orient: vertical; 
165
166 
167@media screen and (min-width: 768px) { 
168    .vale-widget-noticias-relacionadas .box { 
169        border-left: 20px solid var(--amarelo-vale); 
170        height: 11.875rem; 
171
172 
173    .vale-widget-noticias-relacionadas p { 
174        line-clamp: 3; 
175        -webkit-line-clamp: 3; 
176
177
178 
179.vale-widget-noticias-relacionadas .container { 
180    overflow: visible; 
181
182 
183.vale-widget-noticias-relacionadas .swiper { 
184    overflow: visible; 
185
186 
187.vale-widget-noticias-relacionadas .swiper-slide { 
188    width: auto; 
189
190 
191</style> 
192 
193<script> 
194(function(){ 
195 
196var swiper = new Swiper(".${namespace}.carrossel-card-branco-categoria", { 
197    slidesPerView: 1, 
198    spaceBetween: 32, 
199    navigation: { 
200      nextEl: ".${namespace}.carrossel-card-branco-categoria-button-next", 
201      prevEl: ".${namespace}.carrossel-card-branco-categoria-button-prev", 
202      disabledClass: "disabled", 
203      navigationDisabledClass: "disabled", 
204    }, 
205    pagination: { 
206      clickable: true, 
207    }, 
208    slideClass: "swiper-slide", 
209    breakpoints: { 
210        768: { 
211            slidesPerView: 2, 
212        }, 
213        1024: { 
214            slidesPerView: 3, 
215        }, 
216    }, 
217}); 
218 
219  // Tagueamento 
220 
221    const namespace = document.querySelector("#vale-widget-noticias-relacionadas-${namespace}"); 
222 
223    const section = namespace.querySelector("h2").innerText; 
224 
225    const links =  namespace.querySelectorAll("a"); 
226 
227    const handleEventLinkClick = (title, href) => { 
228      Analytics.track("Link", { 
229          section: section, 
230          rotulo: title + " : " + href, 
231      }); 
232    }; 
233 
234    links.forEach(link => { 
235      const text = link.querySelector('p.text-verde-vale'); 
236      const title = text ? text.innerText : ''; 
237      link.addEventListener("click", () => handleEventLinkClick(title, link.href)) 
238    }) 
239 
240    // Configurar URL de página de exibição dinâmica 
241    const displayPageUrls = namespace.querySelectorAll('a[data-vale-custom-display-page]'); 
242    displayPageUrls.forEach(displayPageUrl => { 
243        const customDisplayPage = displayPageUrl.dataset["valeCustomDisplayPage"]; 
244        const categoryEndpoint = displayPageUrl.dataset["valeCategoryEndpoint"]; 
245        Liferay.Service( 
246            '/layout/get-layout-by-uuid-and-group-id', 
247            JSON.parse(customDisplayPage), 
248            layout => { 
249                const friendlyURL = layout["friendlyURL"]; 
250                if (friendlyURL) { 
251                    displayPageUrl.href = friendlyURL + categoryEndpoint; 
252
253
254        ); 
255    }) 
256})() 
257 
258</script> 
Lupa de pesquisa

Não encontrou o que buscava? Acesse nossa Central de Busca