La Auditoría Superior de la Federación (ASF) es el órgano técnico especializado de la Cámara de Diputados, dotado de autonomía técnica y de gestión, se encarga de fiscalizar el uso de los recursos públicos federales en los tres Poderes de la Unión; los órganos constitucionales autónomos; los estados y municipios; y en general cualquier entidad, persona física o moral, pública o privada que haya captado, recaudado, administrado, manejado o ejercido recursos públicos federales. El resultado final de la labor de la ASF son los Informes Individuales de Auditoría y el Informe General Ejecutivo del Resultado de la Fiscalización Superior de la Cuenta Pública.
Conforme al marco de normas profesionales de auditoría emitido por la Organización Internacional de las Entidades Fiscalizadoras Superiores (INTOSAI, por sus siglas en inglés), existen tres modalidades de auditoría: cumplimiento, financiera y desempeño.
Con base en los alcances y conceptos de dichos tipos de auditoría, en la práctica, la ASF contempla dos tipos de revisiones: de cumplimiento financiero y de desempeño. A continuación, se describen estas dos categorías, así como los enfoques que se derivan de las mismas.
Se revisa que la recaudación, captación, administración, ejercicio y aplicación de recursos aprobados por el Congreso se lleven a cabo de acuerdo con la normativa correspondiente, y que su manejo y registro financiero haya sido correcto.
Bajo esta categoría se incluyen las siguientes cinco modalidades:
Auditoría de inversiones físicas: su materia de análisis son los procesos de adquisición, el desarrollo de las obras públicas, la justificación de las inversiones, el cumplimiento de los estándares de calidad previstos, la razonabilidad de los montos invertidos, así como la conclusión de las obras en tiempo y forma.
Auditoría forense: consiste en la aplicación de una metodología de fiscalización que conlleva la revisión rigurosa y pormenorizada de procesos, hechos y evidencias, con el propósito de documentar la existencia de un presunto acto irregular.
Auditoría a las tecnologías de la información y comunicaciones: se revisan las adquisiciones, administración, aprovechamiento de sistemas e infraestructuras, calidad de los datos y la seguridad de la información de las entidades públicas.
Auditoría a los sistemas de control interno: se evalúan las políticas, procesos y actividades que aseguran el cumplimiento de los objetivos institucionales.
Auditoría al gasto federalizado: consiste en la fiscalización del ejercicio presupuestario y el cumplimiento de metas y objetivos de los fondos y programas financiados con recursos federales transferidos a estados y municipios, para renglones como educación, salud, creación de infraestructura básica, abatimiento de la pobreza y seguridad pública. De la misma forma, bajo este rubro se revisan las participaciones federales.
Las auditorías de desempeño son definidas por la ASF, con base en lo establecido por la Organización Internacional de Entidades Fiscalizadoras Superiores (INTOSAI, por sus siglas en inglés), como una revisión objetiva y confiable que permite conocer si las políticas públicas operan bajo los principios de eficacia, eficiencia y economía.
Las auditorías de desempeño otorgan información, análisis y perspectivas sobre el quehacer gubernamental para minimizar los costos de los recursos empleados; obtener el máximo de los insumos disponibles; lograr los resultados previstos, y verificar el impacto social y económico para la ciudadanía.
Las evaluaciones de políticas públicas implican una valoración objetiva del impacto de los programas, proyectos, políticas y acciones gubernamentales, en el contexto de las metas establecidas en la normativa aplicable y en los documentos de planeación nacional y sectoriales.
De acuerdo con la INTOSAI, el objetivo de las evaluaciones de políticas públicas es examinar la solidez, consistencia, eficiencia y eficacia de las políticas públicas para identificar, bajo criterios objetivos y confiables, las razones de su éxito o fracaso; sus fortalezas y debilidades, así como los aspectos susceptibles de mejora que contribuyan al logro de los fines propuestos en beneficio de la sociedad.
Las evaluaciones de políticas públicas abarcan los resultados del quehacer gubernamental, pero amplían tanto los alcances temporales como los administrativos, toda vez que no se ciñen a una Cuenta Pública determinada.
El Sistema Nacional Anticorrupción (SNA) tiene como objetivos esenciales la prevención, detección y combate a la corrupción (Gutiérrez Salazar (2017)). La ASF participa en el SNA como uno de los órganismos integrantes del Comité Coordinador. Al Comité Coordinador le corresponde (Secretariado Ejecutivo del Sistema Nacional Anticorrupción (2021)):
Es claro entonces el rol central que las tareas de fiscalización (entendida como la supervisión o inspección) de los recursos públicos juega un rol central en el SNA. En lo que toca a los recursos públicos federales, claramente la entidad más relevante en este rol es la ASF.
Es claro que no toda falla o desviación en el ejercicio de los recursos públicos estará ligada necesariamente a un acto de corrupción; es muy probable, por otro lado, que algunas de estas desviaciones sí lo estén. Sin embargo, un argumento más general que se puede emplear es que es razonable asumir que, ante una mayor presencia de desviaciones, se percibe como mayor el riesgo de corrupción en una determinada unidad de análisis (una determinada instutición gubernamental, por ejemplo).
Los datos son obtenidos de la página de la Auditoría Superior de la Federación: asfdatos.
# El insumo 2020 no tiene los mismos encabezados que los otros años. Se
# corrigieron manualmente.
#
datos.2020 <- read.xlsx(xlsxFile = 'asf_2020.xlsx', check.names = FALSE)
datos.2020 <-
data.frame(
datos.2020[, 1:13]
, Auditorías = 1
, datos.2020[, 14:17]
, check.names = FALSE
)
datos.2019 <- read.xlsx(xlsxFile = 'asf_2019.xlsx')
datos.2018 <- read.xlsx(xlsxFile = 'asf_2018.xlsx')
datos.2017 <- read.xlsx(xlsxFile = 'datos_asf_2017_completo.xlsx')
datos.2016 <- read.xlsx(xlsxFile = 'asf_2016.xlsx')
datos.2015 <- read.xlsx(xlsxFile = 'asf_2015.xlsx')
datos.2014 <- read.xlsx(xlsxFile = 'asf_2014.xlsx')
datos.2013 <- read.xlsx(xlsxFile = 'asf_2013.xlsx')
datos <-
rbind(
datos.2020[!is.na(datos.2020$Año.Cuenta.Pública),]
, datos.2019[!is.na(datos.2019$Año.Cuenta.Pública),]
, datos.2018[!is.na(datos.2018$Año.Cuenta.Pública),]
, datos.2017[!is.na(datos.2017$Año.Cuenta.Pública),]
, datos.2016[!is.na(datos.2016$Año.Cuenta.Pública),]
, datos.2015[!is.na(datos.2015$Año.Cuenta.Pública),]
, datos.2014[!is.na(datos.2014$Año.Cuenta.Pública),]
, datos.2013[!is.na(datos.2013$Año.Cuenta.Pública),]
)
# Calcula el número de auditorías por año.
#
datos.7 <-
with(
unique(datos[, c('Año.Cuenta.Pública', 'Número')]),
aggregate(
x = list(
Auditorias = rep(
x = 1,
nrow(unique(datos[, c('Año.Cuenta.Pública', 'Número')])))),
by = list(Año.Cuenta.Pública = Año.Cuenta.Pública),
FUN = sum))
# Calcula el número de observaciones por año.
#
datos.8 <-
with(
datos,
aggregate(
x = list(Observaciones = rep(x = 1, nrow(datos))),
by = list(Año.Cuenta.Pública = Año.Cuenta.Pública),
FUN = sum))
# Calcula el número de observaciones por auditoría por año.
#
datos.9 <-
merge(
x = datos.7,
y = datos.8,
by.x = 'Año.Cuenta.Pública',
by.y = 'Año.Cuenta.Pública',
all = TRUE)
datos.9$Obs_x_Audit <- datos.9$Observaciones / datos.9$Auditorias
datos.9 <- datos.9[order(datos.9$Año.Cuenta.Pública, decreasing = TRUE),]
datatable(
data = datos.9,
colnames = c("Año",
"Número de Auditorías",
"Número de Observaciones",
"Observaciones por Auditoría"),
rownames = FALSE) %>%
formatCurrency(
columns = c(2:3),
currency = "",
interval = 3,
digits = 0,
mark = ',',
dec.mark = '.') %>%
formatCurrency(
columns = 4,
currency = "",
interval = 3,
digits = 2,
mark = ',',
dec.mark = '.')
ggplot(data = datos.9, mapping = aes(x = Año.Cuenta.Pública, y = Auditorias)) +
geom_line() +
xlab(label = 'Año') +
ylab(label = 'Número de auditorías') +
labs(title = 'Número de auditorías por año') +
theme_minimal()
ggplot(data = datos.9, mapping = aes(x = Año.Cuenta.Pública, y = Observaciones)) +
geom_line() +
xlab(label = 'Año') +
ylab(label = 'Número de observaciones') +
labs(title = 'Número de observaciones por año') +
theme_minimal()
ggplot(data = datos.9, mapping = aes(x = Año.Cuenta.Pública, y = Obs_x_Audit)) +
geom_line() +
geom_hline(yintercept = mean(datos.9$Obs_x_Audit), colour = 'red') +
xlab(label = 'Año') +
ylab(label = 'Número de observaciones por auditoría') +
labs(title = 'Número de observaciones por auditoría por año') +
theme_minimal()
# Calcula el número de auditorías por año y grupo.
#
datos.13 <-
with(
unique(datos[, c('Año.Cuenta.Pública', 'Grupo.Funcional', 'Número')]),
aggregate(
x = list(
Auditorias = rep(
x = 1,
nrow(
unique(
datos[, c('Año.Cuenta.Pública', 'Grupo.Funcional', 'Número')])))),
by =
list(
Año.Cuenta.Pública = Año.Cuenta.Pública,
Grupo.Funcional = Grupo.Funcional),
FUN = sum))
# Calcula el número de observaciones por año y grupo.
#
datos.14 <-
with(
datos,
aggregate(
x = list(Observaciones = rep(x = 1, nrow(datos))),
by =
list(
Año.Cuenta.Pública = Año.Cuenta.Pública,
Grupo.Funcional = Grupo.Funcional),
FUN = sum))
# Calcula el número de observaciones por auditoría por año y grupo.
#
datos.15 <-
merge(
x = datos.13,
y = datos.14,
by.x = c('Año.Cuenta.Pública', 'Grupo.Funcional'),
by.y = c('Año.Cuenta.Pública', 'Grupo.Funcional'),
all = TRUE)
datos.15$Obs_x_Audit <- datos.15$Observaciones / datos.15$Auditorias
# Número de auditorías por año y por grupo funcional
#
datos.15.1 <-
dcast(
data = datos.15,
formula = Grupo.Funcional ~ Año.Cuenta.Pública,
value.var = 'Auditorias')
# Observaciones por año y por grupo funcional
#
datos.15.2 <-
dcast(
data = datos.15,
formula = Grupo.Funcional ~ Año.Cuenta.Pública,
value.var = 'Observaciones')
# Observaciones por auditoría por año y por grupo funcional
#
datos.15.3 <-
dcast(
data = datos.15,
formula = Grupo.Funcional ~ Año.Cuenta.Pública,
value.var = 'Obs_x_Audit')
datatable(
data = datos.15.1,
colnames = c("Grupo Funcional" = 'Grupo.Funcional'),
rownames = FALSE,
caption = 'Auditorías por año y grupo funcional.') %>%
formatRound(
columns = 2:ncol(datos.15.1),
digits = 0)
datatable(
data = datos.15.2,
colnames = c("Grupo Funcional" = 'Grupo.Funcional'),
rownames = FALSE,
caption = 'Observaciones por año y grupo funcional.') %>%
formatRound(
columns = 2:ncol(datos.15.2),
digits = 0)
datatable(
data = datos.15.3,
colnames = c("Grupo Funcional" = 'Grupo.Funcional'),
rownames = FALSE,
caption = 'Observaciones por auditoría por año y grupo funcional.') %>%
formatRound(
columns = 2:ncol(datos.15.3),
digits = 0)
# Calcula el número de auditorías por por entidad federativa.
#
datos.1 <-
with(
unique(datos[,c('Entidad.Federativa','Número')]),
aggregate(
x = list(
Auditorias = rep(
x = 1,
nrow(unique(datos[,c('Entidad.Federativa','Número')])))),
by = list(Entidad.Federativa = Entidad.Federativa),
FUN = sum))
# Calcula el número de observaciones por entidad federativa.
#
datos.2 <-
with(
datos,
aggregate(
x = list(Observaciones = rep(x = 1, nrow(datos))),
by = list(Entidad.Federativa = Entidad.Federativa),
FUN = sum))
# Calcula el número de observaciones por auditoría por entidad federativa.
#
datos.3 <-
merge(
x = datos.1,
y = datos.2,
by.x = 'Entidad.Federativa',
by.y = 'Entidad.Federativa',
all = TRUE)
datos.3$Obs_x_Audit <- datos.3$Observaciones / datos.3$Auditorias
datatable(
data = datos.3,
colnames = c("Entidad Federativa",
"Número de Auditorías",
"Número de Observaciones",
"Observaciones por Auditoría"),
rownames = FALSE) %>%
formatCurrency(
columns = c(2:3),
currency = "",
interval = 3,
digits = 0,
mark = ',',
dec.mark = '.') %>%
formatCurrency(
columns = 4,
currency = "",
interval = 3,
digits = 2,
mark = ',',
dec.mark = '.')
# Calcula el número de auditorías por grupo.
#
datos.10 <-
with(
unique(datos[,c('Grupo.Funcional', 'Número')]),
aggregate(
x = list(
Auditorias = rep(
x = 1,
nrow(unique(datos[,c('Grupo.Funcional', 'Número')])))),
by = list(Grupo.Funcional = Grupo.Funcional),
FUN = sum))
# Calcula el número de observaciones por Grupo.Funcional.
#
datos.11 <-
with(
datos,
aggregate(
x = list(Observaciones = rep(x = 1, nrow(datos))),
by = list(Grupo.Funcional = Grupo.Funcional),
FUN = sum))
# Calcula el número de observaciones por auditoría por Grupo.Funcional.
#
datos.12 <-
merge(
x = datos.10,
y = datos.11,
by.x = 'Grupo.Funcional',
by.y = 'Grupo.Funcional',
all = TRUE)
datos.12$Obs_x_Audit <- datos.12$Observaciones / datos.12$Auditorias
datatable(
data = datos.12,
colnames = c("Grupo Funcional",
"Número de Auditorías",
"Número de Observaciones",
"Observaciones por Auditoría"),
rownames = FALSE) %>%
formatCurrency(
columns = c(2:3),
currency = "",
interval = 3,
digits = 0,
mark = ',',
dec.mark = '.') %>%
formatCurrency(
columns = 4,
currency = "",
interval = 3,
digits = 2,
mark = ',',
dec.mark = '.')
# Calcula el número de auditorías por sector.
#
datos.4 <-
with(
unique(datos[,c('Sector', 'Número')]),
aggregate(
x = list(
Auditorias = rep(
x = 1,
nrow(unique(datos[,c('Sector', 'Número')])))),
by = list(Sector = Sector),
FUN = sum))
# Calcula el número de observaciones por Sector.
#
datos.5 <-
with(
datos,
aggregate(
x = list(Observaciones = rep(x = 1, nrow(datos))),
by = list(Sector = Sector),
FUN = sum))
# Calcula el número de observaciones por auditoría por Sector.
#
datos.6 <-
merge(
x = datos.4,
y = datos.5,
by.x = 'Sector',
by.y = 'Sector',
all = TRUE)
datos.6$Obs_x_Audit <- datos.6$Observaciones / datos.6$Auditorias
datatable(
data = datos.6,
colnames = c("Sector",
"Número de Auditorías",
"Número de Observaciones",
"Observaciones por Auditoría"),
rownames = FALSE) %>%
formatCurrency(
columns = c(2:3),
currency = "",
interval = 3,
digits = 0,
mark = ',',
dec.mark = '.') %>%
formatCurrency(
columns = 4,
currency = "",
interval = 3,
digits = 2,
mark = ',',
dec.mark = '.')
write.table(
x = unique(datos[, c('Sector', 'Ente.Fiscalizado', 'Entidad.Federativa')]),
file = 'entes_fiscalizados_no_encontrados.txt',
sep = '|',
row.names = FALSE)
# Calcula el número de auditorías por ente.
#
datos.10 <-
with(
unique(datos[, c('Ente.Fiscalizado', 'Año.Cuenta.Pública', 'Número')]),
aggregate(
x = list(
Auditorias = rep(
x = 1,
nrow(
unique(
datos[
, c('Ente.Fiscalizado', 'Año.Cuenta.Pública', 'Número')])))),
by = list(Ente.Fiscalizado = Ente.Fiscalizado),
FUN = sum))
# Calcula el número de observaciones por ente.
#
datos.11 <-
with(
datos,
aggregate(
x = list(Observaciones = rep(x = 1, nrow(datos))),
by = list(Ente.Fiscalizado = Ente.Fiscalizado),
FUN = sum))
# Calcula el número de observaciones por auditoría por año.
#
datos.12 <-
merge(
x = datos.10,
y = datos.11,
by.x = 'Ente.Fiscalizado',
by.y = 'Ente.Fiscalizado',
all = TRUE)
datos.12$Obs_x_Audit <- datos.12$Observaciones / datos.12$Auditorias
datatable(
data = datos.12,
colnames = c("Ente Fiscalizado",
"Número de Auditorías",
"Número de Observaciones",
"Observaciones por Auditoría"),
rownames = FALSE) %>%
formatCurrency(
columns = c(2:3),
currency = "",
interval = 3,
digits = 0,
mark = ',',
dec.mark = '.') %>%
formatCurrency(
columns = 4,
currency = "",
interval = 3,
digits = 2,
mark = ',',
dec.mark = '.')
La siguiente tabla muestra el número de auditorías históricamente realizadas (entre 2013 y 2020) por tipo de auditoría.
# Calcula el número de auditorías por ente.
#
temp <-
with(
unique(
datos[
, c('Ente.a.quien.se.dirige.la.Acción', 'Año.Cuenta.Pública', 'Número')
]
),
aggregate(
x = list(
Auditorias = rep(
x = 1,
nrow(
unique(
datos[
, c(
'Ente.a.quien.se.dirige.la.Acción'
, 'Año.Cuenta.Pública'
, 'Número'
)
]
)
)
)
),
by = list(Ente = Ente.a.quien.se.dirige.la.Acción),
FUN = sum
)
)
datatable(
data = temp[order(temp[, 2], decreasing = TRUE), ]
, colnames =
c(
"Ente"
, "Número de Auditorías"
)
, rownames = FALSE
) %>%
formatRound(columns = 2, digits = 0)
Totales
Agregar universo y muestra a las métricas
Comparar con datos de corrupción ENCIG y con criminalidad SESNSP.
Por grupo y año como % del total