Check forms for missing details, return them for correction. Every one is ready to run, and you can adjust it in plain language.
Load checked team entries into report tables and show import counts.
Your reporting table gets valid new spreadsheet rows every 15 minutes, with import counts and row-specific fixes waiting in the sheet.
Load reporting files into a table and surface import errors.
Keep your PostgreSQL table current as CSV files arrive, with a row count or a clear reason when an import needs attention.