HOẠT ĐỘNG TỔ CHỨC TÍN DỤNG

“Banking is both a resource and an important driving force for the socio-economic development”

That is the opinion of Prime Minister Nguyen Xuan Phuc during his acknowledgements of the great contributions of the banking sector to the economic development in 2017 at the online conference setting orientations for the banking industry in 2018, which was held in the afternoon of January 9, 2018.

RESEARCH - DISCUSSION

Developing an integrated digital ecosystem connecting banking with other sectors

In the coming period, the banking sector will continue to implement cross-sectoral cooperation: integrating, connecting, and sharing information between the banking sector and other industries to expand the digital ecosystem and develop digital banking and payment services. This will help form an interconnected digital ecosystem, creating favorable conditions for people and businesses to access services quickly, safely, and effectively.

Cross-border payments: An inevitable trend in the context of international integration and digital transformation

To promote cross-border payment connectivity within the region and globally, and to meet the needs of individuals and businesses for fast, secure, and convenient transactions, it is necessary to establish a comprehensive legal framework, synchronized modern technical infrastructure, sustainable and secure payment technology platforms, and stronger inter-sectoral coordination and international cooperation.

Exchange rate 25,093.00 VND -94.00 (-0.37%)

An error occurred while processing the template.
The following has evaluated to null or missing:
==> article.getDisplayDate()  [in template "29795641980326#20120#139054" at line 24, column 21]

----
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: #assign dt = article.getDisplayDate()  [in template "29795641980326#20120#139054" at line 24, column 7]
----
1<#if entries?has_content> 
2 
3  <#-- Tạo mảng tạm để lưu entry kèm ngày --> 
4  <#assign sortedEntries = [] /> 
5 
6  <#list entries as entry> 
7    <#assign article = entry.getAssetRenderer().getArticle() /> 
8 
9    <#-- Lấy map các DDM field --> 
10    <#assign ddmMap = entry.getAssetRenderer() 
11                          .getDDMFormValuesReader() 
12                          .getDDMFormValues() 
13                          .getDDMFormFieldValuesMap() /> 
14 
15    <#-- Lấy ngày từ DDM field "Date48362898", fallback về ngày xuất bản --> 
16    <#assign rawDate = ""> 
17    <#if ddmMap?? && ddmMap["Date48362898"]?? && ddmMap["Date48362898"]?has_content> 
18      <#assign rawDate = ddmMap["Date48362898"][0].getValue().getString(locale)!"" > 
19    </#if> 
20 
21    <#if rawDate?has_content> 
22      <#assign dt = rawDate?date("yyyy-MM-dd") /> 
23    <#else> 
24      <#assign dt = article.getDisplayDate() /> 
25    </#if> 
26 
27    <#-- Thêm vào mảng sortedEntries --> 
28    <#assign sortedEntries = sortedEntries + [{ 
29      "entry": entry, 
30      "date": dt 
31    }] />   
32  </#list> 
33 
34  <#-- Sắp xếp entries theo ngày tăng dần --> 
35  <#assign entries = sortedEntries?sort_by("date")?map(item -> item.entry) /> 
36 
37  <#-- Nhóm theo quý, chỉ lấy bài mới nhất của mỗi quý --> 
38  <#assign quarterMap = {} /> 
39 
40  <#list entries as entry> 
41    <#-- Lấy ngày theo DDM logic --> 
42    <#assign ddmMap = entry.getAssetRenderer() 
43                          .getDDMFormValuesReader() 
44                          .getDDMFormValues() 
45                          .getDDMFormFieldValuesMap() /> 
46 
47    <#assign rawDate = ""> 
48    <#if ddmMap?? && ddmMap["Date48362898"]?? && ddmMap["Date48362898"]?has_content> 
49      <#assign rawDate = ddmMap["Date48362898"][0].getValue().getString(locale)!"" > 
50    </#if> 
51 
52    <#if rawDate?has_content> 
53      <#assign dt = rawDate?date("yyyy-MM-dd") /> 
54    <#else> 
55      <#assign dt = entry.getAssetRenderer().getArticle().getDisplayDate() /> 
56    </#if> 
57 
58    <#assign month = dt?string("M")?number /> 
59    <#assign year  = dt?string("yyyy") /> 
60 
61    <#if month <= 3> 
62      <#assign quarter = "I"> 
63    <#elseif month <= 6> 
64      <#assign quarter = "II"> 
65    <#elseif month <= 9> 
66      <#assign quarter = "III"> 
67    <#else> 
68      <#assign quarter = "IV"> 
69    </#if> 
70 
71    <#assign key = year + "-" + quarter /> 
72 
73    <#-- Nếu chưa có hoặc entry hiện tại mới hơn thì cập nhật --> 
74    <#if !quarterMap[key]?? || (dt?long > quarterMap[key].date?long)> 
75      <#assign quarterMap = quarterMap + { 
76        key: { 
77          "entry": entry, 
78          "date": dt 
79
80      } /> 
81    </#if> 
82  </#list> 
83 
84  <#-- Lấy entries sau khi nhóm theo quý, sort theo ngày tăng dần --> 
85  <#assign entries = quarterMap?values?sort_by("date")?map(item -> item.entry) /> 
86 
87  <#-- Chỉ lấy 4 quý mới nhất --> 
88  <#if entries?size gt 4> 
89    <#assign entries = entries[entries?size - 4 .. entries?size - 1] /> 
90  </#if> 
91 
92  <#-- Entry mới nhất (quý gần nhất) --> 
93  <#assign lastEntry = entries[entries?size - 1] /> 
94 
95  <#-- Lấy ngày theo DDM logic cho lastEntry --> 
96  <#assign ddmMap = lastEntry.getAssetRenderer() 
97                      .getDDMFormValuesReader() 
98                      .getDDMFormValues() 
99                      .getDDMFormFieldValuesMap() /> 
100 
101  <#assign rawDate = ""> 
102  <#if ddmMap?? && ddmMap["Date48362898"]?? && ddmMap["Date48362898"]?has_content> 
103      <#assign rawDate = ddmMap["Date48362898"][0].getValue().getString(locale)!"" > 
104  </#if> 
105 
106  <#if rawDate?has_content> 
107      <#assign dtLast = rawDate?date("yyyy-MM-dd") /> 
108  <#else> 
109      <#assign dtLast = lastEntry.getAssetRenderer().getArticle().getDisplayDate() /> 
110  </#if> 
111 
112  <#assign monthLast = dtLast?string("M")?number /> 
113  <#assign yearLast  = dtLast?string("yyyy") /> 
114 
115  <#if monthLast <= 3> 
116    <#assign quarterLast = "I"> 
117  <#elseif monthLast <= 6> 
118    <#assign quarterLast = "II"> 
119  <#elseif monthLast <= 9> 
120    <#assign quarterLast = "III"> 
121  <#else> 
122    <#assign quarterLast = "IV"> 
123  </#if> 
124 
125	<div class="max-[1170px]:w-[calc(100%/2-12px)] max-[768px]:w-[calc(100%/2-4px)] max-[768px]:p-2 max-[650px]:w-full max-[650px]:px-0 sbv-chart"> 
126				<#if currentURL?contains("/vi/")> 
127						<div class="flex flex-col space-y-[4px] mb-3"> 
128							<a href="/can-can-thanh-toan-quoc-te" class="text-[#000000] text-[20px] leading-[1.15] font-bold uppercase"> 
129                CÁN CÂN THANH TOÁN QUỐC TẾ 
130              </a> 
131							<span class="text-[var(--unnamed-color-000000)] leading-[21px] text-[16px]">QUÝ ${quarterLast} NĂM ${yearLast} (Triệu USD)</span> 
132						</div> 
133					<#else> 
134						<div class="flex flex-col space-y-[4px] mb-2"> 
135				       <a style="text-align: start" href="/can-can-thanh-toan-quoc-te" class="text-[#000000] text-[20px] leading-[1.15] font-bold uppercase"> 
136                 Balance of International Payment 
137                </a> 
138						    <span class="text-[var(--unnamed-color-000000)] leading-[21px] text-[16px]">QUARTER ${quarterLast} YEAR ${yearLast} (In million of USD)</span> 
139							</div> 
140					</#if> 
141            <div class="w-[370px] h-[270px] max-[1170px]:w-full max-[1170px]:h-[370px] bg-white p-1"> 
142              <!-- Bar chart would be rendered here --> 
143              <canvas id="statChart" width="400" height="300"></canvas> 
144            </div> 
145            <div class="text-end mt-2"> 
146              <span class="text-[#9D1B43] rounded-full flex justify-start items-center space-x-[6px]"> 
147								<#if currentURL?contains("/vi/")> 
148										<a  href="/can-can-thanh-toan-quoc-te" class="text-[#9D1B43] inline-block text-[14px] leading-[1.5] space-x-[6px]"> 
149									   Xem chi tiết <i class="fa-solid fa-caret-right"></i> 
150								   </a> 
151									<#else> 
152										<a  href="/can-can-thanh-toan-quoc-te" class="text-[#9D1B43] inline-block text-[14px] leading-[1.5] space-x-[6px]"> 
153									   Details <i class="fa-solid fa-caret-right"></i> 
154								  </a> 
155								</#if> 
156							 
157            </div> 
158          </div> 
159<style> 
160	.sbv-chart .text-end a{color: #9D1B43;} 
161	.sbv-chart .text-end a:hover{color: var(--btn-link-hover-color);} 
162</style> 
163<script> 
164// Khi DOM xong thì build chart 
165document.addEventListener("DOMContentLoaded", function() { 
166  // 3) Tạo mảng label: [ "QI/2024", "QII/2024", ... ] 
167const labels = [ 
168  <#list entries as curEntry> 
169 
170    <#-- Lấy ngày theo DDM logic --> 
171    <#assign ddmMap = curEntry.getAssetRenderer() 
172                              .getDDMFormValuesReader() 
173                              .getDDMFormValues() 
174                              .getDDMFormFieldValuesMap() /> 
175 
176    <#assign rawDate = ""> 
177    <#if ddmMap?? && ddmMap["Date48362898"]?? && ddmMap["Date48362898"]?has_content> 
178      <#assign rawDate = ddmMap["Date48362898"][0].getValue().getString(locale)!"" > 
179    </#if> 
180 
181    <#if rawDate?has_content> 
182      <#assign dt = rawDate?date("yyyy-MM-dd") /> 
183    <#else> 
184      <#assign dt = curEntry.getAssetRenderer().getArticle().getDisplayDate() /> 
185    </#if> 
186 
187    <#assign month = dt?string("M")?number /> 
188    <#assign year  = dt?string("yyyy") /> 
189 
190    <#if month <= 3> 
191      <#assign quarter = "I"> 
192    <#elseif month <= 6> 
193      <#assign quarter = "II"> 
194    <#elseif month <= 9> 
195      <#assign quarter = "III"> 
196    <#else> 
197      <#assign quarter = "IV"> 
198    </#if> 
199 
200    <#assign label = "Q" + quarter + "/" + year /> 
201 
202    "${label}"<#if curEntry_has_next>,</#if> 
203 
204  </#list> 
205]; 
206 
207 // Mỗi mảng số liệu build tách biệt: 
208const canCanVangLai = [ 
209  <#list entries as e> 
210    <#assign ddm = e.getAssetRenderer() 
211                    .getDDMFormValuesReader() 
212                    .getDDMFormValues() 
213                    .getDDMFormFieldValuesMap() /> 
214 
215    <#assign v = 0 /> 
216 
217    <#if ddm["canCanVangLai"]?has_content> 
218      <#assign raw = ddm["canCanVangLai"][0].getValue().getString(locale)!"" /> 
219 
220      <#if raw?has_content> 
221        <#-- xử lý format số nếu có dấu --> 
222        <#assign raw = raw?replace(",", ".") /> 
223        <#assign v = raw?number /> 
224      </#if> 
225    </#if> 
226 
227    ${v}<#if e_has_next>,</#if> 
228  </#list> 
229]; 
230 
231const canCanVon = [ 
232  <#list entries as e> 
233    <#assign ddm = e.getAssetRenderer() 
234                    .getDDMFormValuesReader() 
235                    .getDDMFormValues() 
236                    .getDDMFormFieldValuesMap() /> 
237 
238    <#assign v = 0 /> 
239 
240    <#if ddm["canCanVon"]?has_content> 
241      <#assign raw = ddm["canCanVon"][0].getValue().getString(locale)!"" /> 
242 
243      <#if raw?has_content> 
244        <#assign raw = raw?replace(",", ".") /> 
245        <#assign v = raw?number /> 
246      </#if> 
247    </#if> 
248 
249    ${v}<#if e_has_next>,</#if> 
250  </#list> 
251]; 
252  const canCanTaiChinh = [ 
253    <#list entries as e> 
254      <#assign ddm = e.getAssetRenderer() 
255                      .getDDMFormValuesReader() 
256                      .getDDMFormValues() 
257                      .getDDMFormFieldValuesMap() /> 
258      <#assign v = 0 /> 
259      <#if ddm["canCanTaiChinh"]?has_content> 
260        <#assign v = ddm["canCanTaiChinh"][0].getValue().getString(locale)?number /> 
261      </#if> 
262      ${v}<#if e_has_next>,</#if> 
263    </#list> 
264  ]; 
265 
266  const loiVaSaiSot = [ 
267    <#list entries as e> 
268      <#assign ddm = e.getAssetRenderer() 
269                      .getDDMFormValuesReader() 
270                      .getDDMFormValues() 
271                      .getDDMFormFieldValuesMap() /> 
272      <#assign v = 0 /> 
273      <#if ddm["loiVaSaiSot"]?has_content> 
274        <#assign v = ddm["loiVaSaiSot"][0].getValue().getString(locale)?number /> 
275      </#if> 
276      ${v}<#if e_has_next>,</#if> 
277    </#list> 
278  ]; 
279 
280  const canCanTongThe = [ 
281    <#list entries as e> 
282      <#assign ddm = e.getAssetRenderer() 
283                      .getDDMFormValuesReader() 
284                      .getDDMFormValues() 
285                      .getDDMFormFieldValuesMap() /> 
286      <#assign v = 0 /> 
287      <#if ddm["canCanTongThe"]?has_content> 
288        <#assign v = ddm["canCanTongThe"][0].getValue().getString(locale)?number /> 
289      </#if> 
290      ${v}<#if e_has_next>,</#if> 
291    </#list> 
292  ]; 
293 
294  const duTruLienQuan = [ 
295    <#list entries as e> 
296      <#assign ddm = e.getAssetRenderer() 
297                      .getDDMFormValuesReader() 
298                      .getDDMFormValues() 
299                      .getDDMFormFieldValuesMap() /> 
300      <#assign v = 0 /> 
301      <#if ddm["duTruVaCacHangMucLien"]?has_content> 
302        <#assign v = ddm["duTruVaCacHangMucLien"][0].getValue().getString(locale)?number /> 
303      </#if> 
304      ${v}<#if e_has_next>,</#if> 
305    </#list> 
306  ]; 
307 
308  // Vẽ chart 
309  const ctx = document.getElementById("statChart").getContext("2d"); 
310  new Chart(ctx, { 
311    type: "line", 
312    data: { 
313      labels: labels, 
314      datasets: [ 
315				<#if currentURL?contains("/vi/")> 
316			      { label: "Cán cân vãng lai",           data: canCanVangLai,    borderColor: "#6f42c1", pointBackgroundColor: "#6f42c1", fill: false, tension: 0.3, borderWidth: 1 }, 
317            { label: "Cán cân vốn",                data: canCanVon,        borderColor: "#fd7e14", pointBackgroundColor: "#fd7e14", fill: false, tension: 0.3, borderWidth: 1 }, 
318            { label: "Cán cân tài chính",          data: canCanTaiChinh,   borderColor: "#0d6efd", pointBackgroundColor: "#0d6efd", fill: false, tension: 0.3, borderWidth: 1 }, 
319            { label: "Lỗi và sai sót",             data: loiVaSaiSot,      borderColor: "#198754", pointBackgroundColor: "#198754", fill: false, tension: 0.3, borderWidth: 1 }, 
320            { label: "Cán cân tổng thể",           data: canCanTongThe,    borderColor: "#6610f2", pointBackgroundColor: "#6610f2", fill: false, tension: 0.3, borderWidth: 1 }, 
321            { label: "Dự trữ & hạng mục liên quan",data: duTruLienQuan,     borderColor: "#0dcaf0", pointBackgroundColor: "#0dcaf0", fill: false, tension: 0.3, borderWidth: 1 } 
322			  <#else> 
323				    { label: "Current Account",           data: canCanVangLai,    borderColor: "#6f42c1", pointBackgroundColor: "#6f42c1", fill: false, tension: 0.3, borderWidth: 1 }, 
324            { label: "Capital Account",                data: canCanVon,        borderColor: "#fd7e14", pointBackgroundColor: "#fd7e14", fill: false, tension: 0.3, borderWidth: 1 }, 
325            { label: "Financial account",          data: canCanTaiChinh,   borderColor: "#0d6efd", pointBackgroundColor: "#0d6efd", fill: false, tension: 0.3, borderWidth: 1 }, 
326            { label: "Net Errors and Omissions",             data: loiVaSaiSot,      borderColor: "#198754", pointBackgroundColor: "#198754", fill: false, tension: 0.3, borderWidth: 1 }, 
327            { label: "Overall balance",           data: canCanTongThe,    borderColor: "#6610f2", pointBackgroundColor: "#6610f2", fill: false, tension: 0.3, borderWidth: 1 }, 
328            { label: "Reserve and related items",data: duTruLienQuan,     borderColor: "#0dcaf0", pointBackgroundColor: "#0dcaf0", fill: false, tension: 0.3, borderWidth: 1 } 
329			 </#if> 
330        
331
332    }, 
333    options: { 
334      responsive: true, 
335      plugins: { 
336				tooltip: { 
337  callbacks: { 
338		title: function() { 
339      return []; 
340    }, 
341    label: function(context) { 
342      const label = context.dataset.label || ''; 
343      const time = context.label || ''; 
344      const value = context.formattedValue || ''; 
345 
346			<#if currentURL?contains("/vi/")> 
347			  return [ 
348          "Chỉ tiêu: " + label, 
349          "Thời gian: " + time, 
350          "Giá trị: " + value + " Triệu USD" 
351        ]; 
352			<#else> 
353				 return [ 
354           "Standard: " + label, 
355           "Time: " + time, 
356           "Value: " + value + " Million of USD" 
357         ]; 
358			</#if> 
359      
360
361
362}, 
363legend: { 
364  position: 'top', 
365  labels: { 
366    usePointStyle: true, 
367    pointStyle: 'circle', 
368    boxWidth: 5, 
369		boxHeight: 5, 
370    padding: 10, 
371		color: "#000000", 
372    font: { size: 10 }, 
373    generateLabels: function(chart) { 
374      const items = Chart.defaults.plugins.legend.labels.generateLabels(chart); 
375      // Group items thành mảng con 3 phần tử 
376      const grouped = []; 
377      for (let i = 0; i < items.length; i += 3) { 
378        grouped.push(items.slice(i, i + 3)); 
379
380      // Flatten lại nhưng thêm dấu xuống dòng vào cuối mỗi dòng (hack wrap) 
381      return grouped.flatMap((group, idx, arr) => { 
382        if (idx < arr.length - 1) { 
383          group[group.length - 1].text += '\n'; 
384
385        return group; 
386      }); 
387
388
389}, 
390        title: { 
391          display: false, 
392          text: "DỮ LIỆU THỐNG KÊ\nQUÝ III NĂM 2024 (Triệu USD)", 
393          font: { size: 16, weight: "bold" } 
394
395      }, 
396      scales: { 
397        x: { 
398					ticks: { 
399      color: '#000000' 
400    }, 
401          title: { display: true,  
402							<#if currentURL?contains("/vi/")> 
403			           text: "Thời gian: Quý/Năm",  
404			        <#else> 
405				          text: "Time: Quarter/Year",  
406			        </#if> 
407									align: 'end', 
408									color: "#000000", 
409									font: { weight: "bold" } } 
410        }, 
411        y: { 
412					ticks: { 
413      color: '#000000' 
414    }, 
415          title: {  
416									display: true,  
417							<#if currentURL?contains("/vi/")> 
418			            text: "Triệu USD", 
419			        <#else> 
420				          text: "Million of USD", 
421			        </#if> 
422									position: 'top', 
423									align: 'end', 
424						    color: "#000000", 
425									font: { weight: "bold" } }, 
426          beginAtZero: false 
427
428
429
430  }); 
431}); 
432</script> 
433	</#if>