# coesione post passaggio a dataiku
#' Workflow per creare il dataset operazioni
workflow_operazioni_dataiku <- function(bimestre, progetti, operazioni_713, operazioni_1420, debug=FALSE) {
# MEMO:
# questa versione mantiene il calcolo delle risorse coesione direttamente nel flusso di Fabio per il sito
# cambia l'associazione al ciclo perché i psc sono programmi divisi su più cicli
# ----------------------------------------------------------------------------------- #
# loads
message("Entro in workflow operazioni")
po <- octk::po_riclass
operazioni_1420_raw <- operazioni_1420
operazioni_713_raw <- operazioni_713
# ----------------------------------------------------------------------------------- #
# prep
# progetti in programmi multi con ":::"
progetti_multi <- progetti %>%
filter(grepl(":::", OC_CODICE_PROGRAMMA)) %>%
select(COD_LOCALE_PROGETTO)
# progetti in programmi multi con ":::" in 2 programmi fsc
progetti_multi_fsc_1420 <- progetti %>%
# filter(grepl(":::", OC_CODICE_PROGRAMMA)) %>%
filter(OC_COD_FONTE == "FSC1420:::FSC1420") %>%
select(COD_LOCALE_PROGETTO)
# chk
# progetti %>%
# filter(OC_COD_FONTE %in% c("FS0713:::FSC0713", "FS0713:::PAC")) %>%
# group_by(OC_COD_FONTE, FONDO_COMUNITARIO) %>%
# summarise(N = n(),
# FSC = sum(OC_FINANZ_STATO_FSC_NETTO, na.rm = TRUE),
# PAC = sum(OC_FINANZ_STATO_PAC_NETTO, na.rm = TRUE),
# UE = sum(COSTO_RENDICONTABILE_UE, na.rm = TRUE),
# CP = sum(OC_FINANZ_TOT_PUB_NETTO, na.rm = TRUE))
# ----------------------------------------------------------------------------------- #
# variabili COE per 2014-2020
# chk
# operazioni_1420_raw %>% count(oc_cod_fonte, ue_descr_fondo)
# operazioni_1420_raw %>% count(oc_cod_fonte, ue_descr_fondo, CODICE_TIPOLOGIA_PROGRAMMA, STATO)
# oc_cod_fonte ue_descr_fondo n
# <chr> <chr> <int>
# 1 FS1420 "" 1 <- ? 2014IT16RFOP010 POR LAZIO FESR (da eliminare)
# 2 FS1420 FEAMP 6856
# 3 FS1420 FESR 58220
# 4 FS1420 FSE 304988
# 5 FS1420 IOG 195158
# 6 FS1420 PAC 25 <- ? SNAI
# 7 FSC1420 FSC 8435
# 8 PAC1420 PAC 858
# chk su ""
# chk <- operazioni_1420_raw %>% filter(ue_descr_fondo == "", STATO == 1)
# chk su STATO
# chk <- operazioni_1420_raw %>% filter(STATO == 2)
# 96 operazioni a giugno
# sum(chk$costo_ammesso_FSC, na.rm = TRUE)
# 6800000 > sono interamente riassorbiti da incremento via finanziamenti
# sum(chk$costo_rendicontabile_UE, na.rm = TRUE)
# 325273535
# chk su multi
# operazioni_1420_raw %>%
# rename(COD_LOCALE_PROGETTO = cod_locale_progetto) %>%
# left_join(progetti_multi %>%
# mutate(MULTI = TRUE),
# by = "COD_LOCALE_PROGETTO") %>%
# count(oc_cod_fonte, ue_descr_fondo, MULTI)
message("Preparazione dati 1420...")
# DEBUG: (post fix_operazioni_dataiku())
# operazioni_1420 %>% count(oc_cod_fonte, ue_descr_fondo)
# operazioni_1420 %>% filter(oc_cod_fonte == "NAZORD", ue_descr_fondo == "PAC") %>% count(OC_CODICE_PROGRAMMA, oc_descrizione_programma)
# operazioni_1420 %>% filter(oc_cod_fonte == "FS1420" & ue_descr_fondo == "NAZIONALE") %>% count(CODICE_TIPOLOGIA_PROGRAMMA)
# clean
operazioni_1420 <- operazioni_1420_raw %>%
rename(COD_LOCALE_PROGETTO = cod_locale_progetto,
OC_CODICE_PROGRAMMA = oc_cod_programma) %>%
# elimina duplicati anomali (solo per 1420)
filter(STATO == 1) %>%
# fix per anomalie (cambiano nei diversi bimestri ma sono abbastanza generiche)
fix_operazioni_dataiku(.) %>%
# mutate(ue_descr_fondo = case_when(ue_descr_fondo == "" & oc_cod_fonte == "FSC1420" ~ "FSC",
# ue_descr_fondo == "" & oc_cod_fonte == "PAC1420" ~ "PAC",
# ue_descr_fondo == "" & oc_cod_fonte == "FS1420" &
# PO_FONDO == "FESR" ~ "FESR",
# oc_cod_fonte == "FS1420" & ue_descr_fondo == "Y.E.I." ~ "IOG",
# TRUE ~ ue_descr_fondo)) %>%
# creo ambito
mutate(x_AMBITO = case_when(oc_cod_fonte == "FSC1420"& ue_descr_fondo == "PAC" ~ "SNAI", # AREEINTVVFF: STRATEGIA AREE INTERNE INCENDI BOSCHIVI
oc_cod_fonte == "NAZORD" & ue_descr_fondo == "PAC" ~ "SNAI", # programmi SNAI LdS
oc_cod_fonte == "FS1420" & ue_descr_fondo == "PAC" ~ "SNAI", # 2020PCDPCINA001: CONTRIBUTI AI COMUNI DELLE AREE INTERNE
oc_cod_fonte == "FS1420" & ue_descr_fondo == "IOG" ~ "YEI",
oc_cod_fonte == "FS1420" & ue_descr_fondo == "FESR" &
CODICE_TIPOLOGIA_PROGRAMMA == "CTE" ~ "CTE",
oc_cod_fonte == "FS1420" & ue_descr_fondo == "IPA" &
CODICE_TIPOLOGIA_PROGRAMMA == "CTE" ~ "CTE",
oc_cod_fonte == "FS1420" ~ ue_descr_fondo,
oc_cod_fonte == "FSC1420" ~ "FSC",
oc_cod_fonte == "PAC1420" ~ "POC",
oc_cod_fonte == "FSC2127" ~ "FSC",
oc_cod_fonte == "FSC0713" ~ "FSC",
oc_cod_fonte == "NAZORD" ~ "SNAI")) %>%
# articolazioni
mutate(x_COD_LIVELLO_0 = case_when(x_AMBITO == "FSC" & !is.na(psc_sezione) ~ psc_sezione,
TRUE ~ NA_character_),
x_DES_LIVELLO_0 = case_when(x_AMBITO == "FSC" & !is.na(psc_sezione) ~ psc_descr_sezione,
TRUE ~ NA_character_),
x_COD_LIVELLO_1 = case_when(x_AMBITO == "FESR" ~ ue_asse_prioritario,
x_AMBITO == "FSE" ~ ue_asse_prioritario,
x_AMBITO == "YEI" ~ ue_asse_prioritario,
x_AMBITO == "CTE" ~ ue_asse_prioritario,
x_AMBITO == "ENI" ~ ue_asse_prioritario,
x_AMBITO == "FSC" & !is.na(psc_sezione) ~ psc_area_tematica,
x_AMBITO == "FSC" & psc_sezione != "" ~ psc_area_tematica,
x_AMBITO == "FSC" ~ fsc_settore_strategico,
x_AMBITO == "POC" ~ pac_asse_tematico,
x_AMBITO == "SNAI" ~ pac_asse_tematico,
x_AMBITO == "FEASR" ~ cod_misura_feasr),
x_DES_LIVELLO_1 = case_when(x_AMBITO == "FESR" ~ ue_descr_asse_prioritario,
x_AMBITO == "FSE" ~ ue_descr_asse_prioritario,
x_AMBITO == "YEI" ~ ue_descr_asse_prioritario,
x_AMBITO == "CTE" ~ ue_descr_asse_prioritario,
x_AMBITO == "ENI" ~ ue_descr_asse_prioritario,
x_AMBITO == "FSC" & !is.na(psc_sezione) ~ psc_descr_area_tematica,
x_AMBITO == "FSC" & psc_sezione != "" ~ psc_descr_area_tematica,
x_AMBITO == "FSC" ~ fsc_descr_settore_strategico,
x_AMBITO == "POC" ~ pac_descr_asse_tematico,
x_AMBITO == "SNAI" ~ pac_descr_asse_tematico,
x_AMBITO == "FEASR" ~ descr_misura_feasr),
x_COD_LIVELLO_2 = case_when(x_AMBITO == "FESR" ~ ue_ob_specifico,
x_AMBITO == "FSE" ~ ue_ob_specifico,
x_AMBITO == "YEI" ~ ue_ob_specifico,
x_AMBITO == "CTE" ~ ue_ob_specifico,
x_AMBITO == "ENI" ~ ue_ob_specifico,
x_AMBITO == "FSC" & !is.na(psc_sezione) ~ psc_sett_interv,
x_AMBITO == "FSC" & psc_sezione != "" ~ psc_sett_interv,
x_AMBITO == "FSC" ~ fsc_asse_tematico,
x_AMBITO == "POC" ~ pac_lineazione,
x_AMBITO == "SNAI" ~ pac_lineazione,
x_AMBITO == "FEASR" ~ cod_submisura_feasr),
x_DES_LIVELLO_2 = case_when(x_AMBITO == "FESR" ~ ue_descr_ob_specifico,
x_AMBITO == "FSE" ~ ue_descr_ob_specifico,
x_AMBITO == "YEI" ~ ue_descr_ob_specifico,
x_AMBITO == "CTE" ~ ue_descr_ob_specifico,
x_AMBITO == "ENI" ~ ue_descr_ob_specifico,
x_AMBITO == "FSC" & !is.na(psc_sezione) ~ psc_descr_sett_interv,
x_AMBITO == "FSC" & psc_sezione != "" ~ psc_descr_sett_interv,
x_AMBITO == "FSC" ~ fsc_descr_asse_tematico,
x_AMBITO == "POC" ~ pac_descr_lineazione,
x_AMBITO == "SNAI" ~ pac_descr_lineazione,
x_AMBITO == "FEASR" ~ descr_submisura_feasr)) %>%
# variabili coesione
mutate(COS_AMM = oc_costo_coesione,
IMP_AMM = oc_impegni_coesione,
PAG_AMM = oc_tot_pagamenti_coesione)
# operazioni_1420 %>% count(x_AMBITO, oc_cod_fonte, ue_descr_fondo)
# operazioni_1420 %>% filter(oc_cod_fonte == "FSC0713") %>% count(OC_CODICE_PROGRAMMA)
chk <- operazioni_1420 %>%
count(x_AMBITO, oc_descrizione_programma,
x_COD_LIVELLO_0, x_DES_LIVELLO_0,
x_COD_LIVELLO_1, x_DES_LIVELLO_1,
x_COD_LIVELLO_2, x_DES_LIVELLO_2) %>%
filter(is.na(x_COD_LIVELLO_1))
# chk
operazioni_1420 %>%
count(x_AMBITO, oc_ambito)
# clean
operazioni_1420 <- operazioni_1420 %>%
select(COD_LOCALE_PROGETTO,
OC_CODICE_PROGRAMMA,
x_AMBITO,
COE = COS_AMM,
COE_IMP = IMP_AMM,
COE_PAG = PAG_AMM,
costo_ammesso_MZ, costo_ammesso_CN, #MEMO: presenti solo per SIE
imp_ammesso_MZ, imp_ammesso_CN, imp_trasf_ammesso_MZ, imp_trasf_ammesso_CN,
pag_ammesso_MZ, pag_ammesso_CN, pag_trasf_ammesso_MZ, pag_trasf_ammesso_CN,
x_COD_LIVELLO_0, x_DES_LIVELLO_0,
x_COD_LIVELLO_1, x_DES_LIVELLO_1,
x_COD_LIVELLO_2, x_DES_LIVELLO_2)
# ----------------------------------------------------------------------------------- #
# variabili COE per 2007-2013
# chk
# operazioni_713_raw %>% count(OC_COD_FONTE, QSN_FONDO_COMUNITARIO)
# OC_COD_FONTE QSN_FONDO_COMUNITARIO n
# <chr> <chr> <int>
# 1 FS0713 FESR 110693
# 2 FS0713 FSE 805181
# 3 FSC0713 "" 22530
# 4 FSC1420 "" 37 <- PIANO FSC DISSESTO IDROGEOLOGICO
# 5 PAC "" 25353
message("Preparazione dati 713...")
operazioni_713_raw <- operazioni_713_raw %>%
rename(COD_LOCALE_PROGETTO = cod_locale_progetto,
OC_COD_PROGRAMMA = oc_cod_programma)
chk <- operazioni_713_raw %>%
filter(OC_FLAG_PAC == 1) %>%
group_by(OC_COD_FONTE, QSN_FONDO_COMUNITARIO, ) %>%
summarise(N = n())
# MEMO: dovrebbe esserci anche 2007SA002FA016 ma ha flag OC_FLAG_PAC solo per un progetto...
# filter(OC_CODICE_PROGRAMMA %in% c("2007IT005FA
# FIX: duplicazione di programmi PAC-FSC (es. direttrici ferroviarie)
appo <- operazioni_713_raw %>%
# rename(COD_LOCALE_PROGETTO = cod_locale_progetto) %>%
# filter(OC_CODICE_PROGRAMMA %in% c("2007IT005FAMG1", "2007IT001FA005")) %>%
# filter(OC_COD_PROGRAMMA %in% c("2007IT005FAMG1", "2007IT001FA005")) %>%
filter(OC_COD_PROGRAMMA %in% c("2007IT005FAMG1", "2007IT001FA005", "2007SA002FA016")) %>%
# left_join(progetti %>%
# select(COD_LOCALE_PROGETTO, OC_FLAG_PAC),
# by = "COD_LOCALE_PROGETTO") %>%
filter(OC_FLAG_PAC == 1) %>%
# MEMO: OC_FLAG_PAC identifica i casi dove ci sono sia pagamenti FSC che PAC
# TODO: verifica se OC_FLAG_PAC in operazioni_flt_ok coincide con quello in progetti
# mutate(x_AMBITO = "POC:::FSC") %>%
mutate(x_AMBITO = "PAC:::FSC") %>%
separate_rows(x_AMBITO, sep = ":::") %>%
# ricalcolo variabili coe (sovrascive fabio)
fix_operazioni_713(.) %>%
# map per ambito
mutate(COS_AMM = case_when(x_AMBITO == "FSC" ~ 0,
x_AMBITO == "PAC" ~ 0,
TRUE ~ COSTO_RENDICONTABILE_UE),
IMP_AMM = 0,
PAG_AMM = case_when(x_AMBITO == "FSC" ~ OC_TOT_PAGAMENTI_FSC,
x_AMBITO == "PAC" ~ OC_TOT_PAGAMENTI_PAC,
TRUE ~ OC_TOT_PAGAMENTI_RENDICONTAB_UE)) %>%
# integra variabili da progetti (l'aggancio crea valori duplicati)
select(-TOT_PAGAMENTI) %>%
left_join(progetti %>%
select(COD_LOCALE_PROGETTO,
OC_FINANZ_TOT_PUB_NETTO, OC_FINANZ_STATO_FSC_NETTO=OC_FINANZ_Stato_FSC_NETTO, OC_FINANZ_STATO_PAC_NETTO=OC_FINANZ_Stato_PAC_NETTO,
FINANZ_TOTALE_PUBBLICO, FINANZ_STATO_FSC, FINANZ_STATO_PAC,
IMPEGNI, TOT_PAGAMENTI),
by = "COD_LOCALE_PROGETTO") %>%
mutate(COE = case_when(x_AMBITO == "FSC" ~ OC_FINANZ_STATO_FSC_NETTO,
x_AMBITO == "PAC" ~ OC_FINANZ_STATO_PAC_NETTO,
is.na(COS_AMM) ~ 0,
TRUE ~ COS_AMM),
# MEMO: qui sopra non sto facendo MAX tra FTP e FTPN (è una tecnica che uso solo per riproporzionare impegni)
# base_ftp = if_else(OC_FINANZ_TOT_PUB_NETTO > 0,
# OC_FINANZ_TOT_PUB_NETTO,
# FINANZ_TOTALE_PUBBLICO),
base_ftp = case_when(COS_AMM > OC_FINANZ_TOT_PUB_NETTO ~ COS_AMM, # FIX per x > 1
COE > OC_FINANZ_TOT_PUB_NETTO ~ COE, # FIX per x > 1 >>> CHK: FORSE E' ININFLUENTE
OC_FINANZ_TOT_PUB_NETTO > 0 ~ OC_FINANZ_TOT_PUB_NETTO,
TRUE ~ FINANZ_TOTALE_PUBBLICO),
base_coe = case_when(x_AMBITO == "FSC" & OC_FINANZ_TOT_PUB_NETTO > 0 ~ OC_FINANZ_STATO_FSC_NETTO,
x_AMBITO == "FSC" ~ FINANZ_STATO_FSC,
x_AMBITO == "PAC" & OC_FINANZ_TOT_PUB_NETTO > 0 ~ OC_FINANZ_STATO_PAC_NETTO,
x_AMBITO == "PAC" ~ FINANZ_STATO_PAC,
is.na(COS_AMM) ~ 0,
TRUE ~ COS_AMM), # per FS non posso considerare valore al netto di economie
x = base_coe/base_ftp,
# COE_PAG = PAG_AMM,
# fix per pagamenti FSC 0
PAG_AMM_2 = case_when(x == Inf ~ 0,
# fix per caso di uguaglianza completa (non riproporziona anche se CP_N > COE)
# round(TOT_PAGAMENTI, 0) == round(COE, 0) & round(IMPEGNI, 0) == round(COE, 0) ~ COE,
# fix per caso di uguaglianza di pagamenti comunque con impegni > COE (non riproporziona)
# round(TOT_PAGAMENTI, 0) == round(COE, 0) & round(IMPEGNI, 0) > round(COE, 0) ~ COE,
TOT_PAGAMENTI <= base_ftp ~ TOT_PAGAMENTI * x,
TOT_PAGAMENTI > base_ftp ~ base_ftp * x,
is.na(TOT_PAGAMENTI) ~ 0,
# is.na(COE) ~ 0, # CHK: capire se serve
TRUE ~ 0),
COE_PAG = case_when(x_AMBITO == "FSC" & PAG_AMM_2 > PAG_AMM ~ PAG_AMM_2,
x_AMBITO == "FSC" ~ PAG_AMM,
TRUE ~ PAG_AMM),
# MEMO: uso massimo valore per FSC
COE_IMP = case_when(x == Inf ~ 0,
# fix per caso di uguaglianza completa (non riproporziona anche se CP_N > COE)
round(COE_PAG, 0) == round(COE, 0) & round(IMPEGNI, 0) == round(COE, 0) ~ COE,
# fix per caso di uguaglianza di pagamenti comunque con impegni > COE (non riproporziona)
round(COE_PAG, 0) == round(COE, 0) & round(IMPEGNI, 0) > round(COE, 0) ~ COE,
IMPEGNI <= base_ftp ~ IMPEGNI * x,
IMPEGNI > base_ftp ~ base_ftp * x,
is.na(IMPEGNI) ~ 0,
is.na(COE) ~ 0, # CHK: capire se serve
TRUE ~ 0)) %>%
# DEBUG:
# appo1 <- appo %>% select(COD_LOCALE_PROGETTO, OC_COD_PROGRAMMA, x_AMBITO,
# OC_FINANZ_TOT_PUB_NETTO, OC_FINANZ_STATO_FSC_NETTO, OC_FINANZ_STATO_PAC_NETTO, oc_costo_coesione, COE,
# OC_TOT_PAGAMENTI_FSC, OC_TOT_PAGAMENTI_PAC, oc_tot_pagamenti_coesione, COE_PAG)
# write_csv2(appo1, file.path(TEMP, "chk_multi_fas_pac_713.csv"))
# map per ambito
mutate(oc_costo_coesione = COE,
oc_impegni_coesione = COE_IMP,
oc_tot_pagamenti_coesione = COE_PAG) %>%
# clean
select(names(operazioni_713_raw), x_AMBITO)
# fix codice programma
appo <- appo %>%
mutate(OC_COD_PROGRAMMA = case_when(x_AMBITO == "PAC" & OC_COD_PROGRAMMA == "2007SA002FA016" ~ "TEMP_MIT_SAR",
TRUE ~ OC_COD_PROGRAMMA))
# chk <- appo %>%
# select(OC_COD_PROGRAMMA, x_AMBITO, COD_LOCALE_PROGETTO, oc_costo_coesione, COE,
# oc_impegni_coesione, COE_IMP, oc_tot_pagamenti_coesione, COE_PAG
operazioni_713_raw_temp <- operazioni_713_raw %>%
# rename(COD_LOCALE_PROGETTO = cod_locale_progetto) %>%
mutate(x_AMBITO = NA) %>%
anti_join(appo, by = "COD_LOCALE_PROGETTO") %>%
bind_rows(appo)
dim(operazioni_713_raw_temp)[1] == dim(operazioni_713_raw)[1] + dim(appo)[1]/2
# DEBUG:
# chk <- operazioni_713_raw_temp %>% filter(OC_CODICE_PROGRAMMA == "2007IT005FAMG1")
# chk <- operazioni_713_raw_temp %>% filter(OC_CODICE_PROGRAMMA == "2007IT001FA005")
#
# clean
operazioni_713 <- operazioni_713_raw_temp %>%
# fix per caratteri spuri
fix_operazioni_713(.) %>%
# creo ambito e ciclo
mutate(x_AMBITO = case_when(!is.na(x_AMBITO) ~ x_AMBITO, # MEMO: serve a incorporare fix sopra
OC_COD_FONTE == "FS0713" ~ QSN_FONDO_COMUNITARIO,
OC_COD_FONTE == "FSC1420" ~ "FSC",
OC_COD_FONTE == "FSC0713" ~ "FSC",
OC_COD_FONTE == "PAC" ~ "PAC")) %>%
# fix per ERDF e ESF su 713
mutate(x_AMBITO = case_when(x_AMBITO == "ERDF" ~ "FESR",
x_AMBITO == "ESF" ~ "FSE",
TRUE ~ x_AMBITO)) %>%
# articolazioni
mutate(x_COD_LIVELLO_0 = NA_character_,
x_DES_LIVELLO_0 = NA_character_) %>%
mutate(COD_LINEA = as.character(COD_LINEA),
COD_AZIONE = as.character(COD_AZIONE)) %>%
mutate(x_COD_LIVELLO_1 = case_when(x_AMBITO == "FESR" ~ PO_CODICE_ASSE,
x_AMBITO == "FSE" ~ PO_CODICE_ASSE,
x_AMBITO == "FSC" ~ COD_LINEA,
x_AMBITO == "PAC" ~ COD_LINEA),
x_DES_LIVELLO_1 = case_when(x_AMBITO == "FESR" ~ PO_DENOMINAZIONE_ASSE,
x_AMBITO == "FSE" ~ PO_DENOMINAZIONE_ASSE,
x_AMBITO == "FSC" ~ descr_linea,
x_AMBITO == "PAC" ~ descr_linea),
x_COD_LIVELLO_2 = case_when(x_AMBITO == "FESR" ~ PO_COD_OBIETTIVO_OPERATIVO,
x_AMBITO == "FSE" ~ PO_COD_OBIETTIVO_OPERATIVO,
x_AMBITO == "FSC" ~ COD_AZIONE,
x_AMBITO == "PAC" ~ COD_AZIONE),
x_DES_LIVELLO_2 = case_when(x_AMBITO == "FESR" ~ PO_OBIETTIVO_OPERATIVO,
x_AMBITO == "FSE" ~ PO_OBIETTIVO_OPERATIVO,
x_AMBITO == "FSC" ~ descr_azione,
x_AMBITO == "PAC" ~ descr_azione)
) %>%
# map per ambito
mutate(COS_AMM = oc_costo_coesione,
IMP_AMM = oc_impegni_coesione,
PAG_AMM = oc_tot_pagamenti_coesione)
# chk
if (debug == TRUE) {
operazioni_713 %>%
count(x_AMBITO, oc_ambito)
}
chk <- operazioni_713 %>%
count(x_AMBITO, oc_descrizione_programma,
x_COD_LIVELLO_0, x_DES_LIVELLO_0,
x_COD_LIVELLO_1, x_DES_LIVELLO_1,
x_COD_LIVELLO_2, x_DES_LIVELLO_2) %>%
filter(is.na(x_COD_LIVELLO_1))
# clean
operazioni_713 <- operazioni_713 %>%
select(COD_LOCALE_PROGETTO,
OC_CODICE_PROGRAMMA = OC_COD_PROGRAMMA,
x_AMBITO,
COE = COS_AMM,
COE_IMP = IMP_AMM,
COE_PAG = PAG_AMM,
x_COD_LIVELLO_0, x_DES_LIVELLO_0,
x_COD_LIVELLO_1, x_DES_LIVELLO_1,
x_COD_LIVELLO_2, x_DES_LIVELLO_2) %>%
mutate(costo_ammesso_MZ = 0,
costo_ammesso_CN = 0,
imp_ammesso_MZ = 0,
imp_ammesso_CN = 0,
pag_ammesso_MZ = 0,
pag_ammesso_CN = 0)
# ----------------------------------------------------------------------------------- #
# bind
message("Unione dati...")
# fix psc
psc <- po %>% filter(x_CICLO == "2014-2020", x_GRUPPO == "PSC", TIPO == 0)
appo <- operazioni_1420 %>%
semi_join(psc, by = "OC_CODICE_PROGRAMMA")
# appo %>% count(COD_LOCALE_PROGETTO) %>% filter(n>1)
operazioni_psc <- appo %>%
left_join(progetti %>%
select(COD_LOCALE_PROGETTO, OC_CODICE_PROGRAMMA, X_CICLO, OC_COD_CICLO),
by = c("COD_LOCALE_PROGETTO", "OC_CODICE_PROGRAMMA")) %>%
mutate(x_CICLO = case_when(OC_COD_CICLO == 1 ~ "2007-2013",
OC_COD_CICLO == 2 ~ "2014-2020",
OC_COD_CICLO == 3 ~ "2021-2027",
OC_COD_CICLO == 9 ~ "2000-2006",
TRUE ~ "2014-2020")) # MEMO: fix per anomalie di pre-esteso
operazioni_psc %>% count(X_CICLO, OC_COD_CICLO, x_CICLO)
# operazioni_psc %>% filter(is.na(x_CICLO)) %>% count(OC_CODICE_PROGRAMMA)
# OC_CODICE_PROGRAMMA n
# <chr> <int>
# 1 PSCCAMPANIA 17
# 2 PSCEMILROMAGNA 53
# 3 PSCLAZIO 1
# 4 PSCSVILECONOM 137
# 5 PSCUNIVRICERCA 2
# operazioni_psc %>% filter(is.na(OC_COD_CICLO)) %>% count(OC_CODICE_PROGRAMMA)
# OC_CODICE_PROGRAMMA n
# <chr> <int>
# 1 PSCCAMPANIA 177
# 2 PSCEMILROMAGNA 53
# 3 PSCLAZIO 1
# 4 PSCMOLISE 1
# 5 PSCPUGLIA 6
# 6 PSCSVILECONOM 178
# 7 PSCUNIVRICERCA 2
# operazioni_psc %>% filter(OC_CODICE_PROGRAMMA == "PSCLOMBARDIA") %>% count(X_CICLO)
operazioni <- operazioni_1420 %>%
bind_rows(operazioni_713) %>%
# passaggio equivalente a get_x_vars
left_join(po %>%
# MEMO: fix per doppio entry in po_riclass
filter(!(OC_CODICE_PROGRAMMA == "2016XXAMPSAP00" & x_CICLO == "2007-2013"),
!(OC_CODICE_PROGRAMMA == "2017TOPIOMBIFSC" & x_CICLO == "2007-2013")) %>%
select(OC_CODICE_PROGRAMMA, x_CICLO, x_GRUPPO, x_PROGRAMMA, x_REGNAZ),
by = "OC_CODICE_PROGRAMMA") %>%
# fix per psc
left_join(operazioni_psc %>%
select(COD_LOCALE_PROGETTO, OC_CODICE_PROGRAMMA, x_CICLO),
by = c("COD_LOCALE_PROGETTO", "OC_CODICE_PROGRAMMA")) %>%
mutate(x_CICLO = if_else(is.na(x_CICLO.y), x_CICLO.x, x_CICLO.y)) %>%
select(-x_CICLO.x, -x_CICLO.y) %>%
# fix per dissesto
mutate(OC_CODICE_PROGRAMMA = case_when(OC_CODICE_PROGRAMMA == "2016ABAMPSAP01" ~ "2016XXAMPSAP00",
OC_CODICE_PROGRAMMA == "2016EMAMPSAP02" ~ "2016XXAMPSAP00",
OC_CODICE_PROGRAMMA == "2016LIAMPSAP03" ~ "2016XXAMPSAP00",
OC_CODICE_PROGRAMMA == "2016LOAMPSAP06" ~ "2016XXAMPSAP00",
OC_CODICE_PROGRAMMA == "2016SAAMPSAP04" ~ "2016XXAMPSAP00",
OC_CODICE_PROGRAMMA == "2016TOAMPSAP05" ~ "2016XXAMPSAP00",
OC_CODICE_PROGRAMMA == "2016VEAMPSAP07" ~ "2016XXAMPSAP00",
TRUE ~ OC_CODICE_PROGRAMMA))
# isola visualizzati
# MEMO: questo sotto non prende ":::" su OC_CODICE_PROGRAMMA
# semi_join(progetti %>% filter(OC_FLAG_VISUALIZZAZIONE == 0), by = c("COD_LOCALE_PROGETTO", "OC_CODICE_PROGRAMMA"))
# semi_join(progetti %>% filter(OC_FLAG_VISUALIZZAZIONE == 0), by = "COD_LOCALE_PROGETTO")
# left_join(progetti %>%
# select(COD_LOCALE_PROGETTO, OC_FLAG_VISUALIZZAZIONE),
# by = "COD_LOCALE_PROGETTO")
# chk ciclo
operazioni %>% count(x_CICLO)
operazioni %>% filter(is.na(x_CICLO)) %>% count(x_AMBITO)
# fix ciclo
operazioni <- operazioni %>%
mutate(x_CICLO = case_when(OC_CODICE_PROGRAMMA == "TEMP_MIT_SAR" ~ "2007-2013",
OC_CODICE_PROGRAMMA == "2007PI004MA007" ~ "2000-2006",
TRUE ~ x_CICLO))
# chk compatibile con Fabio x Stefano
# operazioni %>% distinct(COD_LOCALE_PROGETTO, x_CICLO, x_AMBITO) %>% count(x_CICLO, x_AMBITO)
# chk dupli per ciclo da po_riclass
chk <- operazioni %>% count(COD_LOCALE_PROGETTO, x_CICLO)
dim(chk)[1] - dim(progetti)[1]
# chk dupli da caratteri spuri
chk %>% count(COD_LOCALE_PROGETTO) %>% filter(n > 1)
# operazioni %>%
# anti_join(progetti, by = "COD_LOCALE_PROGETTO") %>%
# write_csv2(file.path(TEMP, "chk_operazioni_duple_missing"))
# progetti %>%
# anti_join(operazioni, by = "COD_LOCALE_PROGETTO") %>%
# select(COD_LOCALE_PROGETTO, OC_CODICE_PROGRAMMA, X_AMBITO, X_CICLO, OC_FLAG_VISUALIZZAZIONE) %>%
# write_csv2(file.path(TEMP, "chk_progetti_missing"))
# MEMO: attenzione che a volte si importa progetti con i soli visualizzati e salta il chk sopra
# chk
operazioni %>%
group_by(x_CICLO, x_AMBITO) %>%
# group_by(x_CICLO) %>%
summarise(N = n(),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE))
# programmi <- operazioni %>%
# group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_PROGRAMMA) %>%
# summarise(N = n(),
# COE = sum(COE, na.rm = TRUE),
# COE_IMP = sum(COE_IMP, na.rm = TRUE),
# COE_PAG = sum(COE_PAG, na.rm = TRUE))
# # fix per ERDF e ESF su 713
# operazioni <- operazioni %>%
# mutate(x_AMBITO = case_when(x_AMBITO == "ERDF" ~ "FESR",
# x_AMBITO == "ESF" ~ "FSE",
# TRUE ~ x_AMBITO))
# ----------------------------------------------------------------------------------- #
# debug multi
if (debug == TRUE) {
appo <- operazioni %>%
semi_join(progetti_multi, by = "COD_LOCALE_PROGETTO") %>%
left_join(progetti %>%
select(COD_LOCALE_PROGETTO, OC_COD_FONTE),
by = "COD_LOCALE_PROGETTO")
chk <- appo %>%
distinct(COD_LOCALE_PROGETTO, x_CICLO, OC_COD_FONTE) %>%
count(x_CICLO, OC_COD_FONTE) %>%
rename(N_uni = n) %>%
left_join(appo %>%
group_by(x_CICLO, OC_COD_FONTE) %>%
summarise(N_multi = n(),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE)),
by = c("x_CICLO", "OC_COD_FONTE")) %>%
left_join(appo %>%
group_by(x_CICLO, OC_COD_FONTE, x_AMBITO) %>%
summarise(COE = sum(COE, na.rm = TRUE)) %>%
spread(x_AMBITO, COE, fill = 0),
by = c("x_CICLO", "OC_COD_FONTE"))
write_csv2(chk, file.path(TEMP, "chk_multi.csv"))
}
# x_CICLO OC_COD_FONTE N_uni N_multi COE COE_IMP COE_PAG FESR FSC FSE POC
# <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 2007-2013 FS0713:::FSC0713 356 712 162946290. 136472860. 158173021. 136919403. 22165005. 3861882. 0
# 2 2007-2013 FS0713:::PAC 1739 3478 2073426131. 1903065658. 1406673744. 1539023360. 0 13682697. 520720073.
# 3 2014-2020 FS1420:::FSC1420 934 1868 605882576. 403305710. 80546329. 320443835. 211799340. 73639401. 0
# 4 2014-2020 FS1420:::PAC1420 1 2 356095180. 248854771. 125274997. 317851434. 0 0 38243746.
# 5 2014-2020 FSC1420:::FSC1420 36 72 519178461 166280886. 44304843. 0 519178461 0 0
# 6 2014-2020 FSC1420:::PAC1420 1 2 3500000 0 0 0 1550000 0 19
# ----------------------------------------------------------------------------------- #
# chk
# chk <- progetti %>%
# select(COD_LOCALE_PROGETTO, OC_CODICE_PROGRAMMA, x_PROGRAMMA, x_AMBITO, x_CICLO) %>%
# left_join(operazioni %>%
# distinct(COD_LOCALE_PROGETTO, x_CICLO),
# by = "COD_LOCALE_PROGETTO") %>%
# mutate(CHK = x_CICLO.x == x_CICLO.y)
#
# chk %>% filter(CHK == FALSE)
# ----------------------------------------------------------------------------------- #
# export
message("Esce da workflow")
return(operazioni)
}
#' Fix temporaneo per i dataset operazioni
#'
#' Integra il dataset.
#'
#' @param df Dataset in formato standard.
#' @return Il dataset operazioni integrato.
fix_operazioni_dataiku <- function(df) {
# df <- df %>%
# mutate(ue_descr_fondo = case_when(ue_descr_fondo == "" & oc_cod_fonte == "FSC1420" ~ "FSC",
# ue_descr_fondo == "" & oc_cod_fonte == "PAC1420" ~ "PAC",
# ue_descr_fondo == "" & oc_cod_fonte == "FS1420" &
# PO_FONDO == "FESR" ~ "FESR",
# ue_descr_fondo == "" & oc_cod_fonte == "FS1420" &
# PO_FONDO == "FESR FSE" & OC_CODICE_PROGRAMMA == "2014IT16M2OP002" ~ "FESR", #MEMO: problema per 42 progetti su 2014IT16M2OP002:::2016PATTIPUG
# oc_cod_fonte == "FS1420" & ue_descr_fondo == "Y.E.I." ~ "IOG",
# oc_cod_fonte == "FS1420" & ue_descr_fondo == "IOG:::FSE" ~ "IOG",
# OC_CODICE_PROGRAMMA == "2019MATTMINA001" ~ "ORD",
# ue_descr_fondo == "" & oc_cod_fonte == "FS1420" &
# CODICE_TIPOLOGIA_PROGRAMMA == "ARI" ~ "NAZIONALE", # fix per 1MISEABIN-PSRA-89-153
# # fix temporanei
# oc_cod_fonte == "FS1420" & ue_descr_fondo == "Y.E.I.:::F.S.E." ~ "IOG",
# oc_cod_fonte == "FS1420" & ue_descr_fondo == "F.S.E." ~ "FSE",
# oc_cod_fonte == "FS1420" & ue_descr_fondo == "F.E.S.R." ~ "FESR",
# oc_cod_fonte == "FS1420" & ue_descr_fondo == "F.E.A.S.R." ~ "FEASR",
# TRUE ~ ue_descr_fondo))
df <- df %>%
mutate(ue_descr_fondo = case_when(ue_descr_fondo == "EAFRD" ~ "FEASR",
ue_descr_fondo == "ESF" ~ "FSE",
ue_descr_fondo == "IOG:::FSE" ~ "IOG",
TRUE ~ ue_descr_fondo))
return(df)
}
#' Carica il dataset progetti
#'
#' Carica il file progetti_esteso_$BIMESTRE.csv dal folder DATI. Versione post dataiku.
#'
#' @param bimestre Stringa in formato "20180630" come da standard per le date in OC.
#' @param visualizzati Logico. Vuoi solo i progetti visualizzati sul portale OC?
#' @param debug Logico. Vuoi vedere i totali di progetti e costo pubblico per controllo sul portale OC?
#' @param light Logico. Vuoi usare la versione light di "progetti.csv"?
#' @return Il dataset viene caricato come "progetti" nel Global Environment. Se "progetti" è gia presente compare una notifica.
load_progetti_dataiku <- function(bimestre, data_path=NULL, visualizzati=TRUE, debug=FALSE, light=FALSE, refactor=FALSE)
{
# if (exists("progetti", envir = .GlobalEnv)) {
# print("Progetti esteso è gia caricato")
# progetti <- progetti
#
# } else {
# switch di filename per progetti_light
if (light == TRUE) {
temp <- paste0("progetti_light_", bimestre, ".csv")
col_types <- cols(
COD_LOCALE_PROGETTO = col_character(),
CUP = col_character(),
OC_TITOLO_PROGETTO = col_character(),
OC_SINTESI_PROGETTO = col_character(),
OC_COD_TEMA_SINTETICO = col_character(),
OC_COD_FONTE = col_character(),
FONDO_COMUNITARIO = col_character(),
OC_CODICE_PROGRAMMA = col_character(),
OC_DESCRIZIONE_PROGRAMMA = col_character(),
COD_RISULTATO_ATTESO = col_character(),
DESCR_RISULTATO_ATTESO = col_character(),
OC_COD_CATEGORIA_SPESA = col_character(),
OC_DESCR_CATEGORIA_SPESA = col_character(),
OC_COD_ARTICOLAZ_PROGRAMMA = col_character(),
OC_DESCR_ARTICOLAZ_PROGRAMMA = col_character(),
OC_COD_SUBARTICOLAZ_PROGRAMMA = col_character(),
OC_DESCR_SUBARTICOLAZ_PROGRAMMA = col_character(),
COD_STRUMENTO = col_character(),
DESCR_STRUMENTO = col_character(),
DESCR_TIPO_STRUMENTO = col_character(),
COD_PROGETTO_COMPLESSO = col_character(),
DESCRIZIONE_PROGETTO_COMPLESSO = col_character(),
COD_TIPO_COMPLESSITA = col_character(),
DESCR_TIPO_COMPLESSITA = col_character(),
CUP_COD_NATURA = col_character(),
CUP_DESCR_NATURA = col_character(),
CUP_COD_TIPOLOGIA = col_character(),
CUP_DESCR_TIPOLOGIA = col_character(),
CUP_COD_SETTORE = col_character(),
CUP_DESCR_SETTORE = col_character(),
CUP_COD_SOTTOSETTORE = col_character(),
CUP_DESCR_SOTTOSETTORE = col_character(),
CUP_COD_CATEGORIA = col_character(),
CUP_DESCR_CATEGORIA = col_character(),
COD_REGIONE = col_character(),
DEN_REGIONE = col_character(),
COD_PROVINCIA = col_character(),
DEN_PROVINCIA = col_character(),
COD_COMUNE = col_character(),
DEN_COMUNE = col_character(),
OC_FINANZ_UE_NETTO = col_double(),
OC_FINANZ_STATO_FONDO_ROT_NETTO = col_double(),
OC_FINANZ_STATO_FSC_NETTO = col_double(),
OC_FINANZ_STATO_PAC_NETTO = col_double(),
OC_FINANZ_TOT_PUB_NETTO = col_double(),
IMPEGNI = col_double(),
TOT_PAGAMENTI = col_double(),
COSTO_REALIZZATO = col_double(),
OC_COSTO_COESIONE = col_double(),
OC_IMPEGNI_COESIONE = col_double(),
OC_PAGAMENTI_COESIONE = col_double(),
OC_STATO_PROGETTO = col_character(),
OC_STATO_PROCEDURALE = col_character(),
OC_COD_FASE_CORRENTE = col_character(),
OC_DESCR_FASE_CORRENTE = col_character(),
COD_PROCED_ATTIVAZIONE = col_character(),
DESCR_PROCED_ATTIVAZIONE = col_character(),
OC_CODFISC_BENEFICIARIO = col_character(),
OC_DENOM_BENEFICIARIO = col_character(),
OC_COD_FORMA_GIU_BENEFICIARIO = col_character(),
OC_FLAG_VISUALIZZAZIONE = col_double(),
OC_FLAG_BENICONF = col_double(),
OC_FLAG_COVID = col_character(),
OC_MACROAREA = col_character(),
SNAI = col_double(),
IMPORTO_AGGIUDICATO = col_double(),
IMPORTO_AGGIUDICATO_NODATA = col_double(),
IMPORTO_AGGIUDICATO_BANDITO = col_double(),
QSN_CODICE_OBIETTIVO_SPECIFICO = col_double(),
QSN_DESCR_OBIETTIVO_SPECIFICO = col_character(),
COD_AREA_INT = col_character(),
AREA_INTERNA = col_character(),
x_CICLO = col_character(),
x_AMBITO = col_character(),
x_GRUPPO = col_character(),
x_PROGRAMMA = col_character(),
x_REGNAZ = col_character(),
x_MACROAREA = col_character(),
x_REGIONE = col_character()
)
} else {
if (as.numeric(bimestre) <= 20181231) {
temp <- paste0("progetti_esteso_", bimestre, ".csv")
col_types <- cols()
} else {
temp <- "PROGETTI_PREESTESO.csv"
col_types <- cols(
db = col_character(),
COD_LOCALE_PROGETTO = col_character(),
CUP = col_character(),
OC_TITOLO_PROGETTO = col_character(),
OC_SINTESI_PROGETTO = col_character(),
OC_COD_CICLO = col_double(),
OC_DESCR_CICLO = col_character(),
OC_COD_TEMA_SINTETICO = col_character(),
OC_TEMA_SINTETICO = col_character(),
COD_GRANDE_PROGETTO = col_character(),
DESCRIZIONE_GRANDE_PROGETTO = col_character(),
COD_PROGETTO_COMPLESSO = col_character(),
DESCRIZIONE_PROGETTO_COMPLESSO = col_character(),
COD_TIPO_COMPLESSITA = col_character(),
DESCR_TIPO_COMPLESSITA = col_character(),
x_ciclo = col_character(),
x_ambito = col_character(),
x_gruppo = col_character(),
x_regnaz = col_character(),
x_programma = col_character(),
OC_COD_FONTE = col_character(),
OC_DESCR_FONTE = col_character(),
FONDO_COMUNITARIO = col_character(),
OC_CODICE_PROGRAMMA = col_character(),
OC_DESCRIZIONE_PROGRAMMA = col_character(),
COD_OB_TEMATICO = col_character(),
DESCR_OB_TEMATICO = col_character(),
COD_RISULTATO_ATTESO = col_character(),
DESCR_RISULTATO_ATTESO = col_character(),
OC_COD_CATEGORIA_SPESA = col_character(),
OC_DESCR_CATEGORIA_SPESA = col_character(),
OC_ARTICOLAZIONE_PROGRAMMA = col_character(),
OC_SUBARTICOLAZIONE_PROGRAMMA = col_character(),
OC_COD_ARTICOLAZ_PROGRAMMA = col_character(),
OC_DESCR_ARTICOLAZ_PROGRAMMA = col_character(),
OC_COD_SUBARTICOLAZ_PROGRAMMA = col_character(),
OC_DESCR_SUBARTICOLAZ_PROGRAMMA = col_character(),
COD_STRUMENTO = col_character(),
DESCR_STRUMENTO = col_character(),
DESCR_TIPO_STRUMENTO = col_character(),
CUP_COD_NATURA = col_character(),
CUP_DESCR_NATURA = col_character(),
CUP_COD_TIPOLOGIA = col_character(),
CUP_DESCR_TIPOLOGIA = col_character(),
CUP_COD_SETTORE = col_character(),
CUP_DESCR_SETTORE = col_character(),
CUP_COD_SOTTOSETTORE = col_character(),
CUP_DESCR_SOTTOSETTORE = col_character(),
CUP_COD_CATEGORIA = col_character(),
CUP_DESCR_CATEGORIA = col_character(),
COD_ATECO = col_character(),
DESCRIZIONE_ATECO = col_character(),
OC_COD_TIPO_AIUTO = col_character(),
OC_DESCR_TIPO_AIUTO = col_character(),
COD_REGIONE = col_character(),
DEN_REGIONE = col_character(),
COD_PROVINCIA = col_character(),
DEN_PROVINCIA = col_character(),
COD_COMUNE = col_character(),
DEN_COMUNE = col_character(),
OC_MACROAREA = col_character(),
OC_MAREA = col_character(),
oc_macroarea_sas = col_character(),
oc_marea_sas = col_character(),
oc_cod_sll = col_character(),
OC_DENOMINAZIONE_SLL = col_character(),
OC_COD_AI = col_character(),
OC_DENOM_AI = col_character(),
FINANZ_UE = col_double(),
FINANZ_STATO_FONDO_DI_ROTAZIONE = col_double(),
FINANZ_STATO_FSC = col_double(),
FINANZ_STATO_PAC = col_double(),
FINANZ_PRIVATO = col_double(),
FINANZ_DA_REPERIRE = col_double(),
FINANZ_TOTALE_PUBBLICO = col_double(),
ECONOMIE_TOTALI = col_double(),
ECONOMIE_TOTALI_PUBBLICHE = col_double(),
ECONOMIE_PRIVATO = col_double(),
ECONOMIE_DA_REPERIRE = col_double(),
OC_FINANZ_UE_NETTO = col_double(),
OC_FINANZ_UE_FESR_NETTO = col_double(),
OC_FINANZ_UE_FSE_NETTO = col_double(),
OC_FINANZ_UE_FEASR_NETTO = col_double(),
OC_FINANZ_UE_FEAMP_NETTO = col_double(),
OC_FINANZ_UE_IOG_NETTO = col_double(),
OC_FINANZ_Stato_Fondo_Rot_NETTO = col_double(),
OC_FINANZ_Stato_FSC_NETTO = col_double(),
OC_FINANZ_Stato_PAC_NETTO = col_double(),
OC_FINANZ_Stato_compl_NETTO = col_double(),
OC_FINANZ_Stato_altri_prov_NETTO = col_double(),
OC_FINANZ_Regione_NETTO = col_double(),
OC_FINANZ_Provincia_NETTO = col_double(),
OC_FINANZ_Comune_NETTO = col_double(),
OC_FINANZ_Risorse_liberate_NETTO = col_double(),
OC_FINANZ_Altro_pubblico_NETTO = col_double(),
OC_FINANZ_Stato_estero_NETTO = col_double(),
OC_FINANZ_Privato_NETTO = col_double(),
OC_FINANZ_TOT_PUB_NETTO = col_double(),
OC_COSTO_COESIONE = col_double(),
IMPEGNI = col_double(),
OC_IMPEGNI_GIURID_VINCOLANTI = col_double(),
OC_IMPEGNI_TRASFERIMENTI = col_double(),
OC_IMPEGNI_COESIONE = col_double(),
TOT_PAGAMENTI = col_double(),
OC_TOT_PAGAMENTI_BENEFICIARI = col_double(),
OC_TOT_PAGAMENTI_TRASFERIMENTI = col_double(),
OC_PAGAMENTI_COESIONE = col_double(),
COSTO_REALIZZATO = col_double(),
IMPORTO_AGGIUDICATO = col_double(),
IMPORTO_AGGIUDICATO_NODATA = col_double(),
IMPORTO_AGGIUDICATO_BANDITO = col_double(),
COSTO_RENDICONTABILE_UE = col_double(),
OC_TOT_PAGAMENTI_RENDICONTAB_UE = col_double(),
OC_TOT_PAGAMENTI_FSC = col_double(),
OC_TOT_PAGAMENTI_PAC = col_double(),
OC_DATA_INIZIO_PROGETTO = col_integer(),
OC_DATA_FINE_PROGETTO_PREVISTA = col_integer(),
OC_DATA_FINE_PROGETTO_EFFETTIVA = col_integer(),
DATA_INIZIO_PREV_STUDIO_FATT = col_integer(),
DATA_INIZIO_EFF_STUDIO_FATT = col_integer(),
DATA_FINE_PREV_STUDIO_FATT = col_integer(),
DATA_FINE_EFF_STUDIO_FATT = col_integer(),
DATA_INIZIO_PREV_PROG_PREL = col_integer(),
DATA_INIZIO_EFF_PROG_PREL = col_integer(),
DATA_FINE_PREV_PROG_PREL = col_integer(),
DATA_FINE_EFF_PROG_PREL = col_integer(),
DATA_INIZIO_PREV_PROG_DEF = col_integer(),
DATA_INIZIO_EFF_PROG_DEF = col_integer(),
DATA_FINE_PREV_PROG_DEF = col_integer(),
DATA_FINE_EFF_PROG_DEF = col_integer(),
DATA_INIZIO_PREV_PROG_ESEC = col_integer(),
DATA_INIZIO_EFF_PROG_ESEC = col_integer(),
DATA_FINE_PREV_PROG_ESEC = col_integer(),
DATA_FINE_EFF_PROG_ESEC = col_integer(),
DATA_INIZIO_PREV_AGG_BANDO = col_integer(),
DATA_INIZIO_EFF_AGG_BANDO = col_integer(),
DATA_FINE_PREV_AGG_BANDO = col_integer(),
DATA_FINE_EFF_AGG_BANDO = col_integer(),
DATA_INIZIO_PREV_STIP_ATTRIB = col_integer(),
DATA_INIZIO_EFF_STIP_ATTRIB = col_integer(),
DATA_FINE_PREV_STIP_ATTRIB = col_integer(),
DATA_FINE_EFF_STIP_ATTRIB = col_integer(),
DATA_INIZIO_PREV_ESECUZIONE = col_integer(),
DATA_INIZIO_EFF_ESECUZIONE = col_integer(),
DATA_FINE_PREV_ESECUZIONE = col_integer(),
DATA_FINE_EFF_ESECUZIONE = col_integer(),
DATA_INIZIO_PREV_COLLAUDO = col_integer(),
DATA_INIZIO_EFF_COLLAUDO = col_integer(),
DATA_FINE_PREV_COLLAUDO = col_integer(),
DATA_FINE_EFF_COLLAUDO = col_integer(),
OC_STATO_FINANZIARIO = col_character(),
OC_STATO_PROGETTO = col_character(),
OC_STATO_PROCEDURALE = col_character(),
OC_STATO_PROCEDURALE_OGV = col_character(),
OC_COD_FASE_CORRENTE = col_character(),
OC_DESCR_FASE_CORRENTE = col_character(),
COD_PROCED_ATTIVAZIONE = col_character(),
DESCR_PROCED_ATTIVAZIONE = col_character(),
COD_TIPO_PROCED_ATTIVAZIONE = col_character(),
DESCR_TIPO_PROCED_ATTIVAZIONE = col_character(),
OC_CODFISC_PROGRAMMATORE = col_character(),
OC_DENOM_PROGRAMMATORE = col_character(),
OC_COD_FORMA_GIU_PROGRAMMATORE = col_character(),
OC_DESCR_FORMA_GIU_PROGRAMMATORE = col_character(),
OC_TOTALE_PROGRAMMATORI = col_double(),
OC_CODFISC_attuatore = col_character(),
OC_DENOM_attuatore = col_character(),
OC_COD_FORMA_GIU_attuatore = col_character(),
OC_DESCR_FORMA_GIU_attuatore = col_character(),
OC_TOTALE_ATTUATORI = col_double(),
OC_CODFISC_BENEFICIARIO = col_character(),
OC_DENOM_BENEFICIARIO = col_character(),
OC_COD_FORMA_GIU_BENEFICIARIO = col_character(),
OC_DESCR_FORMA_GIU_BENEFICIARIO = col_character(),
OC_TOTALE_BENEFICIARI = col_double(),
OC_CODFISC_realizzatorE = col_character(),
OC_DENOM_realizzatorE = col_character(),
OC_COD_FORMA_GIU_realizzatorE = col_character(),
OC_DESCR_FORMA_GIU_realizzatorE = col_character(),
OC_TOTALE_realizzatori = col_double(),
OC_FLAG_REGIONE_UNICA = col_double(),
OC_FLAG_VISUALIZZAZIONE = col_double(),
OC_FLAG_PAC = col_double(),
OC_FLAG_TAG_BENICONF = col_double(),
COVID = col_character(),
pnrr = col_double(),
SNAI = col_character(),
DATA_AGGIORNAMENTO = col_double(),
OC_FOCUS = col_character(),
x_fondo = col_character(),
OC_FLAG_AGGREGATO = col_integer(),
OC_PROGETTO_AGGREGATO = col_character()
)
}
}
# switch
if (!is.null(data_path)) {
DATA <- data_path
# MEMO: sovrascrive data_path a DATA
} else {
# #OLD: questo non aveva senso perché era pleonastico perché risultava "/home/antonio/dati/oc/20210228/../20210228"
# data_path=file.path(DATA, "..", bimestre)
# DATA <- data_path
# # MEMO: questo serve per puntare a bimestre specifico senza modificare data_path
DATA <- DATA
}
# load progetti
if (visualizzati == TRUE) {
# progetti <- read_csv2(file.path(DATA, temp), guess_max = 1000000) %>%
# filter(OC_FLAG_VISUALIZZAZIONE == 0)
# progetti <- read_csv2(file.path(DATA, temp), guess_max = 1200000) %>%
# filter(OC_FLAG_VISUALIZZAZIONE == 0)
# progetti <- read_csv2(file.path(DATA, temp), guess_max = 1800000) %>%
# filter(OC_FLAG_VISUALIZZAZIONE == 0 | OC_FLAG_VISUALIZZAZIONE == 9) # include progetti FEASR per SNAI
progetti <- read_csv2(file.path(DATA, temp), col_types = col_types) %>%
filter(OC_FLAG_VISUALIZZAZIONE == 0 | OC_FLAG_VISUALIZZAZIONE == 9 | OC_FLAG_VISUALIZZAZIONE == 10) # include progetti FEASR per SNAI
# CHK: progetti %>% filter(OC_FLAG_VISUALIZZAZIONE == 9) %>% count(X_AMBITO)
} else {
# progetti <- read_csv2(file.path(DATA, temp), guess_max = 1000000)
# progetti <- read_csv2(file.path(DATA, temp), guess_max = 1800000)
progetti <- read_csv2(file.path(DATA, temp), col_types = col_types)
# MEMO: qui prende anche non visualizzati
}
# analisi tipologia colonne
# sapply(names(progetti), function(x) {print(paste0(x, " = ", class(progetti[[x]])))})
# refactor
# MEMO: si applica solo a light
if (light == TRUE & refactor == TRUE) {
progetti <- refactor_progetti(progetti)
}
# debug
if (debug == TRUE) {
msg <- progetti %>%
summarise(N = n(),
CP = sum(OC_FINANZ_TOT_PUB_NETTO, na.rm = TRUE))
message(paste0("Progetti esteso contiene ", format(msg$N, big.mark = ".", decimal.mark = ","),
" progetti per un costo pubblico totale di ",
format(round(msg$CP/1000000000, 1), big.mark = ".", decimal.mark = ","),
" miliardi di euro."))
}
return(progetti)
# }
}
#' Esporta report per Programmi con dati coesione
#'
#' Report con apertura per programma e fase procedurale rispetto al focus selezionato.
#' E' costruito su operaizoni e dati coesione.
#'
#' @param perimetro Dataset di classe macroaree
#' @param usa_meuro Vuoi i dati in Meuro? Di default sono in euro. Attenzione: per usare Meuro il perimetro deve essere in euro, viene arrotondato dopo
#' @param show_cp Logico. Vuoi calcolare anche il costo pubblico (CP)?
#' @param use_eu Vuoi caricare il dataset SIE del DB con le risorse UE e la categoria di regione? (solo per SIE)
#' @param use_flt Logico. Vuoi utilizzare solo i programmi che rientrano nel perimetro coesione monitorabile?
#' @param use_cicli_psc Vuoi usare i dati di programmazione per cicli dei PSC?
#' @param use_fix_siepoc Vuoi correggere i dati SIE e POC 1420 con le anticipazioni?
#' @param stime_fix_siepoc Per correggere i dati SIE e POC 1420 con le anticipazioni vuoi usare anche le stime?
#' @param export vuoi salvare il file?
#' @param export_xls Vuoi salvare i file xlsx per ciclo e ambito in OUTPUT?
#' @param progetti dataset di tipo "progetti" che serve per integrare CP, impegni e pagamenti totali.
#' @return Un file csv con apertura per programma, con RISORSE, COE, COE_IMPe, COE_PAG e con COE per fase procedurale.
make_report_programmi_coesione_dataiku <- function(perimetro, usa_meuro=FALSE, show_cp=FALSE, use_eu=FALSE, use_flt=TRUE,
use_cicli_psc=FALSE, use_fix_siepoc=FALSE, stime_fix_siepoc=FALSE,
export=FALSE, export_xls=FALSE, progetti=NULL, DB) {
# DEBUG:
# perimetro <- macroaree
# use_flt <- TRUE
# use_cicli_psc <- TRUE
# use_fix_siepoc <- TRUE
# stime_fix_siepoc <- TRUE
po <- octk::po_riclass
programmi <- init_programmazione_dati(DB=DB, use_cicli_psc=use_cicli_psc, use_fix_siepoc=use_fix_siepoc, stime_fix_siepoc=stime_fix_siepoc) %>%
rename(x_GRUPPO = TIPOLOGIA_PROGRAMMA,
x_PROGRAMMA = DESCRIZIONE_PROGRAMMA)
message("programmi caricato")
if (use_flt == TRUE) {
programmi <- programmi %>%
filter(FLAG_MONITORAGGIO == 1)
perimetro <- perimetro %>%
filter(OC_FLAG_VISUALIZZAZIONE %in% c(0, 10))
}
# patch YEI su programmazione
programmi <- programmi %>%
mutate(x_AMBITO = as.character(x_AMBITO)) %>%
mutate(x_AMBITO = case_when(OC_CODICE_PROGRAMMA == "2014IT05M9OP001" ~ "YEI", # sovrascrive FSE
TRUE ~ x_AMBITO)) %>%
refactor_ambito(.)
# patch YEI su attuazione
perimetro <- perimetro %>%
mutate(x_AMBITO = as.character(x_AMBITO)) %>%
mutate(x_AMBITO = case_when(OC_CODICE_PROGRAMMA == "2014IT05M9OP001" ~ "YEI", # sovrascrive FSE
TRUE ~ x_AMBITO)) %>%
refactor_ambito(.)
# programmazione
spalla <- programmi %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO, x_PROGRAMMA) %>%
summarise(RISORSE = sum(FINANZ_TOTALE, na.rm = TRUE),
RISORSE_UE = sum(FINANZ_UE, na.rm = TRUE))
# integra totali
appo0 <- perimetro %>%
group_by(COD_LOCALE_PROGETTO, OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO) %>%
summarise(N = n(),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE)) %>%
left_join(progetti %>%
select(COD_LOCALE_PROGETTO, CP=OC_FINANZ_TOT_PUB_NETTO, IMP=IMPEGNI, PAG=TOT_PAGAMENTI),
by = "COD_LOCALE_PROGETTO")
# attuazione
appo <- appo0 %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO) %>%
summarise(N = n(),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE),
CP = sum(CP, na.rm = TRUE),
IMP = sum(IMP, na.rm = TRUE),
PAG = sum(PAG, na.rm = TRUE))
# report
out <- spalla %>%
full_join(appo %>%
left_join(perimetro %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, OC_STATO_PROCEDURALE) %>%
summarise(COE = sum(COE, na.rm = TRUE)) %>%
spread(OC_STATO_PROCEDURALE, COE, fill = 0, drop = FALSE),
by = c("OC_CODICE_PROGRAMMA", "x_CICLO", "x_AMBITO")),
by = c("OC_CODICE_PROGRAMMA", "x_CICLO", "x_AMBITO")) %>%
as_tibble(.) %>%
# riempie NA con 0
# mutate_if(is.numeric, funs(replace(., is.na(.), 0))) %>%
mutate_if(is.numeric, replace_na, replace=0) %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
left_join(spalla %>%
ungroup() %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
distinct(OC_CODICE_PROGRAMMA, x_PROGRAMMA_2 = x_PROGRAMMA, x_AMBITO, x_GRUPPO_2 = x_GRUPPO),
by = c("OC_CODICE_PROGRAMMA", "x_AMBITO")) %>% # MEMO: senza x_CICLO funziona anche per PSC pluriciclo
as_tibble(.) %>%
mutate(x_PROGRAMMA = if_else(is.na(x_PROGRAMMA), x_PROGRAMMA_2, x_PROGRAMMA),
x_GRUPPO = if_else(is.na(x_GRUPPO), x_GRUPPO_2, x_GRUPPO)) %>%
select(-x_PROGRAMMA_2, -x_GRUPPO_2) %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
# ripristina denominazioni mancanti
left_join(po %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
distinct(OC_CODICE_PROGRAMMA, x_PROGRAMMA_2 = x_PROGRAMMA, x_AMBITO, x_GRUPPO_2 = x_GRUPPO),
by = c("OC_CODICE_PROGRAMMA", "x_AMBITO")) %>% # MEMO: priorità a DBCOE sopra, ma restano casi fuori da gestire con po_riclass
as_tibble(.) %>%
mutate(x_PROGRAMMA = if_else(is.na(x_PROGRAMMA), x_PROGRAMMA_2, x_PROGRAMMA),
x_GRUPPO = if_else(is.na(x_GRUPPO), x_GRUPPO_2, x_GRUPPO)) %>%
select(-x_PROGRAMMA_2, -x_GRUPPO_2) %>%
refactor_ambito(.) %>%
refactor_ciclo(.)
# chk programmi con attuazione e risorse 0
chk <- out %>%
select(OC_CODICE_PROGRAMMA, x_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO, RISORSE, RISORSE_UE, N, COE, COE_IMP, COE_PAG, CP, IMP, PAG,
`Non avviato`,
`In avvio di progettazione`,
`In corso di progettazione`,
`In affidamento`,
`In esecuzione`,
`Eseguito`) %>%
filter(RISORSE == 0 | is.na(RISORSE))
write.xlsx(chk, file.path(TEMP, "chk_programmi_risorse_0.xlsx"))
if (dim(chk)[1]>0){
message("WARNING: sono presenti righe con risore 0 e attuazione valorizzata!")
}
out <- out %>%
select(OC_CODICE_PROGRAMMA, x_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO, RISORSE, RISORSE_UE, N, COE, COE_IMP, COE_PAG, CP, IMP, PAG,
`Non avviato`,
`In avvio di progettazione`,
`In corso di progettazione`,
`In affidamento`,
`In esecuzione`,
`Eseguito`) %>%
filter(RISORSE > 0)
if (usa_meuro == TRUE) {
out <- out %>%
mutate(RISORSE = round(RISORSE / 1000000, 1),
RISORSE_UE = round(RISORSE_UE / 1000000, 1),
COE = round(COE / 1000000, 1),
COE_IMP = round(COE_IMP / 1000000, 1),
COE_PAG = round(COE_PAG / 1000000, 1),
CP = round(CP/1000000, 1),
IMP = round(IMP/1000000, 1),
PAG = round(PAG/1000000, 1),
`Non avviato` = round(`Non avviato` / 1000000, 1),
`In avvio di progettazione` = round(`In avvio di progettazione` / 1000000, 1),
`In corso di progettazione` = round(`In corso di progettazione` / 1000000, 1),
`In affidamento` = round(`In affidamento` / 1000000, 1),
`In esecuzione` = round(`In esecuzione` / 1000000, 1),
`Eseguito` = round(`Eseguito` / 1000000, 1))
}
if (use_eu == FALSE) {
out <- out %>%
select(-RISORSE_UE)
}
if (show_cp == FALSE) {
out <- out %>%
select(-CP, -IMP, -PAG)
}
if (export == TRUE) {
if (show_cp == TRUE) {
write.csv2(out, file.path(TEMP, "report_programmi_cp2.csv"), row.names = FALSE)
} else {
write.csv2(out, file.path(TEMP, "report_programmi.csv"), row.names = FALSE)
}
}
if (export_xls == TRUE) {
if (show_cp == TRUE) {
write.xlsx(out, file.path(OUTPUT, "report_programmi_cp2.xlsx"))
} else {
write.xlsx(out, file.path(OUTPUT, "report_programmi.xlsx"))
}
}
return(out)
}
#' Esporta report per Programmi e Macroaree con dati coesione
#'
#' Report con apertura per programma e fase procedurale rispetto al focus selezionato.
#' E' costruito su operaizoni e dati coesione.
#'
#' @param perimetro Dataset di classe macroaree
#' @param usa_meuro Vuoi i dati in Meuro? Di default sono in euro. Attenzione: per usare Meuro il perimetro deve essere in euro, viene arrotondato dopo
#' @param show_cp Logico. Vuoi calcolare anche il costo pubblico (CP)?
#' @param use_eu Vuoi caricare il dataset SIE del DB con le risorse UE e la categoria di regione? (solo per SIE)
#' @param use_flt Logico. Vuoi utilizzare solo i programmi che rientrano nel perimetro coesione monitorabile?
#' @param use_cicli_psc Vuoi usare i dati di programmazione per cicli dei PSC?
#' @param use_fix_siepoc Vuoi correggere i dati SIE e POC 1420 con le anticipazioni?
#' @param stime_fix_siepoc Per correggere i dati SIE e POC 1420 con le anticipazioni vuoi usare anche le stime?
#' @param export vuoi salvare il file?
#' @param export_xls Vuoi salvare i file xlsx in OUTPUT?
#' @param progetti dataset di tipo "progetti" da utilizzare per show_cp == TRUE
#' @return Un file csv con apertura per programma e fase procedurale.
#' @note Nel report restano per definizione righe con risorse 0, che derivano da errate imputazioni di macroaree.
make_report_programmi_macroaree_coesione_dataiku <- function(perimetro, usa_meuro=FALSE, use_eu=FALSE,
use_flt=FALSE, use_cicli_psc=FALSE,
use_fix_siepoc=FALSE, stime_fix_siepoc=FALSE,
show_cp=FALSE, export=FALSE, export_xls=FALSE, progetti=NULL, DB) {
# DEBUG:
# perimetro <- macroaree
# use_flt <- TRUE
# use_cicli_psc <- TRUE
# use_fix_siepoc <- TRUE
# stime_fix_siepoc <- TRUE
# OLD:
# po <- octk::po_riclass
# MEMO: questa soluzione porta a deniminazioni divergenti per lo stesso codice po
# NEW:
po <- init_programmazione_dati(DB=DB, use_cicli_psc=use_cicli_psc, use_fix_siepoc=use_fix_siepoc, stime_fix_siepoc=stime_fix_siepoc) %>%
rename(x_GRUPPO = TIPOLOGIA_PROGRAMMA,
x_PROGRAMMA = DESCRIZIONE_PROGRAMMA) %>%
distinct(OC_CODICE_PROGRAMMA, x_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO)
# programmazione
programmi <- init_programmazione_dati(DB=DB, use_cicli_psc=use_cicli_psc, use_fix_siepoc=use_fix_siepoc, stime_fix_siepoc=stime_fix_siepoc) %>%
rename(x_GRUPPO = TIPOLOGIA_PROGRAMMA,
x_PROGRAMMA = DESCRIZIONE_PROGRAMMA)
if (use_flt == TRUE) {
programmi <- programmi %>%
filter(FLAG_MONITORAGGIO == 1)
perimetro <- perimetro %>%
filter(OC_FLAG_VISUALIZZAZIONE %in% c(0, 10))
}
# patch YEI programmazione
programmi <- programmi %>%
mutate(x_AMBITO = as.character(x_AMBITO)) %>%
mutate(x_AMBITO = case_when(OC_CODICE_PROGRAMMA == "2014IT05M9OP001" ~ "YEI", # sovrascrive FSE
TRUE ~ x_AMBITO)) %>%
refactor_ambito(.)
# refactor macroarea
programmi <- refactor_macroarea(programmi)
perimetro <- refactor_macroarea(perimetro)
# patch YEI attuazione
perimetro <- perimetro %>%
mutate(x_AMBITO = as.character(x_AMBITO)) %>%
mutate(x_AMBITO = case_when(OC_CODICE_PROGRAMMA == "2014IT05M9OP001" ~ "YEI", # sovrascrive FSE
TRUE ~ x_AMBITO)) %>%
refactor_ambito(.)
# crea spalla
spalla <- programmi %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO, x_PROGRAMMA, x_MACROAREA) %>%
summarise(RISORSE = sum(FINANZ_TOTALE, na.rm = TRUE),
RISORSE_UE = sum(FINANZ_UE, na.rm = TRUE))
# integra totali
appo0 <- perimetro %>%
group_by(COD_LOCALE_PROGETTO, OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_MACROAREA) %>%
summarise(N = n(),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE)) %>%
left_join(progetti %>%
select(COD_LOCALE_PROGETTO, CP=OC_FINANZ_TOT_PUB_NETTO, IMP=IMPEGNI, PAG=TOT_PAGAMENTI),
by = "COD_LOCALE_PROGETTO")
# DEV: qui raddoppia per ogni progetto su più macroaree
appo <- appo0 %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_MACROAREA) %>%
summarise(N = n(),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE),
CP = sum(CP, na.rm = TRUE),
IMP = sum(IMP, na.rm = TRUE),
PAG = sum(PAG, na.rm = TRUE))
# report
out <- spalla %>%
full_join(appo %>%
left_join(perimetro %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_MACROAREA, OC_STATO_PROCEDURALE) %>%
summarise(COE = sum(COE, na.rm = TRUE)) %>%
spread(OC_STATO_PROCEDURALE, COE, fill = 0, drop = FALSE),
by = c("OC_CODICE_PROGRAMMA", "x_CICLO", "x_AMBITO", "x_MACROAREA")),
by = c("OC_CODICE_PROGRAMMA", "x_CICLO", "x_AMBITO", "x_MACROAREA")) %>%
as_tibble(.) %>%
# riempie NA con 0
mutate_if(is.numeric, replace_na, replace=0) %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
refactor_macroarea(.)%>%
left_join(spalla %>%
ungroup() %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
distinct(OC_CODICE_PROGRAMMA, x_PROGRAMMA_2 = x_PROGRAMMA, x_AMBITO, x_GRUPPO_2 = x_GRUPPO),
by = c("OC_CODICE_PROGRAMMA", "x_AMBITO")) %>% # MEMO: senza x_CICLO funziona anche per PSC pluriciclo
as_tibble(.) %>%
mutate(x_PROGRAMMA = if_else(is.na(x_PROGRAMMA), x_PROGRAMMA_2, x_PROGRAMMA),
x_GRUPPO = if_else(is.na(x_GRUPPO), x_GRUPPO_2, x_GRUPPO)) %>%
select(-x_PROGRAMMA_2, -x_GRUPPO_2) %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
# ripristina denominazioni mancanti
left_join(po %>%
refactor_ambito(.) %>%
refactor_ciclo(.) %>%
distinct(OC_CODICE_PROGRAMMA, x_PROGRAMMA_2 = x_PROGRAMMA, x_AMBITO, x_GRUPPO_2 = x_GRUPPO),
by = c("OC_CODICE_PROGRAMMA", "x_AMBITO")) %>% # MEMO: priorità a DBCOE sopra, ma restano casi fuori da gestire con po_riclass
as_tibble(.) %>%
mutate(x_PROGRAMMA = if_else(is.na(x_PROGRAMMA), x_PROGRAMMA_2, x_PROGRAMMA),
x_GRUPPO = if_else(is.na(x_GRUPPO), x_GRUPPO_2, x_GRUPPO)) %>%
select(-x_PROGRAMMA_2, -x_GRUPPO_2) %>%
refactor_ambito(.) %>%
refactor_ciclo(.)
out <- out %>%
select(OC_CODICE_PROGRAMMA, x_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO, x_MACROAREA,
RISORSE, RISORSE_UE, N, COE, COE_IMP, COE_PAG, CP,IMP, PAG,
`Non avviato`,
`In avvio di progettazione`,
`In corso di progettazione`,
`In affidamento`,
`In esecuzione`,
`Eseguito`)
if (usa_meuro == TRUE) {
out <- out %>%
mutate(RISORSE = round(RISORSE / 1000000, 1),
RISORSE_UE = round(RISORSE_UE / 1000000, 1),
COE = round(COE / 1000000, 1),
COE_IMP = round(COE_IMP / 1000000, 1),
COE_PAG = round(COE_PAG / 1000000, 1),
CP = round(CP/1000000, 1),
IMP = round(IMP/1000000, 1),
PAG = round(PAG/1000000, 1),
`Non avviato` = round(`Non avviato` / 1000000, 1),
`In avvio di progettazione` = round(`In avvio di progettazione` / 1000000, 1),
`In corso di progettazione` = round(`In corso di progettazione` / 1000000, 1),
`In affidamento` = round(`In affidamento` / 1000000, 1),
`In esecuzione` = round(`In esecuzione` / 1000000, 1),
`Eseguito` = round(`Eseguito` / 1000000, 1))
}
if (use_eu == FALSE) {
spalla <- spalla %>%
select(-RISORSE_UE)
}
if (show_cp == FALSE) {
out <- out %>%
select(-CP, -IMP, -PAG)
}
if (export == TRUE) {
if (show_cp == TRUE) {
write.csv2(out, file.path(TEMP, "report_programmi_macroaree_cp2.csv"), row.names = FALSE)
} else {
write.csv2(out, file.path(TEMP, "report_programmi_macroaree.csv"), row.names = FALSE)
}
}
if (export_xls == TRUE) {
if (show_cp == TRUE) {
write.xlsx(out, file.path(OUTPUT, "report_programmi_macroaree_cp2.xlsx"), rowNames = FALSE)
} else {
write.xlsx(out, file.path(OUTPUT, "report_programmi_macroaree.xlsx"), rowNames = FALSE)
}
}
return(out)
}
#' Crea report bimestre in modalita' "coesione"
#'
#' Crea report sintetico bimestrale con risorse coesione calcolate su operazioni.
#'
#' @param programmi Dataset in formato "programmi" da make_report_programmi_coesione()
#' @param usa_meuro Vuoi i dati in Meuro? Di default sono come in 'programmi', vale solo se 'programmi' è in euro
#' @export vuoi salvare il file?
#' @return Il report bimestre.
make_report_bimestre_coesione_dataiku <- function(programmi, usa_meuro=TRUE, export=TRUE) {
# DEV:
# if (is.null(programmi)) {
# temp <- paste0("report_meuro", "_programmi.csv")
# programmi <- read_csv2(file.path(TEMP, temp), row.names = FALSE)
# }
# MEMO: serve bimestre
# fix
programmi <- programmi %>%
mutate(N_CLP = N) #,
# IMP = 0,
# PAG = 0)
if ("RISORSE_UE" %in% names(programmi)) {
report <- programmi %>%
# MEMO: patch per factor di x_AMBITO e x_CICLO
# mutate(x_AMBITO = factor(x_AMBITO, levels = c("FESR", "FSE", "POC", "FSC", "FEASR", "FEAMP", "YEI", "SNAI",
# "FEAD", "FAMI", "CTE")),
# x_CICLO = factor(x_CICLO, levels = c("2014-2020", "2007-2013", "2000-2006"))) %>%
group_by(x_CICLO, x_AMBITO) %>%
summarise(N = sum(N, na.rm = TRUE),
RISORSE = sum(RISORSE, na.rm = TRUE),
RISORSE_UE = sum(RISORSE_UE, na.rm = TRUE),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE),
N_CLP = sum(N_CLP, na.rm = TRUE),
CP = sum(CP, na.rm = TRUE),
IMP = sum(IMP, na.rm = TRUE),
PAG = sum(PAG)) %>%
arrange(x_CICLO, x_AMBITO)
if (usa_meuro == TRUE) {
report <- report%>%
mutate(RISORSE = round(RISORSE/1000000, 1),
RISORSE_UE = round(RISORSE_UE/1000000, 1),
COE = round(COE/1000000, 1),
COE_IMP = round(COE_IMP/1000000, 1),
COE_PAG = round(COE_PAG/1000000, 1),
CP = round(CP/1000000, 1),
IMP = round(IMP/1000000, 1),
PAG = round(PAG/1000000, 1))
}
# arrange per template
report <- report %>%
filter(x_AMBITO != "FEAMP", x_AMBITO != "FEASR") %>%
select(x_CICLO, x_AMBITO, RISORSE, RISORSE_UE, COE, COE_IMP, COE_PAG, N, CP, IMP, PAG, N_CLP) %>%
arrange(desc(x_CICLO), x_AMBITO)
} else {
report <- programmi %>%
# MEMO: patch per factor di x_AMBITO e x_CICLO
# mutate(x_AMBITO = factor(x_AMBITO, levels = c("FESR", "FSE", "POC", "FSC", "FEASR", "FEAMP", "YEI", "SNAI",
# "FEAD", "FAMI", "CTE")),
# x_CICLO = factor(x_CICLO, levels = c("2014-2020", "2007-2013", "2000-2006"))) %>%
group_by(x_CICLO, x_AMBITO) %>%
summarise(N = sum(N, na.rm = TRUE),
RISORSE = sum(RISORSE, na.rm = TRUE),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE),
N_CLP = sum(N_CLP, na.rm = TRUE),
CP = sum(CP, na.rm = TRUE),
IMP = sum(IMP, na.rm = TRUE),
PAG = sum(PAG)) %>%
arrange(x_CICLO, x_AMBITO)
if (usa_meuro == TRUE) {
report <- report%>%
mutate(RISORSE = round(RISORSE/1000000, 1),
COE = round(COE/1000000, 1),
COE_IMP = round(COE_IMP/1000000, 1),
COE_PAG = round(COE_PAG/1000000, 1),
CP = round(CP/1000000, 1),
IMP = round(IMP/1000000, 1),
PAG = round(PAG/1000000, 1))
}
# arrange per template
report <- report %>%
filter(x_AMBITO != "FEAMP", x_AMBITO != "FEASR") %>%
select(x_CICLO, x_AMBITO, RISORSE, COE, COE_IMP, COE_PAG, N, CP, IMP, PAG, N_CLP) %>%
arrange(desc(x_CICLO), x_AMBITO)
}
if (export == TRUE) {
write_csv2(report, file.path(TEMP, "report.csv"))
}
return(report)
}
#' Esporta report per ciclo, ambito e macroarea con dati coesione
#'
#' Report con apertura ciclo, ambito e macroarea.
#' E' costruito su operazioni e dati coesione.
#'
#' @param programmi Dataset in formato "programmi" da make_report_programmi_macroaree_coesione()
#' @param usa_meuro Vuoi i dati in Meuro? Di default sono in euro. Attenzione: per usare Meuro il perimetro deve essere in euro, viene arrotondato dopo
#' @param export vuoi salvare il file?
#' @return Un file csv con apertura per ciclo, ambto e macroarea.
make_report_macroaree_coesione_dataiku <- function(programmi, usa_meuro=TRUE, export=TRUE) {
# DEBUG:
# programmi <- programmi_macroaree
report <- programmi %>%
group_by(x_CICLO, x_AMBITO, x_MACROAREA) %>%
summarise_if(is.numeric, sum, na.rm = TRUE) %>%
arrange(x_CICLO, x_AMBITO, x_MACROAREA)
if ("RISORSE_UE" %in% names(programmi)) {
if (usa_meuro == TRUE) {
report <- report %>%
mutate(RISORSE = round(RISORSE/1000000, 1),
RISORSE_UE = round(RISORSE_UE/1000000, 1),
COE = round(COE/1000000, 1),
COE_IMP = round(COE_IMP/1000000, 1),
COE_PAG = round(COE_PAG/1000000, 1))
}
if ("N_CLP" %in% names(programmi)) {
if (usa_meuro == TRUE) {
report <- report %>%
mutate(CP = round(CP/1000000, 1),
IMP = round(IMP/1000000, 1),
PAG = round(PAG/1000000, 1))
}
# arrange per template
report <- report %>%
select(x_CICLO, x_AMBITO, x_MACROAREA, RISORSE, RISORSE_UE, COE, COE_IMP, COE_PAG, N, CP, IMP, PAG, N_CLP)
} else {
# arrange per template
report <- report %>%
select(x_CICLO, x_AMBITO, x_MACROAREA, RISORSE, RISORSE_UE, COE, COE_IMP, COE_PAG, N)
}
} else {
if (usa_meuro == TRUE) {
report <- report %>%
mutate(RISORSE = round(RISORSE/1000000, 1),
COE = round(COE/1000000, 1),
COE_IMP = round(COE_IMP/1000000, 1),
COE_PAG = round(COE_PAG/1000000, 1))
}
if ("N_CLP" %in% names(programmi)) {
if (usa_meuro == TRUE) {
report <- report %>%
mutate(CP = round(CP/1000000, 1),
IMP = round(IMP/1000000, 1),
PAG = round(PAG/1000000, 1))
}
# arrange per template
report <- report %>%
select(x_CICLO, x_AMBITO, x_MACROAREA, RISORSE, COE, COE_IMP, COE_PAG, N, CP, IMP, PAG, N_CLP)
} else {
# arrange per template
report <- report %>%
select(x_CICLO, x_AMBITO, x_MACROAREA, RISORSE, COE, COE_IMP, COE_PAG, N)
}
}
out <- report %>%
filter(# x_AMBITO != "FEAMP",
x_AMBITO != "FEASR") %>%
arrange(desc(x_CICLO), x_AMBITO, x_MACROAREA)
if (export == TRUE) {
write_csv2(out, file.path(TEMP, "report_macroaree.csv"))
}
return(out)
}
#' Verifica variazione variabili coesione per programma
#'
#' Verifica variazione variabili coesione per programma. Confronta RISORSE per due versioni del DBCOE e COE, COE_IMP e COE_PAG pert due bimestri.
#'
#' @param dati_new Versione attuale dei dati. Di default è quella configurata in oc_init(), coincide con "bimestre".
#' @param dbcoe_new Versione attuale del DBCOE. Di default è quella configurata in oc_init().
#' @param dati_old Versione precedente dei dati (espressa come bimestre).
#' @param dbcoe_old Versione precedente del DBCOE.
#' @param use_cicli_psc Vuoi usare i dati di programmazione per cicli dei PSC?
#' @param use_fix_siepoc Vuoi correggere i dati SIE e POC 1420 con le anticipazioni di decisioni in base alle delibere sui POC?
#' @param stime_fix_siepoc Vuoi correggere i dati SIE e POC 1420 con le stime di chiusura dei programmi?
#' @param use_flt Logico. Vuoi utilizzare solo i programmi che rientrano nel perimetro coesione monitorabile?
#' @param export vuoi salvare il file?
#' @return Un dataframe per programma, ciclo e ambito.
chk_variazione_programmi_coesione_dataiku <- function(dati_new, dbcoe_new, dati_old, dbcoe_old,
use_cicli_psc=FALSE, use_fix_siepoc=FALSE, stime_fix_siepoc=FALSE, use_flt=TRUE, export=FALSE){
# DEBUG:
# dati_new = "20250228"
# dbcoe_new="20250228.00"
# dati_old = "20241231"
# dbcoe_old="20241231.02"
# use_cicli_psc=TRUE
# use_fix_siepoc=TRUE
# stime_fix_siepoc=TRUE
# export=TRUE
# print(DB)
progetti <- tibble(COD_LOCALE_PROGETTO = "XXXX",
OC_FINANZ_TOT_PUB_NETTO = 0,
IMPEGNI = 0,
TOT_PAGAMENTI = 0)
DATA1 <- file.path(dirname(DATA), dati_new)
macroaree1 <- load_macroaree(bimestre=dati_new, visualizzati=TRUE, DATA=DATA1)
DB1 <- file.path(DRIVE, "PROGRAMMAZIONE", dbcoe_new)
programmi_new <- make_report_programmi_coesione_dataiku(macroaree1, usa_meuro=TRUE, use_eu=FALSE, use_flt=use_flt, show_cp=FALSE,
use_cicli_psc=TRUE, use_fix_siepoc=TRUE, stime_fix_siepoc = TRUE,
export=FALSE, export_xls=FALSE, progetti=progetti, DB=DB1)
DATA2 <- file.path(dirname(DATA), dati_old)
macroaree2 <- load_macroaree(bimestre=dati_old, visualizzati=TRUE, DATA=DATA2)
DB2 <- file.path(DRIVE, "PROGRAMMAZIONE", dbcoe_old)
programmi_old <- make_report_programmi_coesione_dataiku(macroaree2, usa_meuro=TRUE, use_eu=FALSE, use_flt=use_flt, show_cp=FALSE,
use_cicli_psc=TRUE, use_fix_siepoc=TRUE, stime_fix_siepoc = TRUE,
export=FALSE, export_xls=FALSE, progetti=progetti, DB=DB2)
out <- programmi_new %>%
as_tibble(.) %>%
ungroup(.) %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO, x_PROGRAMMA) %>%
summarise(RISORSE = sum(RISORSE, na.rm=TRUE),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE)) %>%
full_join(programmi_old %>%
ungroup(.) %>%
group_by(OC_CODICE_PROGRAMMA, x_CICLO, x_AMBITO, x_GRUPPO, x_PROGRAMMA)%>%
summarise(RISORSE = sum(RISORSE, na.rm=TRUE),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE)),
by = c("OC_CODICE_PROGRAMMA", "x_CICLO", "x_AMBITO", "x_GRUPPO", "x_PROGRAMMA"),
suffix = c(".new", ".old")) %>%
mutate_if(is.numeric, replace_na, replace=0) %>%
mutate(CHK_RISORSE = RISORSE.new - RISORSE.old,
CHK_COE = COE.new - COE.old,
CHK_COE_IMP = COE_IMP.new - COE_IMP.old,
CHK_COE_PAG = COE_PAG.new - COE_PAG.old)
if (export==TRUE) {
write.xlsx(out, file.path(TEMP, paste0("chk_delta_coesione_", dbcoe_new, "_", dbcoe_old, ".xlsx")))
}
return(out)
}
' Verifica variazione variabili coesione per programma
#'
#' Verifica variazione variabili coesione per programma. Confronta RISORSE per due versioni del DBCOE e COE, COE_IMP e COE_PAG pert due bimestri.
#'
#' @param dati_new Versione attuale dei dati. Di default è quella configurata in oc_init(), coincide con "bimestre".
#' @param dbcoe_new Versione attuale del DBCOE. Di default è quella configurata in oc_init().
#' @param dati_old Versione precedente dei dati (espressa come bimestre).
#' @param dbcoe_old Versione precedente del DBCOE.
#' @param use_cicli_psc Vuoi usare i dati di programmazione per cicli dei PSC?
#' @param use_fix_siepoc Vuoi correggere i dati SIE e POC 1420 con le anticipazioni di decisioni in base alle delibere sui POC?
#' @param stime_fix_siepoc Vuoi correggere i dati SIE e POC 1420 con le stime di chiusura dei programmi?
#' @param use_flt Logico. Vuoi utilizzare solo i programmi che rientrano nel perimetro coesione monitorabile?
#' @param export vuoi salvare il file?
#' @return Un dataframe per programma, ciclo e ambito.
chk_variazione_sintesi_coesione_dataiku <- function(dati_new, dbcoe_new, dati_old, dbcoe_old,
use_cicli_psc=FALSE, use_fix_siepoc=FALSE, stime_fix_siepoc=FALSE, use_flt=TRUE, export=FALSE){
# DEBUG:
# dati_new = "20250228"
# dbcoe_new="20250228.00"
# dati_old = "20241231"
# dbcoe_old="20241231.02"
# use_cicli_psc=TRUE
# use_fix_siepoc=TRUE
# stime_fix_siepoc=TRUE
# export=TRUE
# print(DB)
progetti <- tibble(COD_LOCALE_PROGETTO = "XXXX",
OC_FINANZ_TOT_PUB_NETTO = 0,
IMPEGNI = 0,
TOT_PAGAMENTI = 0)
DATA1 <- file.path(dirname(DATA), dati_new)
macroaree1 <- load_macroaree(bimestre=dati_new, visualizzati=TRUE, DATA=DATA1)
DB1 <- file.path(DRIVE, "PROGRAMMAZIONE", dbcoe_new)
programmi_new <- make_report_programmi_coesione_dataiku(macroaree1, usa_meuro=TRUE, use_eu=FALSE, use_flt=use_flt, show_cp=FALSE,
use_cicli_psc=TRUE, use_fix_siepoc=TRUE, stime_fix_siepoc = TRUE,
export=FALSE, export_xls=FALSE, progetti=progetti, DB=DB1)
DATA2 <- file.path(dirname(DATA), dati_old)
macroaree2 <- load_macroaree(bimestre=dati_old, visualizzati=TRUE, DATA=DATA2)
DB2 <- file.path(DRIVE, "PROGRAMMAZIONE", dbcoe_old)
programmi_old <- make_report_programmi_coesione_dataiku(macroaree2, usa_meuro=TRUE, use_eu=FALSE, use_flt=use_flt, show_cp=FALSE,
use_cicli_psc=TRUE, use_fix_siepoc=TRUE, stime_fix_siepoc = TRUE,
export=FALSE, export_xls=FALSE, progetti=progetti, DB=DB2)
out <- programmi_new %>%
as_tibble(.) %>%
ungroup(.) %>%
group_by(x_CICLO, x_AMBITO) %>%
summarise(RISORSE = sum(RISORSE, na.rm=TRUE),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE)) %>%
full_join(programmi_old %>%
ungroup(.) %>%
group_by(x_CICLO, x_AMBITO)%>%
summarise(RISORSE = sum(RISORSE, na.rm=TRUE),
COE = sum(COE, na.rm = TRUE),
COE_IMP = sum(COE_IMP, na.rm = TRUE),
COE_PAG = sum(COE_PAG, na.rm = TRUE)),
by = c("x_CICLO", "x_AMBITO"),
suffix = c(".new", ".old")) %>%
mutate_if(is.numeric, replace_na, replace=0) %>%
mutate(CHK_RISORSE = RISORSE.new - RISORSE.old,
CHK_COE = COE.new - COE.old,
CHK_COE_IMP = COE_IMP.new - COE_IMP.old,
CHK_COE_PAG = COE_PAG.new - COE_PAG.old)
if (export==TRUE) {
write.xlsx(out, file.path(TEMP, paste0("chk_delta_coesione_sintesi_", dbcoe_new, "_", dbcoe_old, ".xlsx")))
}
return(out)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.