Ensuring Compliance with ACL

download Ensuring Compliance  with ACL

of 42

  • date post

    21-Jan-2016
  • Category

    Documents

  • view

    40
  • download

    0

Embed Size (px)

description

Ensuring Compliance with ACL. A Developer’s View Reg Brehaut, ACDA. Our Project Characteristics. Compliance, not Financial Volumes of Oil & Gas, not dollars Continuous Monitoring Watch every operator, not audit specific ones Consistency, not Creativity 600 Operators, one database - PowerPoint PPT Presentation

Transcript of Ensuring Compliance with ACL

  • Ensuring Compliance with ACLA Developers ViewReg Brehaut, ACDA

  • Our Project CharacteristicsCompliance, not FinancialVolumes of Oil & Gas, not dollarsContinuous MonitoringWatch every operator, not audit specific onesConsistency, not Creativity 600 Operators, one database100% Automated

  • Compliance Assessment ProcessOperators enter data over several weeksOur data refreshed after deadlineACL project runs over nightOperators receive and review reportsAuditors receive and review reportsAuditors call Operators on specific itemsOperators make changes to processes

  • Assumption vs. RealityAssumption:Lack of Compliance will show up in data

    Reality:Noncompliance that does not affect the data will never get caught by our analysis

  • Challenges/IssuesStructuring a Project for automatic executionNaming Conventions Preparing the dataTracking ProgressUsing StatisticsLimitations/Frustrations with ACL

  • Automatic ExecutionNo user interface Run by Windows schedulerCommand line executes master script

    /b master_script

    Master script calls all other scripts

    Separate routine (not ACL) produces and distributes reports

  • Structuring for Automatic Execution

    Get and prepare the data

    Run the Analytic Scripts

    Compile the report files

  • Project Structure

    M_Grand_Master

    M_Base_Table_Master

    M_Analytic_Master

    M_Data_Preparation_Master

    M_Report_Master

    D_Registry_Extracts

    D_FIS_Extracts

    D_COM_Extracts

    D_RefTables_Extracts

    B_1Month_ProFac

    B_13Months_Reporting

    B_1Month_Reporting_DD

    B_13Months_VME

    B_1Month_Summary_DD

    B_13Months_Summary

    B_13Months_ProFac

    R_Fac_Details

    R_BA_Details

    R_Report_Files

    Dozens, Scores, Hundreds of Scripts

  • Naming Conventions: WhyScripts134 scripts in 5 folders:6 Master scripts26 to prepare the data90 Analytic Scripts6 for Reporting6 UtilitiesTables183 tables in 5 folders: 45 Source tables 34 Extracts tables11 Base tables 90 Analytic Results3 Report Results

    We have a problem keeping all this organized

  • ACL Beef 1: Limit on Name LengthS_ = source tablesE_ = extract tables

    D_ = data preparation scriptsA_ = analytic scripts

    RF_ = Facility ResultsRO_ = Operator Results

  • ACL Beef 2: No Search function

    Not sure where (in a hundred scripts) a file gets created?

    Good luck finding it!

  • Naming Conventions: ConnectionsA_Script_NameproducesT_Script_Name temporary filesandR_Script_Name result files

  • Preparing the DataClean/Standardize the DataInclude only rows and fields neededConsistent names, formats & sizes

  • Preparing the DataClean/Standardize the DataInclude only rows and fields neededConsistent names, formats & sizes

    Modify for easier scriptingFlatten Data to avoid repetitive codingRestructure for easier analysis

  • Controlling Execution of ScriptsImport into Source file (S_Indicators)Extract Active items to E_IndicatorsSpreadsheet:

  • Controlling Execution of ScriptsM_Analytic_Master script:

    open E_Indicatorscountv_Number_of_Scripts = Count1v_CAI = 1Do M_Run_CAIs While v_Number_of_Scripts >= v_CAI

  • Controlling Execution of ScriptsM_Run_CAIs script:

    Open E_IndicatorsLocate Record v_CAIv_ScriptName = substr("A_" + ACL_Indicator + Blanks(30),1,31)

    Do %v_ScriptName%

    v_CAI = v_CAI + 1

  • Tracking ProgressComment*************************************************************************Script Name:A_Abandoned_Wells**Description:Creates file where Production is reported for** Abandoned Wells**Requirements:**Output:RF_Abandoned_Wells**Written By:Reg Brehaut and Barb Ramsay, Nov 2008**Modified By:**Version:1.0***********************************************************************

  • Tracking ProgressCommentScript Name:A_Abandoned_Wells

    Comment*************************************************************************Description:Creates file where Production is reported for**Abandoned Wells**Requirements:**Output:RF_Abandoned_Wells**Written By:Reg Brehaut and Barb Ramsay, Nov 2008**Modified By:**Version:1.0***********************************************************************

  • M_Run_CAIs, with ProgressOpen E_IndicatorsLocate Record v_CAIv_ScriptName = substr("A_" + ACL_Indicator + Blanks(30),1,31)

    Do %v_ScriptName%

    v_CAI = v_CAI + 1

  • M_Run_CAIs, with ProgressOpen E_IndicatorsLocate Record v_CAIv_ScriptName = substr("A_" + ACL_Indicator + Blanks(30),1,31)v_StartTime = TIME()Extract "%v_StartTime%" as "Started" "%v_ScriptName%" as "Script" Blanks(8) as "Ended" to "Status" AppendDo %v_ScriptName%v_EndTime = TIME()Extract Blanks(8) as "Started" "%v_ScriptName% as "Script" "%v_EndTime%" as "Ended to "Status" Appendv_CAI = v_CAI + 1

  • Progress ReportStatus File

  • Progress Report: Completed

  • Compiling Report DataCreate list of existing result filesCycle through, adding contents of each

    Dir "%_v_Home%RF_*.FIL" Suppress To Report_listv_Number_of_Files = Write1v_Counter=1Do R_Fac_Details_B While v_Number_of_Files >= v_Counter

  • Adding Results to Report FileOpen Report_ListLocate Record v_Counterv_File = Alltrim(Clean(File_Name '.') )+ Blanks(35)

    Open %v_File%Indicator = substr(v_File,4,31)Extract fields Facility_Id Indicator substr(Explanation + Blanks(250),1,250) as "Explanation" to "RP_Fac_Details" Append

    v_Counter = v_Counter+1

  • Adding & Removing AnalyticsAdding:Write & test the scriptAdd it to the control spreadsheetNo change required to any other script

    Removing:Change status in control spreadsheet

  • ACL Beef 3: No Across-Field StatisticsAll Statistics are single field across rows

    ACL provides Range, Mean & StdDevManually calculate SlopeStatistics on StatisticsCalculate the StdDev for sets of numbersDetermine the Mean and StdDev of these StdDevsFollow-up on those that are very different

  • ACL Beefs 4 6:Only One thing Open at a TimeACL does not support continuation linesACL does not do Documentation well

  • Ensuring Compliance with ACLA Developers View

    Questions?

  • Reg BrehautWinner of the ACL Impact Award 2009, for Most Promising Novice System Architect and Developer, Trainer, Technical WriterCurrently instructing in the evenings at SAIT; has instructed at the U of C, Mount Royal College and across the USDeveloped the Compliance Assessment system using ACL for Albertas Energy regulator

  • OopsThe following slides are best viewed by clicking on links in the related pages (which appear before this slide)

    Each set of linked slides ends with a Back link to return you to the slide you came from

  • Continuation LinesExtract record ;for activity_year_month = _v_EndingYearMonth ;and Fluid_Type = "WATER" ;and Activity_Type = "DIFF" ;and Activity_Quantity > 20 ;and (Volumetric_Imbalance_Percentage > 10.0 ;or Volumetric_Imbalance_Percentage < -10.0) ;to RF_Metering_Diff_High_Waterback

  • Data in Multiple Tables: ProblemAccounts Table:Account Number (key to Account Name file)CustVend Number (key to Customer/Vendor file)Division Number (key to Division Name file)Project Number (key to Project File)Transaction Type (key to Transaction Name file)AmountDatePeriod

  • Data in Multiple Tables: SolutionOpen AccountsOpen AccountNames SecJoin to Temporary_1 (to get account names) Open

    Open CustomerVendor SecJoin to Temporary_2 (to get customer/vendor names) Open

    Open DivisionNames SecJoin to Temporary_3 (to get division names) Open

    Extract record if [condition is true] to Final_Result

  • Flatten the DataDo all joins once, save as working tableUse only working table as source

    Scripts now just two lines

    Open Working_TableExtract record if [condition is true] to Final_Resultback

  • Restructure for Easier Analysis For ExampleBy Division, what are Expenses as a % of Revenue?By Account, how does this months amount compare to 12 month average?

    Can be done, but takes several stepsbecause data is on different records

    Put data on same record

  • Across-Field Comparisons Create a record for each division:

    Div # Acct1 Acct2 Acct3 Acct57

    Extract record if Acct42 / Acct12 > 1.15 to

    We do this for Fluid & Activity combinations

    Facility ID Gas_Production Gas_Flaring Gas_Disposition

    Extract record if Oil_Production > Gas_Production and to

  • Across-Period Comparisons Create a record for each account:

    Acct# Month1 Month2 Month3 Month12 Average StdDev

    Extract record if Month12 > (Average * 1.15) to back

  • Row Statistics: Meandelete field Mean OKdefine field Mean Computed (Month1 + Month2 + Month3 + Month4 + Month5 + Month6 + Month7 + Month8 + Month9 + Month10 + Month11 + Month12) / 12

  • Row Statistics: StdDevVariance = sum of the square of the differences from the mean

    delete field Variance OKdefine field Variance Computed ((Month1 - Mean) * (Month1 - Mean)) + ((Month2 - Mean) * (Month2 - Mean)) + ((Month3 - Mean) * (Month3 - Mean)) + ((Month4 - Mean) * (Month4 - Mean)) + ((Month5 - Mean) * (Month5 - Mean)) + ((Month6 - Mean) * (Month6 - Mean)) + ((Month7 - Mean) * (Month7 - Mean)) + ((Month8 - Mean) * (Month8 - Mean)) + ((Month9 - Mean) * (Month9 - Mean)) + ((Month10 - Mean) * (Month10 - Mean)) + ((Month11 - Mean) * (Month11 - Mean)) + ((Month12 - Mean) * (Month12 - Mean))

    delete field StdDev OKdefine field StdDev Computed root(Variance,4)back

  • Calculating SlopeSlope of the Line (i.e. R