Files
sheq-analysis-tool/__pycache__/app.cpython-314.pyc
T

87 lines
15 KiB
Plaintext
Raw Normal View History

2026-04-20 15:23:18 +12:00
+
.%×iE/ãóa0t$Rt^RIHt^RIt^RIt^RIHt^RIt^RI H
t
H t H t H
t
Ht^RIHtHtHtHtHtHtHtHt^RIHtHtHt^RIHt^RIHt^R I H!t!]PD!]PFR
R R 7]PH!R
4t%]
!]&4t'RR/t(R])R&RRlt*RRlt+]'PYR4R4t-]'PYRR.R7R4t.]'PYRR.R7R4t/]'PYRR.R7R4t0]&R8Xdq]Pb!]R R!7]%PeR"4]%PeR#]4]%PeR$]4]%PeR%]4]'PgR R&R'7R#R#)(u`
app.py — SHEQ Analysis Tool — Flask web application.
Run:
python app.py
Then open http://localhost:5000
The sidebar has two sections:
1. Events Explorer — filter and chart Events data interactively.
2. Generate Report — run the full analysis across Events, Safety Energy,
and LLC Data and download a comprehensive DOCX report.
)Ú annotationsN)Údatetime)ÚFlaskÚjsonifyÚrender_templateÚrequestÚ send_file)Ú EVENTS_FILEÚLLC_FILEÚSAFETY_ENERGY_FILEÚDEFAULT_PD1_NAMEÚDEFAULT_PD2_NAMEÚDEFAULT_START_DATEÚDEFAULT_SPLIT_DATEÚ
OUTPUT_DIR)Úload_allÚget_body_partsÚload_and_prepare)Úrun_full_analysis)Ú build_report)Úbuild_presentationz3%(asctime)s %(levelname)-8s %(name)s %(message)sz%H:%M:%S)ÚlevelÚformatÚdatefmtÚappÚeventszdict[str, pd.DataFrame | None]Ú_CACHEcóV^8„dQhRR/#)éÚreturnz pd.DataFrame©)rsapp.pyÚ __annotate__r"2s÷  #˜ ñ có6\R,fq\PR\4\P
!\4pRVP 9dRMRpW,P\4VR&V\R&\R,P4#)zAReturn the raw Events DataFrame, loading from disk on first call.rzLoading Events from %sÚ EventDatez
Event DateÚ_date)
rÚlogÚinfor ÚpdÚ
read_excelÚcolumnsÚapplyÚ_parse_one_dateÚcopy)ÚdfÚdate_cols r!Ú_get_events_dfr12spä
ˆhÕÒÜ Ð)¬;Ô
]Š]œ;Ó
'ˆà"-°·±Ô";ˆØ•l×Óˆ7‰ ØŒˆxÑÜ  × Ñ Ó "r#cóV^8„dQhRR/#)rrz pd.Timestampr )rs"r!r"r">s÷ ñ ˜ r#cóÄ\P!V4'd\P#\V4P 4pRV9d\\ VP
R4^,P
44^8Xd(VP
R^4^,P 4p\P!VRR7# \d\Pu#i;i)Ú,T)Údayfirst) r)ÚisnaÚNaTÚstrÚstripÚlenÚsplitÚ to_datetimeÚ Exception)ÚvalÚss& r!r-r->sÜ ‡wwˆs‡|‚|Üv‰vˆ
Ü ˆCÓ€AØ
ˆa„x”C˜Ÿ   Q×0°AÔ
G‰GC˜O˜ × ðÜ~Š~˜a¨$Ô/øÜ ôÜv‰vŠ
ðúsÂ)CÃCÃCÚ/c
óü\4pVR,P4PR4pVR,P4PR4pRVP9dRMRpRp\ W,P
4P4P44p\ W,P
4P4P44p\RVVVV\V4R7#)r&z%Y-%m-%dÚ EventTypeú
Event TypeúActual Consequencez
index.html)Úmin_dateÚmax_dateÚ event_typesÚ consequencesÚ total_events) r1ÚminÚstrftimeÚmaxr+ÚsortedÚdropnaÚuniqueÚtolistrr:)r/rErFÚevt_colÚcons_colrGrHs r!ÚindexrSNä Ó €BØ'{Ó ×)¨*Ó5€HØ'{Ó ×)¨*Ó5€Hð*¨R¯Z©ZÔ7‰{¸\€GØ#€Hä˜"+×.×7×A€Kܘ",×/×B€Lä ØØØØØ˜“Wô
 ðr#z /api/filterÚPOST)Úmethodsc!óÆ
a\P;'g/p\4oRSP9dRMRpRpRSP9dRMRpRpRpRpVP R 4'd/SSR
,\
P !VR ,4,oVP R 4'd/SSR
,\
P !VR ,48*,oVP R 4'd'SSV,PVR ,4,oVP R
4'd'SSV,PVR
,4,o\S4^8Xd\RRR^/4#SV,P4P4pSV,P4P4pVSP9d&SV,P4P4M/p .R&Op
SR
,PP4P4PV
^R7P4p SPSR
,PP!R44P#4p V P%4U
Uu/uFwrÞ\'V
4\)V4bK pp
pVSP9d>\+SV,4P4P-^
4P4M/pVSP9d&SV,P4P4M/p/pVSP9dJSV,P4P4pVP/RR4VP/RR4\1V3RlR'4R4pRSP9dRMRpV'd&SV,P34P54MRpV'd&SV,P34P54MRp\R\S4RSR
,P74P9R4 RSR
,P;4P9R4 2R TR
TRT RT RTRTRTR TR!V'd)\
P<!V4'd
\?V^4MRR"V'd)\
P<!V4'd
\?V^4MRR#R$SP9dA\?SR$,R%8HPA4\S4, ^d,^4/
4#R/
4#uupp
i)(z>Return filtered summary stats as JSON for the Events Explorer.rBrCrDz CRP InvolvedÚ CRPInvolvedzRoot Cause CategoryzVentia Injury ClassificationzBodily LocationÚ
start_dater&Úend_daterGrHÚerrorz%No events match the selected filters.Útotal)Ú
fill_valueÚMzNone IdentifiedNzUnder Investigationc3óN<"TFpVSP9gKVxK R#5i)N)r+)Ú.0Úcr/s& €r!Ú <genexpr>Úapi_filter.<locals>.<genexpr>¦s%øéð,Ñ#X˜aØ §
¡
™?÷šÓ#Xùsƒ%
%z
Days to CloseÚ
date_rangez%d %b %Yu – Úinjury_classificationÚ day_of_weekÚmonthlyÚ
body_partsÚ root_causesÚcrpÚmedian_investigate_daysÚmedian_close_daysÚ
closed_pctÚStatusÚClosed)ÚMondayÚTuesdayÚ WednesdayÚThursdayÚFridayÚSaturdayÚSunday)zDays to Investigatez Event Lagz
Days to Enter)!rÚjsonr1r+Úgetr)Ú TimestampÚisinr:rÚ value_countsÚto_dictÚdtÚday_nameÚreindexÚgroupbyÚ to_periodÚsizeÚitemsr8ÚintrÚheadÚpopÚnextrNÚmedianrJrKrLÚnotnaÚroundÚsum)ÚparamsrQrRÚcrp_colÚrc_colÚinj_colÚbp_colÚ
evt_countsÚ cons_countsÚ inj_classÚ dow_orderÚdowrfÚ monthly_dataÚbpÚrcriÚlag_colÚ close_colÚinv_medÚ close_medr/s @r!Ú
api_filterržiszø€ô\‰\×
Ð
˜R€FÜ Ó €Bà)¨R¯Z©ZÔ7‰{¸\€GØ#€HØ!/°2·:±:Ô!=‰~À=€GØ$€FØ-€GØ €Fð‡zzÒØ
7• œrŸ|š|¨F°<Õ,@Ó
BˆØ
‡zz*×ÒØ
7• œrŸ|š|¨F°:Õ,>Ó
@ˆØ
‡zz-× Ò Ø
7• × Ñ  ¨