def _network_indicator_percentages(fields, network_indicators):
    """Encapsula el cálculo de indicadores de porcentaje (de errores,
    de campos recomendados/optativos utilizados, de datasets actualizados)
    sobre la red de nodos entera.

    Args:
        fields (dict): Diccionario con claves 'recomendado', 'optativo',
            'total_recomendado', 'total_optativo', cada uno con valores
            que representan la cantidad de c/u en la red de nodos entera.

        network_indicators (dict): Diccionario de la red de nodos, con
            las cantidades de datasets_meta_ok y datasets_(des)actualizados
            calculados previamente. Se modificará este argumento con los
            nuevos indicadores.
    """

    # Los porcentuales no se pueden sumar, tienen que ser recalculados
    percentages = {
        'datasets_meta_ok_pct':
            (network_indicators.get('datasets_meta_ok_cant'),
             network_indicators.get('datasets_meta_error_cant')),
        'datasets_actualizados_pct':
            (network_indicators.get('datasets_actualizados_cant'),
             network_indicators.get('datasets_desactualizados_cant')),
        'datasets_federados_pct':
            (network_indicators.get('datasets_federados_cant'),
             network_indicators.get('datasets_no_federados_cant')),
        'datasets_con_datos_pct':
            (network_indicators.get('datasets_con_datos_cant'),
             network_indicators.get('datasets_sin_datos_cant')),
    }

    for indicator in percentages:
        pct = 0.00
        partial = percentages[indicator][0] or 0
        total = partial + (percentages[indicator][1] or 0)
        # Evita division por 0
        if total:
            pct = float(partial) / total
        network_indicators[indicator] = round(pct, 4)

    # % de campos recomendados y optativos utilizados en el catálogo entero
    if fields:  # 'fields' puede estar vacío si ningún campo es válido
        rec_pct = float(fields['recomendado']) / \
            fields['total_recomendado']

        opt_pct = float(fields['optativo']) / fields['total_optativo']

        network_indicators.update({
            'campos_recomendados_pct': round(rec_pct, 4),
            'campos_optativos_pct': round(opt_pct, 4)
        })
Encapsula el cálculo de indicadores de porcentaje (de errores,
    de campos recomendados/optativos utilizados, de datasets actualizados)
    sobre la red de nodos entera.

    Args:
        fields (dict): Diccionario con claves 'recomendado', 'optativo',
            'total_recomendado', 'total_optativo', cada uno con valores
            que representan la cantidad de c/u en la red de nodos entera.

        network_indicators (dict): Diccionario de la red de nodos, con
            las cantidades de datasets_meta_ok y datasets_(des)actualizados
            calculados previamente. Se modificará este argumento con los
            nuevos indicadores.