Fin

menu-img-alt vale-wave
Imagem de header interno Imagem de header interno
24/04/23

Business, Sustainability

Vale ships its first cargo of briquettes for international tests in blast furnace

Vale last week concluded the shipment of its first cargo of iron ore briquettes to be tested in a blast furnace outside of Brazil. The briquette is an innovative product that can reduce CO2 emissions from steelmaking by up to 10%. The industrial test will take place in early May at a client's facility in Europe. 8,000 tons of the product have been shipped from the Multi-load Terminal of the Port of Açu, in the state of Rio de Janeiro, Brazil, heading for the Port of Rotterdam in the Netherlands.

The briquette's behaviour during the trans-oceanic transportation, estimated to last 20 days, and its performance in the steel mill's blast furnace will be tested. In Brazil, 70,000 tons of briquette have already been industrially tested in six different blast furnaces, totalizing 126 days of use. 

During the tests carried out in Brazil, he briquette succeeded in attending the process requests, allowing the production and operational parameters of the blast furnace to be maintained. The same is expected to happen in the tests in Europe. 

"This is another important milestone on our path to providing low carbon emission solutions for the global steel industry. With the industrial tests we can gain the confidence of strategic partners who will be the leaders in the use of briquette in the coming years," said Rogério Nogueira, director of Product and Business Development at Vale. 

A pile of briquettes
A pile of briquettes. Credit: Por of Açu

For Port of Açu, the unprecedented movement is an important step to position the port enterprise as an important player in the decarbonization process of the steel sector. "This type of cargo reinforces the ambition of the Port of Açu to be the port of energy transition in Brazil. Furthermore, the port's strategy includes accelerating the decarbonization of the steel and chemical industries' value chains, sectors that are critical to reduce CO2 emissions coming from the so-called hard to abate," said José Firmo, CEO of Port of Açu.

The briquette is produced from the briquetting of iron ore fines and a technological solution of agglomerants that allows achieving high mechanical strength at low temperatures. The product can replace sinter, pellets and lump in blast furnaces and pellets in direct reduction furnaces, reducing the emission of pollutants and greenhouse gases when compared to traditional processes of iron ore agglomeration (pelletization and sintering). The substitution of the sintering stage is what allows the potential reduction of carbon emissions by up to 10%. 

The cargo shipped last week was produced at a demonstration plant in the state of São Paulo. Vale is building two briquette plants at its Tubarão Unit in Vitória, in the state of Espírito Santo, with capacity for 6mtpy. Start-up of the first plant is planned for the end of the first half of the year. 

In addition, memoranda of understanding have already been signed with more than 30 clients to study the implementation of decarbonization solutions, including the construction of briquette plants at the facilities of some clients. 

Announced by Vale in 2021, briquette contributes to achieving the company's commitment to reduce 15% of scope 3 net emissions by 2035. The company also seeks to reduce its absolute scope 1 and 2 emissions by 33% by 2030 and achieve neutrality by 2050, in line with the Paris Agreement ambition to limit global warming below 2°C by the end of the century.

Une erreur s'est produite lors du traitement du modèle.
The following has evaluated to null or missing:
==> restClient.get("/headless-admin-taxonomy/v1.0/sites/" + groupId + "/taxonomy-vocabularies?filter=name eq 'News topics' or name eq 'Temas de notícias'&fields=id&restricFields=actions,availableLanguages&page=1&pageSize=1").items  [in template "44549#44620#460359" at line 4, column 29]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

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

Did not find what you were looking for? Access our Search Center