db_query / apps /ciq_4g_generator.py
DavMelchi's picture
Add CIQ 4G Generator with LNBTS/LNCEL sheet generation, implement site parsing from CIQ brut Excel with eNodeB/cell name extraction, band detection from cell names, sector ID mapping, DL/UL EARFCN conversion, MIMO mode assignment per band, and multi-band block configuration builder with TAC/PCI/RSI parameters and Excel export
1c0596c
import pandas as pd
import streamlit as st
from queries.process_ciq_4g import generate_ciq_4g_excel
st.title("CIQ 4G Generator")
ciq_file = st.file_uploader(
"Upload CIQ brut 4G (Excel)", type=["xlsx", "xls"], key="ciq4g_ciq"
)
col1, col2 = st.columns(2)
with col1:
year_suffix = st.text_input("Year suffix", value="25", key="ciq4g_year")
with col2:
bands = st.text_input(
"Bands string",
value="G9G18U9U21L8L18L26",
key="ciq4g_bands",
)
col3, col4 = st.columns(2)
with col3:
mcc = st.number_input("MCC", value=610, step=1, min_value=0, key="ciq4g_mcc")
with col4:
mnc = st.number_input("MNC", value=2, step=1, min_value=0, key="ciq4g_mnc")
if ciq_file is None:
st.info("Upload CIQ brut 4G Excel to generate CIQ 4G export.")
st.stop()
if st.button("Generate", type="primary"):
try:
with st.spinner("Generating CIQ 4G..."):
sheets, excel_bytes = generate_ciq_4g_excel(
ciq_file,
year_suffix=year_suffix.strip(),
bands=bands.strip(),
mcc=int(mcc),
mnc=int(mnc),
)
st.session_state["ciq4g_sheets"] = sheets
st.session_state["ciq4g_excel_bytes"] = excel_bytes
st.success("CIQ 4G generated")
except Exception as e:
st.error(f"Error: {e}")
sheets = st.session_state.get("ciq4g_sheets")
excel_bytes = st.session_state.get("ciq4g_excel_bytes")
if sheets:
tab_names = list(sheets.keys())
tabs = st.tabs(tab_names)
for t, name in zip(tabs, tab_names):
with t:
df: pd.DataFrame = sheets[name]
st.dataframe(df, use_container_width=True)
if excel_bytes:
st.download_button(
label="Download CIQ 4G Excel",
data=excel_bytes,
file_name="CIQ_4G.xlsx",
mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
type="primary",
)