-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreport.qmd
More file actions
127 lines (109 loc) · 4.47 KB
/
Copy pathreport.qmd
File metadata and controls
127 lines (109 loc) · 4.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
---
title: "Informe"
format:
html:
toc: true
page-layout: full
execute:
echo: false
warning: false
message: false
---
```{r}
source("R/page_helpers.R")
vf_load_packages()
layers <- vf_read_csv(c("data/processed/layers.csv", "assets/aemet/layers.csv"))
aemet_all <- vf_normalise_aemet_layers(layers)
aemet_latest <- vf_latest_aemet_layers(layers)
```
## Informe de generación
El informe resume los productos realmente publicados por el visor después de la limpieza de capas antiguas. Para AEMET se muestran únicamente las capas de la última emisión detectada.
```{r}
vf_kable(vf_status_table())
```
## Control de fechas AEMET
```{r}
if (nrow(aemet_latest) > 0) {
issue <- vf_safe_max_date(aemet_latest$issue_date)
valid_min <- vf_safe_min_date(aemet_latest$valid_date)
valid_max <- vf_safe_max_date(aemet_latest$valid_date)
info <- tibble::tibble(
campo = c("Última emisión", "Primera fecha válida", "Última fecha válida", "Regla"),
valor = c(
as.character(issue),
as.character(valid_min),
as.character(valid_max),
"D00 = Día 1 = fecha del fichero; D01 = fecha + 1; sin offset +1 adicional"
)
)
vf_kable(info)
} else {
knitr::asis_output("_No hay capas AEMET en el catálogo._\n")
}
```
```{r}
if (nrow(aemet_latest) > 0) {
by_area <- aemet_latest |>
dplyr::count(.data$area_label, .data$issue_date, .data$valid_date, .data$forecast_day, .data$forecast_label, name = "capas") |>
dplyr::arrange(.data$area_label, .data$valid_date, .data$forecast_day)
vf_kable(by_area, caption = "Fechas AEMET por área y horizonte")
}
```
## Comprobación de arrastre de capas antiguas
```{r}
if (nrow(aemet_all) > 0) {
all_issues <- aemet_all |>
dplyr::count(.data$issue_date, name = "capas_en_catalogo") |>
dplyr::arrange(dplyr::desc(.data$issue_date))
vf_kable(all_issues, caption = "Emisiones presentes en el catálogo")
if (nrow(all_issues) > 1) {
knitr::asis_output("\n::: {.callout-warning}\nEl catálogo contiene más de una fecha de emisión. El visor usa la última, pero conviene revisar la limpieza de `data/raw/aemet` y `assets/aemet`.\n:::\n")
} else {
knitr::asis_output("\n::: {.callout-note}\nEl catálogo contiene una única emisión AEMET. No se detecta arrastre de fechas antiguas en `layers.csv`.\n:::\n")
}
}
```
## FIRMS
```{r}
firms <- vf_read_csv(c("data/processed/firms_active_fires.csv", "data/processed/firms.csv", "assets/firms/firms_active_fires.csv"))
if (nrow(firms) > 0) {
date_candidates <- intersect(c("acq_date", "date", "datetime", "observed_at", "last_seen"), names(firms))
firms_summary <- tibble::tibble(
indicador = c("Detecciones", "Columnas", "Archivo"),
valor = c(nrow(firms), ncol(firms), attr(firms, "source_path") %||% "-")
)
vf_kable(firms_summary)
group_cols <- intersect(c("ccaa", "province", "admin_name", "admin_level", "source", "satellite"), names(firms))
if (length(group_cols) > 0) {
group_col <- group_cols[[1]]
firms_by_group <- firms |>
dplyr::count(.data[[group_col]], sort = TRUE, name = "detecciones") |>
utils::head(15)
names(firms_by_group)[1] <- group_col
vf_kable(firms_by_group, caption = paste("Detecciones FIRMS por", group_col))
}
} else {
knitr::asis_output("_No hay archivo FIRMS o no hay detecciones._\n")
}
```
## Alertas operativas
```{r}
alerts <- vf_read_csv(c("data/processed/operational_alerts.csv", "assets/alerts/operational_alerts.csv"))
if (nrow(alerts) > 0) {
alert_cols <- intersect(c("alert_id", "cluster_id", "ccaa", "province", "admin_name", "n_detections", "max_frp", "last_seen", "priority", "level"), names(alerts))
if (length(alert_cols) == 0) alert_cols <- names(alerts)[seq_len(min(10, ncol(alerts)))]
vf_kable(alerts |> dplyr::select(dplyr::all_of(alert_cols)) |> utils::head(30), caption = "Alertas publicadas")
} else {
knitr::asis_output("_No hay alertas operativas publicadas._\n")
}
```
## EFFIS
```{r}
effis <- vf_read_csv(c("data/processed/effis_layers.csv", "assets/effis/effis_layers.csv"))
if (nrow(effis) > 0) {
effis_cols <- intersect(c("layer", "label", "date", "base_url", "version", "format", "bbox", "url"), names(effis))
vf_kable(effis |> dplyr::select(dplyr::all_of(effis_cols)), caption = "Capas EFFIS publicadas")
} else {
knitr::asis_output("::: {.callout-note}\nEFFIS queda fuera del visor operativo hasta localizar una capa WMS actual con contenido visual. Los diagnósticos pueden seguir existiendo en `data/raw/effis`, pero no se publican capas históricas.\n:::\n")
}
```