function run_opp_compute_delta_politici($task, $args, $options)
{
    static $loaded;
    // load application context
    if (!$loaded) {
        task_loader();
        $loaded = true;
    }
    $data = '';
    $dry_run = false;
    if (array_key_exists('data', $options)) {
        $data = $options['data'];
    }
    if (array_key_exists('dry-run', $options)) {
        $dry_run = true;
    }
    // definisce la data fino alla quale vanno fatti i calcoli
    // data_lookup serve per controllare se i record già esistono
    if ($data != '') {
        $data_lookup = $data;
    } else {
        $data_lookup = OppPoliticianHistoryCachePeer::fetchLastData();
    }
    $msg = sprintf("start time: %s\n", date('H:i:s'));
    echo $msg;
    // calcolo date inizio e fine mese scorso
    list($last_month_start, $last_month_end) = Util::getLastMonthDates($data_lookup);
    // calcolo delta per dati di presenza, indice e ribellioni
    $rs = OppPoliticianHistoryCachePeer::getRSByDataRamoChiTipo($data_lookup);
    $cnt = 0;
    while ($rs->next()) {
        $cnt++;
        $r = $rs->getRow();
        printf("%6d) %1s %7d ... ", $cnt, $r['chi_tipo'], $r['chi_id']);
        // estrazione record storico alla fine del mese scorso
        $r_1 = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($last_month_end, $r['chi_tipo'], $r['chi_id'], $r['ramo']);
        // salta record per cui non c'è abbastanza storia
        if (!$r_1 instanceof OppPoliticianHistoryCache) {
            printf(" NA \n");
            continue;
        }
        list($presenze_delta, $assenze_delta, $missioni_delta) = presenzeDelta($data_lookup, $r, $r_1);
        printf("presenze: %7.2f%%,  assenze: %7.2f%%,  missioni: %7.2f%%,  ", $presenze_delta, $assenze_delta, $missioni_delta);
        $indice_delta = indiceDelta($data_lookup, $r, $r_1);
        printf("indice: %8.4f,  ", $indice_delta);
        $ribellioni_delta = ribellioniDelta($data_lookup, $r, $r_1);
        printf("ribellioni: %7.2f%%", $ribellioni_delta);
        if (!$dry_run) {
            $r = OppPoliticianHistoryCachePeer::retrieveByDataChiTipoChiIdRamo($data_lookup, $r['chi_tipo'], $r['chi_id'], $r['ramo']);
            $r->setPresenzeDelta($presenze_delta);
            $r->setAssenzeDelta($assenze_delta);
            $r->setMissioniDelta($missioni_delta);
            $r->setIndiceDelta($indice_delta);
            $r->setRibellioniDelta($ribellioni_delta);
            $r->save();
            printf(" OK!\n");
        } else {
            printf("\n");
        }
    }
    echo "data: {$data_lookup}\n";
    $msg = sprintf("end time: %s\n", date('H:i:s'));
    echo $msg;
}