Salud de gráficos

import json
from pathlib import Path

DATA_PATH = Path("data/graphs-health.json")
records = json.loads(DATA_PATH.read_text(encoding="utf-8"))

rows = []
for item in records:
    code = item["code"]
    png_rel = item.get("png")
    png_path = None
    if png_rel:
        png_path = Path("assets/graficos/v0_4_13") / Path(png_rel).name

    def summarize(entries):
        if not entries:
            return "—", False
        parts = []
        status = True
        for entry in entries:
            exists = entry.get("exists", False)
            status = status and exists
            icon = "✅" if exists else "⚠️"
            parts.append(f"{icon} `{entry['path']}`")
        return "<br>".join(parts), status

    raw_txt, raw_ok = summarize(item.get("raw"))
    processed_txt, processed_ok = summarize(item.get("processed"))
    status_icon = "🟢" if (raw_ok and processed_ok) else "🟡"

    rows.append(
        {
            "code": code,
            "status": status_icon,
            "png_path": png_path,
            "raw": raw_txt,
            "processed": processed_txt,
        }
    )

rows
[{'code': 'G-0-1-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-0-1-1.png'),
  'raw': '✅ `data/ref/bcch/ipc_mensual.csv`<br>✅ `data/ref/bcch/ipc_expectativas_mensual.csv`',
  'processed': '✅ `data/ref/bcch/ipc_deflator_1990_2030.csv`'},
 {'code': 'G-0-1-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-0-1-2.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/clasificacion_economica/articles-45402_doc_xls_GG2.xlsx`',
  'processed': '✅ `data/bronze/dipres_estadisticas_clasificacion.csv`'},
 {'code': 'G-0-1-3',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-0-1-3.png'),
  'raw': '✅ `data/ref/bcch/pib_trimestral_nominal_2018.csv`',
  'processed': '✅ `data/ref/bcch/pib_trimestral_nominal_2018.csv`<br>✅ `data/ref/bcch/ipc_deflator_1990_2030.csv`'},
 {'code': 'G-1-1-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-1-1-1.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional1.xlsx`',
  'processed': '✅ `data/analytics/cofog_funcion_official.csv`'},
 {'code': 'G-1-1-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-1-1-2.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional1.xlsx`',
  'processed': '✅ `data/analytics/cofog_funcion_official.csv`'},
 {'code': 'G-1-2-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-1-2-1.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional1.xlsx`',
  'processed': '✅ `data/analytics/cofog_funcion_official.csv`'},
 {'code': 'G-1-2-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-1-2-2.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional1.xlsx`',
  'processed': '✅ `data/analytics/cofog_funcion_official.csv`'},
 {'code': 'G-1-3-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-1-3-1.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional1.xlsx`',
  'processed': '✅ `data/analytics/cofog_funcion_official.csv`'},
 {'code': 'G-1-3-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-1-3-2.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional1.xlsx`',
  'processed': '✅ `data/analytics/cofog_funcion_official.csv`'},
 {'code': 'G-1-4-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-1-4-1.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional1.xlsx`<br>✅ `data/ref/bcch/pib_trimestral_nominal_2018.csv`',
  'processed': '✅ `data/analytics/cofog_funcion_official.csv`<br>✅ `data/ref/bcch/pib_trimestral_nominal_2018.csv`<br>✅ `data/analytics/budget_metrics.csv.gz`'},
 {'code': 'G-10-3-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-10-3-1.png'),
  'raw': '✅ `data/raw/fiscalia/boletin_anual_2024.xls`',
  'processed': '✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`'},
 {'code': 'G-10-3-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-10-3-2.png'),
  'raw': '✅ `data/raw/fiscalia/boletin_anual_2024.xls`',
  'processed': '✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`'},
 {'code': 'G-10-3-3',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-10-3-3.png'),
  'raw': '✅ `data/raw/fiscalia/boletin_anual_2024.xls`',
  'processed': '✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`'},
 {'code': 'G-10-4-3',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-10-4-3.png'),
  'raw': '✅ `data/raw/fiscalia/boletin_anual_2024.xls`',
  'processed': '✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`'},
 {'code': 'G-10-4-4',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-10-4-4.png'),
  'raw': '✅ `data/raw/fiscalia/boletin_anual_2024.xls`',
  'processed': '✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`'},
 {'code': 'G-10-6-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-10-6-2.png'),
  'raw': '✅ `data/raw/fiscalia/boletin_anual_2024.xls`',
  'processed': '✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`'},
 {'code': 'G-10-7-3',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-10-7-3.png'),
  'raw': '✅ `data/raw/fiscalia/boletin_anual_2024.xls`',
  'processed': '✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`'},
 {'code': 'G-16-1-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-16-1-1.png'),
  'raw': '✅ `data/raw/enusc/bases/enusc_2008_2024_base_interanual.sav`<br>✅ `data/raw/ine_estadisticas_policiales/cch/2024/ine_estadisticas_policiales_cch_2024.xlsx`<br>✅ `data/raw/fiscalia/boletin_anual_2024.xls`<br>✅ `data/raw/gendarmeria_reportes_mensuales/S.Cerrado/s.cerrado_oct24.xlsx`',
  'processed': '✅ `data/analytics/enusc/enusc_victimization_series.csv`<br>✅ `data/silver/seguridad/seguridad_fuentes_qa.csv`<br>✅ `data/bronze/fiscalia_persecucion_penal/fiscalia_annual_totals.csv`<br>✅ `data/bronze/gendarmeria/gendarmeria_cerrado_poblacion.csv`'},
 {'code': 'G-2-2-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-2-2-1.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional2.xlsx`',
  'processed': '✅ `data/analytics/cofog_subfuncion_official.csv`'},
 {'code': 'G-2-3-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-2-3-1.png'),
  'raw': '✅ `data/raw/dipres/estadisticas_fiscales/cofog_gct/articles-45401_doc_xls_Funcional2.xlsx`',
  'processed': '✅ `data/analytics/cofog_subfuncion_official.csv`'},
 {'code': 'G-3-1-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-3-1-1.png'),
  'raw': '✅ `data/raw/dipres/ejecucion_total/2024/dipres_ejecucion_total_2024-diciembre_nacional_pesos.csv`',
  'processed': '✅ `data/analytics/budget_metrics.csv.gz`'},
 {'code': 'G-3-2-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-3-2-1.png'),
  'raw': '✅ `data/raw/dipres/ejecucion_total/2024/dipres_ejecucion_total_2024-diciembre_nacional_pesos.csv`',
  'processed': '✅ `data/analytics/budget_metrics.csv.gz`'},
 {'code': 'G-3-3-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-3-3-1.png'),
  'raw': '✅ `data/raw/dipres/ejecucion_total/2024/dipres_ejecucion_total_2024-diciembre_nacional_pesos.csv`',
  'processed': '✅ `data/analytics/budget_metrics.csv.gz`'},
 {'code': 'G-4-1-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-4-1-1.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-4-2-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-4-2-1.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-4-2-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-4-2-2.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-4-2-3',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-4-2-3.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-4-2-4',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-4-2-4.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-4-2-5',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-4-2-5.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-4-2-6',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-4-2-6.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-7-1-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-7-1-1.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-7-2-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-7-2-1.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-7-2-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-7-2-2.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-7-2-3',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-7-2-3.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-7-2-4',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-7-2-4.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-7-2-5',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-7-2-5.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-7-2-6',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-7-2-6.png'),
  'raw': '✅ `data/raw/oecd_cofog/OECD.SDD.NAD,DSD_NASEC10@DF_TABLE11,1.1+A.AUS+AUT+BEL+COL+CRI+CZE+DNK+EST+FIN+FRA+DEU+GRC+HUN+ISL+IRL+ISR+ITA+JPN+KOR+LVA+LTU+LUX+NLD+NOR+POL+PRT+SVK+SVN+ESP+SWE+CHE+GBR+USA+EA20+EU27_2020+BGR+HRV+ROU.S13...OTE..GF03+GF0301+GF0302+GF0303+GF0304+GF0305.csv`<br>✅ `data/raw/imf_cofog/dataset_2025-10-16T15_34_33.434677592Z_DEFAULT_INTEGRATION_IMF.STA_GFS_COFOG_11.0.0.csv`',
  'processed': '✅ `data/bronze/cofog_internacional_timeseries.csv`'},
 {'code': 'G-8-1-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-8-1-1.png'),
  'raw': '✅ `data/raw/enusc/bases/enusc_2008_2024_base_interanual.sav`',
  'processed': '✅ `data/bronze/enusc/enusc_2008_2024_interanual.parquet`'},
 {'code': 'G-8-1-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-8-1-2.png'),
  'raw': '✅ `data/raw/enusc/bases/enusc_2008_2024_base_interanual.sav`',
  'processed': '✅ `data/bronze/enusc/enusc_2008_2024_interanual.parquet`'},
 {'code': 'G-8-2-1',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-8-2-1.png'),
  'raw': '✅ `data/raw/enusc/bases/enusc_2008_2024_base_interanual.sav`',
  'processed': '✅ `data/bronze/enusc/enusc_2008_2024_interanual.parquet`'},
 {'code': 'G-8-2-2',
  'status': '🟢',
  'png_path': PosixPath('assets/graficos/v0_4_13/G-8-2-2.png'),
  'raw': '✅ `data/raw/enusc/bases/enusc_2008_2024_base_interanual.sav`',
  'processed': '✅ `data/bronze/enusc/enusc_2008_2024_interanual.parquet`'}]
from datetime import datetime, timezone
from IPython.display import Markdown

lines = [
    "| Código | Estado | Gráfico | Datos RAW | Outputs procesados |",
    "|---|:---:|---|---|---|",
]

for row in rows:
    code = row["code"]
    status = row["status"]
    link = "—"
    if row["png_path"]:
        link = f"[PNG]({row['png_path']})"
    lines.append(
        f"| {code} | {status} | {link} | {row['raw']} | {row['processed']} |"
    )

table_md = "\n".join(lines)
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC")
Markdown(table_md)
Markdown(f"_Última verificación:_ **{timestamp}**")

Última verificación: 2025-10-27 22:49 UTC

Cada fila valida que los archivos base (RAW) y los productos derivados (procesados) existan y tengan contenido. Usa los links de la columna “Gráfico” para abrir el PNG correspondiente.