first commit
This commit is contained in:
commit
f89a0f731c
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Virtual Environment
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
ENV/
|
||||||
|
.venv
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
*.egg-info/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
28
INSTALL_WINE.md
Normal file
28
INSTALL_WINE.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Installing Wine for Windows Builds
|
||||||
|
|
||||||
|
To build Windows executables from Linux, you need Wine installed.
|
||||||
|
|
||||||
|
## Quick Install (Ubuntu/Debian):
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install wine
|
||||||
|
winetricks python39
|
||||||
|
```
|
||||||
|
|
||||||
|
## Then run:
|
||||||
|
```bash
|
||||||
|
./build_windows.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Alternative: Use GitHub Actions
|
||||||
|
|
||||||
|
Push to GitHub and the workflow will automatically build Windows executables.
|
||||||
|
|
||||||
|
## Or: Build on Windows Machine
|
||||||
|
|
||||||
|
Copy project to Windows and run:
|
||||||
|
```cmd
|
||||||
|
pip install pyinstaller
|
||||||
|
pip install -r requirements_build.txt
|
||||||
|
pyinstaller build_executable.spec --clean
|
||||||
|
```
|
||||||
709
data_preprocessor.py
Normal file
709
data_preprocessor.py
Normal file
@ -0,0 +1,709 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Data Preprocessor - Clean and normalize Excel data before LLM processing
|
||||||
|
|
||||||
|
This module performs programmatic preprocessing to:
|
||||||
|
1. Parse Excel into structured format
|
||||||
|
2. Normalize vendor names
|
||||||
|
3. Normalize statuses and priorities
|
||||||
|
4. Parse dates into standard format
|
||||||
|
5. Calculate 24-hour windows
|
||||||
|
6. Pre-classify items
|
||||||
|
|
||||||
|
This reduces LLM errors and improves accuracy.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from typing import List, Dict, Optional, Tuple
|
||||||
|
from pathlib import Path
|
||||||
|
from collections import defaultdict
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
|
||||||
|
class DataPreprocessor:
|
||||||
|
"""Preprocesses Excel data before sending to LLM."""
|
||||||
|
|
||||||
|
def __init__(self, current_date: Optional[datetime] = None):
|
||||||
|
"""
|
||||||
|
Initialize preprocessor.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
current_date: Current date for 24-hour calculations (defaults to now in Baltimore/Eastern timezone)
|
||||||
|
"""
|
||||||
|
# Use Baltimore/Eastern timezone (America/New_York)
|
||||||
|
baltimore_tz = ZoneInfo("America/New_York")
|
||||||
|
if current_date is None:
|
||||||
|
self.current_date = datetime.now(baltimore_tz)
|
||||||
|
else:
|
||||||
|
# If current_date is timezone-naive, assume it's in Baltimore time
|
||||||
|
if current_date.tzinfo is None:
|
||||||
|
self.current_date = current_date.replace(tzinfo=baltimore_tz)
|
||||||
|
else:
|
||||||
|
# Convert to Baltimore timezone
|
||||||
|
self.current_date = current_date.astimezone(baltimore_tz)
|
||||||
|
self.items: List[Dict] = []
|
||||||
|
self.vendor_normalization_map: Dict[str, str] = {}
|
||||||
|
self._vendor_groups: Dict[str, List[str]] = {}
|
||||||
|
|
||||||
|
def _build_vendor_normalization_map(self, items: List[Dict]) -> None:
|
||||||
|
"""
|
||||||
|
Build vendor normalization map by extracting distinct vendors and grouping similar ones.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
items: List of items with vendor_raw field
|
||||||
|
"""
|
||||||
|
# Extract all distinct vendor names (case-insensitive)
|
||||||
|
vendor_variants: Dict[str, List[str]] = defaultdict(list)
|
||||||
|
|
||||||
|
for item in items:
|
||||||
|
vendor_raw = item.get('vendor_raw', '').strip()
|
||||||
|
if not vendor_raw:
|
||||||
|
continue
|
||||||
|
|
||||||
|
vendor_lower = vendor_raw.lower()
|
||||||
|
vendor_variants[vendor_lower].append(vendor_raw)
|
||||||
|
|
||||||
|
# Normalize each vendor group
|
||||||
|
for vendor_lower, variants in vendor_variants.items():
|
||||||
|
# Get distinct variants
|
||||||
|
distinct_variants = list(set(variants))
|
||||||
|
|
||||||
|
# Find the best normalized form
|
||||||
|
# Prefer variants with mixed case (like "AutStand") over all lowercase
|
||||||
|
best_variant = None
|
||||||
|
for variant in distinct_variants:
|
||||||
|
# Check if variant has mixed case (indicates intentional capitalization)
|
||||||
|
if variant != variant.lower() and variant != variant.upper():
|
||||||
|
best_variant = variant
|
||||||
|
break
|
||||||
|
|
||||||
|
# If no mixed case found, use most common variant
|
||||||
|
if not best_variant:
|
||||||
|
best_variant = max(distinct_variants, key=lambda v: (variants.count(v), len(v)))
|
||||||
|
|
||||||
|
# Normalize the vendor name
|
||||||
|
normalized = self._normalize_vendor_case(best_variant)
|
||||||
|
|
||||||
|
# Map all variants to normalized name
|
||||||
|
for variant in distinct_variants:
|
||||||
|
self.vendor_normalization_map[variant.lower()] = normalized
|
||||||
|
|
||||||
|
# Store variant group for reference
|
||||||
|
self._vendor_groups[normalized] = distinct_variants
|
||||||
|
|
||||||
|
def _normalize_vendor_case(self, vendor: str) -> str:
|
||||||
|
"""
|
||||||
|
Normalize vendor name case using intelligent rules.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
vendor: Raw vendor name
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Normalized vendor name
|
||||||
|
"""
|
||||||
|
if not vendor:
|
||||||
|
return "MISC"
|
||||||
|
|
||||||
|
vendor = vendor.strip()
|
||||||
|
|
||||||
|
# Handle combined vendors (Autstand/Beumer, DCS/Autstand)
|
||||||
|
if '/' in vendor:
|
||||||
|
parts = []
|
||||||
|
for part in vendor.split('/'):
|
||||||
|
part = part.strip()
|
||||||
|
# Title case each part, but preserve acronyms (all caps)
|
||||||
|
if part.isupper() or len(part) <= 3:
|
||||||
|
parts.append(part.upper())
|
||||||
|
else:
|
||||||
|
parts.append(part.title())
|
||||||
|
return '/'.join(parts)
|
||||||
|
|
||||||
|
# Handle vendors in parentheses (e.g., "MFO (Amazon)")
|
||||||
|
if '(' in vendor and ')' in vendor:
|
||||||
|
main_part = vendor.split('(')[0].strip()
|
||||||
|
paren_part = vendor.split('(')[1].split(')')[0].strip()
|
||||||
|
normalized_main = self._normalize_vendor_case(main_part)
|
||||||
|
normalized_paren = paren_part.title()
|
||||||
|
return f"{normalized_main} ({normalized_paren})"
|
||||||
|
|
||||||
|
# Handle acronyms (all caps short names)
|
||||||
|
if vendor.isupper() or (len(vendor) <= 4 and vendor.isalpha()):
|
||||||
|
return vendor.upper()
|
||||||
|
|
||||||
|
# Default: title case
|
||||||
|
return vendor.title()
|
||||||
|
|
||||||
|
def normalize_vendor_name(self, vendor: str) -> str:
|
||||||
|
"""
|
||||||
|
Normalize vendor name using the built normalization map.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
vendor: Raw vendor name from Excel
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Normalized vendor name
|
||||||
|
"""
|
||||||
|
if not vendor:
|
||||||
|
return "MISC"
|
||||||
|
|
||||||
|
vendor_lower = vendor.strip().lower()
|
||||||
|
|
||||||
|
# Check normalization map (built from actual data)
|
||||||
|
if vendor_lower in self.vendor_normalization_map:
|
||||||
|
return self.vendor_normalization_map[vendor_lower]
|
||||||
|
|
||||||
|
# Fallback: normalize case (for new vendors not seen before)
|
||||||
|
return self._normalize_vendor_case(vendor.strip())
|
||||||
|
|
||||||
|
def normalize_status(self, status: str) -> Tuple[str, bool]:
|
||||||
|
"""
|
||||||
|
Normalize status and determine if closed.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
status: Raw status string
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tuple of (normalized_status, is_closed)
|
||||||
|
"""
|
||||||
|
if not status:
|
||||||
|
return "Incomplete", False
|
||||||
|
|
||||||
|
status_lower = status.lower()
|
||||||
|
|
||||||
|
# Check for closed status
|
||||||
|
if 'complete' in status_lower or 'complette' in status_lower:
|
||||||
|
return "Complete", True
|
||||||
|
|
||||||
|
# Check for monitor status
|
||||||
|
if 'monitor' in status_lower or 'montor' in status_lower:
|
||||||
|
return "Monitor", False
|
||||||
|
|
||||||
|
# Default to incomplete/open
|
||||||
|
if 'incomplete' in status_lower:
|
||||||
|
return "Incomplete", False
|
||||||
|
|
||||||
|
return "Incomplete", False
|
||||||
|
|
||||||
|
def normalize_priority(self, priority: str) -> Tuple[str, Optional[str]]:
|
||||||
|
"""
|
||||||
|
Normalize priority and classify level.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
priority: Raw priority string
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tuple of (normalized_priority, priority_level)
|
||||||
|
priority_level: "very_high", "high", "medium", "low", "monitoring", "complete", None
|
||||||
|
"""
|
||||||
|
if not priority:
|
||||||
|
return "", None
|
||||||
|
|
||||||
|
priority_lower = priority.lower()
|
||||||
|
|
||||||
|
# Very High priority
|
||||||
|
if '(1) very high' in priority_lower or '(1) very hgh' in priority_lower:
|
||||||
|
return priority, "very_high"
|
||||||
|
if 'very high' in priority_lower or 'very hgh' in priority_lower:
|
||||||
|
return priority, "very_high"
|
||||||
|
|
||||||
|
# High priority (but not Very High)
|
||||||
|
if '(2) high' in priority_lower or '(2) hgh' in priority_lower:
|
||||||
|
return priority, "high"
|
||||||
|
if priority_lower.startswith('2) high') or priority_lower.startswith('2) hgh'):
|
||||||
|
return priority, "high"
|
||||||
|
if priority_lower == 'high' and 'very' not in priority_lower:
|
||||||
|
return priority, "high"
|
||||||
|
|
||||||
|
# Medium priority
|
||||||
|
if '(3) medium' in priority_lower:
|
||||||
|
return priority, "medium"
|
||||||
|
if priority_lower == 'medium':
|
||||||
|
return priority, "medium"
|
||||||
|
|
||||||
|
# Low priority
|
||||||
|
if '(4) low' in priority_lower:
|
||||||
|
return priority, "low"
|
||||||
|
if priority_lower == 'low':
|
||||||
|
return priority, "low"
|
||||||
|
|
||||||
|
# Monitoring priority
|
||||||
|
if '(5) monitoring' in priority_lower:
|
||||||
|
return priority, "monitoring"
|
||||||
|
|
||||||
|
# Complete priority
|
||||||
|
if '(6) complete' in priority_lower:
|
||||||
|
return priority, "complete"
|
||||||
|
|
||||||
|
return priority, None
|
||||||
|
|
||||||
|
def parse_date(self, date_str: str) -> Optional[datetime]:
|
||||||
|
"""
|
||||||
|
Parse date from various formats and return timezone-aware datetime in Baltimore/Eastern timezone.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
date_str: Date string in various formats
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Parsed datetime in Baltimore timezone or None
|
||||||
|
"""
|
||||||
|
if not date_str or date_str.strip() == '':
|
||||||
|
return None
|
||||||
|
|
||||||
|
date_str = date_str.strip()
|
||||||
|
baltimore_tz = ZoneInfo("America/New_York")
|
||||||
|
|
||||||
|
# Try different formats
|
||||||
|
formats = [
|
||||||
|
"%m/%d/%y", # 10/14/25
|
||||||
|
"%m/%d/%Y", # 10/14/2025
|
||||||
|
"%Y-%m-%d %H:%M:%S", # 2025-10-17 00:00:00
|
||||||
|
"%Y-%m-%d", # 2025-10-17
|
||||||
|
]
|
||||||
|
|
||||||
|
for fmt in formats:
|
||||||
|
try:
|
||||||
|
parsed_date = datetime.strptime(date_str, fmt)
|
||||||
|
# Make timezone-aware in Baltimore timezone
|
||||||
|
if parsed_date.tzinfo is None:
|
||||||
|
return parsed_date.replace(tzinfo=baltimore_tz)
|
||||||
|
else:
|
||||||
|
return parsed_date.astimezone(baltimore_tz)
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def is_within_24_hours(self, date: Optional[datetime]) -> bool:
|
||||||
|
"""
|
||||||
|
Check if date falls within yesterday (previous calendar day) in Baltimore/Eastern timezone.
|
||||||
|
This checks if the date is on yesterday's date, regardless of the exact time.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
date: Date to check (should be timezone-aware in Baltimore timezone)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True if date is yesterday (previous calendar day)
|
||||||
|
"""
|
||||||
|
if not date:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Ensure both dates are timezone-aware in Baltimore timezone
|
||||||
|
baltimore_tz = ZoneInfo("America/New_York")
|
||||||
|
|
||||||
|
# Convert date to Baltimore timezone if needed
|
||||||
|
if date.tzinfo is None:
|
||||||
|
# If date is timezone-naive, assume it's in Baltimore time
|
||||||
|
date_baltimore = date.replace(tzinfo=baltimore_tz)
|
||||||
|
else:
|
||||||
|
# Convert to Baltimore timezone
|
||||||
|
date_baltimore = date.astimezone(baltimore_tz)
|
||||||
|
|
||||||
|
# Ensure current_date is also in Baltimore timezone (should already be, but defensive check)
|
||||||
|
if self.current_date.tzinfo is None:
|
||||||
|
current_baltimore = self.current_date.replace(tzinfo=baltimore_tz)
|
||||||
|
else:
|
||||||
|
current_baltimore = self.current_date.astimezone(baltimore_tz)
|
||||||
|
|
||||||
|
# Get yesterday's date (previous calendar day)
|
||||||
|
yesterday = current_baltimore - timedelta(days=1)
|
||||||
|
yesterday_date = yesterday.date()
|
||||||
|
date_to_check = date_baltimore.date()
|
||||||
|
|
||||||
|
# Check if the date falls on yesterday
|
||||||
|
return date_to_check == yesterday_date
|
||||||
|
|
||||||
|
def parse_excel_row(self, cols: List[str]) -> Optional[Dict]:
|
||||||
|
"""
|
||||||
|
Parse a single Excel row into structured format.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
cols: List of column values (tab-separated)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Structured item dict or None if invalid
|
||||||
|
"""
|
||||||
|
if len(cols) < 8:
|
||||||
|
return None
|
||||||
|
|
||||||
|
punchlist_name = cols[0].strip()
|
||||||
|
vendor_raw = cols[1].strip() if len(cols) > 1 else ""
|
||||||
|
priority_raw = cols[2].strip() if len(cols) > 2 else ""
|
||||||
|
description = cols[3].strip() if len(cols) > 3 else ""
|
||||||
|
date_identified_str = cols[4].strip() if len(cols) > 4 else ""
|
||||||
|
status_updates = cols[5].strip() if len(cols) > 5 else ""
|
||||||
|
issue_image = cols[6].strip() if len(cols) > 6 else ""
|
||||||
|
status_raw = cols[7].strip() if len(cols) > 7 else ""
|
||||||
|
date_completed_str = cols[8].strip() if len(cols) > 8 else ""
|
||||||
|
|
||||||
|
if not punchlist_name:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Normalize fields
|
||||||
|
vendor = self.normalize_vendor_name(vendor_raw)
|
||||||
|
status, is_closed = self.normalize_status(status_raw)
|
||||||
|
priority, priority_level = self.normalize_priority(priority_raw)
|
||||||
|
|
||||||
|
# Parse dates
|
||||||
|
date_identified = self.parse_date(date_identified_str)
|
||||||
|
date_completed = self.parse_date(date_completed_str)
|
||||||
|
|
||||||
|
# Calculate age
|
||||||
|
age_days = None
|
||||||
|
if date_identified:
|
||||||
|
age_days = (self.current_date - date_identified).days
|
||||||
|
|
||||||
|
# Check 24-hour updates
|
||||||
|
is_recent_added = date_identified and self.is_within_24_hours(date_identified) and not is_closed
|
||||||
|
is_recent_closed = date_completed and self.is_within_24_hours(date_completed) and is_closed
|
||||||
|
is_recent_monitor = status == "Monitor" and (date_identified and self.is_within_24_hours(date_identified) or
|
||||||
|
date_completed and self.is_within_24_hours(date_completed))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'punchlist_name': punchlist_name,
|
||||||
|
'vendor': vendor,
|
||||||
|
'vendor_raw': vendor_raw, # Keep original for reference
|
||||||
|
'priority': priority,
|
||||||
|
'priority_level': priority_level,
|
||||||
|
'description': description,
|
||||||
|
'date_identified': date_identified,
|
||||||
|
'date_identified_str': date_identified_str, # Keep original
|
||||||
|
'date_completed': date_completed,
|
||||||
|
'date_completed_str': date_completed_str, # Keep original
|
||||||
|
'status': status,
|
||||||
|
'status_raw': status_raw, # Keep original
|
||||||
|
'is_closed': is_closed,
|
||||||
|
'status_updates': status_updates,
|
||||||
|
'issue_image': issue_image,
|
||||||
|
'age_days': age_days,
|
||||||
|
'is_recent_added': is_recent_added,
|
||||||
|
'is_recent_closed': is_recent_closed,
|
||||||
|
'is_recent_monitor': is_recent_monitor,
|
||||||
|
}
|
||||||
|
|
||||||
|
def process_excel_file(self, excel_path: str) -> List[Dict]:
|
||||||
|
"""
|
||||||
|
Process Excel file directly using pandas for reliable parsing.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
excel_path: Path to Excel file
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of structured item dictionaries
|
||||||
|
"""
|
||||||
|
items = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
xl_file = pd.ExcelFile(excel_path)
|
||||||
|
|
||||||
|
for sheet_name in xl_file.sheet_names:
|
||||||
|
# Read sheet
|
||||||
|
df = pd.read_excel(xl_file, sheet_name=sheet_name)
|
||||||
|
|
||||||
|
# Handle empty dataframe
|
||||||
|
if df.empty:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Fill NaN values
|
||||||
|
df = df.fillna("")
|
||||||
|
|
||||||
|
# Process each row (first pass - collect raw vendor names)
|
||||||
|
raw_items = []
|
||||||
|
for _, row in df.iterrows():
|
||||||
|
# Get columns (handle different column names)
|
||||||
|
cols = []
|
||||||
|
for i in range(max(9, len(df.columns))):
|
||||||
|
if i < len(df.columns):
|
||||||
|
cols.append(str(row.iloc[i]) if pd.notna(row.iloc[i]) else "")
|
||||||
|
else:
|
||||||
|
cols.append("")
|
||||||
|
|
||||||
|
# Parse without normalization first
|
||||||
|
vendor_raw = cols[1].strip() if len(cols) > 1 else ""
|
||||||
|
if cols[0].strip(): # Has punchlist name
|
||||||
|
raw_items.append({'vendor_raw': vendor_raw, 'cols': cols})
|
||||||
|
|
||||||
|
# Build vendor normalization map from actual data
|
||||||
|
if raw_items:
|
||||||
|
self._build_vendor_normalization_map(raw_items)
|
||||||
|
|
||||||
|
# Second pass - parse with normalization
|
||||||
|
for raw_item in raw_items:
|
||||||
|
item = self.parse_excel_row(raw_item['cols'])
|
||||||
|
if item:
|
||||||
|
items.append(item)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error processing Excel file {excel_path}: {e}")
|
||||||
|
|
||||||
|
self.items = items
|
||||||
|
return items
|
||||||
|
|
||||||
|
def process_excel_text(self, excel_text: str) -> List[Dict]:
|
||||||
|
"""
|
||||||
|
Process raw Excel text into structured items (fallback method).
|
||||||
|
|
||||||
|
Args:
|
||||||
|
excel_text: Raw text from Excel loader
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of structured item dictionaries
|
||||||
|
"""
|
||||||
|
lines = excel_text.split('\n')
|
||||||
|
items = []
|
||||||
|
current_item_cols = None
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
# Skip header lines
|
||||||
|
if line.startswith('FILENAME') or line.startswith('SHEET') or line.startswith('='):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not line.strip():
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Try tab-separated first (more reliable)
|
||||||
|
cols = line.split('\t')
|
||||||
|
|
||||||
|
# If no tabs, try space-separated (LangChain output)
|
||||||
|
if len(cols) < 8:
|
||||||
|
# Split by multiple spaces
|
||||||
|
cols = re.split(r'\s{2,}', line)
|
||||||
|
|
||||||
|
# Check if this looks like a new item (has punchlist name in first column)
|
||||||
|
if len(cols) >= 8 and cols[0].strip():
|
||||||
|
# Save previous item if exists
|
||||||
|
if current_item_cols:
|
||||||
|
item = self.parse_excel_row(current_item_cols)
|
||||||
|
if item:
|
||||||
|
items.append(item)
|
||||||
|
|
||||||
|
# Start new item
|
||||||
|
current_item_cols = cols
|
||||||
|
elif current_item_cols and len(cols) > 0:
|
||||||
|
# Continuation line - merge with current item
|
||||||
|
# Usually status updates continue on next line
|
||||||
|
if len(current_item_cols) > 5:
|
||||||
|
current_item_cols[5] += " " + line.strip()
|
||||||
|
|
||||||
|
# Don't forget last item
|
||||||
|
if current_item_cols:
|
||||||
|
item = self.parse_excel_row(current_item_cols)
|
||||||
|
if item:
|
||||||
|
items.append(item)
|
||||||
|
|
||||||
|
self.items = items
|
||||||
|
return items
|
||||||
|
|
||||||
|
def get_preprocessed_summary(self) -> Dict:
|
||||||
|
"""
|
||||||
|
Generate summary statistics from preprocessed data.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Summary dictionary with vendor counts, etc.
|
||||||
|
"""
|
||||||
|
vendors = defaultdict(lambda: {
|
||||||
|
'items': [],
|
||||||
|
'closed': 0,
|
||||||
|
'open': 0,
|
||||||
|
'monitor': 0,
|
||||||
|
'very_high': [],
|
||||||
|
'high': [],
|
||||||
|
'unaddressed': [],
|
||||||
|
'recent_added': [],
|
||||||
|
'recent_closed': [],
|
||||||
|
'recent_monitor': []
|
||||||
|
})
|
||||||
|
|
||||||
|
for item in self.items:
|
||||||
|
vendor = item['vendor']
|
||||||
|
vendors[vendor]['items'].append(item)
|
||||||
|
|
||||||
|
if item['is_closed']:
|
||||||
|
vendors[vendor]['closed'] += 1
|
||||||
|
elif item['status'] == 'Monitor':
|
||||||
|
vendors[vendor]['monitor'] += 1
|
||||||
|
else:
|
||||||
|
vendors[vendor]['open'] += 1
|
||||||
|
|
||||||
|
if item['priority_level'] == 'very_high':
|
||||||
|
vendors[vendor]['very_high'].append(item)
|
||||||
|
elif item['priority_level'] == 'high':
|
||||||
|
vendors[vendor]['high'].append(item)
|
||||||
|
|
||||||
|
# Unaddressed = not closed AND not in Monitor status (open/incomplete items that need action)
|
||||||
|
if not item['is_closed'] and item['status'] != 'Monitor':
|
||||||
|
vendors[vendor]['unaddressed'].append(item)
|
||||||
|
|
||||||
|
if item['is_recent_added']:
|
||||||
|
vendors[vendor]['recent_added'].append(item)
|
||||||
|
if item['is_recent_closed']:
|
||||||
|
vendors[vendor]['recent_closed'].append(item)
|
||||||
|
if item['is_recent_monitor']:
|
||||||
|
vendors[vendor]['recent_monitor'].append(item)
|
||||||
|
|
||||||
|
# Sort unaddressed by date (oldest first)
|
||||||
|
baltimore_tz = ZoneInfo("America/New_York")
|
||||||
|
max_datetime = datetime.max.replace(tzinfo=baltimore_tz)
|
||||||
|
for vendor in vendors.values():
|
||||||
|
vendor['unaddressed'].sort(key=lambda x: x['date_identified'] or max_datetime)
|
||||||
|
|
||||||
|
return dict(vendors)
|
||||||
|
|
||||||
|
def format_for_llm(self) -> str:
|
||||||
|
"""
|
||||||
|
Format preprocessed data for human inspection.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Formatted string with normalized, structured data
|
||||||
|
"""
|
||||||
|
summary = self.get_preprocessed_summary()
|
||||||
|
output_lines = []
|
||||||
|
|
||||||
|
output_lines.append("PREPROCESSED EXCEL DATA")
|
||||||
|
output_lines.append("=" * 80)
|
||||||
|
# Show timezone-aware datetime with timezone info
|
||||||
|
if self.current_date.tzinfo:
|
||||||
|
output_lines.append(f"Current Date (Baltimore/Eastern): {self.current_date.strftime('%Y-%m-%d %H:%M:%S %Z')}")
|
||||||
|
else:
|
||||||
|
output_lines.append(f"Current Date: {self.current_date.strftime('%Y-%m-%d %H:%M:%S')}")
|
||||||
|
output_lines.append(f"Total Items: {len(self.items)}")
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
for vendor_name, vendor_data in sorted(summary.items()):
|
||||||
|
output_lines.append(f"VENDOR: {vendor_name}")
|
||||||
|
output_lines.append("-" * 80)
|
||||||
|
output_lines.append(f"Total Items: {len(vendor_data['items'])}")
|
||||||
|
output_lines.append(f" Closed: {vendor_data['closed']}")
|
||||||
|
output_lines.append(f" Open: {vendor_data['open']}")
|
||||||
|
output_lines.append(f" Monitor: {vendor_data['monitor']}")
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
# Recent updates
|
||||||
|
if vendor_data['recent_added'] or vendor_data['recent_closed'] or vendor_data['recent_monitor']:
|
||||||
|
output_lines.append("RECENT UPDATES (Yesterday's Date):")
|
||||||
|
for item in vendor_data['recent_added']:
|
||||||
|
output_lines.append(f" ADDED: {item['punchlist_name']} | {item['date_identified_str']} | {item['status']}")
|
||||||
|
for item in vendor_data['recent_closed']:
|
||||||
|
output_lines.append(f" CLOSED: {item['punchlist_name']} | {item['date_completed_str']} | {item['status']}")
|
||||||
|
for item in vendor_data['recent_monitor']:
|
||||||
|
output_lines.append(f" MONITOR: {item['punchlist_name']} | {item['date_identified_str']} | {item['status']}")
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
# Oldest unaddressed
|
||||||
|
if vendor_data['unaddressed']:
|
||||||
|
output_lines.append("OLDEST UNADDRESSED (Top 3):")
|
||||||
|
for item in vendor_data['unaddressed'][:3]:
|
||||||
|
output_lines.append(f" {item['punchlist_name']} | Age: {item['age_days']} days | {item['date_identified_str']} | {item['status']}")
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
# Priority items
|
||||||
|
if vendor_data['very_high']:
|
||||||
|
output_lines.append(f"VERY HIGH PRIORITY ({len(vendor_data['very_high'])} items):")
|
||||||
|
for item in vendor_data['very_high']:
|
||||||
|
output_lines.append(f" {item['punchlist_name']} | {item['status']} | {item['date_identified_str']}")
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
if vendor_data['high']:
|
||||||
|
output_lines.append(f"HIGH PRIORITY ({len(vendor_data['high'])} items):")
|
||||||
|
for item in vendor_data['high']:
|
||||||
|
output_lines.append(f" {item['punchlist_name']} | {item['status']} | {item['date_identified_str']}")
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
# All items
|
||||||
|
output_lines.append("ALL ITEMS:")
|
||||||
|
for item in vendor_data['items']:
|
||||||
|
output_lines.append(
|
||||||
|
f" {item['punchlist_name']} | "
|
||||||
|
f"Vendor: {item['vendor']} | "
|
||||||
|
f"Priority: {item['priority']} ({item['priority_level']}) | "
|
||||||
|
f"Status: {item['status']} ({'CLOSED' if item['is_closed'] else 'OPEN'}) | "
|
||||||
|
f"Date: {item['date_identified_str']} | "
|
||||||
|
f"Description: {item['description'][:50] if item['description'] else 'N/A'}..."
|
||||||
|
)
|
||||||
|
output_lines.append("")
|
||||||
|
output_lines.append("=" * 80)
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
return "\n".join(output_lines)
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_excel_data(excel_text: str, current_date: Optional[datetime] = None) -> Tuple[str, Dict]:
|
||||||
|
"""
|
||||||
|
Preprocess Excel data and return formatted string for LLM.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
excel_text: Raw Excel text from loader
|
||||||
|
current_date: Current date for calculations
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tuple of (formatted_string, summary_dict)
|
||||||
|
"""
|
||||||
|
preprocessor = DataPreprocessor(current_date=current_date)
|
||||||
|
preprocessor.process_excel_text(excel_text)
|
||||||
|
formatted = preprocessor.format_for_llm()
|
||||||
|
summary = preprocessor.get_preprocessed_summary()
|
||||||
|
|
||||||
|
return formatted, summary
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_excel_files(reports_dir: str = "reports", current_date: Optional[datetime] = None) -> Tuple[str, Dict]:
|
||||||
|
"""
|
||||||
|
Preprocess Excel files directly (more reliable than text parsing).
|
||||||
|
|
||||||
|
Args:
|
||||||
|
reports_dir: Directory containing Excel files
|
||||||
|
current_date: Current date for calculations
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tuple of (formatted_string, summary_dict)
|
||||||
|
"""
|
||||||
|
preprocessor = DataPreprocessor(current_date=current_date)
|
||||||
|
reports_path = Path(reports_dir)
|
||||||
|
|
||||||
|
if not reports_path.exists():
|
||||||
|
return f"Reports directory '{reports_dir}' not found.", {}
|
||||||
|
|
||||||
|
excel_files = list(reports_path.glob("*.xlsx")) + list(reports_path.glob("*.xls"))
|
||||||
|
|
||||||
|
if not excel_files:
|
||||||
|
return f"No Excel files found in '{reports_dir}' directory.", {}
|
||||||
|
|
||||||
|
# First pass: collect all items with raw vendor names
|
||||||
|
all_raw_items = []
|
||||||
|
for excel_file in excel_files:
|
||||||
|
try:
|
||||||
|
xl_file = pd.ExcelFile(str(excel_file))
|
||||||
|
for sheet_name in xl_file.sheet_names:
|
||||||
|
df = pd.read_excel(xl_file, sheet_name=sheet_name)
|
||||||
|
if df.empty:
|
||||||
|
continue
|
||||||
|
df = df.fillna("")
|
||||||
|
for _, row in df.iterrows():
|
||||||
|
cols = []
|
||||||
|
for i in range(max(9, len(df.columns))):
|
||||||
|
if i < len(df.columns):
|
||||||
|
cols.append(str(row.iloc[i]) if pd.notna(row.iloc[i]) else "")
|
||||||
|
else:
|
||||||
|
cols.append("")
|
||||||
|
if cols[0].strip(): # Has punchlist name
|
||||||
|
all_raw_items.append({'vendor_raw': cols[1].strip() if len(cols) > 1 else "", 'cols': cols})
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error reading {excel_file}: {e}")
|
||||||
|
|
||||||
|
# Build vendor normalization map from all collected data
|
||||||
|
if all_raw_items:
|
||||||
|
preprocessor._build_vendor_normalization_map(all_raw_items)
|
||||||
|
|
||||||
|
# Second pass: process with normalization
|
||||||
|
all_items = []
|
||||||
|
for excel_file in excel_files:
|
||||||
|
items = preprocessor.process_excel_file(str(excel_file))
|
||||||
|
all_items.extend(items)
|
||||||
|
|
||||||
|
preprocessor.items = all_items
|
||||||
|
formatted = preprocessor.format_for_llm()
|
||||||
|
summary = preprocessor.get_preprocessed_summary()
|
||||||
|
|
||||||
|
return formatted, summary
|
||||||
|
|
||||||
128
excel_to_text.py
Normal file
128
excel_to_text.py
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Excel to Tabulated Text Converter
|
||||||
|
|
||||||
|
Converts Excel files in the reports directory to tabulated text format
|
||||||
|
for processing by LLM.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import pandas as pd
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import List, Optional
|
||||||
|
from tabulate import tabulate
|
||||||
|
|
||||||
|
|
||||||
|
def excel_to_tabulated_text(excel_path: str, output_file: Optional[str] = None) -> str:
|
||||||
|
"""
|
||||||
|
Convert Excel file to tabulated text format.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
excel_path: Path to Excel file
|
||||||
|
output_file: Optional path to save output. If None, returns string.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tabulated text representation of Excel data
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
xl_file = pd.ExcelFile(excel_path)
|
||||||
|
filename = Path(excel_path).name
|
||||||
|
output_lines = []
|
||||||
|
|
||||||
|
for sheet_name in xl_file.sheet_names:
|
||||||
|
# Try reading with header first
|
||||||
|
try:
|
||||||
|
df = pd.read_excel(xl_file, sheet_name=sheet_name)
|
||||||
|
if df.empty:
|
||||||
|
# Try without header
|
||||||
|
df = pd.read_excel(xl_file, sheet_name=sheet_name, header=None)
|
||||||
|
except Exception:
|
||||||
|
# Fallback: read without header
|
||||||
|
df = pd.read_excel(xl_file, sheet_name=sheet_name, header=None)
|
||||||
|
|
||||||
|
if df.empty:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Add file and sheet headers
|
||||||
|
output_lines.append(f"FILENAME: {filename}")
|
||||||
|
output_lines.append(f"SHEET: {sheet_name}")
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
# Replace NaN with empty string
|
||||||
|
df = df.fillna("")
|
||||||
|
|
||||||
|
# Use tabulate to format the table nicely
|
||||||
|
# Using 'simple' format for clean, readable tables
|
||||||
|
# First row as headers if column names exist, otherwise use indices
|
||||||
|
if df.columns.tolist() and not all(str(col).startswith('Unnamed') for col in df.columns):
|
||||||
|
# Use column names as headers
|
||||||
|
table_str = tabulate(df, headers='keys', tablefmt='simple', showindex=False)
|
||||||
|
else:
|
||||||
|
# No meaningful headers, use first row or no headers
|
||||||
|
table_str = tabulate(df, headers='firstrow' if len(df) > 0 else 'keys', tablefmt='simple', showindex=False)
|
||||||
|
|
||||||
|
output_lines.append(table_str)
|
||||||
|
output_lines.append("")
|
||||||
|
output_lines.append("=" * 80)
|
||||||
|
output_lines.append("")
|
||||||
|
|
||||||
|
result = "\n".join(output_lines)
|
||||||
|
|
||||||
|
if output_file:
|
||||||
|
with open(output_file, 'w', encoding='utf-8') as f:
|
||||||
|
f.write(result)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
error_msg = f"Error processing {excel_path}: {str(e)}"
|
||||||
|
return error_msg
|
||||||
|
|
||||||
|
|
||||||
|
def process_reports_directory(reports_dir: str = "reports") -> str:
|
||||||
|
"""
|
||||||
|
Process all Excel files in the reports directory.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
reports_dir: Directory containing Excel files
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Combined tabulated text from all Excel files
|
||||||
|
"""
|
||||||
|
reports_path = Path(reports_dir)
|
||||||
|
if not reports_path.exists():
|
||||||
|
return f"Reports directory '{reports_dir}' not found."
|
||||||
|
|
||||||
|
all_outputs = []
|
||||||
|
excel_files = list(reports_path.glob("*.xlsx")) + list(reports_path.glob("*.xls"))
|
||||||
|
|
||||||
|
if not excel_files:
|
||||||
|
return f"No Excel files found in '{reports_dir}' directory."
|
||||||
|
|
||||||
|
for excel_file in excel_files:
|
||||||
|
text_output = excel_to_tabulated_text(str(excel_file))
|
||||||
|
all_outputs.append(text_output)
|
||||||
|
|
||||||
|
return "\n\n".join(all_outputs)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Process all files in reports directory
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
# Single file mode
|
||||||
|
output = excel_to_tabulated_text(sys.argv[1])
|
||||||
|
print(output)
|
||||||
|
else:
|
||||||
|
# Directory mode
|
||||||
|
output = process_reports_directory()
|
||||||
|
print(output)
|
||||||
|
|
||||||
|
# Optionally save to file
|
||||||
|
output_path = Path("output")
|
||||||
|
output_path.mkdir(exist_ok=True)
|
||||||
|
with open(output_path / "excel_data.txt", 'w', encoding='utf-8') as f:
|
||||||
|
f.write(output)
|
||||||
|
print(f"\nOutput saved to: {output_path / 'excel_data.txt'}")
|
||||||
|
|
||||||
1490
html_generator.py
Normal file
1490
html_generator.py
Normal file
File diff suppressed because it is too large
Load Diff
89
models.py
Normal file
89
models.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
"""
|
||||||
|
Pydantic Models for Structured Report Output
|
||||||
|
|
||||||
|
Defines the data structures for vendor reports matching the exact requirements.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
from typing import List, Optional
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
class PunchlistItem(BaseModel):
|
||||||
|
"""Represents a single punchlist item with all details."""
|
||||||
|
punchlist_name: str = Field(description="Name/title of the punchlist item")
|
||||||
|
description: Optional[str] = Field(default=None, description="Full description of the issue")
|
||||||
|
priority: Optional[str] = Field(default=None, description="Priority level (e.g., '(1) Very High', '(2) High')")
|
||||||
|
date_identified: Optional[str] = Field(default=None, description="Date when issue was identified")
|
||||||
|
date_completed: Optional[str] = Field(default=None, description="Date when issue was completed (if closed)")
|
||||||
|
status: str = Field(description="Current status: 'Complete', 'Monitor', 'Incomplete', etc.")
|
||||||
|
status_updates: Optional[str] = Field(default=None, description="Status update history/text")
|
||||||
|
issue_image: Optional[str] = Field(default=None, description="Issue image filename or link if available")
|
||||||
|
age_days: Optional[int] = Field(default=None, description="Number of days since date_identified (was calculated)")
|
||||||
|
|
||||||
|
|
||||||
|
class VendorUpdates24h(BaseModel):
|
||||||
|
"""24-hour updates grouped by type."""
|
||||||
|
added: List[PunchlistItem] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="Specific items added in the last 24 hours"
|
||||||
|
)
|
||||||
|
closed: List[PunchlistItem] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="Specific items closed in the last 24 hours"
|
||||||
|
)
|
||||||
|
changed_to_monitor: List[PunchlistItem] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="Specific items changed to monitor status in the last 24 hours"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class VendorMetrics(BaseModel):
|
||||||
|
"""Statistics and metrics for a single vendor - matches exact requirements."""
|
||||||
|
vendor_name: str = Field(description="Name of the vendor (normalized)")
|
||||||
|
|
||||||
|
# Counts per vendor
|
||||||
|
total_items: int = Field(description="Total number of punchlist items for this vendor")
|
||||||
|
closed_count: int = Field(description="Number of closed items (status contains 'Complete' or 'complete')")
|
||||||
|
open_count: int = Field(description="Number of open items (status contains 'Incomplete')")
|
||||||
|
monitor_count: int = Field(description="Number of items in monitor status (status contains 'Monitor' or 'montor')")
|
||||||
|
|
||||||
|
# Updates in the last 24 hours per vendor
|
||||||
|
updates_24h: VendorUpdates24h = Field(
|
||||||
|
default_factory=VendorUpdates24h,
|
||||||
|
description="Updates in the last 24 hours: specific items added, closed, and changed to monitor"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Oldest 3 unaddressed items per vendor
|
||||||
|
oldest_unaddressed: List[PunchlistItem] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="Oldest 3 unaddressed items (not closed) for this vendor, sorted by date_identified"
|
||||||
|
)
|
||||||
|
|
||||||
|
# All priority items by vendor
|
||||||
|
very_high_priority_items: List[PunchlistItem] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="All 'very high' priority items for this vendor (priority contains '(1) Very High' or 'Very High')"
|
||||||
|
)
|
||||||
|
|
||||||
|
high_priority_items: List[PunchlistItem] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="All 'high' priority items for this vendor (priority contains '(2) High' or 'High' but not 'Very High')"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class FullReport(BaseModel):
|
||||||
|
"""Complete report containing all vendor metrics."""
|
||||||
|
report_generated_at: str = Field(
|
||||||
|
default_factory=lambda: datetime.now().isoformat(),
|
||||||
|
description="Timestamp when report was generated (ISO format)"
|
||||||
|
)
|
||||||
|
vendors: List[VendorMetrics] = Field(
|
||||||
|
default_factory=list,
|
||||||
|
description="List of vendor metrics - one entry per vendor with all required statistics"
|
||||||
|
)
|
||||||
|
summary: Optional[dict] = Field(
|
||||||
|
default=None,
|
||||||
|
description="Optional overall summary statistics across all vendors (total vendors, total items, etc.)"
|
||||||
|
)
|
||||||
|
|
||||||
218
output/excel_data.txt
Normal file
218
output/excel_data.txt
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
FILENAME: [MTN6] Ops. Eng. GL Issues Tracker.xlsx
|
||||||
|
SHEET: _MTN6_ Ops. Eng. GL Issues Trac
|
||||||
|
|
||||||
|
Semi-Auto Exception Arm Logic AutStand (1) Very High Exception chute arm disengaged prior to all cartons being filled on semi-autos. Logic needs to be amended. Apply to all areas 10/14/25 10/14 - Interim measure in place to force arm extension, Kevin working on updating logic at all VS fixed 10/14 Complete 10/17
|
||||||
|
PS Conveyor chute clearing Issues AutStand (1) Very High Chute/conveyor beacon at the top of the problem solve chutes directly off of the sorter are not automatically clearing when the downstream belts are cleared. Indicating that the PS chutes are full or unavailable for packages to divert 10/14/25 complete Complete 2025-10-17 00:00:00
|
||||||
|
Bypasses Not On Due to Auto-Induct Status Beumer (1) Very High Bypasses were turned off several times during testing 10/14/25 10/14 - Bryan to update code tomorrow
|
||||||
|
10/15 - Bypasses had to be manually turned on when crossbelt stopped
|
||||||
|
10/16 - Fix applied, monitor Monitor 10/17
|
||||||
|
Flow turn Belt Replacement DCS (1) Very High Flow turn belts incorrectly manufactured and need to be replaced 10/10/25 10/29 final belt replacement scheduled for midnite tonight 11/3 - all belts have been replaced Complete
|
||||||
|
Replicate logic timers from semi VS-D to the rest of the semis Autstand (1) Very High Logic timers from semi-auto at all virtual sorters need to be adjusted 10/14/25 10/16 - fix applied monitor as VS become active Monitor
|
||||||
|
Tipper timer Autstand (1) Very High Adjust tipper logic to prevent two tippers from dumping at the same time and jamming the line 10/14/25 10/16 - in progress... ECD : 10/20 (dtw needed) 10/19 - inprocess will be complete by EOD
|
||||||
|
KK 10/19 - Fixed Complete 2025-10-19 00:00:00
|
||||||
|
SCADA Accurate Status Reads AutStand (1) Very High Update SCADA status accuracy with info sent from Beumer 10/14/25 10/14 - All necessary information received from Beumer to execute change
|
||||||
|
10/16 - closed Complete 10/17
|
||||||
|
Destuffit fault at DD225 Gorbel (1) Very High Contact failed and estop jumped out ... could not retract/extend unit 10/15/25 Complete
|
||||||
|
Semi-Auto Chute Sidepan Reinforcement DCS (2) High Sidepans are flimsy and need to be reinforced; when a heavy box hits the side, the guarding moves, mistakenly blocking the jam photoeye 10/14/25 10/17 -- investigated... no issues identified monitor
|
||||||
|
11/3: Nothing Mechanical we can do to frim up the side guard it is stanless steel Monitor
|
||||||
|
Semi-Auto Phantom Jams DCS (2) High Dust accumulation on the reflectors incorrectly creating jam states on the funnels leading to semi-auto inducts 10/14/25 10/17 - DCS surveyed... on going.
|
||||||
|
10/18 Belts being cauterized to eliminate the flaying . Will update with estimated completion date 10/19 -- in process
|
||||||
|
10/22: Inbound Completed; Working on Bypass and PS conveyance Complete
|
||||||
|
Semi-Auto Package marking X's Beumer (2) High Remark induct point X's on conveyance in permanent material (paint, ink, tape, etc.) 10/6/25 10/14 - Beumer to start painting after sort tonight at VS-D
|
||||||
|
VS B C A complete... VS-d ECD 10/17 night
|
||||||
|
|
||||||
|
10/18 confirm if compete Complete
|
||||||
|
Problem Solve dead rollers AutStand (2) High First few rollers not able to be engaged due to missing part on both Problem Solve lines 10/14/25 10/14 - First problem solve line complete, second will be complete by EOD complete
|
||||||
|
Jam Clearing Equipment on Mezzanine Startup (Amazon) (2) High Access issues at bypass inhibiting jam clear access for RME. Are all Cottermans installed? 10/14/25 Incomplete
|
||||||
|
High Multi-Label Read Rate Datalogic (2) High Unexpectedly high multi-read rate from scanners during LOT 10/14/25 10/14 - Datalogic prioritzing deep dive on these issues to identify root cause
|
||||||
|
10/17 - in process sa01 ab still has issue. investigating 10/19= Modification today, monitor 11/3 - DAta logic is reconfiguring all scan tunnels. SCA01, SCA02 complete. SCA03 and SCA04 to be completed over night 11/3 Incomplete
|
||||||
|
Jam Reset Button needed at end of NC Jackpots Autstand (2) High There is no reset at the end of the NC sorters need to be at proximity of jam clearing 10/15/25 10/17 - buttons there, programimed, waiting on bracket complete 2025-10-18 00:00:00
|
||||||
|
Jam Reset buttons on Bulk divert platforms to be relocated Autstand (2) High JR button is behind the saefty fencing move to outside of fencingv (all areas) 10/15/25 10/17 - downtime window needed. 10/21 - to be scheduled Complete
|
||||||
|
Photoeyes at Caljan not wired properly Caljan (2) High Photoeyes stop the line vs feeding when blocked 10/15/25 Autstand jumped out the photoeyes to get them operational
|
||||||
|
10/17 SS contacted Caljan... waiting on date for tech Incomplete
|
||||||
|
Flow Splitter Verification Autstand (2) High Conveyable cartons are entering the non-con at a high rate. Verify all 7 flow splitters are working correctly 10/15/25 10/17 -- adjusted still fine tuning. may reduce nc length..TBD complete
|
||||||
|
Semi-Auto Chute fullness PE Height AutStand (3) Medium Adjust 50% and 100% Full PE locations to better optimize the load logic for semi-auto inducts 10/14/25 10/17 - load logic was adjusted... monitor PE response.
|
||||||
|
KK 10/27 - This is a duplicate item related to bulk induct shutes (row 6), I will close it Complete 2025-10-27 00:00:00
|
||||||
|
VS-D Auto-Induct Jams/Faults Beumer (3) Medium Training for ops on difference between jams/faults, ops seems to think all faults should clear themselves on auto-inducts, maybe something on minor piece 10/14/25 10/14 - Bryan is working on similar issue at SAT9, Deepak from Amazon is helping, Jody will send people to investigate fixed finger gaurds complete
|
||||||
|
Diverting onto Bellows from Bypass, adjust carrier aim Beumer (3) Medium Confirm divert points for auto and semi-auto inducts 10/14/25 10/14 - Beumer is going to work on re-aiming some of these auto-inducts, retrain ops on induction angles Monitor
|
||||||
|
Divert Points to Pallet Chutes Beumer (3) Medium Confirm divert points to pallet build chutes, light packages were landing in the wrong chutes or stuck in between 10/14/25 10/14 - Check the chutes that have missorts and jams at the top
|
||||||
|
10/17 - chutes checked and made adjustments Monitor Monitor
|
||||||
|
Long-Term Error Tracking Solution Datalogic (3) Medium Currently, manual pull of all images from Datalogic programs is required to ID issues 10/8/25 10/17- DL is proposes to get 2D images. Jody to follow up Incomplete
|
||||||
|
Pull stats for error codes from Datalogic Datalogic (3) Medium Need ability to pull error code stats from Datalogic 10/14/25 10/17 -- Jody to follow up with DL Incomplete
|
||||||
|
Jam Cam visibility in SCADA Autstand (3) Medium Autstand needs to set up passwords/remove pw for it to work in the scada 10/15/25 complete Complete
|
||||||
|
IND2A-22 Carrier Induct Timing Beumer (3) Medium Check induct firing direction and timing at IND2A-22, a few packages were observed falling off the carriers being off to the edge 10/15/25 10/17 - beumer to monitor IMG_4519.jpg Monitor
|
||||||
|
Chute 14041 Enable Issues AutStand (4) Low DTC chute won't stay enabled even with cart in correct position and button pressed 10/14/25 Complete 10/17
|
||||||
|
VS-D, S01400 Pallet Chute Beacons - False Fullness AutStand (4) Low Chute fullness indicator beacon illuminated incorrectly, check all chutes but specifically S014020, S014018 10/14/25 Complete 10/15
|
||||||
|
Semi-Auto Jam Beacons Autstand (4) Low remove jam PE at chute 10/14/25 10/19 PE functionality diabled.. hardware removal to be scheduled TBD
|
||||||
|
KK 11/4 - hareware was removed on 10/28 Complete 2025-10-28 00:00:00
|
||||||
|
Throughput Limit on SCADA Beumer (4) Low Throughput Limit is being identified on SCADA and Grafana as an error code, despite not being in SFS. Determine root cause of Throughput Limits being triggered and assign them properly. 10/15/25 10/17 was used for testing is now disabled Complete
|
||||||
|
No Read Rates - Trigger Timing Concerns Datalogic (5) Monitoring Confirm that the trigger timing from yesterday is fully resolved 10/14/25 10/17 - S01 ad. trigger was moved. appears to be resolved. monitoring Monitor
|
||||||
|
Confirm D2C is Working MFO (Amazon) (6) Complete Verify all D2C lanes are mapped properly 10/14/25 10/18 -- complete confirmed Complete 10/14/25
|
||||||
|
SCADA Accurate Status Reads Beumer (6) Complete Beumer not sending full accurate lane status to AutStand for SCADA visualization. Beumer needs to send an updated Excel file for AutStand to update. 10/14/25 10/14 - Autstand now has all of the program info from Beumer to connect statuses
|
||||||
|
10/17 resolved Complete 10/14/25
|
||||||
|
NC Dim Data AutStand (6) Complete AutStand not sending DIM data in S01 Message 10/15/25 10/15 - Matt Specht fix mid sort
|
||||||
|
10/17 - COMPLETE Complete
|
||||||
|
AWCS Multiple Destinations Amazon (1) Very High AWCS was not sending multiple destinations for NC and Crossbelt in S02 Message 10/15/25 10/15 - Jamari Randle changed NC Config to have two destinations, still waiting for a change to Crossbelt Config Incomplete
|
||||||
|
NC End of Sorter Chute DCS (2) High Packages getting stuck in chute at dead plate and rollers. Need to look at a mechanical fix to eliminate issue, possibly extend the dead plate. 10/15/25 10/17 --- Changed the PE location.. to trigger the MDR. monitor may need to add UHMW Complete
|
||||||
|
Jam Reset NC End of Sorter AutStand (2) High Need to add jam reset pb for end of sorter jam pe, currently the only reset is at the head of the nc sorter 10/15/25 duplicate Complete
|
||||||
|
PS11_11_JR3 AutStand (3) Medium Jam Reset PB is flashing sporadically 10/15/25 10/17 - in process
|
||||||
|
10/18 KK - Done Complete 2025-10-18 00:00:00
|
||||||
|
"Destination Not Attempted" Reason Code AutStand (2) High Receiving "Destination Not Attempted" in the wrong use case/scenario for the NC Sorter, see screenshot 10/15/25 10/17 -- follow up
|
||||||
|
KK 10/21 - Based on container research data from Sherri, this reason code is no longer being sent in our S04 image.png Complete 2025-10-21 00:00:00
|
||||||
|
Auto-Induct Restart Beumer (2) High After an E-Stop and Restart, Auto-Induction didn't go through its auto clear cycle automatically, someone had to go to the local induction control station 10/15/25 10/17 -- related to the global start? montor
|
||||||
|
confirmed that it works Complete 10/17
|
||||||
|
S013089 Blue Beacon AutStand (3) Medium Need to investigate ZMX Sensor, alignment causing false fullness indication 10/15/25 KK 10/18 - Done, beacon replaced Complete
|
||||||
|
NC Sorter Aligner DCS (3) Medium NC Sorter Aligner has a catch point at the exit, uhmw transfer plates on vertical belt and conveyor tplate 10/15/25 10/17 - fixed. Complete 10/17
|
||||||
|
PS lines stop packages at the top of the line, on the first station. It should push the packages to the last station Jackpot probem solve Autstand (2) High 10/15/25 10/17 fixed Complete 10/17
|
||||||
|
Still seeing Lost Container / No Reads in NC Jackpot Autstand (2) High 10/15/25 10/16- Reviewed logic/flow. Updated installed at noon. Will be monitoring
|
||||||
|
KK 10/27 - Issue seems to be resolved Complete 2025-10-27 00:00:00
|
||||||
|
First chute orange lights keeps turning on without pakages blocking any sensors semi auto vs-d Autstand (2) High 10/15/25 Fixed, realigned PE Complete 10/17
|
||||||
|
Flashing and steady blue light on a chute without any package present S014020, S014018 Autstand (2) High 10/15/25 Please ensure the cart is loaded centered in the chute, too far to the left or right, or skewed will result in the overhead sensor will read the frame of the cart and prematurely trigger full
|
||||||
|
10/17 - fixed Complete 10/17
|
||||||
|
Flashing Green light on D2C , start button doesn't work S014041 Autstand (2) High 10/15/25 Fixed - bad button, has been replaced Complete 10/17
|
||||||
|
non- con packages still has divert issues packages going straight to jackpot Autstand (2) High 10/15/25 Temporary buttons in placed at the end of each sorter, brackets pending complete 2025-10-18 00:00:00
|
||||||
|
Scada Map not showing cameras Autstand (2) High 10/15/25 SCADA is showing cameras, the live feeds don't work at the moment, pending AMZ response for configuration (I contacted Davo and JC from ops eng for this)
|
||||||
|
10/17 fixed Complete 10/17
|
||||||
|
Scada Map: showing stopped but actually running C Autstand (2) High 10/15/25 10/17 - need more info
|
||||||
|
KK 10/18 - Need more info
|
||||||
|
KK 10/21 - No clarification received
|
||||||
|
KK 10/27 - No clarification received, closing this item Complete 2025-10-27 00:00:00
|
||||||
|
PS lines stop packages at the top of the line, on the first station. It should push the packages to the last station. Autstand (2) High 10/15/25 Fixed - corrected flow control on problem solve rollers Complete
|
||||||
|
Still seeing Lost Container / No Reads in NC Jackpot as of 1044 Autstand (2) High 10/15/25 Flow/assignment issue - to be addressed by Sherri (AMZ) and MFO today 11/1
|
||||||
|
10/17 monitor
|
||||||
|
KK 10/27 - Issue seems to be resolved Complete 2025-10-27 00:00:00
|
||||||
|
206 - 207 max reach giving us false signals its green on skada but not operational Autstand (2) High 10/15/25 Need further clarification 10/19 - completed
|
||||||
|
10/19 KK - Done Complete 2025-10-19 00:00:00
|
||||||
|
NC boxes are diverting to xbelt causing jams particullary at bypass curves Autstand (1) Very High 10/17 - Ian adjusted the 3 merges on MCM2 to max length to xbelt to 42" Monitor and update MCM01 flow splitter 10/17 KK 10/18 - Noncon detection length reduced to 41" Complete 2025-10-18 00:00:00
|
||||||
|
Bypasses are "going to sleep" Autstand (3) Medium 10/17 - there is no sleep or energy mgt on the bypasses Will die back if induct is not running 10/17 complete 2025-10-18 00:00:00
|
||||||
|
Flow splitters are rotating boxes, potentially contributing to jams. Timing and height of the pop up rollers need to be evaluated Autstand/DCS (2) Hgh 10/17- Autstand and DCS to evaluate and make adjustmets 10/17 IH 10/18 Updates made to flow splitter logic to refine the window of the "pop-up rollers" complete 2025-10-18 00:00:00
|
||||||
|
Take away line from shuttle tipper side pan is loose and causing jams/PE mis alignment Autstand (2) Hgh 10/17 DCS investigated and found the PEs on one of the tipper takeaways was installed/attached incorrectly. Autstand was advised to fix PEs 10/17 KK 10/27 - Investigated, found no issues Complete 2025-10-27 00:00:00
|
||||||
|
Operations requested the Problem Solve chutes from A and C to be disabled since not staffed Beumer (3) Medium 10/17 -- Sherri asked Beumer (Bryan) to disable the 2 chutes from the sorter. Operations to advise when to re-enable 10/17 Complete 10/17
|
||||||
|
Catch point at DD118 fluid load DCS (2) High 10/17 -Weld failed. DCS bolted sidepan. Check other pans 10/17 10/18 - resolved complete
|
||||||
|
NC flow splitter has worn rollers DCS (2) High pop up rollers on flow splitter are worn. replace wheels, assure that installation is adjusted/fine-tuned 10/17 10/18 - still pending
|
||||||
|
10/22: awaiting Down time window will take several down times to complete Complete
|
||||||
|
Add air pressure valves (autstand request to DCS) DCS (3) Medium 10/18 - no update
|
||||||
|
10/22: A waiting CR Incomplete
|
||||||
|
Maxx Reach at DD 332 not working
|
||||||
|
https://t.corp.amazon.com/V1969041198 Caljan (2) High OB Fluid 10/15/2025 10/17 Sherri contacted Caljan and arranged for RME to have remote tech support Incomplete
|
||||||
|
Packages not diverting on the correct intralox Autstand (2) High 10/15/2025 KK 10/18 - Need further clarification
|
||||||
|
KK 10/21 - No clarification received - closed as duplicate (Row 120) Complete
|
||||||
|
Label auto inducts Autstand (2) High 10/15/2025 Complete 2025-10-20 00:00:00
|
||||||
|
False blue lights Autstand S014020 (AUTO-CHUTE4020) , S014018 (AUTO-CHUTE4018) 10/25/2025 duplicate Complete 2025-10-18 00:00:00
|
||||||
|
Non - Con Jam rest button - (2) High NCPRS2-1CH 10/15/2025 duplicate Complette
|
||||||
|
Auto inducts / By passes do not start up with scata - (2) High 10/15/2025 resolved Complete
|
||||||
|
Semi induct D - light not allumintating green Autstand/Beumer 10/15/2025 KK 10/18 - Need further clarification
|
||||||
|
KK 10/19 - Done Complete 2025-10-19 00:00:00
|
||||||
|
Maxx reach controls do not function as prescribed FMH/Gorbel All OB fluid maxxx reaches 10/15/2025 Gorbel and FMH on site for training/ support Complete
|
||||||
|
DD218-DESTUFF-IT not properly working packing not able to climb up Gorbel (2) High DD218 Destuff-it 10/15/2025 Complete
|
||||||
|
oil leak in NON CON near chute S02-202CH DCS (2) High S02-202CH 10/15/2025 No Oil Present at Chute (Fire Suppression Pipe is Leaking) Complete
|
||||||
|
oil leak in NON CON near chute QAA-3CH DCS (2) High QAA-3CH 10/15/2025 No Oil Present at Chute Complete
|
||||||
|
Logic for Semi induct D is off very low throughput see video Autstand (2) High Semi Auto D induct 10/16/2025 KK 10/18 - Tweaking logic, continually adding optmizations see video in comments Monitor
|
||||||
|
S012075 unavailable Autstand (2) High S012075 10/16/2025 KK 10/19 - Done Complete 2025-10-19 00:00:00
|
||||||
|
supply cabinet in NON Con NON Con 10/16/2025 Incomplete
|
||||||
|
drop zone banner in Non Con drop zone banner in Non Con 10/16/2025 Incomplete
|
||||||
|
printer station at both ends in Non Con Non Con 10/16/2025 Incomplete
|
||||||
|
5s area for emtpy carts in Non Con Non Con 10/16/2025 Incomplete
|
||||||
|
Fans in Non Con Non Con 10/16/2025 Incomplete
|
||||||
|
VSD- S014020 BLINKING BLUE WHILE CHUTE IS EMPTY Autstand (2) High Virtual sort- D 10/16/2025 IH 10/18 - Confirmed functionality of the chute. Complete 2025-10-18 00:00:00
|
||||||
|
VSD- S014018 SOLID BLUE WHILE CHUTE IS EMPTY Autstand (2) High Virtual sort- D 10/16/2025 IH 10/18 - Confirmed functionality of the chute. Complete 2025-10-18 00:00:00
|
||||||
|
D2C S014041 flashing green + activation button not illuminating Autstand (2) High Virtual sort D D2C S014041 10/16/2025 Complete 2025-10-18 00:00:00
|
||||||
|
False Jam ( Rest every 6 mins) Beumer (2) High S013018 10/16/2025 KK 10/18 - Reassigned to Beumer complete
|
||||||
|
caljan at comm cable was ripped out DCS/Autstand dock door 223 10/16/2025 KK 10/21 - Investigated the unit, did not see anything unusual. Unit is working fine Complete 2025-10-21 00:00:00
|
||||||
|
Induct 5B (Bypass induct C->) rejecting packages within MTBH Beumer (2) High IND5B-5 (Induct platform VSB) 10/16/2025 10/18 - will verify Will check calibration, waiting on tool montor
|
||||||
|
Problem Solve rollers do not correctly inch-and-store packages, causing line to jam prematurely Autstand (2) High 10/16/2025 KK 10/17 - PRS photoeyes have been re-aligned and tightened Complete 2025-10-18 00:00:00
|
||||||
|
SCADA: We need some type of refrence in SCADA. Suggest adding dock doors that correlate with their belt Autstand (2) High Flow Desk 10/16/2025 Incomplete
|
||||||
|
SCADA: Need a way to click onto jammed area on main page to see where the jam is located and how to get there Autstand Flow Desk 10/16/2025 10/17 - That exists. Sherri showed several team members an dRME how to do this Complete
|
||||||
|
Run-up is not enabled on Problem solve collection belts. They all stop when the photoeye at the rollers is blocked. Autstand (2) High Problem solve 10/16/2025 KK 10/17 - PRS photoeyes have been re-aligned and tightened Complete 2025-10-18 00:00:00
|
||||||
|
Potential PE issue at the problem solve rollers right when the chutes level off. 300 side. Autstand (2) High BC problem solve 10/16/2025 KK 10/17 - PRS photoeyes have been re-aligned and tightened Complete 2025-10-18 00:00:00
|
||||||
|
SCADA: scada camera view from main map wont allow user to pan camera angles when clicked onto Autstand (2) High Flow Desk 10/16/2025 KK 10/18 - Adjusting the camera angle is not possible from SCADA. Can be done by accessing the camera directly with its IP address. Complete 2025-10-18 00:00:00
|
||||||
|
PS9-3CH2 - located by semi induct C. Blue light actived with no packages Autstand (2) High Semi induct C 10/16/2025 MC: Blue Light was NOT on when investigated, still went ahead to realign better PE/teach again (10/18/25) Complete 2025-10-18 00:00:00
|
||||||
|
Max Reach 100% PE logic is backwards All 300 and 100 DD Caljan Outbound 10/16/2025 KK 10/18 - Reassigned to Caljan Incomplete
|
||||||
|
BYPASS ATOC Auto induct reoccuring flase Jam Beumer 10/16/2025 KK 10/18 - Reassigned to Beumer Incomplete
|
||||||
|
semi induct c chute 2 Flase blue light PE needs adjusted Autstand (2) High 10/16/2025 MC: Blue Light was NOT on when investigated, still went ahead to realign better PE/teach again (10/18/25) Complete 2025-10-18 00:00:00
|
||||||
|
Max reach 119 PE at top of max reach needs to be adjusted , also having to reset line at times for it to move Caljan (2) High 10/16/2025 KK 10/18 - Reassigned to Caljan Incomplete
|
||||||
|
Allocations are correct - wrong packages coming down Beumer S014024 CHUTE 10/16/2025 10/18 will investigate Incomplete
|
||||||
|
packages being re inducted into ps bottom belt - hits the belt - needs to be raised DCs (2) High PS collector re induct chutes 10/16/2025 Cannot raise belt Complete
|
||||||
|
PS collector photo eyes are not feeding into each other Autstand/DCS PS collector photo eyes - both collectors 10/16/2025 KK 10/17 - PRS photoeyes have been re-aligned and tightened Complete 2025-10-18 00:00:00
|
||||||
|
Auto induct - D back fireing packages that can go - also demissionier is off Beumer (2) High Auto induct - 7d 10/16/2025 10/18 will investigate Incomplete
|
||||||
|
Non con diverts going down - becon alluminating but belt still running Autstand interlock 10/16/2025 KK 10/18 - Need clarification
|
||||||
|
KK 10/19 - Closed Complete 2025-10-19 00:00:00
|
||||||
|
IBNC splitting sending packages to NC that are within the crossbelt MTBH Autstand (2) High Inbound 10/16/2025 KK 10/16 - Splitter logic adjusted Complete 2025-10-16 00:00:00
|
||||||
|
D2C Chutes are full blue lighting 8 inches short of the go cart full line Autstand (2) High VS-D (But I assume all virtual sorters) 10/16/2025 KK 10/16 - Raised ALL D2C Full height 6-8" above last setting Complete 2025-10-16 00:00:00
|
||||||
|
chute stays green even when chute is full Autstand (2) High Chute S014073 10/16/2025 IH 10/18 Resolved. IO Mapping issue. Complete
|
||||||
|
Packages are being directed to the wrong end of the chutes, AA had to take jiffy and scan to D2C Beumer (2) High Chute S014072 10/17/2025 10/18 will investigate Incomplete
|
||||||
|
Non- con packages coming down to lanes Autstand (2) High VS-D 10/17/2025 KK 10/18 - Noncon detection length reduced to 41" Complete 2025-10-18 00:00:00
|
||||||
|
BUEMER scada - bypass is showing "die back" in yellow and futher up the belt is showing green. There is a disconnect. Packages arent able to move through in "die back" mode but the belt after is showing green, which looks to be good but isnt Beumer (2) High Bypass DA 10/17/2025 10/18 - will investigate Incomplete
|
||||||
|
Scada - label each line ex. UL13 , UL14 ect. Autstand (2) High Inbound 3-1 merges 10/17/2025 IH 10/19 SCADA Updated Complete 2025-10-19 00:00:00
|
||||||
|
PS11-11CH6NC Intralox Sorter (S02) Autstand (2) High PS11-11CH6NC Intralox Sorter (S02) 10/17/2025 KK 10/27 - Need clarification. I don't see the relation between PS11-11 and the intralox sorter. Incomplete
|
||||||
|
Blue light for semi induct D is on when chute is empty Autstand (2) High PS11-11CH6NC 10/17/2025 KK 10/18 - Realigned and trained photoeye Complete 2025-10-18 00:00:00
|
||||||
|
Need 1 button to turn on ALL inducts. I am having to turn them on one by one Autstand (2) High Buemer scada 10/17/2025 KK 10/18 - Our global start button is confirmed to start all autStand conveyors and Beumer CMC/SMC conveyors, only if they are not faulted. Complete 2025-10-18 00:00:00
|
||||||
|
Divert arms are to high and are causing jiffys to get stuck under the arm when diverting DCS (2) High Semi induct A 10/17/2025 10/18 - pending Complete
|
||||||
|
PS chute lip is catching ps boxes DCs (2) High QAB-2CH 10/17/2025 Pending Complete
|
||||||
|
10/17/2025 Incomplete
|
||||||
|
One major issue and one minor issue with the non-con system:
|
||||||
|
No-reads are really frequent
|
||||||
|
The PLC is not reporting S04 message divert fails properly (no reads to jackpot, lost container, failed to divert, wrong buildings) Autstand (2) High NON con sorter 1 and 2 not diverting 10/17/2025 KK 10/18 - For the whole sort yesterday we had 13 No Reads out of 500 inducted (2.6%) we will see what can be done to reduce this.
|
||||||
|
IH 10/19 Datalogic & PLC update conducted. Will continue to monitor.
|
||||||
|
KK 11/30 - Fixed the "Unknown" S04 message, verified with AWCS data Monitor
|
||||||
|
false jam Beumer (2) High Lane S014024 10/17/2025 KK 10/19 - Reassigned to beumer, they control crossbelt chute jams Incomplete
|
||||||
|
DBS sensors - heavier packages meeting weight requirement for main sorter triggering senors; causing sorter to shutdown Beumer (2) High Main Sorter 10/18/2025 10/18 - need update for ops on how DBS works Incomplete
|
||||||
|
Non-Con running through main sorter causing system to shutdown; Non-con packages not diverting to Non-cons sorter taking up carriers on Sorter Autstand (2) High Main Sorter 10/18/2025 KK 10/18 - Noncon detection length reduced to 41" Complete 2025-10-18 00:00:00
|
||||||
|
DTW8/CLE5 Non-Con packages not diverting to chutes; running straight through jackpot Autstand (2) High Non-Con sorter 10/18/2025 KK 10/18 - MFO issue
|
||||||
|
KK 10/19 - Not MFO, need to deep dive tracking/diverting/etc
|
||||||
|
KK 10/20 - Identified potential issue with a photoeye missing incoming packages at scan tunnel induct, which manifest as unknown/unexpected packages and causing some packages to go off-the-end. We adjusted this sensor and are monitoring. Initial observations seem promising
|
||||||
|
KK 10/27 - Resolved Complete 2025-10-27 00:00:00
|
||||||
|
SEMI-D uneven flow of packages to each chute Autstand (2) High SEMI-D 10/18/2025 KK 10/18 - Logic continually being optmized (monitor)
|
||||||
|
KK 10/27 - This is a duplicate item related to bulk induct shutes (row 6), I will close it Complete 2025-10-27 00:00:00
|
||||||
|
jiffies getting caught in belows causing sorter to shutdown Beumer (2) High Cells on Main sorter 10/18/2025 Incomplete
|
||||||
|
Non-con packages with plastic securement strips are not to be ran on sorter. Packages with plastic securement strips gets caught in sorter causing it to shut down/ jam. Autstand/DCS Non-Con sorter 10/18/2025 KK 10/18 - Our system can not tell if a package has plastic securement strips Complete 2025-10-18 00:00:00
|
||||||
|
Maint jack for tippers DCS (2) High 10/17/25 10/17 - Confirmed that jack was not received/onsite here or MTN2. Asked DCS to confirm if ordered with the tippers.
|
||||||
|
10/22: PO Pending for 1 Jack
|
||||||
|
10/23: ETA Shipping Date of Tipper Jack is 10/31/2025 complete
|
||||||
|
Clean up SCADA Active Jams to not show false jams ex BYBA-15 /BYBD-14 Autstand (2) High 10/18/25 KK 10/21 - Aware of a couple "stuck" alarms - still investigating why RS 10/30 - This issue seems to be fixed
|
||||||
|
complete
|
||||||
|
Disable jam pe's that are to be removed (bulk chutes) Autstand (2) High 10/18/25 KK 10/18 - Disabled, pending physical removal Complete 2025-10-18 00:00:00
|
||||||
|
UL4-15 damaged belt DCS Complete
|
||||||
|
UL7-17 Belt has a rip DCS/RME Rip in belt the size of a dollar bill 2025-10-18 00:00:00 AM 10/19 - RME replaced this belt complete 2025-10-18 00:00:00
|
||||||
|
PS3-1 merge DCS/Flow-Turn (2) High Shaft walked causing the belts to come off track and destroy 2 belts 2025-10-18 00:00:00 AM 10/19 - DCS repaired this merge and replaced the 2 belts. This needs to be monitored complete 2025-10-19 00:00:00
|
||||||
|
PS6-3 DCS Noisy when running, side pan is very warm to the touch 2025-10-18 00:00:00 F14041 Complete
|
||||||
|
UL7-17 Belt needs to be replaced (again) RME installation (ripped edges, lacing) DCS (1) Very High 2025-10-18 00:00:00 Complete
|
||||||
|
Provide Bellow clearing procedures Beumer (3) Medium Document the process for clearing bellows for RME 2025-10-17 00:00:00 Incomplete
|
||||||
|
Air Knife over shooting takeaway conveyor Beumer (3) Medium Too many packages are falling in netting. Add add'l netting ? refocus air knife? 2025-10-19 00:00:00 10/23 - Airknife out of alignment. Beumer adjusted but requested Silman to return to site to recalibrate complete
|
||||||
|
Evaluate jam logic /die back on bypasses. Autstand (2) High getting "false jams" of box stopped in from of PE when belt stops. Bypass jams are difficult to access need to minimize them 2025-10-19 00:00:00 KK 10/19 - Verified that it is not being caused by runup logic, need to continue to monitor
|
||||||
|
KK 10/27 - False jams seemed to have stopped being as frequent. There is still no runup logic causing this. Complete 2025-10-27 00:00:00
|
||||||
|
At inducts evaluate why "conveyable" boxes are being rejected at induction Beumer (2) High Is aligner working as expected? Skewed boxes triggering as oversized 2025-10-19 00:00:00 Incomplete
|
||||||
|
Non Con Chute/Maint access. Need Latch upgrade DCS (2) High 2025-10-10 00:00:00 10.29 SSI will be on site to evaluate /repair 10/30. 11/3 - SSI completed their evaluation, need to replace/rebuild over 40 latches Complete
|
||||||
|
UL21-24 Failed (belts and shaft) DCS (1) Very High 2025-10-20 00:00:00 10/21/25 - repair completed complete
|
||||||
|
Non Con flow issues -- missorts to S02207 Autstand 2025-10-22 00:00:00 KK 10/27 - Resolved Complete 2025-10-27 00:00:00
|
||||||
|
DTC chutes on VS-B is randomly disabling Autstand 2025-10-22 00:00:00 10/30 RC - Is this still an issue? Chute code was updated to add a debounce period for registering a cart removal. This should mitigate any false removals caused by jiffies triggering the sensor while falling into the cart. Monitor
|
||||||
|
Bypasses are showing "lane unavailble" at a high rate. should always be available... is it in energy saving mode? or other reason Autstand/Beumer 2025-10-22 00:00:00 10/30 RC - AutStand removed rate management logic that caused Conveyor Not Ready status in SCADA. AutStand to monitor whether bypass jams increase. Beumer to adjust to-bypass discharge rate if necessary. Monitor 2025-10-30 00:00:00
|
||||||
|
Deep dive missorts (file shared) Beumer 2025-10-22 00:00:00 Incomplete Incomplete
|
||||||
|
Aligner catch point on IND2C-s Beumer 2025-10-22 00:00:00 Incomplete Incomplete
|
||||||
|
Issue with needing to reset all inducts (fault). when system starts. Need to automatically reset Beumer 2025-10-22 00:00:00 Incomplete Incomplete
|
||||||
|
Inductions are going directly on bellowsco Beumer (1) Very Hgh Experiencing too many items on bellow... causing sorter to stop 2025-10-22 00:00:00 complete
|
||||||
|
Carrier disabled to shut down the sorter Beumer (1) Very Hgh Sorter shutting down too often 2025-10-22 00:00:00 30% disable threshold... confirm reenable complete
|
||||||
|
Missorts Beumer (1) Very Hgh File with missorts shared. 2025-10-20 00:00:00 11/3 -- Missorts issue with chute trigger settings identified. All chutes evaluated and fixed on 10/30 will evaluate improvements with next Ops report Incomplete
|
||||||
|
Estop not reporting on BGFusion/Scada Beumer 2) High Sorter stopped could not find root cause. Estop was triggered and not communicated 2025-10-21 00:00:00 complete
|
||||||
|
Encoder failure (4x) + 2 x Autstand (2) High UL8-7 UL11-7 Problem with port on APF 2025-10-10 00:00:00 10/23 ST soluton is changing the port... LT reseach with Rockwell 10/29 - Rockwell to send engineer to test system 10/30 ; 10/30 RC - Rockwell visit not happening today. TBD. 10/30 - looking to send "capable engineer" to address engineer. today another encoder failed UL18-10 (all merge stop - 20 min swapping) 11/3- Rockwell scheduled to be on site 11/6. Incomplete
|
||||||
|
SCADA performance issue Autstand (2) High report export crashed system 11/1 RC - SCADA was updated to improve performance yesterday NIGHT.
|
||||||
|
KK 11/4 - Assuming this is related to SCADA crashing when trying to export large amounts of data (like a week of alarms). We addressed, just tested and it did not crash. Complete 2025-11-04 00:00:00
|
||||||
|
7:1 merge code update Autstand (2) High 11/3 - testing at BNA8 Incomplete
|
||||||
|
Motor falling on HSQ gappers.. 2x (3:1 merge) DCS (2) High upgrade the bolts Complete
|
||||||
|
Packages are being inducted on occupied trays Beumer (1) Very Hgh Causing missorts and DBS/IBS/IOB faults that stop the sorter 2025-10-22 00:00:00 10/23 - Beumer updated PLC to prevent issue but did nto work. Additional logs were addeed to trace root cause of issue (10/24 @730am) complete
|
||||||
|
PRS4-2 Motor Replacement DCS High Motor Oreded will update when I have an ETA ( Tryignto get this overnight) 2025-10-26 00:00:00 Pending Ship Date complete
|
||||||
|
3:1 merge code update Autstand (2) High mcm02 by monday 11/4. mcm01 ul 1-3 done. mcm01 complete. 11/3 - no update... Igor at BNA8
|
||||||
|
pe missing prob solve ak chute Autstand/Beumer (3) Medium 2025-10-29 00:00:00 Completed 10/29 Complete
|
||||||
|
Lane Not Available Metric too high Beumer (1) Very Hgh 11/3 - Working with Autstand conveyor ready flag as disabled ... will be addressed by full lane signal (fluidload only). Still need to do similar fix on bypass but need to evaluate when to trigger full lane (vs lane not available0
|
||||||
|
2025-10-30 00:00:00
|
||||||
|
gap control at non con sorter. autstand code change/ help with box tracking. 2025-10-30 00:00:00 working on it today. /tomorrow
|
||||||
|
KK 11/4 - 0 gap errors since logic update, closing this item Complete 2025-11-04 00:00:00
|
||||||
|
NCS1-1 aligner belt failed DCS (1) Very High Belt failed prior to flow splitter. Replaced with belt from noncon 2 (using only non con 1) until belt is delivered. 2025-11-01 00:00:00 11/3 - still waiting on belt to be delivered
|
||||||
|
Add DHL label to Scan tunnel valid message Datalogic (1) Very High DHL label was not in orignal spec. Need to be able to identify that label and filter out other barcodes. 2025-10-27 00:00:00
|
||||||
|
Estops are getting damaged on the UL lane Autstand (2) High UL16-1, UL15-3, UL10-2 (both sides) UL8-1 , UL7-3, UL6-1 protect or relocate devices 2025-11-04 00:00:00
|
||||||
|
) There is a catchpoint of bent metal that is sticking out from the tail assembly on PS10-1 where it transitions to PS11-1. This is catching polys during operation. Jesse is going to look into making proper modifications to eliminate this. DCS (2) High 2025-11-04 00:00:00 11/4 - Wes Matthews reviewed with Jesse
|
||||||
|
2) When product from PS10-1 is flowing towards PS11-1, there is no snowplow and instead the slide just dead ends with a corner of sidepan. I’ve asked Jesse to look into fabricating a UHMW piece that could bridge this corner to push products down onto the belt. DCS (2) High 2025-11-04 00:00:00 11/4 Wes Matthews reviewed with Jesse
|
||||||
|
3) The black UHMW strip under the belt which transitions the belt from slider bed to tail roller is too sharp and is shaving the bottom side of the belt. Jesse and his team are going to look into pulling this uhmw strip out, properly chamfering it and then re-installing. DCS (2) High 2025-11-04 00:00:00 11/4 Wes Matthews reviewed with Jesse
|
||||||
|
Raise the fill height ob the DTC's approx 2 " Autstand (2) High 2025-11-04 00:00:00
|
||||||
|
|
||||||
|
================================================================================
|
||||||
518
output/preprocessed_data.txt
Normal file
518
output/preprocessed_data.txt
Normal file
@ -0,0 +1,518 @@
|
|||||||
|
PREPROCESSED EXCEL DATA
|
||||||
|
================================================================================
|
||||||
|
Current Date (Baltimore/Eastern): 2025-11-05 10:08:52 EST
|
||||||
|
Total Items: 162
|
||||||
|
|
||||||
|
VENDOR: Amazon
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 1
|
||||||
|
Closed: 1
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
VERY HIGH PRIORITY (1 items):
|
||||||
|
AWCS Multiple Destinations | Complete | 10/15/25
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
AWCS Multiple Destinations | Vendor: Amazon | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: AWCS was not sending multiple destinations for NC ...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Autstand
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 74
|
||||||
|
Closed: 67
|
||||||
|
Open: 3
|
||||||
|
Monitor: 4
|
||||||
|
|
||||||
|
RECENT UPDATES (Yesterday's Date):
|
||||||
|
ADDED: Estops are getting damaged on the UL lane | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
ADDED: Raise the fill height ob the DTC's approx 2 " | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
CLOSED: SCADA performance issue | 2025-11-04 00:00:00 | Complete
|
||||||
|
CLOSED: gap control at non con sorter. | 2025-11-04 00:00:00 | Complete
|
||||||
|
|
||||||
|
OLDEST UNADDRESSED (Top 3):
|
||||||
|
Estops are getting damaged on the UL lane | Age: 1 days | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
Raise the fill height ob the DTC's approx 2 " | Age: 1 days | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
3:1 merge code update | Age: None days | | Incomplete
|
||||||
|
|
||||||
|
VERY HIGH PRIORITY (6 items):
|
||||||
|
Semi-Auto Exception Arm Logic | Complete | 10/14/25
|
||||||
|
PS Conveyor chute clearing Issues | Complete | 10/14/25
|
||||||
|
Replicate logic timers from semi VS-D to the rest of the semis | Monitor | 10/14/25
|
||||||
|
Tipper timer | Complete | 10/14/25
|
||||||
|
SCADA Accurate Status Reads | Complete | 10/14/25
|
||||||
|
NC boxes are diverting to xbelt causing jams particullary at bypass curves | Complete | 10/17
|
||||||
|
|
||||||
|
HIGH PRIORITY (53 items):
|
||||||
|
Problem Solve dead rollers | Complete | 10/14/25
|
||||||
|
Jam Reset Button needed at end of NC Jackpots | Complete | 10/15/25
|
||||||
|
Jam Reset buttons on Bulk divert platforms to be relocated | Complete | 10/15/25
|
||||||
|
Flow Splitter Verification | Complete | 10/15/25
|
||||||
|
Jam Reset NC End of Sorter | Complete | 10/15/25
|
||||||
|
"Destination Not Attempted" Reason Code | Complete | 10/15/25
|
||||||
|
PS lines stop packages at the top of the line, on the first station. It should push the packages to the last station Jackpot probem solve | Complete | 10/15/25
|
||||||
|
Still seeing Lost Container / No Reads in NC Jackpot | Complete | 10/15/25
|
||||||
|
First chute orange lights keeps turning on without pakages blocking any sensors semi auto vs-d | Complete | 10/15/25
|
||||||
|
Flashing and steady blue light on a chute without any package present S014020, S014018 | Complete | 10/15/25
|
||||||
|
Flashing Green light on D2C , start button doesn't work S014041 | Complete | 10/15/25
|
||||||
|
non- con packages still has divert issues packages going straight to jackpot | Complete | 10/15/25
|
||||||
|
Scada Map not showing cameras | Complete | 10/15/25
|
||||||
|
Scada Map: showing stopped but actually running C | Complete | 10/15/25
|
||||||
|
PS lines stop packages at the top of the line, on the first station. It should push the packages to the last station. | Complete | 10/15/25
|
||||||
|
Still seeing Lost Container / No Reads in NC Jackpot as of 1044 | Complete | 10/15/25
|
||||||
|
206 - 207 max reach giving us false signals its green on skada but not operational | Complete | 10/15/25
|
||||||
|
Take away line from shuttle tipper side pan is loose and causing jams/PE mis alignment | Complete | 10/17
|
||||||
|
Packages not diverting on the correct intralox | Complete | 10/15/2025
|
||||||
|
Label auto inducts | Complete | 10/15/2025
|
||||||
|
Logic for Semi induct D is off very low throughput see video | Monitor | 10/16/2025
|
||||||
|
S012075 unavailable | Complete | 10/16/2025
|
||||||
|
VSD- S014020 BLINKING BLUE WHILE CHUTE IS EMPTY | Complete | 10/16/2025
|
||||||
|
VSD- S014018 SOLID BLUE WHILE CHUTE IS EMPTY | Complete | 10/16/2025
|
||||||
|
D2C S014041 flashing green + activation button not illuminating | Complete | 10/16/2025
|
||||||
|
Problem Solve rollers do not correctly inch-and-store packages, causing line to jam prematurely | Complete | 10/16/2025
|
||||||
|
SCADA: We need some type of refrence in SCADA. Suggest adding dock doors that correlate with their belt | Complete | 10/16/2025
|
||||||
|
Run-up is not enabled on Problem solve collection belts. They all stop when the photoeye at the rollers is blocked. | Complete | 10/16/2025
|
||||||
|
Potential PE issue at the problem solve rollers right when the chutes level off. 300 side. | Complete | 10/16/2025
|
||||||
|
SCADA: scada camera view from main map wont allow user to pan camera angles when clicked onto | Complete | 10/16/2025
|
||||||
|
PS9-3CH2 - located by semi induct C. Blue light actived with no packages | Complete | 10/16/2025
|
||||||
|
semi induct c chute 2 Flase blue light PE needs adjusted | Complete | 10/16/2025
|
||||||
|
IBNC splitting sending packages to NC that are within the crossbelt MTBH | Complete | 10/16/2025
|
||||||
|
D2C Chutes are full blue lighting 8 inches short of the go cart full line | Complete | 10/16/2025
|
||||||
|
chute stays green even when chute is full | Complete | 10/16/2025
|
||||||
|
Non- con packages coming down to lanes | Complete | 10/17/2025
|
||||||
|
Scada - label each line ex. UL13 , UL14 ect. | Complete | 10/17/2025
|
||||||
|
PS11-11CH6NC Intralox Sorter (S02) | Complete | 10/17/2025
|
||||||
|
Blue light for semi induct D is on when chute is empty | Complete | 10/17/2025
|
||||||
|
Need 1 button to turn on ALL inducts. I am having to turn them on one by one | Complete | 10/17/2025
|
||||||
|
One major issue and one minor issue with the non-con system:
|
||||||
|
No-reads are really frequent
|
||||||
|
The PLC is not reporting S04 message divert fails properly (no reads to jackpot, lost container, failed to divert, wrong buildings) | Monitor | 10/17/2025
|
||||||
|
Non-Con running through main sorter causing system to shutdown; Non-con packages not diverting to Non-cons sorter taking up carriers on Sorter | Complete | 10/18/2025
|
||||||
|
DTW8/CLE5 Non-Con packages not diverting to chutes; running straight through jackpot | Complete | 10/18/2025
|
||||||
|
SEMI-D uneven flow of packages to each chute | Complete | 10/18/2025
|
||||||
|
Clean up SCADA Active Jams to not show false jams ex BYBA-15 /BYBD-14 | Complete | 10/18/25
|
||||||
|
Disable jam pe's that are to be removed (bulk chutes) | Complete | 10/18/25
|
||||||
|
Evaluate jam logic /die back on bypasses. | Complete | 2025-10-19 00:00:00
|
||||||
|
Encoder failure (4x) + 2 x | Complete | 2025-10-10 00:00:00
|
||||||
|
SCADA performance issue | Complete |
|
||||||
|
7:1 merge code update | Complete |
|
||||||
|
3:1 merge code update | Incomplete |
|
||||||
|
Estops are getting damaged on the UL lane | Incomplete | 2025-11-04 00:00:00
|
||||||
|
Raise the fill height ob the DTC's approx 2 " | Incomplete | 2025-11-04 00:00:00
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Semi-Auto Exception Arm Logic | Vendor: Autstand | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Exception chute arm disengaged prior to all carton...
|
||||||
|
PS Conveyor chute clearing Issues | Vendor: Autstand | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Chute/conveyor beacon at the top of the problem so...
|
||||||
|
Replicate logic timers from semi VS-D to the rest of the semis | Vendor: Autstand | Priority: (1) Very High (very_high) | Status: Monitor (OPEN) | Date: 10/14/25 | Description: Logic timers from semi-auto at all virtual sorters...
|
||||||
|
Tipper timer | Vendor: Autstand | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Adjust tipper logic to prevent two tippers from du...
|
||||||
|
SCADA Accurate Status Reads | Vendor: Autstand | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Update SCADA status accuracy with info sent from B...
|
||||||
|
Problem Solve dead rollers | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: First few rollers not able to be engaged due to mi...
|
||||||
|
Jam Reset Button needed at end of NC Jackpots | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: There is no reset at the end of the NC sorters n...
|
||||||
|
Jam Reset buttons on Bulk divert platforms to be relocated | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: JR button is behind the saefty fencing move to out...
|
||||||
|
Flow Splitter Verification | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Conveyable cartons are entering the non-con at a h...
|
||||||
|
Semi-Auto Chute fullness PE Height | Vendor: Autstand | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Adjust 50% and 100% Full PE locations to better op...
|
||||||
|
Jam Cam visibility in SCADA | Vendor: Autstand | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Autstand needs to set up passwords/remove pw for ...
|
||||||
|
Chute 14041 Enable Issues | Vendor: Autstand | Priority: (4) Low (low) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: DTC chute won't stay enabled even with cart in cor...
|
||||||
|
VS-D, S01400 Pallet Chute Beacons - False Fullness | Vendor: Autstand | Priority: (4) Low (low) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Chute fullness indicator beacon illuminated incorr...
|
||||||
|
Semi-Auto Jam Beacons | Vendor: Autstand | Priority: (4) Low (low) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: remove jam PE at chute...
|
||||||
|
NC Dim Data | Vendor: Autstand | Priority: (6) Complete (complete) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: AutStand not sending DIM data in S01 Message...
|
||||||
|
Jam Reset NC End of Sorter | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Need to add jam reset pb for end of sorter jam pe,...
|
||||||
|
PS11_11_JR3 | Vendor: Autstand | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Jam Reset PB is flashing sporadically...
|
||||||
|
"Destination Not Attempted" Reason Code | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Receiving "Destination Not Attempted" in the wrong...
|
||||||
|
S013089 Blue Beacon | Vendor: Autstand | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Need to investigate ZMX Sensor, alignment causing ...
|
||||||
|
PS lines stop packages at the top of the line, on the first station. It should push the packages to the last station Jackpot probem solve | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
Still seeing Lost Container / No Reads in NC Jackpot | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
First chute orange lights keeps turning on without pakages blocking any sensors semi auto vs-d | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
Flashing and steady blue light on a chute without any package present S014020, S014018 | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
Flashing Green light on D2C , start button doesn't work S014041 | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
non- con packages still has divert issues packages going straight to jackpot | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
Scada Map not showing cameras | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
Scada Map: showing stopped but actually running C | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
PS lines stop packages at the top of the line, on the first station. It should push the packages to the last station. | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
Still seeing Lost Container / No Reads in NC Jackpot as of 1044 | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
206 - 207 max reach giving us false signals its green on skada but not operational | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: N/A...
|
||||||
|
NC boxes are diverting to xbelt causing jams particullary at bypass curves | Vendor: Autstand | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/17 | Description: 10/17 - Ian adjusted the 3 merges on MCM2 to max l...
|
||||||
|
Bypasses are "going to sleep" | Vendor: Autstand | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/17 | Description: 10/17 - there is no sleep or energy mgt on the by...
|
||||||
|
Take away line from shuttle tipper side pan is loose and causing jams/PE mis alignment | Vendor: Autstand | Priority: (2) Hgh (high) | Status: Complete (CLOSED) | Date: 10/17 | Description: 10/17 DCS investigated and found the PEs on one o...
|
||||||
|
Packages not diverting on the correct intralox | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: N/A...
|
||||||
|
Label auto inducts | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: N/A...
|
||||||
|
False blue lights | Vendor: Autstand | Priority: (None) | Status: Complete (CLOSED) | Date: 10/25/2025 | Description: S014020 (AUTO-CHUTE4020) , S014018 (AUTO-CHUTE4018...
|
||||||
|
Logic for Semi induct D is off very low throughput see video | Vendor: Autstand | Priority: (2) High (high) | Status: Monitor (OPEN) | Date: 10/16/2025 | Description: Semi Auto D induct...
|
||||||
|
S012075 unavailable | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: S012075...
|
||||||
|
VSD- S014020 BLINKING BLUE WHILE CHUTE IS EMPTY | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Virtual sort- D...
|
||||||
|
VSD- S014018 SOLID BLUE WHILE CHUTE IS EMPTY | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Virtual sort- D...
|
||||||
|
D2C S014041 flashing green + activation button not illuminating | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Virtual sort D D2C S014041...
|
||||||
|
Problem Solve rollers do not correctly inch-and-store packages, causing line to jam prematurely | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: N/A...
|
||||||
|
SCADA: We need some type of refrence in SCADA. Suggest adding dock doors that correlate with their belt | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Flow Desk...
|
||||||
|
SCADA: Need a way to click onto jammed area on main page to see where the jam is located and how to get there | Vendor: Autstand | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Flow Desk...
|
||||||
|
Run-up is not enabled on Problem solve collection belts. They all stop when the photoeye at the rollers is blocked. | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Problem solve...
|
||||||
|
Potential PE issue at the problem solve rollers right when the chutes level off. 300 side. | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: BC problem solve...
|
||||||
|
SCADA: scada camera view from main map wont allow user to pan camera angles when clicked onto | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Flow Desk...
|
||||||
|
PS9-3CH2 - located by semi induct C. Blue light actived with no packages | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Semi induct C...
|
||||||
|
semi induct c chute 2 Flase blue light PE needs adjusted | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: N/A...
|
||||||
|
Non con diverts going down - becon alluminating but belt still running | Vendor: Autstand | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: interlock...
|
||||||
|
IBNC splitting sending packages to NC that are within the crossbelt MTBH | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Inbound...
|
||||||
|
D2C Chutes are full blue lighting 8 inches short of the go cart full line | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: VS-D (But I assume all virtual sorters)...
|
||||||
|
chute stays green even when chute is full | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Chute S014073...
|
||||||
|
Non- con packages coming down to lanes | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: VS-D...
|
||||||
|
Scada - label each line ex. UL13 , UL14 ect. | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: Inbound 3-1 merges...
|
||||||
|
PS11-11CH6NC Intralox Sorter (S02) | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: PS11-11CH6NC Intralox Sorter (S02)...
|
||||||
|
Blue light for semi induct D is on when chute is empty | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: PS11-11CH6NC...
|
||||||
|
Need 1 button to turn on ALL inducts. I am having to turn them on one by one | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: Buemer scada...
|
||||||
|
One major issue and one minor issue with the non-con system:
|
||||||
|
No-reads are really frequent
|
||||||
|
The PLC is not reporting S04 message divert fails properly (no reads to jackpot, lost container, failed to divert, wrong buildings) | Vendor: Autstand | Priority: (2) High (high) | Status: Monitor (OPEN) | Date: 10/17/2025 | Description: NON con sorter 1 and 2 not diverting...
|
||||||
|
Non-Con running through main sorter causing system to shutdown; Non-con packages not diverting to Non-cons sorter taking up carriers on Sorter | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/18/2025 | Description: Main Sorter...
|
||||||
|
DTW8/CLE5 Non-Con packages not diverting to chutes; running straight through jackpot | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/18/2025 | Description: Non-Con sorter...
|
||||||
|
SEMI-D uneven flow of packages to each chute | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/18/2025 | Description: SEMI-D...
|
||||||
|
Clean up SCADA Active Jams to not show false jams ex BYBA-15 /BYBD-14 | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/18/25 | Description: N/A...
|
||||||
|
Disable jam pe's that are to be removed (bulk chutes) | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/18/25 | Description: N/A...
|
||||||
|
Evaluate jam logic /die back on bypasses. | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 2025-10-19 00:00:00 | Description: getting "false jams" of box stopped in from of PE ...
|
||||||
|
Non Con flow issues -- missorts to S02207 | Vendor: Autstand | Priority: (None) | Status: Complete (CLOSED) | Date: 2025-10-22 00:00:00 | Description: N/A...
|
||||||
|
DTC chutes on VS-B is randomly disabling | Vendor: Autstand | Priority: (None) | Status: Monitor (OPEN) | Date: 2025-10-22 00:00:00 | Description: N/A...
|
||||||
|
Encoder failure (4x) + 2 x | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 2025-10-10 00:00:00 | Description: UL8-7 UL11-7 Problem with port on APF...
|
||||||
|
SCADA performance issue | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: | Description: report export crashed system...
|
||||||
|
7:1 merge code update | Vendor: Autstand | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: | Description: N/A...
|
||||||
|
3:1 merge code update | Vendor: Autstand | Priority: (2) High (high) | Status: Incomplete (OPEN) | Date: | Description: mcm02 by monday 11/4. mcm01 ul 1-3 done. ...
|
||||||
|
gap control at non con sorter. | Vendor: Autstand | Priority: (None) | Status: Complete (CLOSED) | Date: 2025-10-30 00:00:00 | Description: code change/ help with box tracking....
|
||||||
|
Estops are getting damaged on the UL lane | Vendor: Autstand | Priority: (2) High (high) | Status: Incomplete (OPEN) | Date: 2025-11-04 00:00:00 | Description: UL16-1, UL15-3, UL10-2 (both sides) UL8-1 , UL7-3...
|
||||||
|
Raise the fill height ob the DTC's approx 2 " | Vendor: Autstand | Priority: (2) High (high) | Status: Incomplete (OPEN) | Date: 2025-11-04 00:00:00 | Description: N/A...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Autstand/Beumer
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 3
|
||||||
|
Closed: 2
|
||||||
|
Open: 0
|
||||||
|
Monitor: 1
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Semi induct D - light not allumintating green | Vendor: Autstand/Beumer | Priority: (None) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: N/A...
|
||||||
|
Bypasses are showing "lane unavailble" at a high rate. should always be available... is it in energy saving mode? or other reason | Vendor: Autstand/Beumer | Priority: (None) | Status: Monitor (OPEN) | Date: 2025-10-22 00:00:00 | Description: N/A...
|
||||||
|
pe missing prob solve ak chute | Vendor: Autstand/Beumer | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 2025-10-29 00:00:00 | Description: N/A...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Autstand/DCS
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 3
|
||||||
|
Closed: 3
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
HIGH PRIORITY (1 items):
|
||||||
|
Flow splitters are rotating boxes, potentially contributing to jams. Timing and height of the pop up rollers need to be evaluated | Complete | 10/17
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Flow splitters are rotating boxes, potentially contributing to jams. Timing and height of the pop up rollers need to be evaluated | Vendor: Autstand/DCS | Priority: (2) Hgh (high) | Status: Complete (CLOSED) | Date: 10/17 | Description: 10/17- Autstand and DCS to evaluate and make adju...
|
||||||
|
PS collector photo eyes are not feeding into each other | Vendor: Autstand/DCS | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: PS collector photo eyes - both collectors...
|
||||||
|
Non-con packages with plastic securement strips are not to be ran on sorter. Packages with plastic securement strips gets caught in sorter causing it to shut down/ jam. | Vendor: Autstand/DCS | Priority: (None) | Status: Complete (CLOSED) | Date: 10/18/2025 | Description: Non-Con sorter...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Beumer
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 32
|
||||||
|
Closed: 26
|
||||||
|
Open: 1
|
||||||
|
Monitor: 5
|
||||||
|
|
||||||
|
OLDEST UNADDRESSED (Top 3):
|
||||||
|
Lane Not Available Metric too high | Age: None days | | Incomplete
|
||||||
|
|
||||||
|
VERY HIGH PRIORITY (6 items):
|
||||||
|
Bypasses Not On Due to Auto-Induct Status | Monitor | 10/14/25
|
||||||
|
Inductions are going directly on bellowsco | Complete | 2025-10-22 00:00:00
|
||||||
|
Carrier disabled to shut down the sorter | Complete | 2025-10-22 00:00:00
|
||||||
|
Missorts | Complete | 2025-10-20 00:00:00
|
||||||
|
Packages are being inducted on occupied trays | Complete | 2025-10-22 00:00:00
|
||||||
|
Lane Not Available Metric too high | Incomplete |
|
||||||
|
|
||||||
|
HIGH PRIORITY (12 items):
|
||||||
|
Semi-Auto Package marking X's | Complete | 10/6/25
|
||||||
|
Auto-Induct Restart | Complete | 10/15/25
|
||||||
|
False Jam ( Rest every 6 mins) | Complete | 10/16/2025
|
||||||
|
Induct 5B (Bypass induct C->) rejecting packages within MTBH | Monitor | 10/16/2025
|
||||||
|
Auto induct - D back fireing packages that can go - also demissionier is off | Complete | 10/16/2025
|
||||||
|
Packages are being directed to the wrong end of the chutes, AA had to take jiffy and scan to D2C | Complete | 10/17/2025
|
||||||
|
BUEMER scada - bypass is showing "die back" in yellow and futher up the belt is showing green. There is a disconnect. Packages arent able to move through in "die back" mode but the belt after is showing green, which looks to be good but isnt | Complete | 10/17/2025
|
||||||
|
false jam | Complete | 10/17/2025
|
||||||
|
DBS sensors - heavier packages meeting weight requirement for main sorter triggering senors; causing sorter to shutdown | Complete | 10/18/2025
|
||||||
|
jiffies getting caught in belows causing sorter to shutdown | Complete | 10/18/2025
|
||||||
|
At inducts evaluate why "conveyable" boxes are being rejected at induction | Complete | 2025-10-19 00:00:00
|
||||||
|
Estop not reporting on BGFusion/Scada | Complete | 2025-10-21 00:00:00
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Bypasses Not On Due to Auto-Induct Status | Vendor: Beumer | Priority: (1) Very High (very_high) | Status: Monitor (OPEN) | Date: 10/14/25 | Description: Bypasses were turned off several times during test...
|
||||||
|
Semi-Auto Package marking X's | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/6/25 | Description: Remark induct point X's on conveyance in permanent...
|
||||||
|
VS-D Auto-Induct Jams/Faults | Vendor: Beumer | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Training for ops on difference between jams/faults...
|
||||||
|
Diverting onto Bellows from Bypass, adjust carrier aim | Vendor: Beumer | Priority: (3) Medium (medium) | Status: Monitor (OPEN) | Date: 10/14/25 | Description: Confirm divert points for auto and semi-auto induc...
|
||||||
|
Divert Points to Pallet Chutes | Vendor: Beumer | Priority: (3) Medium (medium) | Status: Monitor (OPEN) | Date: 10/14/25 | Description: Confirm divert points to pallet build chutes, ligh...
|
||||||
|
IND2A-22 Carrier Induct Timing | Vendor: Beumer | Priority: (3) Medium (medium) | Status: Monitor (OPEN) | Date: 10/15/25 | Description: Check induct firing direction and timing at IND2A-...
|
||||||
|
Throughput Limit on SCADA | Vendor: Beumer | Priority: (4) Low (low) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Throughput Limit is being identified on SCADA and ...
|
||||||
|
SCADA Accurate Status Reads | Vendor: Beumer | Priority: (6) Complete (complete) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Beumer not sending full accurate lane status to Au...
|
||||||
|
Auto-Induct Restart | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: After an E-Stop and Restart, Auto-Induction didn't...
|
||||||
|
Operations requested the Problem Solve chutes from A and C to be disabled since not staffed | Vendor: Beumer | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/17 | Description: 10/17 -- Sherri asked Beumer (Bryan) to disable th...
|
||||||
|
False Jam ( Rest every 6 mins) | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: S013018...
|
||||||
|
Induct 5B (Bypass induct C->) rejecting packages within MTBH | Vendor: Beumer | Priority: (2) High (high) | Status: Monitor (OPEN) | Date: 10/16/2025 | Description: IND5B-5 (Induct platform VSB)...
|
||||||
|
BYPASS ATOC Auto induct reoccuring flase Jam | Vendor: Beumer | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: N/A...
|
||||||
|
Allocations are correct - wrong packages coming down | Vendor: Beumer | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: S014024 CHUTE...
|
||||||
|
Auto induct - D back fireing packages that can go - also demissionier is off | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Auto induct - 7d...
|
||||||
|
Packages are being directed to the wrong end of the chutes, AA had to take jiffy and scan to D2C | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: Chute S014072...
|
||||||
|
BUEMER scada - bypass is showing "die back" in yellow and futher up the belt is showing green. There is a disconnect. Packages arent able to move through in "die back" mode but the belt after is showing green, which looks to be good but isnt | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: Bypass DA...
|
||||||
|
false jam | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: Lane S014024...
|
||||||
|
DBS sensors - heavier packages meeting weight requirement for main sorter triggering senors; causing sorter to shutdown | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/18/2025 | Description: Main Sorter...
|
||||||
|
jiffies getting caught in belows causing sorter to shutdown | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/18/2025 | Description: Cells on Main sorter...
|
||||||
|
Provide Bellow clearing procedures | Vendor: Beumer | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 2025-10-17 00:00:00 | Description: Document the process for clearing bellows for RME...
|
||||||
|
Air Knife over shooting takeaway conveyor | Vendor: Beumer | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 2025-10-19 00:00:00 | Description: Too many packages are falling in netting. Add a...
|
||||||
|
At inducts evaluate why "conveyable" boxes are being rejected at induction | Vendor: Beumer | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 2025-10-19 00:00:00 | Description: Is aligner working as expected? Skewed boxes tri...
|
||||||
|
Deep dive missorts (file shared) | Vendor: Beumer | Priority: (None) | Status: Complete (CLOSED) | Date: 2025-10-22 00:00:00 | Description: N/A...
|
||||||
|
Aligner catch point on IND2C-s | Vendor: Beumer | Priority: (None) | Status: Complete (CLOSED) | Date: 2025-10-22 00:00:00 | Description: N/A...
|
||||||
|
Issue with needing to reset all inducts (fault). when system starts. Need to automatically reset | Vendor: Beumer | Priority: (None) | Status: Complete (CLOSED) | Date: 2025-10-22 00:00:00 | Description: N/A...
|
||||||
|
Inductions are going directly on bellowsco | Vendor: Beumer | Priority: (1) Very Hgh (very_high) | Status: Complete (CLOSED) | Date: 2025-10-22 00:00:00 | Description: Experiencing too many items on bellow... causing s...
|
||||||
|
Carrier disabled to shut down the sorter | Vendor: Beumer | Priority: (1) Very Hgh (very_high) | Status: Complete (CLOSED) | Date: 2025-10-22 00:00:00 | Description: Sorter shutting down too often...
|
||||||
|
Missorts | Vendor: Beumer | Priority: (1) Very Hgh (very_high) | Status: Complete (CLOSED) | Date: 2025-10-20 00:00:00 | Description: File with missorts shared....
|
||||||
|
Estop not reporting on BGFusion/Scada | Vendor: Beumer | Priority: 2) High (high) | Status: Complete (CLOSED) | Date: 2025-10-21 00:00:00 | Description: Sorter stopped could not find root cause. Esto...
|
||||||
|
Packages are being inducted on occupied trays | Vendor: Beumer | Priority: (1) Very Hgh (very_high) | Status: Complete (CLOSED) | Date: 2025-10-22 00:00:00 | Description: Causing missorts and DBS/IBS/IOB faults that stop ...
|
||||||
|
Lane Not Available Metric too high | Vendor: Beumer | Priority: (1) Very Hgh (very_high) | Status: Incomplete (OPEN) | Date: | Description: N/A...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Caljan
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 4
|
||||||
|
Closed: 4
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
HIGH PRIORITY (3 items):
|
||||||
|
Photoeyes at Caljan not wired properly | Complete | 10/15/25
|
||||||
|
Maxx Reach at DD 332 not working
|
||||||
|
https://t.corp.amazon.com/V1969041198 | Complete | 10/15/2025
|
||||||
|
Max reach 119 PE at top of max reach needs to be adjusted , also having to reset line at times for it to move | Complete | 10/16/2025
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Photoeyes at Caljan not wired properly | Vendor: Caljan | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Photoeyes stop the line vs feeding when blocked...
|
||||||
|
Maxx Reach at DD 332 not working
|
||||||
|
https://t.corp.amazon.com/V1969041198 | Vendor: Caljan | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: OB Fluid...
|
||||||
|
Max Reach 100% PE logic is backwards All 300 and 100 DD | Vendor: Caljan | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Outbound...
|
||||||
|
Max reach 119 PE at top of max reach needs to be adjusted , also having to reset line at times for it to move | Vendor: Caljan | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: N/A...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: DCS
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 25
|
||||||
|
Closed: 20
|
||||||
|
Open: 4
|
||||||
|
Monitor: 1
|
||||||
|
|
||||||
|
RECENT UPDATES (Yesterday's Date):
|
||||||
|
ADDED: ) There is a catchpoint of bent metal that is sticking out from the tail assembly on PS10-1 where it transitions to PS11-1. This is catching polys during operation. Jesse is going to look into making proper modifications to eliminate this. | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
ADDED: 2) When product from PS10-1 is flowing towards PS11-1, there is no snowplow and instead the slide just dead ends with a corner of sidepan. I’ve asked Jesse to look into fabricating a UHMW piece that could bridge this corner to push products down onto the belt. | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
ADDED: 3) The black UHMW strip under the belt which transitions the belt from slider bed to tail roller is too sharp and is shaving the bottom side of the belt. Jesse and his team are going to look into pulling this uhmw strip out, properly chamfering it and then re-installing. | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
|
||||||
|
OLDEST UNADDRESSED (Top 3):
|
||||||
|
NCS1-1 aligner belt failed | Age: 4 days | 2025-11-01 00:00:00 | Incomplete
|
||||||
|
) There is a catchpoint of bent metal that is sticking out from the tail assembly on PS10-1 where it transitions to PS11-1. This is catching polys during operation. Jesse is going to look into making proper modifications to eliminate this. | Age: 1 days | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
2) When product from PS10-1 is flowing towards PS11-1, there is no snowplow and instead the slide just dead ends with a corner of sidepan. I’ve asked Jesse to look into fabricating a UHMW piece that could bridge this corner to push products down onto the belt. | Age: 1 days | 2025-11-04 00:00:00 | Incomplete
|
||||||
|
|
||||||
|
VERY HIGH PRIORITY (4 items):
|
||||||
|
Flow turn Belt Replacement | Complete | 10/10/25
|
||||||
|
UL7-17 Belt needs to be replaced (again) RME installation (ripped edges, lacing) | Complete | 2025-10-18 00:00:00
|
||||||
|
UL21-24 Failed (belts and shaft) | Complete | 2025-10-20 00:00:00
|
||||||
|
NCS1-1 aligner belt failed | Incomplete | 2025-11-01 00:00:00
|
||||||
|
|
||||||
|
HIGH PRIORITY (17 items):
|
||||||
|
Semi-Auto Chute Sidepan Reinforcement | Monitor | 10/14/25
|
||||||
|
Semi-Auto Phantom Jams | Complete | 10/14/25
|
||||||
|
NC End of Sorter Chute | Complete | 10/15/25
|
||||||
|
Catch point at DD118 fluid load | Complete | 10/17
|
||||||
|
NC flow splitter has worn rollers | Complete | 10/17
|
||||||
|
oil leak in NON CON near chute S02-202CH | Complete | 10/15/2025
|
||||||
|
oil leak in NON CON near chute QAA-3CH | Complete | 10/15/2025
|
||||||
|
packages being re inducted into ps bottom belt - hits the belt - needs to be raised | Complete | 10/16/2025
|
||||||
|
Divert arms are to high and are causing jiffys to get stuck under the arm when diverting | Complete | 10/17/2025
|
||||||
|
PS chute lip is catching ps boxes | Complete | 10/17/2025
|
||||||
|
Maint jack for tippers | Complete | 10/17/25
|
||||||
|
Non Con Chute/Maint access. Need Latch upgrade | Complete | 2025-10-10 00:00:00
|
||||||
|
Motor falling on HSQ gappers.. 2x (3:1 merge) | Complete |
|
||||||
|
PRS4-2 Motor Replacement | Complete | 2025-10-26 00:00:00
|
||||||
|
) There is a catchpoint of bent metal that is sticking out from the tail assembly on PS10-1 where it transitions to PS11-1. This is catching polys during operation. Jesse is going to look into making proper modifications to eliminate this. | Incomplete | 2025-11-04 00:00:00
|
||||||
|
2) When product from PS10-1 is flowing towards PS11-1, there is no snowplow and instead the slide just dead ends with a corner of sidepan. I’ve asked Jesse to look into fabricating a UHMW piece that could bridge this corner to push products down onto the belt. | Incomplete | 2025-11-04 00:00:00
|
||||||
|
3) The black UHMW strip under the belt which transitions the belt from slider bed to tail roller is too sharp and is shaving the bottom side of the belt. Jesse and his team are going to look into pulling this uhmw strip out, properly chamfering it and then re-installing. | Incomplete | 2025-11-04 00:00:00
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Flow turn Belt Replacement | Vendor: DCS | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/10/25 | Description: Flow turn belts incorrectly manufactured and need ...
|
||||||
|
Semi-Auto Chute Sidepan Reinforcement | Vendor: DCS | Priority: (2) High (high) | Status: Monitor (OPEN) | Date: 10/14/25 | Description: Sidepans are flimsy and need to be reinforced; whe...
|
||||||
|
Semi-Auto Phantom Jams | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Dust accumulation on the reflectors incorrectly cr...
|
||||||
|
NC End of Sorter Chute | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Packages getting stuck in chute at dead plate and ...
|
||||||
|
NC Sorter Aligner | Vendor: DCS | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: NC Sorter Aligner has a catch point at the exit, u...
|
||||||
|
Catch point at DD118 fluid load | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17 | Description: 10/17 -Weld failed. DCS bolted sidepan. Check o...
|
||||||
|
NC flow splitter has worn rollers | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17 | Description: pop up rollers on flow splitter are worn. repla...
|
||||||
|
Add air pressure valves (autstand request to DCS) | Vendor: DCS | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: | Description: N/A...
|
||||||
|
oil leak in NON CON near chute S02-202CH | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: S02-202CH...
|
||||||
|
oil leak in NON CON near chute QAA-3CH | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: QAA-3CH...
|
||||||
|
packages being re inducted into ps bottom belt - hits the belt - needs to be raised | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: PS collector re induct chutes...
|
||||||
|
Divert arms are to high and are causing jiffys to get stuck under the arm when diverting | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: Semi induct A...
|
||||||
|
PS chute lip is catching ps boxes | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/2025 | Description: QAB-2CH...
|
||||||
|
Maint jack for tippers | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/17/25 | Description: N/A...
|
||||||
|
UL4-15 damaged belt | Vendor: DCS | Priority: (None) | Status: Complete (CLOSED) | Date: | Description: N/A...
|
||||||
|
PS6-3 | Vendor: DCS | Priority: (None) | Status: Complete (CLOSED) | Date: 2025-10-18 00:00:00 | Description: Noisy when running, side pan is very warm to the t...
|
||||||
|
UL7-17 Belt needs to be replaced (again) RME installation (ripped edges, lacing) | Vendor: DCS | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 2025-10-18 00:00:00 | Description: N/A...
|
||||||
|
Non Con Chute/Maint access. Need Latch upgrade | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 2025-10-10 00:00:00 | Description: N/A...
|
||||||
|
UL21-24 Failed (belts and shaft) | Vendor: DCS | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 2025-10-20 00:00:00 | Description: N/A...
|
||||||
|
Motor falling on HSQ gappers.. 2x (3:1 merge) | Vendor: DCS | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: | Description: upgrade the bolts...
|
||||||
|
PRS4-2 Motor Replacement | Vendor: DCS | Priority: High (high) | Status: Complete (CLOSED) | Date: 2025-10-26 00:00:00 | Description: Motor Oreded will update when I have an ETA ( Tryi...
|
||||||
|
NCS1-1 aligner belt failed | Vendor: DCS | Priority: (1) Very High (very_high) | Status: Incomplete (OPEN) | Date: 2025-11-01 00:00:00 | Description: Belt failed prior to flow splitter. Replaced wi...
|
||||||
|
) There is a catchpoint of bent metal that is sticking out from the tail assembly on PS10-1 where it transitions to PS11-1. This is catching polys during operation. Jesse is going to look into making proper modifications to eliminate this. | Vendor: DCS | Priority: (2) High (high) | Status: Incomplete (OPEN) | Date: 2025-11-04 00:00:00 | Description: N/A...
|
||||||
|
2) When product from PS10-1 is flowing towards PS11-1, there is no snowplow and instead the slide just dead ends with a corner of sidepan. I’ve asked Jesse to look into fabricating a UHMW piece that could bridge this corner to push products down onto the belt. | Vendor: DCS | Priority: (2) High (high) | Status: Incomplete (OPEN) | Date: 2025-11-04 00:00:00 | Description: N/A...
|
||||||
|
3) The black UHMW strip under the belt which transitions the belt from slider bed to tail roller is too sharp and is shaving the bottom side of the belt. Jesse and his team are going to look into pulling this uhmw strip out, properly chamfering it and then re-installing. | Vendor: DCS | Priority: (2) High (high) | Status: Incomplete (OPEN) | Date: 2025-11-04 00:00:00 | Description: N/A...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: DCS/Autstand
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 1
|
||||||
|
Closed: 1
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
caljan at comm cable was ripped out | Vendor: DCS/Autstand | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: dock door 223...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: DCS/Flow-Turn
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 1
|
||||||
|
Closed: 1
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
HIGH PRIORITY (1 items):
|
||||||
|
PS3-1 merge | Complete | 2025-10-18 00:00:00
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
PS3-1 merge | Vendor: DCS/Flow-Turn | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 2025-10-18 00:00:00 | Description: Shaft walked causing the belts to come off track a...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: DCS/RME
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 1
|
||||||
|
Closed: 1
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
UL7-17 Belt has a rip | Vendor: DCS/RME | Priority: (None) | Status: Complete (CLOSED) | Date: 2025-10-18 00:00:00 | Description: Rip in belt the size of a dollar bill...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Datalogic
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 5
|
||||||
|
Closed: 3
|
||||||
|
Open: 1
|
||||||
|
Monitor: 1
|
||||||
|
|
||||||
|
OLDEST UNADDRESSED (Top 3):
|
||||||
|
Add DHL label to Scan tunnel valid message | Age: 9 days | 2025-10-27 00:00:00 | Incomplete
|
||||||
|
|
||||||
|
VERY HIGH PRIORITY (1 items):
|
||||||
|
Add DHL label to Scan tunnel valid message | Incomplete | 2025-10-27 00:00:00
|
||||||
|
|
||||||
|
HIGH PRIORITY (1 items):
|
||||||
|
High Multi-Label Read Rate | Complete | 10/14/25
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
High Multi-Label Read Rate | Vendor: Datalogic | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Unexpectedly high multi-read rate from scanners du...
|
||||||
|
Long-Term Error Tracking Solution | Vendor: Datalogic | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/8/25 | Description: Currently, manual pull of all images from Datalogi...
|
||||||
|
Pull stats for error codes from Datalogic | Vendor: Datalogic | Priority: (3) Medium (medium) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Need ability to pull error code stats from Datalog...
|
||||||
|
No Read Rates - Trigger Timing Concerns | Vendor: Datalogic | Priority: (5) Monitoring (monitoring) | Status: Monitor (OPEN) | Date: 10/14/25 | Description: Confirm that the trigger timing from yesterday is ...
|
||||||
|
Add DHL label to Scan tunnel valid message | Vendor: Datalogic | Priority: (1) Very High (very_high) | Status: Incomplete (OPEN) | Date: 2025-10-27 00:00:00 | Description: DHL label was not in orignal spec. Need to be ab...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: FMH/Gorbel
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 1
|
||||||
|
Closed: 1
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Maxx reach controls do not function as prescribed | Vendor: FMH/Gorbel | Priority: (None) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: All OB fluid maxxx reaches...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Gorbel
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 2
|
||||||
|
Closed: 2
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
VERY HIGH PRIORITY (1 items):
|
||||||
|
Destuffit fault at DD225 | Complete | 10/15/25
|
||||||
|
|
||||||
|
HIGH PRIORITY (1 items):
|
||||||
|
DD218-DESTUFF-IT not properly working packing not able to climb up | Complete | 10/15/2025
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Destuffit fault at DD225 | Vendor: Gorbel | Priority: (1) Very High (very_high) | Status: Complete (CLOSED) | Date: 10/15/25 | Description: Contact failed and estop jumped out ... could not ...
|
||||||
|
DD218-DESTUFF-IT not properly working packing not able to climb up | Vendor: Gorbel | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: DD218 Destuff-it...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: MFO (Amazon)
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 1
|
||||||
|
Closed: 1
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Confirm D2C is Working | Vendor: MFO (Amazon) | Priority: (6) Complete (complete) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Verify all D2C lanes are mapped properly...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: MISC
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 7
|
||||||
|
Closed: 7
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
HIGH PRIORITY (2 items):
|
||||||
|
Non - Con Jam rest button - | Complete | 10/15/2025
|
||||||
|
Auto inducts / By passes do not start up with scata - | Complete | 10/15/2025
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Non - Con Jam rest button - | Vendor: MISC | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: NCPRS2-1CH...
|
||||||
|
Auto inducts / By passes do not start up with scata - | Vendor: MISC | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/15/2025 | Description: N/A...
|
||||||
|
supply cabinet in NON Con | Vendor: MISC | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: NON Con...
|
||||||
|
drop zone banner in Non Con | Vendor: MISC | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: drop zone banner in Non Con...
|
||||||
|
printer station at both ends in Non Con | Vendor: MISC | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Non Con...
|
||||||
|
5s area for emtpy carts in Non Con | Vendor: MISC | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Non Con...
|
||||||
|
Fans in Non Con | Vendor: MISC | Priority: (None) | Status: Complete (CLOSED) | Date: 10/16/2025 | Description: Non Con...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
VENDOR: Startup (Amazon)
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Total Items: 1
|
||||||
|
Closed: 1
|
||||||
|
Open: 0
|
||||||
|
Monitor: 0
|
||||||
|
|
||||||
|
HIGH PRIORITY (1 items):
|
||||||
|
Jam Clearing Equipment on Mezzanine | Complete | 10/14/25
|
||||||
|
|
||||||
|
ALL ITEMS:
|
||||||
|
Jam Clearing Equipment on Mezzanine | Vendor: Startup (Amazon) | Priority: (2) High (high) | Status: Complete (CLOSED) | Date: 10/14/25 | Description: Access issues at bypass inhibiting jam clear acces...
|
||||||
|
|
||||||
|
================================================================================
|
||||||
9064
output/report.html
Normal file
9064
output/report.html
Normal file
File diff suppressed because it is too large
Load Diff
3516
output/report.json
Normal file
3516
output/report.json
Normal file
File diff suppressed because it is too large
Load Diff
1626
output/report_direct.json
Normal file
1626
output/report_direct.json
Normal file
File diff suppressed because it is too large
Load Diff
1626
output/test_report.json
Normal file
1626
output/test_report.json
Normal file
File diff suppressed because it is too large
Load Diff
240
report_generator.py
Normal file
240
report_generator.py
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Report Generator - Direct Generation (No LLM Required)
|
||||||
|
|
||||||
|
Generates vendor reports directly from preprocessed Excel data.
|
||||||
|
All requirements fulfilled programmatically - no AI needed!
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional, Dict, List
|
||||||
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
|
from data_preprocessor import preprocess_excel_files
|
||||||
|
from models import FullReport, VendorMetrics, VendorUpdates24h, PunchlistItem
|
||||||
|
from html_generator import generate_html_report
|
||||||
|
|
||||||
|
|
||||||
|
def convert_item_to_punchlist_item(item: Dict) -> PunchlistItem:
|
||||||
|
"""Convert preprocessed item dict to PunchlistItem Pydantic model."""
|
||||||
|
return PunchlistItem(
|
||||||
|
punchlist_name=item.get('punchlist_name', ''),
|
||||||
|
description=item.get('description') or None,
|
||||||
|
priority=item.get('priority') or None,
|
||||||
|
date_identified=item.get('date_identified_str') or None,
|
||||||
|
date_completed=item.get('date_completed_str') or None,
|
||||||
|
status=item.get('status', 'Incomplete'),
|
||||||
|
status_updates=item.get('status_updates') or None,
|
||||||
|
issue_image=item.get('issue_image') or None,
|
||||||
|
age_days=item.get('age_days')
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_report(
|
||||||
|
reports_dir: str = "reports",
|
||||||
|
output_file: Optional[str] = None,
|
||||||
|
verbose: bool = True
|
||||||
|
) -> dict:
|
||||||
|
"""
|
||||||
|
Generate vendor report directly from preprocessed data - NO LLM required!
|
||||||
|
|
||||||
|
Args:
|
||||||
|
reports_dir: Directory containing Excel files
|
||||||
|
output_file: Optional path to save JSON output
|
||||||
|
verbose: Whether to print progress messages
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dictionary containing the generated report
|
||||||
|
"""
|
||||||
|
if verbose:
|
||||||
|
print("=" * 70)
|
||||||
|
print("DIRECT REPORT GENERATION (No LLM Required)")
|
||||||
|
print("=" * 70)
|
||||||
|
print(f"Loading and preprocessing Excel files from '{reports_dir}'...")
|
||||||
|
|
||||||
|
# Preprocess Excel files using Baltimore/Eastern timezone
|
||||||
|
baltimore_tz = ZoneInfo("America/New_York")
|
||||||
|
current_date_baltimore = datetime.now(baltimore_tz)
|
||||||
|
if verbose:
|
||||||
|
print(f"Using Baltimore/Eastern timezone (America/New_York) for 24h calculations")
|
||||||
|
print(f"Current time: {current_date_baltimore.strftime('%Y-%m-%d %H:%M:%S %Z')}")
|
||||||
|
preprocessed_data, summary = preprocess_excel_files(reports_dir, current_date=current_date_baltimore)
|
||||||
|
|
||||||
|
if not summary:
|
||||||
|
print(f"Error: No data processed")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
# Save preprocessed data for inspection
|
||||||
|
preprocessed_output_path = Path("output/preprocessed_data.txt")
|
||||||
|
preprocessed_output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
with open(preprocessed_output_path, 'w', encoding='utf-8') as f:
|
||||||
|
f.write(preprocessed_data)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
total_items = sum(len(v['items']) for v in summary.values())
|
||||||
|
print(f"✓ Processed {total_items} items from {len(summary)} vendors")
|
||||||
|
print(f"✓ Preprocessed data saved to: {preprocessed_output_path}")
|
||||||
|
print("Generating report directly from preprocessed data...")
|
||||||
|
|
||||||
|
# Build vendors list
|
||||||
|
vendors = []
|
||||||
|
|
||||||
|
for vendor_name, vendor_data in sorted(summary.items()):
|
||||||
|
# Build 24-hour updates
|
||||||
|
updates_24h = VendorUpdates24h(
|
||||||
|
added=[convert_item_to_punchlist_item(item) for item in vendor_data['recent_added']],
|
||||||
|
closed=[convert_item_to_punchlist_item(item) for item in vendor_data['recent_closed']],
|
||||||
|
changed_to_monitor=[convert_item_to_punchlist_item(item) for item in vendor_data['recent_monitor']]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Get oldest 3 unaddressed (already sorted)
|
||||||
|
oldest_unaddressed = [
|
||||||
|
convert_item_to_punchlist_item(item)
|
||||||
|
for item in vendor_data['unaddressed'][:3]
|
||||||
|
]
|
||||||
|
|
||||||
|
# Get very high priority items
|
||||||
|
very_high_items = [
|
||||||
|
convert_item_to_punchlist_item(item)
|
||||||
|
for item in vendor_data['very_high']
|
||||||
|
]
|
||||||
|
|
||||||
|
# Get high priority items
|
||||||
|
high_items = [
|
||||||
|
convert_item_to_punchlist_item(item)
|
||||||
|
for item in vendor_data['high']
|
||||||
|
]
|
||||||
|
|
||||||
|
# Get all items grouped by status for tabs
|
||||||
|
all_items = vendor_data.get('items', [])
|
||||||
|
# Use status field - preprocessor sets status to 'Complete', 'Monitor', or 'Incomplete'
|
||||||
|
# Also check is_closed flag as backup
|
||||||
|
closed_items = [convert_item_to_punchlist_item(item) for item in all_items
|
||||||
|
if item.get('status', '').lower() == 'complete' or item.get('is_closed', False)]
|
||||||
|
monitor_items = [convert_item_to_punchlist_item(item) for item in all_items
|
||||||
|
if item.get('status', '').lower() == 'monitor']
|
||||||
|
open_items = [convert_item_to_punchlist_item(item) for item in all_items
|
||||||
|
if item.get('status', '').lower() == 'incomplete' and not item.get('is_closed', False)]
|
||||||
|
|
||||||
|
# Create vendor metrics
|
||||||
|
vendor_metrics = VendorMetrics(
|
||||||
|
vendor_name=vendor_name,
|
||||||
|
total_items=len(vendor_data['items']),
|
||||||
|
closed_count=vendor_data['closed'],
|
||||||
|
open_count=vendor_data['open'],
|
||||||
|
monitor_count=vendor_data['monitor'],
|
||||||
|
updates_24h=updates_24h,
|
||||||
|
oldest_unaddressed=oldest_unaddressed,
|
||||||
|
very_high_priority_items=very_high_items,
|
||||||
|
high_priority_items=high_items
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add status-grouped items to vendor metrics (will be serialized to dict)
|
||||||
|
vendor_dict = vendor_metrics.model_dump()
|
||||||
|
# Convert Pydantic models to dicts
|
||||||
|
vendor_dict['closed_items'] = [item.model_dump() for item in closed_items]
|
||||||
|
vendor_dict['monitor_items'] = [item.model_dump() for item in monitor_items]
|
||||||
|
vendor_dict['open_items'] = [item.model_dump() for item in open_items]
|
||||||
|
|
||||||
|
vendors.append(vendor_dict)
|
||||||
|
|
||||||
|
# Create full report
|
||||||
|
report = FullReport(
|
||||||
|
report_generated_at=datetime.now().isoformat(),
|
||||||
|
vendors=vendors,
|
||||||
|
summary={
|
||||||
|
"total_vendors": len(vendors),
|
||||||
|
"total_items": sum(v.get('total_items', 0) if isinstance(v, dict) else v.total_items for v in vendors),
|
||||||
|
"total_closed": sum(v.get('closed_count', 0) if isinstance(v, dict) else v.closed_count for v in vendors),
|
||||||
|
"total_open": sum(v.get('open_count', 0) if isinstance(v, dict) else v.open_count for v in vendors),
|
||||||
|
"total_monitor": sum(v.get('monitor_count', 0) if isinstance(v, dict) else v.monitor_count for v in vendors)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Convert to dict - vendors already have closed_items, monitor_items, open_items from above
|
||||||
|
report_data = report.model_dump()
|
||||||
|
|
||||||
|
# Restore the status-grouped items that Pydantic might have stripped
|
||||||
|
# (FullReport validation may have removed extra fields from vendors)
|
||||||
|
for i, vendor_dict in enumerate(vendors):
|
||||||
|
if isinstance(vendor_dict, dict):
|
||||||
|
# Ensure status-grouped items are preserved
|
||||||
|
if 'closed_items' in vendor_dict:
|
||||||
|
report_data['vendors'][i]['closed_items'] = vendor_dict['closed_items']
|
||||||
|
if 'monitor_items' in vendor_dict:
|
||||||
|
report_data['vendors'][i]['monitor_items'] = vendor_dict['monitor_items']
|
||||||
|
if 'open_items' in vendor_dict:
|
||||||
|
report_data['vendors'][i]['open_items'] = vendor_dict['open_items']
|
||||||
|
|
||||||
|
# Save to file if specified
|
||||||
|
if output_file:
|
||||||
|
output_path = Path(output_file)
|
||||||
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
with open(output_path, 'w', encoding='utf-8') as f:
|
||||||
|
json.dump(report_data, f, indent=2, ensure_ascii=False)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
file_size = output_path.stat().st_size / 1024
|
||||||
|
print(f"✓ JSON report saved to: {output_path} ({file_size:.1f} KB)")
|
||||||
|
|
||||||
|
# Generate HTML report
|
||||||
|
if verbose:
|
||||||
|
print("Generating HTML report...")
|
||||||
|
|
||||||
|
html_path = generate_html_report(str(output_path))
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
html_size = Path(html_path).stat().st_size / 1024
|
||||||
|
print(f"✓ HTML report saved to: {html_path} ({html_size:.1f} KB)")
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print()
|
||||||
|
print("=" * 70)
|
||||||
|
print("✓ Report generated successfully!")
|
||||||
|
print(f" Vendors: {len(vendors)}")
|
||||||
|
print(f" Total items: {report_data['summary']['total_items']}")
|
||||||
|
print("=" * 70)
|
||||||
|
|
||||||
|
return report_data
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="Generate vendor reports from Excel files (no LLM required)")
|
||||||
|
parser.add_argument(
|
||||||
|
"--reports-dir",
|
||||||
|
type=str,
|
||||||
|
default="reports",
|
||||||
|
help="Directory containing Excel files (default: reports)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--output",
|
||||||
|
type=str,
|
||||||
|
default="output/report.json",
|
||||||
|
help="Output JSON file path (default: output/report.json)"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--verbose",
|
||||||
|
action="store_true",
|
||||||
|
default=True,
|
||||||
|
help="Print verbose output"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
report = generate_report(
|
||||||
|
reports_dir=args.reports_dir,
|
||||||
|
output_file=args.output,
|
||||||
|
verbose=args.verbose
|
||||||
|
)
|
||||||
|
|
||||||
|
if report and "error" not in report:
|
||||||
|
print("\n✓ Report generation complete!")
|
||||||
|
else:
|
||||||
|
print("\n✗ Report generation failed.")
|
||||||
|
import sys
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
BIN
reports/[MTN6] Ops. Eng. GL Issues Tracker.xlsx
Normal file
BIN
reports/[MTN6] Ops. Eng. GL Issues Tracker.xlsx
Normal file
Binary file not shown.
114
requirements.txt
Normal file
114
requirements.txt
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
aiofiles==25.1.0
|
||||||
|
aiohappyeyeballs==2.6.1
|
||||||
|
aiohttp==3.13.2
|
||||||
|
aiosignal==1.4.0
|
||||||
|
altair==5.5.0
|
||||||
|
annotated-types==0.7.0
|
||||||
|
anyio==4.11.0
|
||||||
|
attrs==25.4.0
|
||||||
|
backoff==2.2.1
|
||||||
|
beautifulsoup4==4.14.2
|
||||||
|
blinker==1.9.0
|
||||||
|
cachetools==6.2.1
|
||||||
|
certifi==2025.10.5
|
||||||
|
cffi==2.0.0
|
||||||
|
charset-normalizer==3.4.4
|
||||||
|
click==8.3.0
|
||||||
|
cryptography==46.0.3
|
||||||
|
dataclasses-json==0.6.7
|
||||||
|
emoji==2.15.0
|
||||||
|
et_xmlfile==2.0.0
|
||||||
|
filetype==1.2.0
|
||||||
|
frozenlist==1.8.0
|
||||||
|
gitdb==4.0.12
|
||||||
|
GitPython==3.1.45
|
||||||
|
greenlet==3.2.4
|
||||||
|
h11==0.16.0
|
||||||
|
html5lib==1.1
|
||||||
|
httpcore==1.0.9
|
||||||
|
httpx==0.28.1
|
||||||
|
httpx-sse==0.4.3
|
||||||
|
idna==3.11
|
||||||
|
Jinja2==3.1.6
|
||||||
|
joblib==1.5.2
|
||||||
|
jsonpatch==1.33
|
||||||
|
jsonpointer==3.0.0
|
||||||
|
jsonschema==4.25.1
|
||||||
|
jsonschema-specifications==2025.9.1
|
||||||
|
langchain==1.0.3
|
||||||
|
langchain-classic==1.0.0
|
||||||
|
langchain-community==0.4.1
|
||||||
|
langchain-core==1.0.3
|
||||||
|
langchain-ollama==1.0.0
|
||||||
|
langchain-text-splitters==1.0.0
|
||||||
|
langdetect==1.0.9
|
||||||
|
langgraph==1.0.2
|
||||||
|
langgraph-checkpoint==3.0.1
|
||||||
|
langgraph-prebuilt==1.0.2
|
||||||
|
langgraph-sdk==0.2.9
|
||||||
|
langsmith==0.4.41
|
||||||
|
lxml==6.0.2
|
||||||
|
MarkupSafe==3.0.3
|
||||||
|
marshmallow==3.26.1
|
||||||
|
msoffcrypto-tool==5.4.2
|
||||||
|
multidict==6.7.0
|
||||||
|
mypy_extensions==1.1.0
|
||||||
|
narwhals==2.10.2
|
||||||
|
networkx==3.5
|
||||||
|
nltk==3.9.2
|
||||||
|
numpy==2.3.4
|
||||||
|
olefile==0.47
|
||||||
|
ollama==0.6.0
|
||||||
|
openpyxl==3.1.5
|
||||||
|
orjson==3.11.4
|
||||||
|
ormsgpack==1.12.0
|
||||||
|
packaging==25.0
|
||||||
|
pandas==2.3.3
|
||||||
|
pillow==12.0.0
|
||||||
|
propcache==0.4.1
|
||||||
|
protobuf==6.33.0
|
||||||
|
psutil==7.1.3
|
||||||
|
pyarrow==21.0.0
|
||||||
|
pycparser==2.23
|
||||||
|
pydantic==2.12.3
|
||||||
|
pydantic-settings==2.11.0
|
||||||
|
pydantic_core==2.41.4
|
||||||
|
pydeck==0.9.1
|
||||||
|
pypdf==6.1.3
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
python-dotenv==1.2.1
|
||||||
|
python-iso639==2025.2.18
|
||||||
|
python-magic==0.4.27
|
||||||
|
python-oxmsg==0.0.2
|
||||||
|
pytz==2025.2
|
||||||
|
PyYAML==6.0.3
|
||||||
|
RapidFuzz==3.14.3
|
||||||
|
referencing==0.37.0
|
||||||
|
regex==2025.11.3
|
||||||
|
requests==2.32.5
|
||||||
|
requests-toolbelt==1.0.0
|
||||||
|
rpds-py==0.28.0
|
||||||
|
six==1.17.0
|
||||||
|
smmap==5.0.2
|
||||||
|
sniffio==1.3.1
|
||||||
|
soupsieve==2.8
|
||||||
|
SQLAlchemy==2.0.44
|
||||||
|
streamlit==1.51.0
|
||||||
|
tabulate==0.9.0
|
||||||
|
tenacity==9.1.2
|
||||||
|
toml==0.10.2
|
||||||
|
tornado==6.5.2
|
||||||
|
tqdm==4.67.1
|
||||||
|
typing-inspect==0.9.0
|
||||||
|
typing-inspection==0.4.2
|
||||||
|
typing_extensions==4.15.0
|
||||||
|
tzdata==2025.2
|
||||||
|
unstructured==0.18.15
|
||||||
|
unstructured-client==0.42.3
|
||||||
|
urllib3==2.5.0
|
||||||
|
watchdog==6.0.0
|
||||||
|
webencodings==0.5.1
|
||||||
|
wrapt==2.0.0
|
||||||
|
xxhash==3.6.0
|
||||||
|
yarl==1.22.0
|
||||||
|
zstandard==0.25.0
|
||||||
4
requirements_minimal.txt
Normal file
4
requirements_minimal.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Minimal requirements for direct report generation (no LLM needed)
|
||||||
|
pandas>=2.0.0
|
||||||
|
openpyxl>=3.0.0
|
||||||
|
pydantic>=2.0.0
|
||||||
Loading…
x
Reference in New Issue
Block a user