Draw me an application for stop card, oil and gas context.
Drop files here
or click to upload
import streamlit as st
import pandas as pd
from datetime import datetime
# Set page config
st.set_page_config(page_title="Safety Stop Card", layout="wide")
# Initialize session state for storing stop cards
if 'stop_cards' not in st.session_state:
st.session_state.stop_cards = []
def save_stop_card(data):
st.session_state.stop_cards.append(data)
# Title and description
st.title("🛑 Safety Stop Card System")
st.markdown("""
This system is designed to report safety concerns in oil and gas operations.
Use this form to document any safety issues that require immediate attention.
""")
# Create two columns
col1, col2 = st.columns(2)
with col1:
# Form for submitting stop card
st.subheader("Submit Stop Card")
with st.form("stop_card_form"):
# Basic Information
date = st.date_input("Date")
time = st.time_input("Time")
location = st.text_input("Location")
# Observer Information
observer_name = st.text_input("Observer Name")
department = st.selectbox("Department",
["Production", "Maintenance", "Drilling", "HSE", "Operations", "Other"])
# Observation Details
activity_type = st.selectbox("Activity Type",
["Routine Operation", "Maintenance Work", "Drilling Operation",
"Construction", "Transportation", "Other"])
risk_level = st.select_slider("Risk Level",
options=["Low", "Medium", "High", "Critical"])
# Description
unsafe_condition = st.text_area("Describe the Unsafe Condition/Act")
immediate_action = st.text_area("Immediate Action Taken")
# Additional Details
potential_consequence = st.selectbox("Potential Consequence",
["Property Damage", "Environmental Impact", "Minor Injury",
"Major Injury", "Fatality"])
suggested_solution = st.text_area("Suggested Solution")
submitted = st.form_submit_button("Submit Stop Card")
if submitted:
stop_card_data = {
"date": date.strftime("%Y-%m-%d"),
"time": time.strftime("%H:%M"),
"location": location,
"observer_name": observer_name,
"department": department,
"activity_type": activity_type,
"risk_level": risk_level,
"unsafe_condition": unsafe_condition,
"immediate_action": immediate_action,
"potential_consequence": potential_consequence,
"suggested_solution": suggested_solution,
"status": "Open"
}
save_stop_card(stop_card_data)
st.success("Stop Card submitted successfully!")
with col2:
# Display submitted stop cards
st.subheader("Recent Stop Cards")
if st.session_state.stop_cards:
df = pd.DataFrame(st.session_state.stop_cards)
# Add filters
st.markdown("### Filters")
risk_filter = st.multiselect("Filter by Risk Level",
options=["Low", "Medium", "High", "Critical"])
# Apply filters
if risk_filter:
df = df[df['risk_level'].isin(risk_filter)]
# Display the data
st.dataframe(df, use_container_width=True)
# Summary statistics
st.markdown("### Summary Statistics")
col_stats1, col_stats2 = st.columns(2)
with col_stats1:
st.metric("Total Stop Cards", len(df))
st.metric("High/Critical Issues",
len(df[df['risk_level'].isin(['High', 'Critical'])]))
with col_stats2:
st.metric("Open Issues", len(df[df['status'] == 'Open']))
top_department = df['department'].mode()[0]
st.metric("Most Active Department", top_department)
else:
st.info("No stop cards submitted yet.")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?