Red de Política de Seguridad entre el Perú y sus países vecinos - Oficina en el Perú
The following has evaluated to null or missing: ==> data.meta [in template "252001#252047#252845" at line 459, column 10] ---- 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: #if data.meta.laufendenummer?has_cont... [in template "252001#252047#252845" at line 459, column 5] ----
1<#-- used @ Veranstaltung-Detailseite Intro
2 used @ Publikation-Detailseite Intro
3-->
4
5<#--
6Web content templates to display teaser on thema detail page
7
8Generic template for detail pages Intro / Teaser element
9-->
10<#--
11Display the current page title
12-->
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" />
14<#include "${fullTemplatesPath}/macros/debugging.ftl" />
15
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" />
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" />
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" />
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" />
20
21
22<#--
23 renders the Intro for nearly all Pages
24 TODO: remove Share? (was in the designs, but not anymore?)
25 TODO: check if languageSelect/filter are working (js)
26
27 - portletId
28 - data = {
29 "media": string (src from image),
30 "category": string,
31 "title": string,
32 "author": string,
33 "subheadline": string,
34 "copy": string,
35 "filter": {
36 "id": string,
37 "name": string,
38 "entries": Array<Object> ({key:value}),
39 },
40 "languageSelect": {
41 "id": string,
42 "name": string,
43 "entries": Array<Object> ({key:value}),
44 },
45 "meta": {
46 "pos"; string (top/bottom)
47 "date": string,
48 "hash": string,
49 "info": string, (url)
50 },
51 "share" : {
52 "login": string,
53 "print": string,
54 "mail": string,
55 "multishare": string?? (tbd)
56 }
57 - AMMetadata: macro
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content
59 }
60-->
61
62<#assign
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
64
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService")
67
68 themeDisplay = ServiceContext.getThemeDisplay()
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay)
70
71 languageId = themeDisplay.getLocale()
72 groupId = themeDisplay.getScopeGroupId()
73 currentUrl = themeDisplay.getURLCurrent()
74
75 layout = themeDisplay.getLayout()
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id")
77/>
78
79<#setting locale="${languageId}">
80
81<#-- get article from url -->
82
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! >
84
85
86<#if entry?has_content>
87
88 <#if entry.resourcePrimKey??>
89 <#assign primaryKey = entry.resourcePrimKey?number >
90 <#elseif entry.classPK??>
91 <#assign primaryKey = entry.classPK?number >
92 </#if>
93
94 <#assign
95 jsonString = FrontendService.article.getWebcontent(primaryKey)
96 json = FrontendService.json.parseAsJson(jsonString)
97
98 title = entry.getTitle(languageId)
99 data = {
100 "title": title
101 }
102 />
103 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" />
104
105 <#if hasContent('untertitel', languageId, json)>
106 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } >
107 </#if>
108
109 <#if hasContent('beschreibung', languageId, json)>
110 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } >
111 </#if>
112
113 <#-- fill meta data -->
114 <#assign meta = {} />
115
116 <#-- PUBLIKATIONEN DETAIL -->
117 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")>
118
119 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)>
120 <#assign
121 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first")
122 />
123
124 <#if coverBildString?has_content>
125 <#assign
126 coverBild = FrontendService.json.parseAsJson(coverBildString)
127 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale )
128 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid )
129 data = data + { "media": linkToDMT, "meta" : dMTJsonObject }
130 />
131 <#if dMTJsonObject.altText?? >
132 <#assign data = data + {"alt" : dMTJsonObject.altText} />
133 </#if>
134 <#if dMTJsonObject.quelle??>
135 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } />
136 </#if>
137 </#if>
138 <#-- uncomment to display pdf cover as Intro Image
139 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)>
140 <#assign
141 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first")
142 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/>
143 <#if fileEntry?has_content>
144 <#assign
145 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay)
146 data = data + { "media": linkToThumbnail }
147 />
148 </#if>
149 -->
150 </#if>
151
152 <#assign
153 meta = meta + { "orderInfo": "true" }
154 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!""
155 />
156
157
158
159 <#if hasContent('erscheinungsdatum', languageId, json)>
160 <#assign
161 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
162 />
163 <#if erscheinungsdatum?has_content >
164 <#assign
165 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId )
166 meta = meta + { "date": erscheinungsdatumFormatted }
167 />
168 </#if>
169 </#if>
170
171 <#if verbundJournalArticle?has_content>
172 <#assign
173 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey)
174 verbundJson = FrontendService.json.parseAsJson(verbundJsonString)
175 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first")
176 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first")
177 />
178 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" />
179 <#assign meta = meta + { "laufendenummer": laufendenummer } >
180
181 <#if coverImg?has_content && coverImg.url?has_content >
182 <#assign meta = meta + { "coverImg": coverImg.url } >
183 </#if>
184 </#if>
185
186
187 <#if meta?has_content>
188 <#assign data = data + {"meta": meta } >
189 </#if>
190
191 </#if>
192 <#-- PUBLIKATIONEN DETAIL END -->
193
194
195 <#-- VERANSTALTUNGEN DETAIL -->
196 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")>
197 <#assign
198 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!""
199 languages = entry.getAvailableLanguageIds()
200 links = []
201 />
202 <#if languages?has_content && friendlyUrl?has_content>
203 <#if (languages?size > 1) >
204 <#list languages as language>
205 <#assign
206 defaultLanguage = "de_DE"
207 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage)
208 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale
209 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId)
210
211 link = {
212 "key": language!defaultLanguage,
213 "value": linkLocale.getDisplayLanguage(languageId),
214 "url": "/c/portal/update_language?p_l_id=" +
215 layout.plid + "&redirect=" + langFriendlyUrl +
216 "&languageId=" + language
217 }
218 />
219 <#if language == languageId>
220 <#assign link = link + { "selected": "true" } >
221 </#if>
222 <#assign links = links + [link]>
223 </#list>
224 <#assign
225 data = data + {
226 "languageSelect": {
227 "id": "languageSelectRedirect",
228 "name": "languageselectRedirect",
229 "entries": links,
230 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar")
231 }
232 }
233 />
234 </#if>
235 </#if>
236 </#if>
237
238 <#if hasContent('erscheinungsdatum', languageId, json)>
239 <#assign
240 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
241 meta = meta + { "start": startdate?date.iso, "end": "" }
242 />
243 </#if>
244
245 <#if hasContent('startdatum', languageId, json)>
246 <#assign
247 startdate = getValueForLanguage('startdatum', languageId, json, "first")
248 meta = meta + { "start": startdate?date.iso, "end": "" }
249 />
250 </#if>
251
252 <#if hasValue('einfuehrungText', locale, json)>
253 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } >
254 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")>
255 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } >
256 </#if>
257
258 <#if hasContent('endedatum', languageId, json)>
259 <#assign
260 enddate = getValueForLanguage('endedatum', languageId, json, "first")
261 meta = meta + { "end": enddate?date.iso }
262 />
263 </#if>
264
265 <#if hasContent('startzeit', languageId, json)>
266 <#assign
267 startzeit = getValueForLanguage('startzeit', languageId, json, "first")
268 />
269 <#if startzeit?has_content >
270 <#assign meta = meta + { "startzeit": startzeit } />
271 </#if>
272 </#if>
273
274 <#if hasContent('endezeit', languageId, json)>
275 <#assign
276 endezeit = getValueForLanguage('endezeit', languageId, json, "first")
277 meta = meta + { "endezeit": endezeit }
278 />
279 </#if>
280
281 <#if hasContent('ortWCSKASDEORT', languageId, json)>
282 <#assign
283 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first"))
284 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number
285 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!""
286 />
287 <#if ortWCSKASDEORTWebContent?has_content >
288 <#assign
289 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!""
290 />
291 <#if ortWCSKASDEORTTitle?has_content >
292 <#assign
293 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle }
294 />
295 </#if>
296 </#if>
297 </#if>
298
299
300 <#if hasContent('veranstaltungsnummer', languageId, json)>
301 <#assign
302 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first")
303 meta = meta + { "verauuid": verauuid }
304 />
305 </#if>
306
307
308 <#if (data.meta)?has_content >
309 <#assign meta = data.meta />
310 </#if>
311
312 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)>
313 <#assign
314 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first")
315 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution")
316 />
317 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} >
318
319
320 <#if mediaData.meta?? && mediaData.meta.quelle??>
321 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } />
322 </#if>
323 </#if>
324
325
326 <#if meta?has_content>
327 <#assign data = data + {"meta": meta } >
328 </#if>
329
330 <#-- END fill meta data -->
331
332 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)>
333 <#assign
334 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json)
335 authors = []
336 />
337 <#list journalArticles as articleString>
338 <#assign article = FrontendService.json.parseAsJson(articleString) />
339 <#if article?has_content && article?is_hash && article.classPK??>
340 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" />
341 <#if articleDereferenced?has_content >
342 <#assign
343 author = ""
344 articlePrimaryKey = articleDereferenced.classPK?number
345 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey)
346 articleJson = FrontendService.json.parseAsJson(articleJsonString)
347 />
348 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" />
349 <#if hasValue('anredetitel', languageId, articleJson)>
350 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " ">
351 </#if>
352 <#if hasValue('vorname', languageId, articleJson)>
353 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " ">
354 </#if>
355 <#if hasValue('nachname', languageId, articleJson)>
356 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " ">
357 </#if>
358
359 <#attempt>
360 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" >
361 <#recover>
362 <#assign href = "#" >
363 </#attempt>
364 <#if href?has_content && href != "#" && href != "/_404">
365 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'>
366 </#if>
367
368 <#assign authors = authors + [author?trim]>
369 </#if>
370 </#if>
371 </#list>
372 <#if authors?has_content>
373 <#assign data = data + { "author": authors?join(", ") } >
374 </#if>
375 </#if>
376
377 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") >
378 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! >
379 <#if categories?has_content && categories[0]?has_content >
380 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
381 </#if>
382
383 <#if hasContent('ausgebucht', languageId, json)>
384 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }>
385 </#if>
386
387 <#if hasContent('storniert', languageId, json)>
388 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }>
389 </#if>
390
391 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") >
392 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! >
393 <#if categories?has_content && categories[0]?has_content >
394 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
395 </#if>
396 <#else>
397 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! >
398 <#if categories?has_content && categories[0]?has_content >
399 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
400 </#if>
401 </#if>
402
403
404 <#assign
405 languages = []
406 />
407
408 <#attempt>
409 <#if json["document_pdfDMTBASICDOCUMENT"]?? >
410 <#list json["document_pdfDMTBASICDOCUMENT"]?keys as pdf_language>
411 <#if pdf_language?has_content >
412 <#assign
413 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first")
414 docRef = FrontendService.json.parseAsJson(docRefJson)
415 />
416 <#if docRef?is_hash && pdf_language != languageId >
417 <#assign
418 lang = FrontendService.language.getLocaleByKey(pdf_language)!""
419 docGroupId = docRef["groupId"]?number
420 docUuid = docRef["uuid"]
421 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale )
422 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject )
423 />
424 <#if lang?has_content>
425 <#assign
426 languages = languages + [
427 {
428 "key": pdf_language,
429 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(),
430 "url": dMTLink
431 }]
432 />
433 </#if>
434 </#if>
435 </#if>
436 </#list>
437 </#if>
438 <#recover>
439 </#attempt>
440
441 <#if (languages?size > 0)>
442 <#attempt>
443 <#assign
444 data = data + { "languageSelect": {
445 "id": "languageSelect",
446 "name": "languageselect",
447 "entries": languages,
448 "documents": "",
449 "button": "true"
450 }}
451 />
452 <#recover>
453 </#attempt>
454 </#if>
455
456 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" />
457 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)}
458
459 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()>
460 <div>
461 <div id="publicationVerbundPagination">
462 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg />
463 </div>
464 </div>
465 </#if>
466
467<#elseif (editmode?? && editmode)>
468 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl />
469</#if>
A iniciativa del Instituto de Estudios Internacionales (IDEI) de la Pontificia Universidad Católica del Perú y de la Fundación Konrad Adenauer en el Perú, se creó en 2015, la Red de Política de Seguridad entre el Perú y sus países vecinos con diversos objetivos, tales como investigar con carácter multidisciplinario los temas de seguridad y defensa, ampliar el conocimiento de estas temáticas, establecer los problemas o amenazas a la seguridad que son comunes a la región, plantear propuestas de políticas públicas y soluciones a los problemas identificados, y aunar esfuerzos para buscar una mayor cooperación entre los países participantes, con el fin de construir progresivamente una comunidad de seguridad.
En este sentido, la red está conformada por especialistas y profesores de la PUCP, como también por académicos de la Universidad de Brasilia, la Universidad de Chile, la Universidad Mayor de San Andrés de Bolivia, la Pontificia Universidad Javeriana de Bogotá y el Instituto de Altos Estudios Nacionales del Ecuador; la integran:
- Antonio Ramalho y Juliano Cortinhas (Brasil)
- Jaime Baeza y María Cristina Escudero (Chile)
- Eduardo Pastrana y Diego Vera (Colombia)
- Diego Pérez (Ecuador)
- Fabián Novak y Sandra Namihas (Perú)
Eventos y publicaciones
La labor desplegada por esta red ha sido muy fructífera, en tanto se han realizado investigaciones, publicaciones y eventos públicos anuales, que han tenido una gran acogida por académicos y especialistas pero también por investigadores y el público en general. Así, en estos años se han trabajado:
2015 - Fortalecimiento de la Cooperación en Seguridad entre Bolivia, Brasil, Chile, Colombia, Ecuador y Perú. Léalo aquí.
2016 - El proceso de construcción de una comunidad en seguridad entre Bolivia, Brasil, Chile, Colombia, Ecuador y Perú. Léalo aquí.
2017 - La reconfiguración del fenómeno del narcotráfico en Bolivia, Brasil, Chile, Colombia, Ecuador y Perú. Léalo aquí.
2017 - Policy paper N° 1: La reconfiguración del fenómeno del narcotráfico. Léalo aquí.
2018 - El nuevo rol de las Fuerzas Armadas en Bolivia, Brasil, Chile, Colombia, Ecuador y Perú. Léalo aquí.
2018 - Policy Paper N° 2: El nuevo rol de las Fuerzas Armadas. Léalo aquí.
2019 - La región frente a los cambios globales en materia de seguridad. Léalo aquí.
2019 - Policy paper N° 3: La región frente a los cambios globales en materia de Seguridad. Léalo aquí.
2020 - Amenazas extrarregionales a la seguridad. Léalo aquí.
2021 - Policy paper N° 4: Las amenazas extrarregionales a la seguridad. Léalo aquí.
2022 - La presencia de China en la región sudamericana. Léalo aquí.
2022 - Policy paper N° 5: La presencia de China en la región sudamericana. Las implicancias en el campo de la seguridad. Léalo aquí.
2022 - Relaciones Civil-Militares en la Región Sudamericana. Reflexiones desde Bolivia, Brasil, Chile, Colombia, Ecuador y Perú. Léalo aquí.
2022 -Factores y tendencias que vienen afectando las relaciones civil-militares en la región desde la crisis generada por la pandemia en 2020. Conclusiones y recomendaciones. Léalo aquí.
2023 -Sudamérica ante las Disrupciones Geopolíticas Globales. Léalo aquí.
Diálogos de la Red de Política de Seguridad
En el marco de la pandemia los miembros de la red iniciaron encuentros periódicos para discutir sobre los impactos que la pandemia ha tenido sobre la situación de seguridad. Para el 2021 se planifican realizar sesiones bimestrales y compartir con el público interesado, a través de relatorías, las principales relfexiones de estas sesiones.
Relatoría de la sesión del 26.02.2021 - La pandemia y su afectación a la seguridad en Brasil, Chile, Colombia, Ecuador y Perú. Descargar PDF.
Relatoría de la sesión del 20.04.2021 - Presencia de bandas criminales y remanentes de las FARC en las zonas fronterizas. Descargar PDF.
Relatoría de la sesión del 03.08.2021 - Cambios políticos en la subregión y su impacto en la seguridad. Descargar PDF.
Relatoría de la sesión del 04.03.2022 - La crisis entre Rusia y Ucrania. Perspectiva regional, posicionamientos y posibles repercusiones. Descargar PDF.
Reporte de noticias - Seguridad en América
Todos los jueves invitamos al público a descubrir las principales noticias sobre la situación de la seguridad en América. Un reporte de noticias elaborado en coordinación con el Programa Regional Alianzas para la Democracia y el Desarrollo con América Latina, con el fin de busca difundir información y promover una reflexión a partir de la difusión de las principales novedades, con un enfoque especial en las noticias que impactan al Perú y sus países vecinos, en el marco de nuestro trabajo de la Red de Política de Seguridad.
Reporte de noticias 2023 - Seguridad en América aquí.
Reporte de noticias 2022 - Seguridad en América aquí.
Reporte de noticias 2021 - Seguridad en América (Archivo) aquí.
Suscripción al reporte de noticias aquí.