#!/usr/bin/perl -X use strict; use English; use utf8; use open ':std', ':encoding(UTF-8)'; use XML::Simple; use Time::Piece; my $xml = new XML::Simple; `curl -s -o "complete.xml" "http://www.reginfo.gov/public/do/XMLViewFileAction?f=EO_RULE_COMPLETED_YTD.xml"`; my $data = $xml->XMLin("complete.xml", keyattr => ['RIN']); my $allPub = 0; my $allC = 0; my $allReview = 0; my $sigPub = 0; my $sigC = 0; my $sigReview = 0; my $acaPub = 0; my $acaC = 0; my $acaReview = 0; my $doddPub = 0; my $doddC = 0; my $doddReview = 0; my $pubdate; my $compdate; my $rcvddate; my $diff; my $mindiff=9999; my $buggeddates = 0; foreach my $rule (keys $data->{REGACT}) { if (defined $data->{REGACT}->{$rule}->{DATE_PUBLISHED}) { $pubdate = Time::Piece->strptime($data->{REGACT}->{$rule}->{DATE_PUBLISHED}, "%Y-%m-%d"); $compdate = Time::Piece->strptime($data->{REGACT}->{$rule}->{DATE_COMPLETED}, "%Y-%m-%d"); $rcvddate = Time::Piece->strptime($data->{REGACT}->{$rule}->{DATE_RECEIVED}, "%Y-%m-%d"); $allC++; if (($pubdate < $compdate) || ($compdate < $rcvddate)) { $buggeddates++; } $diff = $pubdate - $compdate; $allPub += int($diff->days); if ((int($diff->days) < 3) && !(($pubdate < $compdate) || ($compdate < $rcvddate))) { print "Short Delay! RIN $rule: " . $data->{REGACT}->{$rule}->{TITLE} . " - Cleared " . $compdate->ymd . ", Published " . $pubdate->ymd . "\n"; } if (int($diff->days) >= 0 && int($diff->days) < $mindiff) { $mindiff = int($diff->days); } $diff = $compdate - $rcvddate; $allReview += int($diff->days); if ($data->{REGACT}->{$rule}->{ECONOMICALLY_SIGNIFICANT} eq "Yes") { $sigC++; $diff = $pubdate - $compdate; $sigPub += int($diff->days); $diff = $compdate - $rcvddate; $sigReview += int($diff->days); } if ($data->{REGACT}->{$rule}->{HEALTH_CARE_ACT} eq "Yes") { $acaC++; $diff = $pubdate - $compdate; $acaPub += int($diff->days); $diff = $compdate - $rcvddate; $acaReview += int($diff->days); } if ($data->{REGACT}->{$rule}->{DODD_FRANK_ACT} eq "Yes") { $doddC++; $diff = $pubdate - $compdate; $doddPub += int($diff->days); $diff = $compdate - $rcvddate; $doddReview += int($diff->days); } } } print "\nTotal Rules: $allC\nAverage from Receipt to Completion: " . ($allPub / $allC) . "\nAverage from Completion to Publication: " . ($allReview / $allC) . "\n\n"; if ($sigC > 0) { print "Significant Rules: $sigC\nAverage from Receipt to Completion (Significant): " . ($sigPub / $sigC) . "\nAverage from Completion to Publication: " . ($sigReview / $sigC). "\n\n"; } if ($acaC > 0) { print "ACA Rules: $acaC\nAverage from Receipt to Completion (ACA): " . ($acaPub / $acaC) . "\nAverage from Completion to Publication: " . ($acaReview / $acaC). "\n\n"; } if ($doddC > 0) { print "DF Rules: $doddC\nAverage from Receipt to Completion (DF): " . ($doddPub / $doddC) . "\nAverage from Completion to Publication: " . ($doddReview / $doddC). "\n\n"; } print "Inconsistent Dates: $buggeddates\n";