amitlals commited on
Commit
fc8c40e
·
0 Parent(s):

Initial commit: SAP Finance Dashboard with RPT-1-OSS Model

Browse files

- Gradio-based web application for SAP finance data analysis
- Integration with SAP-RPT-1-OSS model for predictions
- Synthetic data generation for GL accounts, financial statements, and sales orders
- OData connector for live SAP data
- Interactive visualizations with Plotly
- Playground tab for custom model training
- Support for classification and regression tasks

.env.example ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SAP OData Connection Settings
2
+ # Copy this file to .env and fill in your actual credentials
3
+
4
+ # SAP Server Configuration
5
+ SAP_USERNAME=your_sap_username
6
+ SAP_PASSWORD=your_sap_password
7
+ SAP_SERVER=https://sapes5.sapdevcenter.com/
8
+ SAP_ODATA_USER=your_odata_username
9
+ SAP_ODATA_PASSWORD=your_odata_password
10
+ SAP_CLIENT=002
11
+ SAP_LANGUAGE=EN
12
+
13
+ # Hugging Face Authentication
14
+ # Get your token from: https://huggingface.co/settings/tokens
15
+ HUGGINGFACE_TOKEN=your_huggingface_token_here
.github/workflows/deploy.yml ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Deploy to GitHub Pages
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+ pages: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: "pages"
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ build:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - name: Checkout
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: '3.11'
29
+
30
+ - name: Install dependencies
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ pip install -r requirements.txt
34
+ pip install git+https://github.com/SAP-samples/sap-rpt-1-oss
35
+
36
+ - name: Generate synthetic data
37
+ run: |
38
+ python -c "from utils.data_generator import generate_all_datasets; generate_all_datasets()"
39
+
40
+ - name: Setup Pages
41
+ uses: actions/configure-pages@v3
42
+
43
+ - name: Build documentation
44
+ run: |
45
+ # Create a simple HTML page for GitHub Pages
46
+ mkdir -p _site
47
+ cat > _site/index.html << 'EOF'
48
+ <!DOCTYPE html>
49
+ <html>
50
+ <head>
51
+ <title>SAP Finance Dashboard with RPT-1-OSS</title>
52
+ <meta charset="utf-8">
53
+ <meta name="viewport" content="width=device-width, initial-scale=1">
54
+ <style>
55
+ body {
56
+ font-family: Arial, sans-serif;
57
+ max-width: 800px;
58
+ margin: 50px auto;
59
+ padding: 20px;
60
+ line-height: 1.6;
61
+ }
62
+ h1 { color: #2c3e50; }
63
+ .info-box {
64
+ background: #f8f9fa;
65
+ padding: 20px;
66
+ border-radius: 8px;
67
+ margin: 20px 0;
68
+ }
69
+ code {
70
+ background: #e9ecef;
71
+ padding: 2px 6px;
72
+ border-radius: 3px;
73
+ }
74
+ </style>
75
+ </head>
76
+ <body>
77
+ <h1>SAP Finance Dashboard with RPT-1-OSS</h1>
78
+ <div class="info-box">
79
+ <h2>About</h2>
80
+ <p>This is a Python-based financial dashboard application built with Mesop that integrates the SAP-RPT-1-OSS model for predictive analysis.</p>
81
+ </div>
82
+ <div class="info-box">
83
+ <h2>Running Locally</h2>
84
+ <p>To run this application locally:</p>
85
+ <ol>
86
+ <li>Clone the repository</li>
87
+ <li>Install dependencies: <code>pip install -r requirements.txt</code></li>
88
+ <li>Install SAP-RPT-OSS: <code>pip install git+https://github.com/SAP-samples/sap-rpt-1-oss</code></li>
89
+ <li>Set up environment variables (see README.md)</li>
90
+ <li>Run: <code>mesop app.py</code></li>
91
+ </ol>
92
+ </div>
93
+ <div class="info-box">
94
+ <h2>Deployment</h2>
95
+ <p>Since Mesop requires a Python backend, this application cannot run directly on GitHub Pages. Consider deploying to:</p>
96
+ <ul>
97
+ <li>Streamlit Cloud</li>
98
+ <li>Heroku</li>
99
+ <li>Railway</li>
100
+ <li>Render</li>
101
+ <li>Or use GitHub Actions to run as a service</li>
102
+ </ul>
103
+ </div>
104
+ <div class="info-box">
105
+ <h2>Documentation</h2>
106
+ <p>See <code>README.md</code> for full documentation and setup instructions.</p>
107
+ </div>
108
+ </body>
109
+ </html>
110
+ EOF
111
+
112
+ - name: Upload artifact
113
+ uses: actions/upload-pages-artifact@v2
114
+ with:
115
+ path: '_site'
116
+
117
+ deploy:
118
+ environment:
119
+ name: github-pages
120
+ url: ${{ steps.deployment.outputs.page_url }}
121
+ runs-on: ubuntu-latest
122
+ needs: build
123
+ steps:
124
+ - name: Deploy to GitHub Pages
125
+ id: deployment
126
+ uses: actions/deploy-pages@v2
127
+
.gitignore ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+
23
+ # Virtual Environment
24
+ venv/
25
+ env/
26
+ ENV/
27
+ .venv
28
+
29
+ # IDE
30
+ .vscode/
31
+ .idea/
32
+ *.swp
33
+ *.swo
34
+ *~
35
+
36
+ # Environment variables
37
+ .env
38
+ .env.local
39
+
40
+ # Model cache
41
+ .cache/
42
+ models/
43
+ *.pth
44
+ *.pt
45
+ *.ckpt
46
+
47
+ # Data files (optional - uncomment if you don't want to track data)
48
+ # data/*.csv
49
+
50
+ # OS
51
+ .DS_Store
52
+ Thumbs.db
53
+
54
+ # Jupyter Notebook
55
+ .ipynb_checkpoints
56
+
57
+ # Mesop
58
+ .mesop/
59
+
README.md ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SAP Finance Dashboard with RPT-1-OSS Model
2
+
3
+ A comprehensive financial dashboard application built with Gradio that integrates the SAP-RPT-1-OSS model for predictive analysis on SAP finance datasets. Features include synthetic data generation, interactive visualizations, OData connectivity, AI-powered insights, and a playground for training custom models.
4
+
5
+ ## Features
6
+
7
+ - **Multiple Synthetic SAP Finance Datasets**: General Ledger accounts, Financial Statements (P&L, Balance Sheet), and Sales Orders
8
+ - **Data Upload**: Upload custom CSV, Parquet, or JSON datasets for analysis
9
+ - **Interactive Visualizations**: Financial charts and graphs using Plotly
10
+ - **SAP-RPT-1-OSS Model Integration**: AI-powered predictions and analysis
11
+ - **Live OData Connection**: Connect to SAP systems to fetch real-time sales order data
12
+ - **Playground Tab**: Upload datasets, configure model parameters, train, and download predictions
13
+ - **Modern UI**: Built with Gradio, a Python-based web framework
14
+
15
+ ## Installation
16
+
17
+ ### Prerequisites
18
+
19
+ - Python 3.11 or higher
20
+ - Hugging Face account (for model access)
21
+ - SAP OData credentials (optional, for live data connection)
22
+
23
+ ### Setup Steps
24
+
25
+ 1. **Clone the repository**:
26
+ ```bash
27
+ git clone <repository-url>
28
+ cd SAP-RPT-1-OSS-App
29
+ ```
30
+
31
+ 2. **Create a virtual environment**:
32
+ ```bash
33
+ python -m venv venv
34
+ source venv/bin/activate # On Windows: venv\Scripts\activate
35
+ ```
36
+
37
+ 3. **Install dependencies**:
38
+ ```bash
39
+ pip install -r requirements.txt
40
+ ```
41
+
42
+ 4. **Install SAP-RPT-OSS package**:
43
+ ```bash
44
+ pip install git+https://github.com/SAP-samples/sap-rpt-1-oss
45
+ ```
46
+
47
+ 5. **Set up environment variables**:
48
+ - Copy `.env.example` to `.env`
49
+ - Fill in your SAP OData credentials
50
+ - Add your Hugging Face token for model access
51
+
52
+ 6. **Authenticate with Hugging Face**:
53
+ ```bash
54
+ pip install huggingface_hub
55
+ huggingface-cli login
56
+ ```
57
+ Or set the `HUGGINGFACE_TOKEN` in your `.env` file.
58
+
59
+ 7. **Generate synthetic data** (optional, if not already generated):
60
+ ```bash
61
+ python -c "from utils.data_generator import generate_all_datasets; generate_all_datasets()"
62
+ ```
63
+
64
+ ## Usage
65
+
66
+ ### Running the Application
67
+
68
+ Start the Gradio application:
69
+
70
+ ```bash
71
+ python app_gradio.py
72
+ ```
73
+
74
+ The application will be available at `http://localhost:7862` (default Gradio port).
75
+
76
+ ### Application Tabs
77
+
78
+ 1. **Dashboard**: Overview with key financial metrics and visualizations
79
+ 2. **Data Explorer**: Browse and filter datasets (GL, Financial Statements, Sales Orders)
80
+ 3. **Upload**: Upload custom CSV datasets for analysis
81
+ 4. **Predictions**: Use SAP-RPT-1-OSS model for predictions and analysis with pre-configured scenarios
82
+ 5. **OData**: Connect to SAP OData services and fetch live data
83
+ 6. **Playground**: Upload datasets, configure model parameters (task type, target column, test split, context size, bagging, GPU), train models, and download predictions
84
+
85
+ ## SAP OData Connection Setup
86
+
87
+ 1. Set the following environment variables in your `.env` file:
88
+ - `SAP_USERNAME`: Your SAP username
89
+ - `SAP_PASSWORD`: Your SAP password
90
+ - `SAP_SERVER`: SAP server URL (default: `https://sapes5.sapdevcenter.com/`)
91
+ - `SAP_CLIENT`: SAP client number (default: `002`)
92
+
93
+ 2. The OData connector uses the base URL:
94
+ `https://sapes5.sapdevcenter.com/sap/opu/odata/IWBEP/GWSAMPLE_BASIC`
95
+
96
+ 3. Available endpoints:
97
+ - Sales Orders: `SalesOrderSet`
98
+ - Products: `ProductSet`
99
+ - Line Items: `SalesOrderLineItemSet`
100
+ - Business Partners: `BusinessPartnerSet`
101
+
102
+ ## Model Configuration
103
+
104
+ The SAP-RPT-1-OSS model supports both classification and regression tasks. For best performance:
105
+
106
+ - **Recommended**: GPU with at least 80 GB memory, context size 8192, bagging factor 8
107
+ - **Lightweight**: CPU with context size 2048, bagging factor 1
108
+
109
+ The application automatically detects available resources and adjusts settings accordingly.
110
+
111
+ ## Deployment
112
+
113
+ ### GitHub Pages
114
+
115
+ Since Gradio requires a Python backend, GitHub Pages deployment requires alternative approaches:
116
+
117
+ 1. **GitHub Actions**: Set up a workflow to run the Gradio app as a service
118
+ 2. **Alternative Hosting**: Deploy to platforms that support Python web apps:
119
+ - Hugging Face Spaces (recommended for Gradio apps)
120
+ - Streamlit Cloud
121
+ - Heroku
122
+ - Railway
123
+ - Render
124
+
125
+ ### Deploy to Hugging Face Spaces
126
+
127
+ The easiest way to deploy this Gradio app is using Hugging Face Spaces:
128
+
129
+ 1. Create a new Space on [Hugging Face Spaces](https://huggingface.co/spaces)
130
+ 2. Select "Gradio" as the SDK
131
+ 3. Push this repository to your Space
132
+ 4. Add your `HUGGINGFACE_TOKEN` as a secret in Space settings
133
+ 5. The app will automatically deploy
134
+
135
+ See `.github/workflows/deploy.yml` for deployment configuration examples.
136
+
137
+ ## Project Structure
138
+
139
+ ```
140
+ SAP-RPT-1-OSS-App/
141
+ ├── app_gradio.py # Main Gradio application
142
+ ├── models/
143
+ │ └── rpt_model.py # SAP-RPT-1-OSS model wrapper
144
+ ├── data/
145
+ │ ├── synthetic_gl_accounts.csv
146
+ │ ├── synthetic_financial_statements.csv
147
+ │ └── synthetic_sales_orders.csv
148
+ ├── utils/
149
+ │ ├── data_generator.py # Generate synthetic SAP finance data
150
+ │ ├── visualizations.py # Chart generation functions
151
+ │ ├── odata_connector.py # OData connection utilities
152
+ │ └── playground.py # Playground utilities for model training
153
+ ├── requirements.txt
154
+ ├── README.md
155
+ └── .env.example
156
+ ```
157
+
158
+ ## License
159
+
160
+ This project is licensed under the Apache Software License, version 2.0.
161
+
162
+ ## Support
163
+
164
+ For issues or questions, please create an issue in this repository.
165
+
166
+ ## Acknowledgments
167
+
168
+ - SAP-RPT-1-OSS model: [Hugging Face](https://huggingface.co/SAP/sap-rpt-1-oss)
169
+ - Gradio framework: [Gradio Documentation](https://www.gradio.app/docs/)
170
+
app.py ADDED
@@ -0,0 +1,451 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ SAP Finance Dashboard with RPT-1-OSS Model
3
+
4
+ Main Mesop application with multiple pages:
5
+ - Dashboard: Overview with metrics and charts
6
+ - Data Explorer: Browse datasets
7
+ - Upload: Upload custom datasets
8
+ - Predictions: AI-powered predictions using SAP-RPT-1-OSS
9
+ - OData: Connect to SAP OData services
10
+ """
11
+
12
+ import os
13
+ import mesop as me
14
+ import pandas as pd
15
+ import numpy as np
16
+ from pathlib import Path
17
+ import json
18
+ import base64
19
+ from typing import Optional, Dict, Any
20
+ import plotly.graph_objects as go
21
+ import plotly.io as pio
22
+
23
+ # Import utilities
24
+ from utils.data_generator import generate_all_datasets
25
+ from utils.visualizations import (
26
+ create_revenue_expense_chart,
27
+ create_balance_sheet_chart,
28
+ create_gl_summary_chart,
29
+ create_sales_analytics_chart,
30
+ create_sales_trend_chart,
31
+ get_summary_metrics
32
+ )
33
+ from utils.odata_connector import SAPFinanceConnector
34
+ from models.rpt_model import RPTModelWrapper, create_model
35
+
36
+ # Global state
37
+ from dataclasses import field
38
+
39
+ @me.stateclass
40
+ class State:
41
+ gl_data: pd.DataFrame = field(default_factory=pd.DataFrame)
42
+ financial_data: pd.DataFrame = field(default_factory=pd.DataFrame)
43
+ sales_data: pd.DataFrame = field(default_factory=pd.DataFrame)
44
+ uploaded_data: pd.DataFrame = field(default_factory=pd.DataFrame)
45
+ current_dataset_type: str = ""
46
+ odata_connector: Optional[SAPFinanceConnector] = None
47
+ odata_connected: bool = False
48
+ odata_data: pd.DataFrame = field(default_factory=pd.DataFrame)
49
+ model_wrapper: Optional[RPTModelWrapper] = None
50
+ predictions: Optional[np.ndarray] = None
51
+ prediction_proba: Optional[np.ndarray] = None
52
+ connection_message: str = ""
53
+ fetch_message: str = ""
54
+ model_initialized: bool = False
55
+ model_trained: bool = False
56
+
57
+
58
+ def load_datasets(state: State):
59
+ """Load synthetic datasets if they exist."""
60
+ data_dir = Path("data")
61
+
62
+ if (data_dir / "synthetic_gl_accounts.csv").exists():
63
+ state.gl_data = pd.read_csv(data_dir / "synthetic_gl_accounts.csv")
64
+
65
+ if (data_dir / "synthetic_financial_statements.csv").exists():
66
+ state.financial_data = pd.read_csv(data_dir / "synthetic_financial_statements.csv")
67
+
68
+ if (data_dir / "synthetic_sales_orders.csv").exists():
69
+ state.sales_data = pd.read_csv(data_dir / "synthetic_sales_orders.csv")
70
+
71
+
72
+ def plotly_to_html(fig_dict: Dict[str, Any]) -> str:
73
+ """Convert Plotly figure dict to HTML string."""
74
+ if not fig_dict:
75
+ return "<p>No chart data available</p>"
76
+
77
+ try:
78
+ fig = go.Figure(fig_dict)
79
+ html_str = pio.to_html(fig, include_plotlyjs='cdn', div_id="plotly-div")
80
+ return html_str
81
+ except Exception as e:
82
+ return f"<p>Error rendering chart: {str(e)}</p>"
83
+
84
+
85
+ @me.page(path="/", title="SAP Finance Dashboard")
86
+ def dashboard_page():
87
+ """Main dashboard page with overview metrics and charts."""
88
+ state = me.state(State)
89
+
90
+ me.text("SAP Finance Dashboard", style=me.Style(font_size=32, font_weight="bold", margin=me.Margin(bottom=16)))
91
+
92
+ # Load datasets if not loaded
93
+ if state.gl_data.empty and state.financial_data.empty and state.sales_data.empty:
94
+ load_datasets(state)
95
+
96
+ # Generate datasets if they don't exist
97
+ if state.gl_data.empty or state.financial_data.empty or state.sales_data.empty:
98
+ with me.box(style=me.Style(padding=16, background="#fff3cd", border_radius=8, margin=me.Margin(bottom=16))):
99
+ me.text("Generating synthetic datasets...", style=me.Style(color="#856404"))
100
+ generate_all_datasets()
101
+ load_datasets(state)
102
+
103
+ # Summary metrics
104
+ with me.box(style=me.Style(display="grid", grid_template_columns="repeat(4, 1fr)", gap=16, margin=me.Margin(bottom=24))):
105
+ if not state.gl_data.empty:
106
+ gl_metrics = get_summary_metrics(state.gl_data, "gl")
107
+ with me.box(style=me.Style(padding=16, background="#f8f9fa", border_radius=8)):
108
+ me.text("GL Transactions", style=me.Style(font_weight="bold"))
109
+ me.text(f"{gl_metrics.get('Total Transactions', 0):,}")
110
+
111
+ if not state.financial_data.empty:
112
+ fin_metrics = get_summary_metrics(state.financial_data, "financial")
113
+ with me.box(style=me.Style(padding=16, background="#f8f9fa", border_radius=8)):
114
+ me.text("Latest Revenue", style=me.Style(font_weight="bold"))
115
+ me.text(f"${fin_metrics.get('Latest Revenue', 0):,.2f}")
116
+
117
+ if not state.sales_data.empty:
118
+ sales_metrics = get_summary_metrics(state.sales_data, "sales")
119
+ with me.box(style=me.Style(padding=16, background="#f8f9fa", border_radius=8)):
120
+ me.text("Total Sales", style=me.Style(font_weight="bold"))
121
+ me.text(f"${sales_metrics.get('Total Sales', 0):,.2f}")
122
+
123
+ with me.box(style=me.Style(padding=16, background="#f8f9fa", border_radius=8)):
124
+ me.text("Datasets", style=me.Style(font_weight="bold"))
125
+ count = sum([
126
+ not state.gl_data.empty,
127
+ not state.financial_data.empty,
128
+ not state.sales_data.empty,
129
+ not state.uploaded_data.empty
130
+ ])
131
+ me.text(f"{count} loaded")
132
+
133
+ # Charts
134
+ if not state.financial_data.empty:
135
+ with me.box(style=me.Style(margin=me.Margin(bottom=24))):
136
+ me.text("Financial Trends", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
137
+ chart_data = create_revenue_expense_chart(state.financial_data)
138
+ if chart_data:
139
+ html_chart = plotly_to_html(chart_data)
140
+ me.html(html_chart)
141
+
142
+ if not state.financial_data.empty:
143
+ with me.box(style=me.Style(margin=me.Margin(bottom=24))):
144
+ me.text("Balance Sheet", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
145
+ chart_data = create_balance_sheet_chart(state.financial_data)
146
+ if chart_data:
147
+ html_chart = plotly_to_html(chart_data)
148
+ me.html(html_chart)
149
+
150
+ if not state.sales_data.empty:
151
+ with me.box(style=me.Style(margin=me.Margin(bottom=24))):
152
+ me.text("Sales Analytics", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
153
+ chart_data = create_sales_analytics_chart(state.sales_data)
154
+ if chart_data:
155
+ html_chart = plotly_to_html(chart_data)
156
+ me.html(html_chart)
157
+
158
+
159
+ @me.page(path="/explorer", title="Data Explorer")
160
+ def explorer_page():
161
+ """Data explorer page to browse and filter datasets."""
162
+ state = me.state(State)
163
+
164
+ me.text("Data Explorer", style=me.Style(font_size=32, font_weight="bold", margin=me.Margin(bottom=16)))
165
+
166
+ # Dataset selector
167
+ with me.box(style=me.Style(margin=me.Margin(bottom=16))):
168
+ me.text("Select Dataset:", style=me.Style(font_weight="bold", margin=me.Margin(bottom=8)))
169
+ dataset_options = [
170
+ ("GL Accounts", "gl"),
171
+ ("Financial Statements", "financial"),
172
+ ("Sales Orders", "sales"),
173
+ ("Uploaded Data", "uploaded")
174
+ ]
175
+
176
+ me.select(
177
+ label="Dataset",
178
+ options=[me.SelectOption(label=label, value=value) for label, value in dataset_options],
179
+ on_selection_change=on_dataset_selection_change,
180
+ value=state.current_dataset_type
181
+ )
182
+
183
+ # Display selected dataset
184
+ if state.current_dataset_type:
185
+ display_dataset(state, state.current_dataset_type)
186
+
187
+
188
+ def on_dataset_selection_change(e: me.SelectSelectionChangeEvent):
189
+ """Handle dataset selection change."""
190
+ state = me.state(State)
191
+ state.current_dataset_type = e.value
192
+
193
+
194
+ def display_dataset(state: State, dataset_type: str):
195
+ """Display the selected dataset."""
196
+ if dataset_type == "gl" and not state.gl_data.empty:
197
+ df = state.gl_data
198
+ me.text(f"GL Accounts ({len(df)} records)", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
199
+ chart_data = create_gl_summary_chart(df)
200
+ if chart_data:
201
+ html_chart = plotly_to_html(chart_data)
202
+ me.html(html_chart)
203
+ me.table(data=df.head(100).to_dict("records"), style=me.Style(margin=me.Margin(top=16)))
204
+
205
+ elif dataset_type == "financial" and not state.financial_data.empty:
206
+ df = state.financial_data
207
+ me.text(f"Financial Statements ({len(df)} records)", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
208
+ chart_data = create_revenue_expense_chart(df)
209
+ if chart_data:
210
+ html_chart = plotly_to_html(chart_data)
211
+ me.html(html_chart)
212
+ me.table(data=df.to_dict("records"), style=me.Style(margin=me.Margin(top=16)))
213
+
214
+ elif dataset_type == "sales" and not state.sales_data.empty:
215
+ df = state.sales_data
216
+ me.text(f"Sales Orders ({len(df)} records)", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
217
+ chart_data = create_sales_trend_chart(df)
218
+ if chart_data:
219
+ html_chart = plotly_to_html(chart_data)
220
+ me.html(html_chart)
221
+ me.table(data=df.head(100).to_dict("records"), style=me.Style(margin=me.Margin(top=16)))
222
+
223
+ elif dataset_type == "uploaded" and not state.uploaded_data.empty:
224
+ df = state.uploaded_data
225
+ me.text(f"Uploaded Data ({len(df)} records)", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
226
+ me.table(data=df.head(100).to_dict("records"), style=me.Style(margin=me.Margin(top=16)))
227
+
228
+ else:
229
+ me.text("No data available for this dataset type.", style=me.Style(color="#dc3545"))
230
+
231
+
232
+ @me.page(path="/upload", title="Upload Data")
233
+ def upload_page():
234
+ """Upload page for custom datasets."""
235
+ state = me.state(State)
236
+
237
+ me.text("Upload Dataset", style=me.Style(font_size=32, font_weight="bold", margin=me.Margin(bottom=16)))
238
+
239
+ with me.box(style=me.Style(margin=me.Margin(bottom=16))):
240
+ me.text("Upload a CSV file to analyze:", style=me.Style(margin=me.Margin(bottom=8)))
241
+ me.file_upload(
242
+ label="Choose CSV File",
243
+ accept=".csv",
244
+ on_upload=handle_file_upload
245
+ )
246
+
247
+ if not state.uploaded_data.empty:
248
+ me.text("Uploaded Data Preview:", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(top=16, bottom=8)))
249
+ me.table(data=state.uploaded_data.head(50).to_dict("records"))
250
+
251
+
252
+ def handle_file_upload(e: me.UploadEvent):
253
+ """Handle file upload."""
254
+ state = me.state(State)
255
+ try:
256
+ if e.files:
257
+ file = e.files[0]
258
+ df = pd.read_csv(file.getvalue())
259
+ state.uploaded_data = df
260
+ except Exception as ex:
261
+ pass
262
+
263
+
264
+ @me.page(path="/predictions", title="Predictions")
265
+ def predictions_page():
266
+ """Predictions page using SAP-RPT-1-OSS model."""
267
+ state = me.state(State)
268
+
269
+ me.text("AI Predictions with SAP-RPT-1-OSS", style=me.Style(font_size=32, font_weight="bold", margin=me.Margin(bottom=16)))
270
+
271
+ with me.box(style=me.Style(margin=me.Margin(bottom=16))):
272
+ me.text("Model Configuration", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
273
+
274
+ me.select(
275
+ label="Model Type",
276
+ options=[
277
+ me.SelectOption(label="Classifier", value="classifier"),
278
+ me.SelectOption(label="Regressor", value="regressor")
279
+ ]
280
+ )
281
+
282
+ me.checkbox(label="Use GPU (requires 80GB memory)", checked=False)
283
+
284
+ me.button("Initialize Model", on_click=on_init_model)
285
+
286
+ if state.model_initialized:
287
+ me.text("Model initialized successfully!", style=me.Style(color="#28a745", margin=me.Margin(bottom=16)))
288
+
289
+ # Dataset selection for training
290
+ with me.box(style=me.Style(margin=me.Margin(bottom=16))):
291
+ me.text("Select Training Data", style=me.Style(font_weight="bold", margin=me.Margin(bottom=8)))
292
+ dataset_options = [
293
+ ("GL Accounts", "gl"),
294
+ ("Financial Statements", "financial"),
295
+ ("Sales Orders", "sales"),
296
+ ("Uploaded Data", "uploaded")
297
+ ]
298
+
299
+ me.select(
300
+ label="Dataset",
301
+ options=[me.SelectOption(label=label, value=value) for label, value in dataset_options]
302
+ )
303
+
304
+ me.button("Train Model", on_click=on_train_model)
305
+
306
+ if state.model_trained:
307
+ me.text("Model trained successfully!", style=me.Style(color="#28a745", margin=me.Margin(top=16)))
308
+
309
+ if state.predictions is not None:
310
+ me.text("Predictions:", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(top=16, bottom=8)))
311
+ me.text(str(state.predictions[:10])) # Show first 10 predictions
312
+
313
+ else:
314
+ with me.box(style=me.Style(padding=16, background="#fff3cd", border_radius=8)):
315
+ me.text("Please initialize the model first.", style=me.Style(color="#856404"))
316
+
317
+
318
+ def on_init_model(e: me.ClickEvent):
319
+ """Initialize the model."""
320
+ state = me.state(State)
321
+ try:
322
+ state.model_wrapper = create_model(model_type="classifier", use_gpu=False)
323
+ state.model_initialized = True
324
+ except Exception as ex:
325
+ state.connection_message = f"Error initializing model: {str(ex)}"
326
+
327
+
328
+ def on_train_model(e: me.ClickEvent):
329
+ """Train the model."""
330
+ state = me.state(State)
331
+ try:
332
+ if state.model_wrapper and not state.gl_data.empty:
333
+ # Simple example: use GL data
334
+ X = state.gl_data.select_dtypes(include=[np.number]).dropna()
335
+ if len(X) > 0:
336
+ # Create a simple target for classification
337
+ y = (X.iloc[:, 0] > X.iloc[:, 0].median()).astype(int)
338
+ state.model_wrapper.fit(X, y)
339
+ state.model_trained = True
340
+ except Exception as ex:
341
+ state.connection_message = f"Error training model: {str(ex)}"
342
+
343
+
344
+ @me.page(path="/odata", title="OData Connection")
345
+ def odata_page():
346
+ """OData connection page for SAP data."""
347
+ state = me.state(State)
348
+
349
+ me.text("SAP OData Connection", style=me.Style(font_size=32, font_weight="bold", margin=me.Margin(bottom=16)))
350
+
351
+ # Connection status
352
+ with me.box(style=me.Style(margin=me.Margin(bottom=16))):
353
+ if state.odata_connector is None:
354
+ state.odata_connector = SAPFinanceConnector()
355
+
356
+ me.button("Test Connection", on_click=on_test_odata_connection)
357
+
358
+ if state.connection_message:
359
+ color = "#28a745" if state.odata_connected else "#dc3545"
360
+ me.text(state.connection_message, style=me.Style(color=color, margin=me.Margin(top=8)))
361
+ elif state.odata_connected:
362
+ me.text("✓ Connected to SAP OData", style=me.Style(color="#28a745", margin=me.Margin(top=8)))
363
+ else:
364
+ me.text("Not connected", style=me.Style(color="#dc3545", margin=me.Margin(top=8)))
365
+
366
+ # Fetch options
367
+ if state.odata_connected:
368
+ with me.box(style=me.Style(margin=me.Margin(bottom=16))):
369
+ me.text("Fetch Data", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(bottom=8)))
370
+
371
+ top_count = me.number_input(label="Number of records", value=100, min_value=1, max_value=1000)
372
+
373
+ with me.box(style=me.Style(display="grid", grid_template_columns="repeat(2, 1fr)", gap=8, margin=me.Margin(top=8))):
374
+ me.button("Fetch Sales Orders", on_click=lambda e: on_fetch_odata(e, "orders", top_count))
375
+ me.button("Fetch Products", on_click=lambda e: on_fetch_odata(e, "products", top_count))
376
+ me.button("Fetch Line Items", on_click=lambda e: on_fetch_odata(e, "line_items", top_count))
377
+ me.button("Fetch Partners", on_click=lambda e: on_fetch_odata(e, "partners", top_count))
378
+
379
+ if state.fetch_message:
380
+ me.text(state.fetch_message, style=me.Style(color="#28a745", margin=me.Margin(top=8)))
381
+
382
+ # Display fetched data
383
+ if not state.odata_data.empty:
384
+ me.text("Fetched Data:", style=me.Style(font_size=20, font_weight="bold", margin=me.Margin(top=16, bottom=8)))
385
+ me.table(data=state.odata_data.head(100).to_dict("records"))
386
+
387
+
388
+ def on_test_odata_connection(e: me.ClickEvent):
389
+ """Test OData connection."""
390
+ state = me.state(State)
391
+ try:
392
+ if state.odata_connector is None:
393
+ state.odata_connector = SAPFinanceConnector()
394
+
395
+ connected, message = state.odata_connector.test_connection()
396
+ state.odata_connected = connected
397
+ state.connection_message = message
398
+ except Exception as ex:
399
+ state.connection_message = f"Error: {str(ex)}"
400
+ state.odata_connected = False
401
+
402
+
403
+ def on_fetch_odata(e: me.ClickEvent, entity_type: str, top: int):
404
+ """Fetch data from OData service."""
405
+ state = me.state(State)
406
+ try:
407
+ if not state.odata_connected:
408
+ state.fetch_message = "Please connect first!"
409
+ return
410
+
411
+ if entity_type == "orders":
412
+ state.odata_data = state.odata_connector.fetch_orders_df(top)
413
+ elif entity_type == "products":
414
+ state.odata_data = state.odata_connector.fetch_products_df(top)
415
+ elif entity_type == "line_items":
416
+ state.odata_data = state.odata_connector.fetch_line_items_df(top)
417
+ elif entity_type == "partners":
418
+ state.odata_data = state.odata_connector.fetch_partners_df(top)
419
+
420
+ state.fetch_message = f"Fetched {len(state.odata_data)} records"
421
+ except Exception as ex:
422
+ state.fetch_message = f"Error fetching data: {str(ex)}"
423
+
424
+
425
+ # Navigation
426
+ @me.page(path="/nav", title="Navigation")
427
+ def nav_page():
428
+ """Navigation page."""
429
+ me.text("Navigation", style=me.Style(font_size=32, font_weight="bold", margin=me.Margin(bottom=16)))
430
+
431
+ nav_links = [
432
+ ("Dashboard", "/"),
433
+ ("Data Explorer", "/explorer"),
434
+ ("Upload", "/upload"),
435
+ ("Predictions", "/predictions"),
436
+ ("OData", "/odata")
437
+ ]
438
+
439
+ for label, path in nav_links:
440
+ with me.box(style=me.Style(margin=me.Margin(bottom=8))):
441
+ me.link(label, path=path, style=me.Style(font_size=18, text_decoration="none"))
442
+
443
+
444
+ if __name__ == "__main__":
445
+ # Generate datasets if they don't exist
446
+ data_dir = Path("data")
447
+ if not (data_dir / "synthetic_gl_accounts.csv").exists():
448
+ generate_all_datasets()
449
+
450
+ me.run()
451
+
app_gradio.py ADDED
@@ -0,0 +1,1422 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ SAP Finance Dashboard with RPT-1-OSS Model - Gradio Version
3
+
4
+ Main Gradio application with tabs:
5
+ - Dashboard: Overview with metrics and charts
6
+ - Data Explorer: Browse datasets
7
+ - Upload: Upload custom datasets
8
+ - Predictions: AI-powered predictions using SAP-RPT-1-OSS
9
+ - OData: Connect to SAP OData services
10
+ """
11
+
12
+ import gradio as gr
13
+ import pandas as pd
14
+ import numpy as np
15
+ from pathlib import Path
16
+ import plotly.graph_objects as go
17
+ from dotenv import load_dotenv
18
+
19
+ # Import utilities
20
+ from utils.data_generator import generate_all_datasets
21
+ from utils.visualizations import (
22
+ create_revenue_expense_chart,
23
+ create_balance_sheet_chart,
24
+ create_gl_summary_chart,
25
+ create_sales_analytics_chart,
26
+ create_sales_trend_chart,
27
+ get_summary_metrics,
28
+ create_prediction_distribution_chart,
29
+ create_prediction_bar_chart,
30
+ create_confidence_gauge
31
+ )
32
+ from utils.odata_connector import SAPFinanceConnector
33
+ from models.rpt_model import create_model
34
+ from utils.playground import (
35
+ load_dataset,
36
+ detect_task_type,
37
+ detect_task_type_from_column,
38
+ get_dataset_info,
39
+ auto_select_target_column,
40
+ prepare_train_test_split,
41
+ preprocess_data,
42
+ export_results,
43
+ check_embedding_server,
44
+ start_embedding_server,
45
+ ensure_embedding_server_running,
46
+ is_sap_rpt_oss_installed
47
+ )
48
+
49
+ # Load environment variables
50
+ load_dotenv()
51
+
52
+ # Global variables
53
+ gl_data = pd.DataFrame()
54
+ financial_data = pd.DataFrame()
55
+ sales_data = pd.DataFrame()
56
+ uploaded_data = pd.DataFrame()
57
+ odata_data = pd.DataFrame()
58
+ odata_connector = None
59
+ model_wrapper = None
60
+
61
+ # Playground variables
62
+ playground_data = pd.DataFrame()
63
+ playground_model = None
64
+ playground_results = None
65
+
66
+
67
+ def load_datasets():
68
+ """Load synthetic datasets if they exist."""
69
+ global gl_data, financial_data, sales_data
70
+ data_dir = Path("data")
71
+
72
+ if not data_dir.exists():
73
+ generate_all_datasets()
74
+
75
+ if (data_dir / "synthetic_gl_accounts.csv").exists():
76
+ gl_data = pd.read_csv(data_dir / "synthetic_gl_accounts.csv")
77
+
78
+ if (data_dir / "synthetic_financial_statements.csv").exists():
79
+ financial_data = pd.read_csv(data_dir / "synthetic_financial_statements.csv")
80
+
81
+ if (data_dir / "synthetic_sales_orders.csv").exists():
82
+ sales_data = pd.read_csv(data_dir / "synthetic_sales_orders.csv")
83
+
84
+
85
+ def create_dashboard():
86
+ """Create dashboard with metrics and charts."""
87
+ if gl_data.empty and financial_data.empty and sales_data.empty:
88
+ load_datasets()
89
+
90
+ # Calculate metrics with vibrant styling
91
+ metrics_html = "<div style='display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-bottom: 30px;'>"
92
+
93
+ if not gl_data.empty:
94
+ gl_metrics = get_summary_metrics(gl_data, "gl")
95
+ metrics_html += f"""
96
+ <div style='background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 25px; border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); color: white;'>
97
+ <h3 style='margin: 0 0 10px 0; font-size: 16px; opacity: 0.9;'>💰 GL Transactions</h3>
98
+ <p style='font-size: 32px; font-weight: bold; margin: 0;'>{gl_metrics.get('Total Transactions', 0):,}</p>
99
+ </div>
100
+ """
101
+
102
+ if not financial_data.empty:
103
+ fin_metrics = get_summary_metrics(financial_data, "financial")
104
+ metrics_html += f"""
105
+ <div style='background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); padding: 25px; border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); color: white;'>
106
+ <h3 style='margin: 0 0 10px 0; font-size: 16px; opacity: 0.9;'>📈 Latest Revenue</h3>
107
+ <p style='font-size: 32px; font-weight: bold; margin: 0;'>${fin_metrics.get('Latest Revenue', 0):,.0f}</p>
108
+ </div>
109
+ """
110
+
111
+ if not sales_data.empty:
112
+ sales_metrics = get_summary_metrics(sales_data, "sales")
113
+ metrics_html += f"""
114
+ <div style='background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); padding: 25px; border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); color: white;'>
115
+ <h3 style='margin: 0 0 10px 0; font-size: 16px; opacity: 0.9;'>🛒 Total Sales</h3>
116
+ <p style='font-size: 32px; font-weight: bold; margin: 0;'>${sales_metrics.get('Total Sales', 0):,.0f}</p>
117
+ </div>
118
+ """
119
+
120
+ datasets_count = sum([not df.empty for df in [gl_data, financial_data, sales_data, uploaded_data]])
121
+ metrics_html += f"""
122
+ <div style='background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); padding: 25px; border-radius: 12px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); color: white;'>
123
+ <h3 style='margin: 0 0 10px 0; font-size: 16px; opacity: 0.9;'>📊 Datasets</h3>
124
+ <p style='font-size: 32px; font-weight: bold; margin: 0;'>{datasets_count} loaded</p>
125
+ </div>
126
+ </div>
127
+ """
128
+
129
+ # Create charts
130
+ charts = []
131
+ if not financial_data.empty:
132
+ fig_dict = create_revenue_expense_chart(financial_data)
133
+ if fig_dict:
134
+ charts.append(go.Figure(fig_dict))
135
+
136
+ fig_dict = create_balance_sheet_chart(financial_data)
137
+ if fig_dict:
138
+ charts.append(go.Figure(fig_dict))
139
+
140
+ if not sales_data.empty:
141
+ fig_dict = create_sales_analytics_chart(sales_data)
142
+ if fig_dict:
143
+ charts.append(go.Figure(fig_dict))
144
+
145
+ return metrics_html, charts[0] if len(charts) > 0 else None, charts[1] if len(charts) > 1 else None, charts[2] if len(charts) > 2 else None
146
+
147
+
148
+ def explore_dataset(dataset_type):
149
+ """Explore selected dataset."""
150
+ global gl_data, financial_data, sales_data, uploaded_data
151
+
152
+ if dataset_type == "GL Accounts":
153
+ if gl_data.empty:
154
+ return "No GL data available", None, None
155
+ fig_dict = create_gl_summary_chart(gl_data)
156
+ fig = go.Figure(fig_dict) if fig_dict else None
157
+ return f"GL Accounts ({len(gl_data)} records)", fig, gl_data.head(100)
158
+
159
+ elif dataset_type == "Financial Statements":
160
+ if financial_data.empty:
161
+ return "No financial data available", None, None
162
+ fig_dict = create_revenue_expense_chart(financial_data)
163
+ fig = go.Figure(fig_dict) if fig_dict else None
164
+ return f"Financial Statements ({len(financial_data)} records)", fig, financial_data
165
+
166
+ elif dataset_type == "Sales Orders":
167
+ if sales_data.empty:
168
+ return "No sales data available", None, None
169
+ fig_dict = create_sales_trend_chart(sales_data)
170
+ fig = go.Figure(fig_dict) if fig_dict else None
171
+ return f"Sales Orders ({len(sales_data)} records)", fig, sales_data.head(100)
172
+
173
+ elif dataset_type == "Uploaded Data":
174
+ if uploaded_data.empty:
175
+ return "No uploaded data available", None, None
176
+ return f"Uploaded Data ({len(uploaded_data)} records)", None, uploaded_data.head(100)
177
+
178
+ return "Select a dataset", None, None
179
+
180
+
181
+ def upload_file(file):
182
+ """Handle file upload."""
183
+ global uploaded_data
184
+ if file is not None:
185
+ try:
186
+ uploaded_data = pd.read_csv(file.name)
187
+ return f"Successfully uploaded {len(uploaded_data)} records!", uploaded_data.head(50)
188
+ except Exception as e:
189
+ return f"Error uploading file: {str(e)}", None
190
+ return "No file uploaded", None
191
+
192
+
193
+ def init_model(model_type, use_gpu):
194
+ """Initialize the SAP-RPT-1-OSS model."""
195
+ global model_wrapper
196
+ try:
197
+ model_wrapper = create_model(model_type=model_type.lower(), use_gpu=use_gpu)
198
+
199
+ context_size = 8192 if use_gpu else 2048
200
+ bagging = 8 if use_gpu else 1
201
+
202
+ return f"""✅ SAP-RPT-1-OSS Model Initialized Successfully!
203
+
204
+ 🎯 Model Type: {model_type}
205
+ 🔧 Context Size: {context_size}
206
+ 📦 Bagging Factor: {bagging}
207
+ 💻 Mode: {'GPU (80GB)' if use_gpu else 'CPU (Lightweight)'}
208
+ 📝 Status: Ready for training
209
+
210
+ ⚠️ Requirements:
211
+ • Hugging Face authentication
212
+ • Embedding service (may be required for predictions)
213
+ • Sufficient memory"""
214
+ except ImportError as e:
215
+ return f"""❌ SAP-RPT-1-OSS Model Not Available
216
+
217
+ Error: {str(e)}
218
+
219
+ 📋 Installation Required:
220
+ pip install git+https://github.com/SAP-samples/sap-rpt-1-oss
221
+
222
+ 🔑 Authentication Required:
223
+ 1. Create Hugging Face account
224
+ 2. Accept model license at: https://huggingface.co/SAP/sap-rpt-1-oss
225
+ 3. Run: huggingface-cli login
226
+ 4. Set HUGGINGFACE_TOKEN in .env file"""
227
+ except Exception as e:
228
+ import traceback
229
+ error_detail = traceback.format_exc()
230
+
231
+ # Check for common errors
232
+ if "HUGGINGFACE_TOKEN" in str(e) or "login" in str(e).lower():
233
+ return f"""❌ Hugging Face Authentication Failed
234
+
235
+ Error: {str(e)}
236
+
237
+ 🔑 Required Steps:
238
+ 1. Login to Hugging Face: huggingface-cli login
239
+ 2. OR set HUGGINGFACE_TOKEN in .env file
240
+ 3. Accept model terms: https://huggingface.co/SAP/sap-rpt-1-oss"""
241
+
242
+ elif "memory" in str(e).lower() or "cuda" in str(e).lower():
243
+ return f"""❌ Insufficient Resources
244
+
245
+ Error: {str(e)}
246
+
247
+ 💻 Requirements:
248
+ • GPU with 80GB memory (recommended)
249
+ • OR use CPU mode (uncheck GPU option)
250
+ • Context size will be reduced for CPU mode"""
251
+
252
+ else:
253
+ return f"""❌ SAP-RPT-1-OSS Initialization Failed
254
+
255
+ Error: {str(e)}
256
+
257
+ 📋 Details:
258
+ {error_detail[:500]}
259
+
260
+ 🔧 Common Solutions:
261
+ 1. Ensure model is installed
262
+ 2. Check Hugging Face authentication
263
+ 3. Verify system resources
264
+ 4. Try CPU mode if GPU unavailable"""
265
+
266
+
267
+ def train_model(dataset_type):
268
+ """Train the model on selected dataset."""
269
+ global model_wrapper, gl_data, financial_data, sales_data, uploaded_data
270
+
271
+ if model_wrapper is None:
272
+ return "Please initialize the model first"
273
+
274
+ # Select dataset
275
+ if dataset_type == "GL Accounts":
276
+ df = gl_data
277
+ elif dataset_type == "Financial Statements":
278
+ df = financial_data
279
+ elif dataset_type == "Sales Orders":
280
+ df = sales_data
281
+ elif dataset_type == "Uploaded Data":
282
+ df = uploaded_data
283
+ else:
284
+ return "Please select a dataset"
285
+
286
+ if df.empty:
287
+ return "Selected dataset is empty"
288
+
289
+ try:
290
+ # Get numeric columns and clean data
291
+ X = df.select_dtypes(include=[np.number])
292
+
293
+ # Remove columns with all NaN values
294
+ X = X.dropna(axis=1, how='all')
295
+
296
+ # Fill remaining NaN values with 0
297
+ X = X.fillna(0)
298
+
299
+ if len(X) > 0 and len(X.columns) > 0:
300
+ # Create a simple target for classification based on first column
301
+ y = (X.iloc[:, 0] > X.iloc[:, 0].median()).astype(int)
302
+
303
+ # Keep as DataFrame - SAP-RPT-OSS expects DataFrame or compatible format
304
+ X_train = pd.DataFrame(X, columns=X.columns)
305
+ X_train = X_train.astype(float)
306
+
307
+ # Fit the model with DataFrame
308
+ model_wrapper.fit(X_train, y)
309
+ return f"✅ Model trained successfully on {len(X)} samples with {len(X.columns)} features!"
310
+ else:
311
+ return "No numeric data available for training"
312
+ except Exception as e:
313
+ return f"Error training model: {str(e)}"
314
+
315
+
316
+ def get_scenario_labels(dataset_type, scenario):
317
+ """Get contextual labels for predictions based on dataset and scenario."""
318
+ labels_map = {
319
+ "Sales Orders": {
320
+ "High Value Order Classification": {
321
+ 0: "Standard Order (Low Value)",
322
+ 1: "High Value Order (Premium)",
323
+ "description": "Identifies orders with high revenue potential"
324
+ },
325
+ "Order Priority Classification": {
326
+ 0: "Normal Priority",
327
+ 1: "High Priority / Urgent",
328
+ "description": "Flags orders requiring immediate attention"
329
+ },
330
+ "Customer Segment Classification": {
331
+ 0: "Regular Customer",
332
+ 1: "VIP / Enterprise Customer",
333
+ "description": "Identifies high-value customer segments"
334
+ }
335
+ },
336
+ "Products": {
337
+ "Product Performance Classification": {
338
+ 0: "Low Performer",
339
+ 1: "Top Performer / Best Seller",
340
+ "description": "Identifies products with high sales performance"
341
+ },
342
+ "Stock Risk Classification": {
343
+ 0: "Normal Stock Level",
344
+ 1: "Low Stock / Reorder Needed",
345
+ "description": "Flags products at risk of stockout"
346
+ }
347
+ },
348
+ "GL Accounts": {
349
+ "Transaction Risk Classification": {
350
+ 0: "Normal Transaction",
351
+ 1: "Flagged / Review Needed",
352
+ "description": "Identifies potentially risky or unusual transactions"
353
+ },
354
+ "Account Balance Classification": {
355
+ 0: "Below Average Balance",
356
+ 1: "Above Average Balance",
357
+ "description": "Classifies accounts by balance magnitude"
358
+ },
359
+ "Expense Category Classification": {
360
+ 0: "Operating Expense",
361
+ 1: "Capital Expenditure",
362
+ "description": "Categorizes transactions by type"
363
+ }
364
+ },
365
+ "Financial Statements": {
366
+ "Financial Health Classification": {
367
+ 0: "Below Average Performance",
368
+ 1: "Strong Performance",
369
+ "description": "Assesses overall financial health"
370
+ },
371
+ "Profitability Classification": {
372
+ 0: "Low Margin Period",
373
+ 1: "High Margin Period",
374
+ "description": "Identifies periods with strong profitability"
375
+ },
376
+ "Growth Trend Classification": {
377
+ 0: "Declining Revenue",
378
+ 1: "Revenue Growth",
379
+ "description": "Classifies periods by revenue trajectory"
380
+ }
381
+ }
382
+ }
383
+
384
+ default_labels = {
385
+ 0: "Class 0 (Negative/Low)",
386
+ 1: "Class 1 (Positive/High)",
387
+ "description": "Binary classification"
388
+ }
389
+
390
+ return labels_map.get(dataset_type, {}).get(scenario, default_labels)
391
+
392
+
393
+ def make_predictions(dataset_type, prediction_scenario):
394
+ """Make predictions on selected dataset with scenario context."""
395
+ global model_wrapper, gl_data, financial_data, sales_data, uploaded_data
396
+
397
+ if model_wrapper is None:
398
+ return "❌ Please initialize the model first", None
399
+
400
+ if not hasattr(model_wrapper, 'is_fitted') or not model_wrapper.is_fitted:
401
+ return "❌ Please train the model first", None
402
+
403
+ # Select dataset and get original data for context
404
+ if dataset_type == "Sales Orders":
405
+ df = sales_data.copy()
406
+ original_cols = ['Order_Number', 'Customer_Name', 'Total_Amount', 'Status']
407
+ elif dataset_type == "Products":
408
+ df = sales_data.copy()
409
+ original_cols = ['Product_Name', 'Total_Amount', 'Quantity']
410
+ elif dataset_type == "GL Accounts":
411
+ df = gl_data.copy()
412
+ original_cols = ['Transaction_ID', 'Account_Description', 'Debit', 'Credit']
413
+ elif dataset_type == "Financial Statements":
414
+ df = financial_data.copy()
415
+ original_cols = ['Period', 'Revenue', 'Net_Income']
416
+ elif dataset_type == "Uploaded Data":
417
+ df = uploaded_data.copy()
418
+ original_cols = df.columns[:3].tolist() if len(df.columns) >= 3 else df.columns.tolist()
419
+ else:
420
+ return "Please select a dataset", None
421
+
422
+ if df.empty:
423
+ return f"❌ Selected dataset ({dataset_type}) is empty", None
424
+
425
+ try:
426
+ # Get labels for this scenario
427
+ label_config = get_scenario_labels(dataset_type, prediction_scenario)
428
+
429
+ # Get numeric columns
430
+ X = df.select_dtypes(include=[np.number])
431
+ X = X.dropna(axis=1, how='all')
432
+ X = X.fillna(X.mean())
433
+
434
+ if len(X) > 0 and len(X.columns) > 0:
435
+ # Limit to first 15 rows
436
+ X_sample = X.head(15)
437
+
438
+ # Keep as DataFrame with proper column names - SAP-RPT-OSS expects DataFrame
439
+ X_pred = pd.DataFrame(X_sample, columns=X.columns)
440
+
441
+ # Ensure all values are numeric and no NaN
442
+ X_pred = X_pred.astype(float)
443
+ X_pred = X_pred.fillna(0)
444
+
445
+ # Make predictions - pass DataFrame directly
446
+ predictions = model_wrapper.predict(X_pred)
447
+
448
+ # Convert to numpy array and flatten if needed
449
+ predictions = np.array(predictions)
450
+ if hasattr(predictions, 'flatten') and len(predictions.shape) > 1:
451
+ predictions = predictions.flatten()
452
+
453
+ # Get original data columns for context
454
+ context_df = df.head(15)[original_cols] if all(col in df.columns for col in original_cols) else df.head(15).iloc[:, :3]
455
+
456
+ # Create result with meaningful labels
457
+ model_type = model_wrapper.model_type.capitalize()
458
+
459
+ if model_type == "Classifier":
460
+ pred_labels = [label_config.get(int(p), f"Class {int(p)}") for p in predictions]
461
+
462
+ result_df = pd.DataFrame({
463
+ 'Row': range(1, len(predictions) + 1),
464
+ 'Prediction': pred_labels,
465
+ 'Confidence': predictions
466
+ })
467
+
468
+ # Add context columns
469
+ for col in context_df.columns:
470
+ result_df[col] = context_df[col].values
471
+
472
+ # Count predictions
473
+ class_0_count = sum(predictions == 0)
474
+ class_1_count = sum(predictions == 1)
475
+
476
+ # Create visualizations
477
+ pie_chart = go.Figure(create_prediction_distribution_chart(
478
+ predictions,
479
+ label_config,
480
+ f"{prediction_scenario} - Distribution"
481
+ ))
482
+
483
+ bar_chart = go.Figure(create_prediction_bar_chart(
484
+ predictions,
485
+ label_config,
486
+ f"{prediction_scenario} - Summary"
487
+ ))
488
+
489
+ # Calculate confidence score
490
+ confidence = max(class_0_count, class_1_count) / len(predictions) * 100
491
+ gauge_chart = go.Figure(create_confidence_gauge(
492
+ confidence,
493
+ "Prediction Confidence"
494
+ ))
495
+
496
+ status = f"""✅ {model_type} Results - {prediction_scenario}
497
+
498
+ 📊 {label_config.get('description', 'Classification complete')}
499
+
500
+ Analyzed {len(predictions)} records:
501
+ • {label_config.get(1, 'Class 1')}: {class_1_count} records ({class_1_count/len(predictions)*100:.1f}%)
502
+ • {label_config.get(0, 'Class 0')}: {class_0_count} records ({class_0_count/len(predictions)*100:.1f}%)
503
+
504
+ Dataset: {dataset_type}
505
+ Model Type: {model_type}
506
+ Confidence: {confidence:.1f}%"""
507
+ else:
508
+ result_df = pd.DataFrame({
509
+ 'Row': range(1, len(predictions) + 1),
510
+ 'Predicted Value': predictions.round(2)
511
+ })
512
+
513
+ # Add context columns
514
+ for col in context_df.columns:
515
+ result_df[col] = context_df[col].values
516
+
517
+ # Create visualizations for regression
518
+ fig = go.Figure()
519
+ fig.add_trace(go.Scatter(
520
+ x=list(range(1, len(predictions) + 1)),
521
+ y=predictions,
522
+ mode='lines+markers',
523
+ marker=dict(size=10, color='#3498db'),
524
+ line=dict(width=3, color='#3498db')
525
+ ))
526
+ fig.update_layout(
527
+ title=f"{prediction_scenario} - Predicted Values",
528
+ xaxis_title="Sample",
529
+ yaxis_title="Predicted Value",
530
+ template='plotly_white',
531
+ height=400
532
+ )
533
+ pie_chart = fig
534
+ bar_chart = None
535
+ gauge_chart = None
536
+
537
+ status = f"""✅ {model_type} Results - {prediction_scenario}
538
+
539
+ Predicted {len(predictions)} values
540
+ Mean: {predictions.mean():.2f}
541
+ Range: {predictions.min():.2f} to {predictions.max():.2f}
542
+ Std Dev: {predictions.std():.2f}
543
+
544
+ Dataset: {dataset_type}"""
545
+
546
+ return status, result_df, pie_chart, bar_chart, gauge_chart
547
+ else:
548
+ return f"❌ No valid numeric data available in {dataset_type}", None, None, None, None
549
+ except Exception as e:
550
+ import traceback
551
+ error_detail = traceback.format_exc()
552
+
553
+ # Check for specific SAP-RPT-1-OSS errors
554
+ if "zmq" in str(e).lower() or "socket" in str(e).lower() or "Resource temporarily unavailable" in str(e):
555
+ return f"""❌ SAP-RPT-1-OSS Embedding Service Not Available
556
+
557
+ Error: {str(e)}
558
+
559
+ 🔧 SAP-RPT-1-OSS requires an embedding service to be running:
560
+
561
+ **Required Setup:**
562
+ 1. The model uses a text embedding service via ZMQ socket
563
+ 2. This service needs to be started separately
564
+ 3. Service handles semantic understanding of column names and values
565
+
566
+ **To Use SAP-RPT-1-OSS:**
567
+ • Start the embedding service (see SAP-RPT-1-OSS documentation)
568
+ • Ensure ZMQ socket is accessible
569
+ • Verify service is running before making predictions
570
+
571
+ **Current Status:** Model initialized but embedding service unavailable
572
+
573
+ 📖 Documentation: https://github.com/SAP-samples/sap-rpt-1-oss
574
+ 🔗 Model Info: https://huggingface.co/SAP/sap-rpt-1-oss
575
+
576
+ Dataset: {dataset_type}
577
+ Scenario: {prediction_scenario}""", None, None, None, None
578
+
579
+ else:
580
+ return f"""❌ Error making predictions on {dataset_type}
581
+
582
+ Error: {str(e)}
583
+
584
+ 📋 Details:
585
+ {error_detail[:400]}
586
+
587
+ Dataset: {dataset_type}
588
+ Scenario: {prediction_scenario}""", None, None, None, None
589
+
590
+
591
+ def update_scenarios(dataset_type):
592
+ """Update scenario dropdown based on selected dataset."""
593
+ scenarios_map = {
594
+ "Sales Orders": [
595
+ "High Value Order Classification",
596
+ "Order Priority Classification",
597
+ "Customer Segment Classification"
598
+ ],
599
+ "Products": [
600
+ "Product Performance Classification",
601
+ "Stock Risk Classification"
602
+ ],
603
+ "GL Accounts": [
604
+ "Transaction Risk Classification",
605
+ "Account Balance Classification",
606
+ "Expense Category Classification"
607
+ ],
608
+ "Financial Statements": [
609
+ "Financial Health Classification",
610
+ "Profitability Classification",
611
+ "Growth Trend Classification"
612
+ ],
613
+ "Uploaded Data": [
614
+ "Custom Classification"
615
+ ]
616
+ }
617
+
618
+ scenarios = scenarios_map.get(dataset_type, ["Custom Classification"])
619
+ return gr.Dropdown(choices=scenarios, value=scenarios[0])
620
+
621
+
622
+ def test_odata_connection():
623
+ """Test OData connection."""
624
+ global odata_connector
625
+ try:
626
+ odata_connector = SAPFinanceConnector()
627
+ connected, message = odata_connector.test_connection()
628
+ if connected:
629
+ return f"✓ {message}"
630
+ else:
631
+ return f"✗ {message}"
632
+ except Exception as e:
633
+ return f"Error: {str(e)}"
634
+
635
+
636
+ def fetch_odata_data(entity_type, num_records):
637
+ """Fetch data from OData service."""
638
+ global odata_connector, odata_data
639
+
640
+ if odata_connector is None:
641
+ return "Please test connection first", None
642
+
643
+ try:
644
+ if entity_type == "Sales Orders":
645
+ odata_data = odata_connector.fetch_orders_df(num_records)
646
+ elif entity_type == "Products":
647
+ odata_data = odata_connector.fetch_products_df(num_records)
648
+ elif entity_type == "Line Items":
649
+ odata_data = odata_connector.fetch_line_items_df(num_records)
650
+ elif entity_type == "Business Partners":
651
+ odata_data = odata_connector.fetch_partners_df(num_records)
652
+ else:
653
+ return "Please select an entity type", None
654
+
655
+ return f"Fetched {len(odata_data)} records", odata_data.head(100) if not odata_data.empty else None
656
+ except Exception as e:
657
+ return f"Error fetching data: {str(e)}", None
658
+
659
+
660
+ # Playground functions
661
+ def handle_playground_upload(file):
662
+ """Handle dataset upload in playground."""
663
+ global playground_data
664
+
665
+ if file is None:
666
+ return "No file uploaded", None, [], None, "classification", [], None
667
+
668
+ try:
669
+ df, error = load_dataset(file.name)
670
+ if error:
671
+ return f"Error: {error}", None, [], None, "classification", [], None
672
+
673
+ playground_data = df
674
+
675
+ # Get dataset info
676
+ info = get_dataset_info(df)
677
+
678
+ # Auto-select target column (default to last)
679
+ target_col = auto_select_target_column(df, "classification")
680
+
681
+ # Detect task type from filename first
682
+ filename_task_type = detect_task_type(Path(file.name).name)
683
+
684
+ # Then detect from target column data type
685
+ column_task_type = detect_task_type_from_column(df, target_col)
686
+
687
+ # Use column-based detection if filename detection is default
688
+ if filename_task_type == "classification" and column_task_type == "regression":
689
+ task_type = column_task_type # Prefer column-based detection
690
+ else:
691
+ task_type = filename_task_type
692
+
693
+ # Create info text
694
+ target_info = ""
695
+ if target_col:
696
+ target_series = df[target_col]
697
+ if pd.api.types.is_numeric_dtype(target_series):
698
+ unique_count = target_series.dropna().nunique()
699
+ target_info = f"\nTarget '{target_col}': {unique_count} unique values"
700
+ if unique_count > 20:
701
+ target_info += " (suggests regression)"
702
+ else:
703
+ target_info += " (suggests classification)"
704
+
705
+ info_text = f"""Dataset loaded successfully!
706
+
707
+ Rows: {info['num_rows']:,}
708
+ Columns: {info['num_columns']}
709
+ Numeric columns: {len(info['numeric_columns'])}
710
+ Categorical columns: {len(info['categorical_columns'])}
711
+
712
+ Detected task type: {task_type} (from filename: {filename_task_type}, from column: {column_task_type})
713
+ Suggested target column: {target_col}{target_info}"""
714
+
715
+ # Preview first 10 rows
716
+ preview = df.head(10)
717
+
718
+ # Column list for dropdown
719
+ columns = list(df.columns)
720
+
721
+ return (
722
+ info_text,
723
+ preview,
724
+ columns, # Choices for dropdown
725
+ target_col, # Value for dropdown
726
+ task_type,
727
+ columns, # Choices for second dropdown
728
+ target_col # Value for second dropdown
729
+ )
730
+ except Exception as e:
731
+ return f"Error: {str(e)}", None, [], None, "classification", [], None
732
+
733
+
734
+ def train_playground_model(
735
+ task_type,
736
+ target_column,
737
+ test_split,
738
+ max_context_size,
739
+ bagging,
740
+ use_gpu,
741
+ handle_missing,
742
+ normalize,
743
+ progress=gr.Progress()
744
+ ):
745
+ """Train model in playground with progress tracking."""
746
+ global playground_data, playground_model
747
+
748
+ if playground_data.empty:
749
+ return "Please upload a dataset first", None, None, None
750
+
751
+ try:
752
+ progress(0.1, desc="Preparing data...")
753
+
754
+ # Preprocess data
755
+ df_processed = preprocess_data(playground_data, handle_missing, normalize)
756
+
757
+ progress(0.2, desc="Validating target column...")
758
+
759
+ # Validate target column exists
760
+ if target_column not in df_processed.columns:
761
+ return f"Error: Target column '{target_column}' not found in dataset", None, None, None
762
+
763
+ # Check target column data type
764
+ target_series = df_processed[target_column]
765
+ target_dtype = target_series.dtype
766
+
767
+ # Auto-detect task type if mismatch
768
+ is_numeric = pd.api.types.is_numeric_dtype(target_series)
769
+ is_integer_like = False
770
+
771
+ if is_numeric:
772
+ # Check if it's integer-like (can be converted to int without loss)
773
+ try:
774
+ int_values = target_series.dropna().astype(int)
775
+ float_values = target_series.dropna().astype(float)
776
+ is_integer_like = (int_values == float_values).all()
777
+ except:
778
+ is_integer_like = False
779
+
780
+ # Validate task type matches target column
781
+ if task_type == "classification":
782
+ if not is_integer_like:
783
+ # Check if it's numeric with many unique values
784
+ if is_numeric:
785
+ unique_values = target_series.dropna().nunique()
786
+ if unique_values > 20: # Too many unique values for classification
787
+ return f"""Error: Target column '{target_column}' contains continuous numeric values ({unique_values} unique values).
788
+
789
+ This looks like a regression problem, not classification.
790
+
791
+ Solution: Change Task Type to 'regression' or convert your target to integer classes.""", None, None, None
792
+ else:
793
+ # Convert numeric to integer classes (will be handled later with LabelEncoder)
794
+ pass
795
+ else:
796
+ # String/categorical - will be encoded with LabelEncoder later
797
+ # No need to convert here, just validate
798
+ unique_values = target_series.dropna().nunique()
799
+ if unique_values > 100:
800
+ return f"""Error: Target column '{target_column}' has too many unique categories ({unique_values}).
801
+
802
+ Classification works best with fewer categories (< 100).
803
+
804
+ Solution: Consider grouping categories or using regression if this is a continuous value.""", None, None, None
805
+ else: # regression
806
+ if not is_numeric:
807
+ return f"""Error: Target column '{target_column}' is not numeric (type: {target_dtype}).
808
+
809
+ Regression requires numeric target values.
810
+
811
+ Solution: Change Task Type to 'classification' or convert your target to numeric.""", None, None, None
812
+
813
+ progress(0.3, desc="Splitting train/test...")
814
+
815
+ # Prepare train/test split
816
+ X_train, y_train, X_test, y_test = prepare_train_test_split(
817
+ df_processed, target_column, test_split
818
+ )
819
+
820
+ # Ensure classification targets are integers
821
+ if task_type == "classification":
822
+ # Handle string/categorical targets by encoding them
823
+ from sklearn.preprocessing import LabelEncoder
824
+ le = LabelEncoder()
825
+ y_train = pd.Series(le.fit_transform(y_train.astype(str)), index=y_train.index)
826
+ y_test = pd.Series(le.transform(y_test.astype(str)), index=y_test.index)
827
+
828
+ progress(0.4, desc="Preparing model...")
829
+
830
+ # Note: SAP-RPT-OSS typically starts the embedding server automatically when needed
831
+ # We check status but don't require it to be running beforehand
832
+ server_running, server_msg = ensure_embedding_server_running()
833
+ server_warning = ""
834
+ if not server_running:
835
+ # This is normal - the model will start the server automatically when making predictions
836
+ server_warning = f"\n💡 Note: Embedding server will start automatically when model makes predictions."
837
+
838
+ progress(0.5, desc="Initializing model...")
839
+
840
+ # Initialize model with custom parameters
841
+ model_type = "classifier" if task_type == "classification" else "regressor"
842
+ from models.rpt_model import RPTModelWrapper
843
+ playground_model = RPTModelWrapper(
844
+ model_type=model_type,
845
+ max_context_size=max_context_size,
846
+ bagging=bagging
847
+ )
848
+
849
+ progress(0.6, desc="Training model...")
850
+
851
+ # Train model
852
+ playground_model.fit(X_train, y_train)
853
+
854
+ progress(0.8, desc="Making predictions...")
855
+
856
+ # Make predictions
857
+ predictions = playground_model.predict(X_test)
858
+
859
+ progress(0.9, desc="Exporting results...")
860
+
861
+ # Export results
862
+ results_path = export_results(
863
+ X_test, y_test, predictions, task_type,
864
+ filename_prefix="playground"
865
+ )
866
+
867
+ progress(1.0, desc="Complete!")
868
+
869
+ # Calculate metrics
870
+ if task_type == "classification":
871
+ accuracy = (predictions == y_test.values).mean() * 100
872
+ metrics = f"Accuracy: {accuracy:.2f}%"
873
+ else:
874
+ from sklearn.metrics import mean_squared_error, r2_score
875
+ mse = mean_squared_error(y_test, predictions)
876
+ r2 = r2_score(y_test, predictions)
877
+ metrics = f"MSE: {mse:.4f}, R²: {r2:.4f}"
878
+
879
+ # Create results DataFrame for display
880
+ results_df = X_test.copy()
881
+ results_df['true_value'] = y_test.values
882
+ if task_type == "classification":
883
+ results_df['predicted_class'] = predictions
884
+ else:
885
+ results_df['predicted_value'] = predictions
886
+
887
+ status = f"""✅ Training Complete!
888
+
889
+ Training samples: {len(X_train):,}
890
+ Test samples: {len(X_test):,}
891
+ {metrics}
892
+ {server_warning}
893
+
894
+ Results exported to: {results_path}"""
895
+
896
+ return status, results_df.head(100), results_path, gr.File(value=results_path)
897
+
898
+ except Exception as e:
899
+ import traceback
900
+ error_detail = traceback.format_exc()
901
+ return f"Error: {str(e)}\n\nDetails:\n{error_detail[:500]}", None, None, None
902
+
903
+
904
+ def check_playground_embedding_server():
905
+ """Check embedding server status."""
906
+ # First check if package is installed
907
+ if not is_sap_rpt_oss_installed():
908
+ return f"❌ sap-rpt-oss package not found\n\n📦 Installation Required:\n1. Install sap-rpt-oss: pip install git+https://github.com/SAP-samples/sap-rpt-1-oss\n2. Install pyzmq: pip install pyzmq\n\n💡 After installation, the server will auto-start when you train a model."
909
+
910
+ # Check if server is running
911
+ is_running, message = check_embedding_server()
912
+ if is_running:
913
+ return f"✅ {message}\n\nThe embedding server is ready to use."
914
+ else:
915
+ return f"ℹ️ {message}\n\n✅ This is normal! The embedding server will start automatically when you train a model or make predictions. No manual start needed."
916
+
917
+
918
+ # Create Gradio interface with vibrant theme
919
+ with gr.Blocks(title="SAP Finance Dashboard", theme=gr.themes.Soft(), css="""
920
+ .gradio-container {
921
+ max-width: 1400px !important;
922
+ }
923
+ h1 {
924
+ background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
925
+ -webkit-background-clip: text;
926
+ -webkit-text-fill-color: transparent;
927
+ background-clip: text;
928
+ }
929
+ """) as app:
930
+ gr.HTML("""
931
+ <div style='text-align: center; margin-bottom: 20px;'>
932
+ <h1 style='font-size: 42px; margin-bottom: 10px; background: linear-gradient(90deg, #667eea 0%, #764ba2 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent;'>
933
+ 📊SAP Finance playground for RPT-1-OSS Model
934
+ </h1>
935
+ <p style='font-size: 18px; color: #666;'>AI-Powered Financial Analysis & Predictions with RPT-1-OSS Model by Amit Lal</p>
936
+ </div>
937
+ """)
938
+
939
+ with gr.Tabs():
940
+ # Dashboard Tab
941
+ with gr.TabItem("📊 Dashboard"):
942
+ gr.Markdown("## 📈 Financial Overview")
943
+ gr.Markdown("*Real-time metrics and key financial indicators*")
944
+ metrics_display = gr.HTML()
945
+ with gr.Row():
946
+ chart1 = gr.Plot()
947
+ chart2 = gr.Plot()
948
+ chart3 = gr.Plot()
949
+
950
+ refresh_btn = gr.Button("Refresh Dashboard")
951
+ refresh_btn.click(
952
+ create_dashboard,
953
+ outputs=[metrics_display, chart1, chart2, chart3]
954
+ )
955
+
956
+ # Load dashboard on startup
957
+ app.load(create_dashboard, outputs=[metrics_display, chart1, chart2, chart3])
958
+
959
+ # Data Explorer Tab
960
+ with gr.TabItem("🔍 Data Explorer"):
961
+ gr.Markdown("## 🗂️ Explore Datasets")
962
+ gr.Markdown("*Browse and analyze your financial data*")
963
+ dataset_selector = gr.Dropdown(
964
+ choices=["GL Accounts", "Financial Statements", "Sales Orders", "Uploaded Data"],
965
+ label="Select Dataset",
966
+ value="GL Accounts"
967
+ )
968
+ info_text = gr.Textbox(label="Dataset Info", interactive=False)
969
+ data_chart = gr.Plot()
970
+ data_table = gr.Dataframe()
971
+
972
+ dataset_selector.change(
973
+ explore_dataset,
974
+ inputs=[dataset_selector],
975
+ outputs=[info_text, data_chart, data_table]
976
+ )
977
+
978
+ # Upload Tab
979
+ with gr.TabItem("📤 Upload"):
980
+ gr.Markdown("## 📁 Upload Dataset")
981
+ gr.Markdown("*Upload your own CSV files for analysis*")
982
+ file_upload = gr.File(label="Upload CSV File", file_types=[".csv"])
983
+ upload_status = gr.Textbox(label="Status", interactive=False)
984
+ uploaded_preview = gr.Dataframe()
985
+
986
+ file_upload.upload(
987
+ upload_file,
988
+ inputs=[file_upload],
989
+ outputs=[upload_status, uploaded_preview]
990
+ )
991
+
992
+ # Predictions Tab
993
+ with gr.TabItem("🤖 AI Predictions"):
994
+ gr.Markdown("## 🎯 AI Predictions with SAP-RPT-1-OSS")
995
+ gr.Markdown("*Train AI models on financial data and make intelligent predictions powered by deep learning*")
996
+
997
+ with gr.Row():
998
+ model_type_select = gr.Dropdown(
999
+ choices=["Classifier", "Regressor"],
1000
+ label="Model Type",
1001
+ value="Classifier",
1002
+ info="Classifier: Categorize data | Regressor: Predict numeric values"
1003
+ )
1004
+ use_gpu_check = gr.Checkbox(label="Use GPU (requires 80GB memory)", value=False)
1005
+ init_btn = gr.Button("Initialize Model", variant="primary")
1006
+
1007
+ init_status = gr.Textbox(label="Initialization Status", interactive=False)
1008
+
1009
+ gr.Markdown("### Step 1: Train the Model")
1010
+ with gr.Row():
1011
+ train_dataset_select = gr.Dropdown(
1012
+ choices=["Sales Orders", "GL Accounts", "Financial Statements", "Uploaded Data"],
1013
+ label="Select Training Dataset",
1014
+ value="Sales Orders"
1015
+ )
1016
+ train_btn = gr.Button("Train Model", variant="primary")
1017
+
1018
+ train_status = gr.Textbox(label="Training Status", interactive=False, lines=3)
1019
+
1020
+ gr.Markdown("### Step 2: Make Predictions")
1021
+ with gr.Row():
1022
+ pred_dataset_select = gr.Dropdown(
1023
+ choices=["Sales Orders", "Products", "GL Accounts", "Financial Statements", "Uploaded Data"],
1024
+ label="Select Prediction Dataset",
1025
+ value="Sales Orders",
1026
+ info="Choose which dataset to analyze"
1027
+ )
1028
+ prediction_scenario = gr.Dropdown(
1029
+ choices=[
1030
+ "High Value Order Classification",
1031
+ "Order Priority Classification",
1032
+ "Customer Segment Classification"
1033
+ ],
1034
+ label="Prediction Scenario",
1035
+ value="High Value Order Classification",
1036
+ info="Scenario updates based on selected dataset"
1037
+ )
1038
+
1039
+ predict_btn = gr.Button("🎯 Make Predictions", variant="primary", size="lg")
1040
+
1041
+ pred_status = gr.Textbox(label="Prediction Results", interactive=False, lines=6)
1042
+
1043
+ gr.Markdown("### Prediction Visualizations")
1044
+ with gr.Row():
1045
+ pred_pie_chart = gr.Plot(label="Distribution")
1046
+ pred_bar_chart = gr.Plot(label="Summary")
1047
+ with gr.Row():
1048
+ pred_gauge_chart = gr.Plot(label="Confidence Score")
1049
+
1050
+ gr.Markdown("### Detailed Predictions")
1051
+ predictions_table = gr.Dataframe(label="Data with Predictions")
1052
+
1053
+ gr.Markdown("""
1054
+ **Dataset-Specific Scenarios:**
1055
+
1056
+ 📦 **Sales Orders:**
1057
+ - High Value Order: Premium vs standard orders
1058
+ - Order Priority: Urgent vs normal handling
1059
+ - Customer Segment: VIP vs regular customers
1060
+
1061
+ 🛍️ **Products:**
1062
+ - Product Performance: Best sellers vs low performers
1063
+ - Stock Risk: Items needing reorder
1064
+
1065
+ 💰 **GL Accounts:**
1066
+ - Transaction Risk: Flagged vs normal transactions
1067
+ - Account Balance: Above vs below average
1068
+ - Expense Category: OpEx vs CapEx
1069
+
1070
+ 📊 **Financial Statements:**
1071
+ - Financial Health: Strong vs weak performance
1072
+ - Profitability: High vs low margin periods
1073
+ - Growth Trend: Revenue growth vs decline
1074
+ """)
1075
+
1076
+ init_btn.click(
1077
+ init_model,
1078
+ inputs=[model_type_select, use_gpu_check],
1079
+ outputs=[init_status]
1080
+ )
1081
+
1082
+ train_btn.click(
1083
+ train_model,
1084
+ inputs=[train_dataset_select],
1085
+ outputs=[train_status]
1086
+ )
1087
+
1088
+ # Update scenarios when dataset changes
1089
+ pred_dataset_select.change(
1090
+ update_scenarios,
1091
+ inputs=[pred_dataset_select],
1092
+ outputs=[prediction_scenario]
1093
+ )
1094
+
1095
+ predict_btn.click(
1096
+ make_predictions,
1097
+ inputs=[pred_dataset_select, prediction_scenario],
1098
+ outputs=[pred_status, predictions_table, pred_pie_chart, pred_bar_chart, pred_gauge_chart]
1099
+ )
1100
+
1101
+ # OData Tab
1102
+ with gr.TabItem("🔗 OData"):
1103
+ gr.Markdown("## 🌐 SAP OData Connection")
1104
+ gr.Markdown("*Connect to live SAP systems and fetch real-time data*")
1105
+
1106
+ test_conn_btn = gr.Button("Test Connection")
1107
+ conn_status = gr.Textbox(label="Connection Status", interactive=False)
1108
+
1109
+ with gr.Row():
1110
+ entity_select = gr.Dropdown(
1111
+ choices=["Sales Orders", "Products", "Line Items", "Business Partners"],
1112
+ label="Select Entity",
1113
+ value="Sales Orders"
1114
+ )
1115
+ num_records = gr.Number(label="Number of Records", value=100, minimum=1, maximum=1000)
1116
+ fetch_btn = gr.Button("Fetch Data")
1117
+
1118
+ fetch_status = gr.Textbox(label="Fetch Status", interactive=False)
1119
+ odata_table = gr.Dataframe()
1120
+
1121
+ test_conn_btn.click(
1122
+ test_odata_connection,
1123
+ outputs=[conn_status]
1124
+ )
1125
+
1126
+ fetch_btn.click(
1127
+ fetch_odata_data,
1128
+ inputs=[entity_select, num_records],
1129
+ outputs=[fetch_status, odata_table]
1130
+ )
1131
+
1132
+ # Playground Tab
1133
+ with gr.TabItem("🎮 Playground"):
1134
+ gr.Markdown("## 🧪 SAP-RPT-1-OSS Playground")
1135
+ gr.Markdown("*Upload datasets, configure models, and train with real-time progress tracking*")
1136
+
1137
+ # Embedding Server Status
1138
+ gr.Markdown("**💡 Note:** The SAP-RPT-OSS embedding server starts automatically when the model makes predictions. Manual start is optional and may not be available in all installations.")
1139
+ with gr.Row():
1140
+ embedding_status_btn = gr.Button("Check Embedding Server", size="sm")
1141
+ embedding_status = gr.Textbox(label="Embedding Server Status", interactive=False, lines=4)
1142
+ start_server_btn = gr.Button("Start Embedding Server (Optional)", size="sm", variant="secondary")
1143
+
1144
+ embedding_status_btn.click(
1145
+ check_playground_embedding_server,
1146
+ outputs=[embedding_status]
1147
+ )
1148
+
1149
+ def start_playground_embedding_server():
1150
+ """Start embedding server and return formatted message."""
1151
+ # Check if package is installed first
1152
+ if not is_sap_rpt_oss_installed():
1153
+ return f"❌ sap-rpt-oss package not found\n\n📦 Installation Required:\npip install git+https://github.com/SAP-samples/sap-rpt-1-oss"
1154
+
1155
+ success, message = start_embedding_server(None)
1156
+ if success:
1157
+ return f"✅ {message}\n\nThe server is now running and will be used automatically during training."
1158
+ else:
1159
+ # This is normal - SAP-RPT-OSS starts the server automatically when needed
1160
+ return f"ℹ️ {message}\n\n✅ This is expected! The embedding server will start automatically when you train the model or make predictions. No action needed."
1161
+
1162
+ start_server_btn.click(
1163
+ start_playground_embedding_server,
1164
+ outputs=[embedding_status]
1165
+ )
1166
+
1167
+ gr.Markdown("### Step 1: Upload Dataset")
1168
+ playground_upload = gr.File(
1169
+ label="Upload Dataset (CSV, Parquet, or JSON)",
1170
+ file_types=[".csv", ".parquet", ".json", ".jsonl"]
1171
+ )
1172
+
1173
+ playground_info = gr.Textbox(label="Dataset Info", interactive=False, lines=8)
1174
+ playground_preview = gr.Dataframe(label="Preview (First 10 Rows)")
1175
+
1176
+ gr.Markdown("### Step 2: Configure Model")
1177
+
1178
+ # Documentation section
1179
+ with gr.Accordion("📚 Parameter Guide - Click to expand", open=False):
1180
+ gr.Markdown("""
1181
+ **Understanding Model Parameters:**
1182
+
1183
+ **🎯 Task Type:**
1184
+ - **Classification**: Predicts categories/classes (e.g., "High Risk" vs "Low Risk", "Approved" vs "Rejected")
1185
+ - Target column should have discrete values (integers or categories)
1186
+ - Examples: Will invoice be paid late? (Yes/No), Product category (A/B/C)
1187
+ - **Regression**: Predicts continuous numeric values (e.g., price, days, amount)
1188
+ - Target column should have numeric values
1189
+ - Examples: Days until payment, Revenue amount, Risk score (0-100)
1190
+
1191
+ **📊 Test Split Ratio:**
1192
+ - Proportion of your dataset reserved for testing model performance
1193
+ - **0.1 (10%)**: Use more data for training, less for validation. Good for small datasets.
1194
+ - **0.2 (20%)**: Balanced approach. Recommended default for most cases.
1195
+ - **0.3-0.5 (30-50%)**: More data for testing. Use when you have large datasets and want thorough validation.
1196
+ - Higher test split = more reliable performance estimate, but less training data
1197
+
1198
+ **🧠 Max Context Size:**
1199
+ - Number of examples the model can consider simultaneously when making predictions
1200
+ - **512**: Fast, memory-efficient. Good for quick experiments or CPU-only setups.
1201
+ - **1024**: Balanced performance. Recommended for most use cases.
1202
+ - **2048**: Better accuracy, moderate memory. Good default for production.
1203
+ - **4096**: High accuracy, requires significant memory (16GB+ RAM).
1204
+ - **8192**: Best accuracy, requires 80GB GPU memory. Use only with powerful hardware.
1205
+ - Larger context = better understanding of patterns, but slower and more memory-intensive
1206
+
1207
+ **🎲 Bagging Factor:**
1208
+ - Number of independent models trained and combined (ensemble learning)
1209
+ - **1**: Single model. Fastest, baseline performance.
1210
+ - **2**: Two models averaged. Good balance of speed and accuracy. Recommended default.
1211
+ - **4**: Four models. Better accuracy, 2x slower than bagging=2.
1212
+ - **8**: Eight models. Best accuracy, 4x slower. Use for final production models.
1213
+ - Higher bagging = more robust predictions (reduces overfitting), but slower training
1214
+
1215
+ **💻 Use GPU:**
1216
+ - Enable GPU acceleration (requires NVIDIA GPU with 80GB VRAM)
1217
+ - GPU mode: Context size 8192, Bagging 8 (maximum performance)
1218
+ - CPU mode: Context size 2048, Bagging 1 (lightweight, works on any machine)
1219
+ - Leave unchecked unless you have enterprise-grade GPU hardware
1220
+
1221
+ **🔧 Handle Missing Values:**
1222
+ - How to treat empty/null values in your data
1223
+ - **mean**: Replace with column average (good for normally distributed data)
1224
+ - **median**: Replace with column median (better for skewed data, robust to outliers)
1225
+ - **zero**: Replace with 0 (simple, but may introduce bias)
1226
+ - **drop**: Remove rows with missing values (loses data, but preserves original distribution)
1227
+
1228
+ **📏 Normalize Features:**
1229
+ - Scale all numeric features to have mean=0 and std=1
1230
+ - **Enabled**: Recommended when features have very different scales (e.g., age 0-100 vs income 0-1000000)
1231
+ - **Disabled**: Use original feature scales (faster, works when scales are similar)
1232
+ - Normalization helps models converge faster and perform better with mixed-scale features
1233
+ """)
1234
+
1235
+ with gr.Row():
1236
+ playground_task_type = gr.Dropdown(
1237
+ choices=["classification", "regression"],
1238
+ label="Task Type",
1239
+ value="classification",
1240
+ info="Classification: Predict categories (Yes/No, A/B/C). Regression: Predict numbers (price, days, score)"
1241
+ )
1242
+ playground_target_col = gr.Dropdown(
1243
+ choices=[],
1244
+ label="Target Column",
1245
+ value=None,
1246
+ info="The column you want to predict. Auto-selected: last column in dataset"
1247
+ )
1248
+
1249
+ with gr.Row():
1250
+ playground_test_split = gr.Slider(
1251
+ minimum=0.1,
1252
+ maximum=0.5,
1253
+ value=0.2,
1254
+ step=0.05,
1255
+ label="Test Split Ratio",
1256
+ info="Proportion of data for testing (0.2 = 20% test, 80% train). Higher = more validation data, less training data"
1257
+ )
1258
+ playground_max_context = gr.Dropdown(
1259
+ choices=[512, 1024, 2048, 4096, 8192],
1260
+ value=2048,
1261
+ label="Max Context Size",
1262
+ info="How many examples model considers (512=fast/light, 2048=balanced, 8192=best/needs GPU). Larger = better accuracy, more memory"
1263
+ )
1264
+
1265
+ with gr.Row():
1266
+ playground_bagging = gr.Dropdown(
1267
+ choices=[1, 2, 4, 8],
1268
+ value=2,
1269
+ label="Bagging Factor",
1270
+ info="Number of models to combine (1=fast, 2=balanced, 8=best). Higher = more accurate but slower. Reduces overfitting"
1271
+ )
1272
+ playground_use_gpu = gr.Checkbox(
1273
+ label="Use GPU (requires 80GB VRAM)",
1274
+ value=False,
1275
+ info="Enable GPU acceleration. Only check if you have NVIDIA GPU with 80GB memory. Unchecked = CPU mode (works on any machine)"
1276
+ )
1277
+
1278
+ with gr.Row():
1279
+ playground_handle_missing = gr.Dropdown(
1280
+ choices=["mean", "median", "zero", "drop"],
1281
+ value="mean",
1282
+ label="Handle Missing Values",
1283
+ info="How to treat empty cells: mean/median (fill with average), zero (fill with 0), drop (remove rows)"
1284
+ )
1285
+ playground_normalize = gr.Checkbox(
1286
+ label="Normalize Features",
1287
+ value=False,
1288
+ info="Scale all numeric features to same range (mean=0, std=1). Recommended when features have very different scales"
1289
+ )
1290
+
1291
+ gr.Markdown("### Step 3: Train Model")
1292
+ train_playground_btn = gr.Button("🚀 Train Model", variant="primary", size="lg")
1293
+ playground_train_status = gr.Textbox(label="Training Status", interactive=False, lines=6)
1294
+
1295
+ gr.Markdown("### Step 4: Results")
1296
+ playground_results_table = gr.Dataframe(label="Test Predictions (First 100 Rows)")
1297
+ playground_download = gr.File(label="Download Full Results CSV")
1298
+
1299
+ # Connect upload handler
1300
+ def update_playground_components(file):
1301
+ """Update all playground components after upload."""
1302
+ result = handle_playground_upload(file)
1303
+ if len(result) == 7:
1304
+ info, preview, choices, value, task_type, choices2, value2 = result
1305
+ return (
1306
+ info,
1307
+ preview,
1308
+ gr.Dropdown(choices=choices, value=value),
1309
+ task_type,
1310
+ gr.Dropdown(choices=choices2, value=value2)
1311
+ )
1312
+ elif len(result) == 7 and result[2] == []: # Error case
1313
+ return result[0], result[1], gr.Dropdown(choices=[], value=None), result[4], gr.Dropdown(choices=[], value=None)
1314
+ return result
1315
+
1316
+ playground_upload.upload(
1317
+ update_playground_components,
1318
+ inputs=[playground_upload],
1319
+ outputs=[
1320
+ playground_info,
1321
+ playground_preview,
1322
+ playground_target_col,
1323
+ playground_task_type,
1324
+ playground_target_col
1325
+ ]
1326
+ )
1327
+
1328
+ # Connect training handler
1329
+ train_playground_btn.click(
1330
+ train_playground_model,
1331
+ inputs=[
1332
+ playground_task_type,
1333
+ playground_target_col,
1334
+ playground_test_split,
1335
+ playground_max_context,
1336
+ playground_bagging,
1337
+ playground_use_gpu,
1338
+ playground_handle_missing,
1339
+ playground_normalize
1340
+ ],
1341
+ outputs=[
1342
+ playground_train_status,
1343
+ playground_results_table,
1344
+ playground_download,
1345
+ playground_download
1346
+ ]
1347
+ )
1348
+
1349
+ with gr.Accordion("💡 Quick Start Guide", open=False):
1350
+ gr.Markdown("""
1351
+ **Recommended Settings by Use Case:**
1352
+
1353
+ **🚀 Quick Experiment (Fast, Low Memory):**
1354
+ - Task Type: Auto-detect
1355
+ - Test Split: 0.2 (20%)
1356
+ - Max Context: 512
1357
+ - Bagging: 1
1358
+ - GPU: Unchecked
1359
+ - Missing Values: mean
1360
+ - Normalize: Unchecked
1361
+ - *Best for: Trying out the model, small datasets, CPU-only machines*
1362
+
1363
+ **⚖️ Balanced (Recommended Default):**
1364
+ - Task Type: Auto-detect
1365
+ - Test Split: 0.2 (20%)
1366
+ - Max Context: 2048
1367
+ - Bagging: 2
1368
+ - GPU: Unchecked
1369
+ - Missing Values: mean
1370
+ - Normalize: Check if features have very different scales
1371
+ - *Best for: Most production use cases, good accuracy/speed balance*
1372
+
1373
+ **🏆 Maximum Accuracy (Slow, High Memory):**
1374
+ - Task Type: Auto-detect
1375
+ - Test Split: 0.3 (30%)
1376
+ - Max Context: 8192
1377
+ - Bagging: 8
1378
+ - GPU: Checked (requires 80GB GPU)
1379
+ - Missing Values: median (more robust)
1380
+ - Normalize: Checked
1381
+ - *Best for: Final production models, large datasets, when accuracy is critical*
1382
+
1383
+ **📋 Step-by-Step Workflow:**
1384
+ 1. **Upload Dataset**: CSV, Parquet, or JSON file
1385
+ 2. **Review Auto-Detection**: Check if task type and target column are correct
1386
+ 3. **Adjust Parameters**: Use recommended settings above or customize
1387
+ 4. **Train Model**: Click "Train Model" and wait for progress
1388
+ 5. **Review Results**: Check accuracy/metrics and download predictions
1389
+
1390
+ **⚠️ Common Issues:**
1391
+ - **"Unknown label type"**: Target column has wrong data type. Change Task Type or convert target column.
1392
+ - **Out of Memory**: Reduce Max Context Size or Bagging Factor
1393
+ - **Slow Training**: Reduce Bagging Factor or Max Context Size
1394
+ - **Poor Accuracy**: Increase Max Context Size, Bagging Factor, or check data quality
1395
+ """)
1396
+
1397
+ gr.Markdown("""
1398
+ **Playground Features:**
1399
+ - Upload CSV, Parquet, or JSON datasets
1400
+ - Auto-detect task type from filename and target column
1401
+ - Auto-select target column (defaults to last column)
1402
+ - Configure model parameters with detailed guidance
1403
+ - Real-time progress tracking during training
1404
+ - Download results as CSV with predictions
1405
+
1406
+ **Example Use Cases:**
1407
+ - Predictive business outcomes (invoice late payment, days to payment)
1408
+ - Recommendations & auto-defaulting (form of address)
1409
+ - Normalization & coding (country ISO codes)
1410
+ - Data quality & anomaly flags (bank details review)
1411
+ - Derived scores & segments (employee risk of leave)
1412
+ - Matching & linking (material entity matching)
1413
+ - Information extraction (ticket topic classification)
1414
+ """)
1415
+
1416
+
1417
+ if __name__ == "__main__":
1418
+ # Load datasets on startup
1419
+ load_datasets()
1420
+
1421
+ # Launch the app
1422
+ app.launch(share=False, server_name="127.0.0.1", server_port=7862, quiet=False)
data/synthetic_financial_statements.csv ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Period,Statement_Type,Revenue,Cost_of_Goods_Sold,Gross_Profit,Operating_Expenses,EBITDA,Depreciation,EBIT,Interest_Expense,EBT,Tax,Net_Income,Cash,Accounts_Receivable,Inventory,Current_Assets,PPE,Total_Assets,Accounts_Payable,Short_Term_Debt,Current_Liabilities,Long_Term_Debt,Total_Liabilities,Equity
2
+ 2024-01,P&L,687270.06,405587.52,281682.54,346398.79,-64716.25,37959.75,-102676.0,13120.37,-115796.38,-28949.09,-86847.28,162397.81,211616.72,279926.42,653940.95,3803345.04,4457285.99,170807.26,52058.45,222865.71,1969909.85,2192775.56,2264510.43
3
+ 2024-01,P&L,916221.32,405398.45,510822.87,236364.99,274457.87,25502.14,248955.74,16084.84,232870.89,58217.72,174653.17,309902.57,286389.0,193684.37,789975.95,3835558.68,4625534.63,113949.39,79214.46,193163.85,1366361.84,1559525.69,3066008.94
4
+ 2024-03,P&L,728034.99,405541.11,322493.88,239934.76,82559.12,35427.03,47132.09,21848.29,25283.8,6320.95,18962.85,118580.17,321508.97,175578.62,615667.75,2195154.78,2810822.53,194888.55,146563.2,341451.76,1808397.35,2149849.11,660973.43
5
+ 2024-03,P&L,652306.88,273665.19,378641.69,336846.61,41795.09,33204.57,8590.51,12440.76,-3850.25,-962.56,-2887.69,298070.76,206877.7,286398.06,791346.53,2776339.94,3567686.47,166252.23,81171.11,247423.34,1520068.02,1767491.36,1800195.12
6
+ 2024-04,P&L,773355.14,337933.68,435421.46,393916.93,41504.53,43253.98,-1749.46,28789.98,-30539.43,-7634.86,-22904.58,457930.94,319580.0,288281.14,1065792.07,2265477.51,3331269.58,119598.29,54522.73,174121.02,1325330.33,1499451.35,1831818.23
7
+ 2024-05,P&L,694338.64,315417.08,378921.56,365747.5,13174.06,30702.6,-17528.54,15618.69,-33147.23,-8286.81,-24860.42,317078.43,228184.84,270329.55,815592.83,2223651.93,3039244.76,198688.69,127224.48,325913.17,1198715.68,1524628.85,1514615.9
8
+ 2024-06,P&L,502761.06,283100.87,219660.18,341371.47,-121711.28,41870.22,-163581.5,25425.41,-189006.91,-47251.73,-141755.18,129617.86,271693.15,167380.36,568691.37,4589310.28,5158001.64,162329.81,83089.8,245419.62,1063558.35,1308977.97,3849023.68
9
+ 2024-07,P&L,655491.16,304827.42,350663.74,345921.24,4742.5,39126.72,-34384.22,27744.25,-62128.48,-15532.12,-46596.36,288885.97,223918.85,256986.72,769791.54,4282355.15,5052146.68,156127.72,127096.72,283224.44,1493795.6,1777020.03,3275126.65
10
+ 2024-08,P&L,761366.41,369649.64,391716.77,205083.83,186632.95,23236.74,163396.21,10628.58,152767.62,38191.91,114575.72,354564.16,262871.2,226285.6,843720.96,4722699.42,5566420.39,124929.22,91038.29,215967.52,1755551.14,1971518.65,3594901.73
11
+ 2024-09,P&L,614399.08,255218.91,359180.17,257950.29,101229.88,24836.64,76393.24,28593.95,47799.29,11949.82,35849.47,423248.15,326680.75,280719.09,1030647.99,4411016.23,5441664.22,118657.01,139255.9,257912.91,1539342.24,1797255.15,3644409.07
12
+ 2024-10,P&L,903720.08,523451.17,380268.91,263600.69,116668.21,23301.56,93366.65,14558.7,78807.95,19701.99,59105.96,270843.12,363602.95,279109.59,913555.66,2020856.39,2934412.05,151074.73,91741.1,242815.83,1222107.81,1464923.64,1469488.41
13
+ 2024-11,P&L,559932.68,261781.43,298151.26,388581.94,-90430.68,29696.09,-120126.77,20375.81,-140502.58,-35125.65,-105376.94,381207.58,272725.92,295767.31,949700.82,4887341.88,5837042.7,125178.23,99724.85,224903.08,1300878.31,1525781.39,4311261.31
data/synthetic_gl_accounts.csv ADDED
@@ -0,0 +1,1001 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Transaction_ID,Date,Account_Code,Account_Description,Debit,Credit,Balance,Document_Number,Posting_Period
2
+ TXN000001,2024-12-14,210000,Accrued Liabilities,0.0,9253.4,-9253.4,DOC6191,2024-12
3
+ TXN000002,2024-04-12,540000,Marketing Expense,22347.05,0.0,22347.05,DOC5426,2024-04
4
+ TXN000003,2024-03-28,310000,Retained Earnings,0.0,16752.06,-16752.06,DOC9322,2024-03
5
+ TXN000004,2024-09-14,540000,Marketing Expense,36127.74,0.0,36127.74,DOC7949,2024-09
6
+ TXN000005,2024-07-10,110000,Accounts Receivable,49611.36,0.0,49611.36,DOC2184,2024-07
7
+ TXN000006,2024-11-09,320000,Other Equity,0.0,26285.35,-26285.35,DOC9666,2024-11
8
+ TXN000007,2024-07-06,300000,Common Stock,0.0,18381.46,-18381.46,DOC1189,2024-07
9
+ TXN000008,2024-02-20,420000,Interest Income,0.0,19184.85,-19184.85,DOC2267,2024-02
10
+ TXN000009,2024-11-02,120000,Inventory,34047.35,0.0,34047.35,DOC6393,2024-11
11
+ TXN000010,2024-03-29,130000,Prepaid Expenses,48285.04,0.0,48285.04,DOC9433,2024-03
12
+ TXN000011,2024-12-11,230000,Long-term Debt,0.0,4973.84,-4973.84,DOC7235,2024-12
13
+ TXN000012,2024-09-20,420000,Interest Income,0.0,1815.99,-1815.99,DOC4152,2024-09
14
+ TXN000013,2024-02-19,130000,Prepaid Expenses,33159.86,0.0,33159.86,DOC4073,2024-02
15
+ TXN000014,2024-02-23,200000,Accounts Payable,0.0,27380.84,-27380.84,DOC8989,2024-02
16
+ TXN000015,2024-08-05,510000,Salaries and Wages,22542.73,0.0,22542.73,DOC5297,2024-08
17
+ TXN000016,2024-09-26,130000,Prepaid Expenses,36390.87,0.0,36390.87,DOC8629,2024-09
18
+ TXN000017,2024-07-31,220000,Short-term Debt,0.0,19495.0,-19495.0,DOC9529,2024-07
19
+ TXN000018,2024-02-22,420000,Interest Income,0.0,29378.88,-29378.88,DOC5859,2024-02
20
+ TXN000019,2024-02-10,400000,Sales Revenue,0.0,14884.05,-14884.05,DOC1064,2024-02
21
+ TXN000020,2024-01-09,210000,Accrued Liabilities,0.0,38635.01,-38635.01,DOC3027,2024-01
22
+ TXN000021,2024-03-03,220000,Short-term Debt,0.0,40791.53,-40791.53,DOC7736,2024-03
23
+ TXN000022,2024-06-11,220000,Short-term Debt,0.0,39529.76,-39529.76,DOC6892,2024-06
24
+ TXN000023,2024-08-18,300000,Common Stock,0.0,32588.74,-32588.74,DOC4099,2024-08
25
+ TXN000024,2024-07-19,210000,Accrued Liabilities,0.0,31202.58,-31202.58,DOC4104,2024-07
26
+ TXN000025,2024-03-02,430000,Other Income,0.0,16326.65,-16326.65,DOC3731,2024-03
27
+ TXN000026,2024-08-01,220000,Short-term Debt,0.0,44371.92,-44371.92,DOC6056,2024-08
28
+ TXN000027,2024-04-10,120000,Inventory,48588.43,0.0,48588.43,DOC4840,2024-04
29
+ TXN000028,2024-08-05,140000,"Property, Plant & Equipment",11875.65,0.0,11875.65,DOC7938,2024-08
30
+ TXN000029,2024-07-25,230000,Long-term Debt,0.0,21434.3,-21434.3,DOC8721,2024-07
31
+ TXN000030,2024-06-27,400000,Sales Revenue,0.0,1668.32,-1668.32,DOC3790,2024-06
32
+ TXN000031,2024-02-21,500000,Cost of Goods Sold,28207.45,0.0,28207.45,DOC7019,2024-02
33
+ TXN000032,2024-08-18,140000,"Property, Plant & Equipment",20578.11,0.0,20578.11,DOC4242,2024-08
34
+ TXN000033,2024-01-13,130000,Prepaid Expenses,3941.3,0.0,3941.3,DOC4157,2024-01
35
+ TXN000034,2024-06-18,110000,Accounts Receivable,40425.21,0.0,40425.21,DOC3693,2024-06
36
+ TXN000035,2024-02-13,320000,Other Equity,0.0,20883.85,-20883.85,DOC6450,2024-02
37
+ TXN000036,2024-07-08,210000,Accrued Liabilities,0.0,5591.59,-5591.59,DOC2306,2024-07
38
+ TXN000037,2024-08-20,530000,Utilities Expense,15308.58,0.0,15308.58,DOC9901,2024-08
39
+ TXN000038,2024-05-16,220000,Short-term Debt,0.0,24293.02,-24293.02,DOC1663,2024-05
40
+ TXN000039,2024-11-10,420000,Interest Income,0.0,16227.83,-16227.83,DOC2495,2024-11
41
+ TXN000040,2024-06-28,230000,Long-term Debt,0.0,18245.12,-18245.12,DOC7585,2024-06
42
+ TXN000041,2024-09-24,530000,Utilities Expense,12663.94,0.0,12663.94,DOC8554,2024-09
43
+ TXN000042,2024-04-10,500000,Cost of Goods Sold,14313.54,0.0,14313.54,DOC1698,2024-04
44
+ TXN000043,2024-01-02,500000,Cost of Goods Sold,25183.68,0.0,25183.68,DOC1854,2024-01
45
+ TXN000044,2024-08-11,140000,"Property, Plant & Equipment",45422.47,0.0,45422.47,DOC6249,2024-08
46
+ TXN000045,2024-06-20,540000,Marketing Expense,22444.38,0.0,22444.38,DOC6535,2024-06
47
+ TXN000046,2024-07-21,130000,Prepaid Expenses,18545.76,0.0,18545.76,DOC9958,2024-07
48
+ TXN000047,2024-10-06,200000,Accounts Payable,0.0,23568.0,-23568.0,DOC8777,2024-10
49
+ TXN000048,2024-08-27,200000,Accounts Payable,0.0,39937.42,-39937.42,DOC5282,2024-08
50
+ TXN000049,2024-12-14,200000,Accounts Payable,0.0,42932.1,-42932.1,DOC3811,2024-12
51
+ TXN000050,2024-12-11,130000,Prepaid Expenses,25653.44,0.0,25653.44,DOC9338,2024-12
52
+ TXN000051,2024-12-17,530000,Utilities Expense,4899.21,0.0,4899.21,DOC9680,2024-12
53
+ TXN000052,2024-05-07,100000,Cash and Cash Equivalents,25935.79,0.0,25935.79,DOC5736,2024-05
54
+ TXN000053,2024-05-30,310000,Retained Earnings,0.0,27118.25,-27118.25,DOC1262,2024-05
55
+ TXN000054,2024-12-11,430000,Other Income,0.0,49110.2,-49110.2,DOC3049,2024-12
56
+ TXN000055,2024-10-30,100000,Cash and Cash Equivalents,48274.43,0.0,48274.43,DOC5548,2024-10
57
+ TXN000056,2024-06-08,140000,"Property, Plant & Equipment",31691.76,0.0,31691.76,DOC8400,2024-06
58
+ TXN000057,2024-05-26,120000,Inventory,36325.19,0.0,36325.19,DOC2154,2024-05
59
+ TXN000058,2024-05-31,530000,Utilities Expense,20284.96,0.0,20284.96,DOC2648,2024-05
60
+ TXN000059,2024-04-13,220000,Short-term Debt,0.0,30360.81,-30360.81,DOC3557,2024-04
61
+ TXN000060,2024-06-01,120000,Inventory,352.57,0.0,352.57,DOC5973,2024-06
62
+ TXN000061,2024-07-12,510000,Salaries and Wages,34625.57,0.0,34625.57,DOC1956,2024-07
63
+ TXN000062,2024-06-09,230000,Long-term Debt,0.0,1001.96,-1001.96,DOC5493,2024-06
64
+ TXN000063,2024-10-30,540000,Marketing Expense,37349.92,0.0,37349.92,DOC7015,2024-10
65
+ TXN000064,2024-05-14,220000,Short-term Debt,0.0,36074.9,-36074.9,DOC5735,2024-05
66
+ TXN000065,2024-06-24,100000,Cash and Cash Equivalents,4774.37,0.0,4774.37,DOC9050,2024-06
67
+ TXN000066,2024-06-06,410000,Service Revenue,0.0,48653.23,-48653.23,DOC4436,2024-06
68
+ TXN000067,2024-09-20,520000,Rent Expense,31593.82,0.0,31593.82,DOC1225,2024-09
69
+ TXN000068,2024-10-12,540000,Marketing Expense,32290.66,0.0,32290.66,DOC8022,2024-10
70
+ TXN000069,2024-11-12,100000,Cash and Cash Equivalents,25009.75,0.0,25009.75,DOC8683,2024-11
71
+ TXN000070,2024-07-10,120000,Inventory,32309.07,0.0,32309.07,DOC9208,2024-07
72
+ TXN000071,2024-08-07,320000,Other Equity,0.0,23550.23,-23550.23,DOC2069,2024-08
73
+ TXN000072,2024-01-06,540000,Marketing Expense,18570.92,0.0,18570.92,DOC2060,2024-01
74
+ TXN000073,2024-10-28,500000,Cost of Goods Sold,48336.08,0.0,48336.08,DOC4170,2024-10
75
+ TXN000074,2024-04-25,100000,Cash and Cash Equivalents,14793.0,0.0,14793.0,DOC1980,2024-04
76
+ TXN000075,2024-09-12,100000,Cash and Cash Equivalents,24315.47,0.0,24315.47,DOC2816,2024-09
77
+ TXN000076,2024-08-10,300000,Common Stock,0.0,42226.24,-42226.24,DOC6442,2024-08
78
+ TXN000077,2024-06-22,220000,Short-term Debt,0.0,4949.11,-4949.11,DOC8455,2024-06
79
+ TXN000078,2024-12-07,420000,Interest Income,0.0,17996.47,-17996.47,DOC8806,2024-12
80
+ TXN000079,2024-09-29,300000,Common Stock,0.0,42448.62,-42448.62,DOC8560,2024-09
81
+ TXN000080,2024-09-02,310000,Retained Earnings,0.0,18038.61,-18038.61,DOC6596,2024-09
82
+ TXN000081,2024-09-03,300000,Common Stock,0.0,21047.06,-21047.06,DOC2841,2024-09
83
+ TXN000082,2024-11-11,400000,Sales Revenue,0.0,25615.99,-25615.99,DOC8992,2024-11
84
+ TXN000083,2024-06-21,130000,Prepaid Expenses,9794.27,0.0,9794.27,DOC7655,2024-06
85
+ TXN000084,2024-05-21,410000,Service Revenue,0.0,44511.27,-44511.27,DOC7614,2024-05
86
+ TXN000085,2024-04-01,420000,Interest Income,0.0,28985.36,-28985.36,DOC6919,2024-04
87
+ TXN000086,2024-06-01,520000,Rent Expense,7836.58,0.0,7836.58,DOC2148,2024-06
88
+ TXN000087,2024-06-28,500000,Cost of Goods Sold,2037.85,0.0,2037.85,DOC4854,2024-06
89
+ TXN000088,2024-04-10,310000,Retained Earnings,0.0,26159.94,-26159.94,DOC4124,2024-04
90
+ TXN000089,2024-04-17,320000,Other Equity,0.0,31182.23,-31182.23,DOC6315,2024-04
91
+ TXN000090,2024-12-30,200000,Accounts Payable,0.0,9799.56,-9799.56,DOC5142,2024-12
92
+ TXN000091,2024-11-06,120000,Inventory,7003.82,0.0,7003.82,DOC7799,2024-11
93
+ TXN000092,2024-05-03,400000,Sales Revenue,0.0,35758.3,-35758.3,DOC5752,2024-05
94
+ TXN000093,2024-04-01,520000,Rent Expense,37227.73,0.0,37227.73,DOC9932,2024-04
95
+ TXN000094,2024-11-13,540000,Marketing Expense,41815.41,0.0,41815.41,DOC8560,2024-11
96
+ TXN000095,2024-05-08,320000,Other Equity,0.0,8747.39,-8747.39,DOC1512,2024-05
97
+ TXN000096,2024-10-16,420000,Interest Income,0.0,12065.39,-12065.39,DOC6237,2024-10
98
+ TXN000097,2024-03-29,430000,Other Income,0.0,33043.85,-33043.85,DOC4343,2024-03
99
+ TXN000098,2024-07-10,210000,Accrued Liabilities,0.0,27762.27,-27762.27,DOC8004,2024-07
100
+ TXN000099,2024-03-16,120000,Inventory,28345.26,0.0,28345.26,DOC4506,2024-03
101
+ TXN000100,2024-03-26,140000,"Property, Plant & Equipment",818.24,0.0,818.24,DOC6188,2024-03
102
+ TXN000101,2024-04-03,420000,Interest Income,0.0,42787.48,-42787.48,DOC7617,2024-04
103
+ TXN000102,2024-12-06,430000,Other Income,0.0,23726.24,-23726.24,DOC8421,2024-12
104
+ TXN000103,2024-01-23,140000,"Property, Plant & Equipment",2498.14,0.0,2498.14,DOC3849,2024-01
105
+ TXN000104,2024-08-10,530000,Utilities Expense,863.7,0.0,863.7,DOC3489,2024-08
106
+ TXN000105,2024-11-20,100000,Cash and Cash Equivalents,34229.79,0.0,34229.79,DOC3839,2024-11
107
+ TXN000106,2024-09-03,430000,Other Income,0.0,47218.15,-47218.15,DOC7303,2024-09
108
+ TXN000107,2024-05-31,530000,Utilities Expense,33890.7,0.0,33890.7,DOC3427,2024-05
109
+ TXN000108,2024-06-27,100000,Cash and Cash Equivalents,41049.91,0.0,41049.91,DOC6387,2024-06
110
+ TXN000109,2024-03-05,120000,Inventory,48063.41,0.0,48063.41,DOC4913,2024-03
111
+ TXN000110,2024-02-13,310000,Retained Earnings,0.0,13770.66,-13770.66,DOC5107,2024-02
112
+ TXN000111,2024-09-09,410000,Service Revenue,0.0,4812.7,-4812.7,DOC3082,2024-09
113
+ TXN000112,2024-03-30,500000,Cost of Goods Sold,16016.88,0.0,16016.88,DOC1417,2024-03
114
+ TXN000113,2024-04-14,520000,Rent Expense,24852.27,0.0,24852.27,DOC1825,2024-04
115
+ TXN000114,2024-04-23,540000,Marketing Expense,31484.25,0.0,31484.25,DOC1412,2024-04
116
+ TXN000115,2024-08-04,130000,Prepaid Expenses,40193.7,0.0,40193.7,DOC9867,2024-08
117
+ TXN000116,2024-12-22,300000,Common Stock,0.0,37555.68,-37555.68,DOC3786,2024-12
118
+ TXN000117,2024-04-08,500000,Cost of Goods Sold,20689.62,0.0,20689.62,DOC6073,2024-04
119
+ TXN000118,2024-04-05,500000,Cost of Goods Sold,17106.1,0.0,17106.1,DOC8357,2024-04
120
+ TXN000119,2024-09-24,140000,"Property, Plant & Equipment",21506.8,0.0,21506.8,DOC6644,2024-09
121
+ TXN000120,2024-12-26,120000,Inventory,18948.67,0.0,18948.67,DOC9787,2024-12
122
+ TXN000121,2024-08-04,430000,Other Income,0.0,16070.48,-16070.48,DOC1698,2024-08
123
+ TXN000122,2024-06-25,520000,Rent Expense,2768.92,0.0,2768.92,DOC8400,2024-06
124
+ TXN000123,2024-03-16,520000,Rent Expense,17809.77,0.0,17809.77,DOC1717,2024-03
125
+ TXN000124,2024-12-04,530000,Utilities Expense,24701.98,0.0,24701.98,DOC9335,2024-12
126
+ TXN000125,2024-03-09,540000,Marketing Expense,14731.22,0.0,14731.22,DOC8192,2024-03
127
+ TXN000126,2024-02-22,530000,Utilities Expense,39599.79,0.0,39599.79,DOC2062,2024-02
128
+ TXN000127,2024-06-29,400000,Sales Revenue,0.0,24771.57,-24771.57,DOC7541,2024-06
129
+ TXN000128,2024-06-11,140000,"Property, Plant & Equipment",44396.44,0.0,44396.44,DOC5330,2024-06
130
+ TXN000129,2024-05-25,310000,Retained Earnings,0.0,48435.73,-48435.73,DOC8241,2024-05
131
+ TXN000130,2024-09-09,320000,Other Equity,0.0,41940.19,-41940.19,DOC6293,2024-09
132
+ TXN000131,2024-06-16,400000,Sales Revenue,0.0,3730.87,-3730.87,DOC7938,2024-06
133
+ TXN000132,2024-01-05,110000,Accounts Receivable,25714.98,0.0,25714.98,DOC6541,2024-01
134
+ TXN000133,2024-05-15,520000,Rent Expense,18776.11,0.0,18776.11,DOC2365,2024-05
135
+ TXN000134,2024-05-24,530000,Utilities Expense,47367.7,0.0,47367.7,DOC5312,2024-05
136
+ TXN000135,2024-05-11,400000,Sales Revenue,0.0,17575.89,-17575.89,DOC8419,2024-05
137
+ TXN000136,2024-12-29,520000,Rent Expense,27964.37,0.0,27964.37,DOC5186,2024-12
138
+ TXN000137,2024-12-11,300000,Common Stock,0.0,16579.6,-16579.6,DOC5268,2024-12
139
+ TXN000138,2024-08-29,400000,Sales Revenue,0.0,23486.17,-23486.17,DOC7619,2024-08
140
+ TXN000139,2024-11-12,220000,Short-term Debt,0.0,41157.24,-41157.24,DOC4072,2024-11
141
+ TXN000140,2024-12-13,120000,Inventory,48112.41,0.0,48112.41,DOC2214,2024-12
142
+ TXN000141,2024-11-07,500000,Cost of Goods Sold,26465.67,0.0,26465.67,DOC1133,2024-11
143
+ TXN000142,2024-06-21,320000,Other Equity,0.0,48496.95,-48496.95,DOC2852,2024-06
144
+ TXN000143,2024-05-28,420000,Interest Income,0.0,2265.7,-2265.7,DOC6348,2024-05
145
+ TXN000144,2024-08-14,130000,Prepaid Expenses,34801.02,0.0,34801.02,DOC7190,2024-08
146
+ TXN000145,2024-10-31,230000,Long-term Debt,0.0,34817.86,-34817.86,DOC4486,2024-10
147
+ TXN000146,2024-02-23,100000,Cash and Cash Equivalents,29257.28,0.0,29257.28,DOC3703,2024-02
148
+ TXN000147,2024-01-12,310000,Retained Earnings,0.0,47939.25,-47939.25,DOC6063,2024-01
149
+ TXN000148,2024-06-04,200000,Accounts Payable,0.0,16849.44,-16849.44,DOC7819,2024-06
150
+ TXN000149,2024-07-04,220000,Short-term Debt,0.0,11546.8,-11546.8,DOC1539,2024-07
151
+ TXN000150,2024-02-10,140000,"Property, Plant & Equipment",13071.5,0.0,13071.5,DOC7042,2024-02
152
+ TXN000151,2024-07-19,500000,Cost of Goods Sold,15545.43,0.0,15545.43,DOC8891,2024-07
153
+ TXN000152,2024-08-07,400000,Sales Revenue,0.0,13620.79,-13620.79,DOC2581,2024-08
154
+ TXN000153,2024-09-09,120000,Inventory,47032.54,0.0,47032.54,DOC8026,2024-09
155
+ TXN000154,2024-10-29,140000,"Property, Plant & Equipment",45966.91,0.0,45966.91,DOC1009,2024-10
156
+ TXN000155,2024-09-07,510000,Salaries and Wages,2356.41,0.0,2356.41,DOC2015,2024-09
157
+ TXN000156,2024-03-05,100000,Cash and Cash Equivalents,24070.47,0.0,24070.47,DOC8449,2024-03
158
+ TXN000157,2024-04-07,500000,Cost of Goods Sold,1937.41,0.0,1937.41,DOC9702,2024-04
159
+ TXN000158,2024-11-06,100000,Cash and Cash Equivalents,43249.65,0.0,43249.65,DOC3000,2024-11
160
+ TXN000159,2024-12-16,140000,"Property, Plant & Equipment",37520.55,0.0,37520.55,DOC2460,2024-12
161
+ TXN000160,2024-02-22,140000,"Property, Plant & Equipment",47243.81,0.0,47243.81,DOC5178,2024-02
162
+ TXN000161,2024-03-25,500000,Cost of Goods Sold,22582.15,0.0,22582.15,DOC6997,2024-03
163
+ TXN000162,2024-02-20,100000,Cash and Cash Equivalents,13809.12,0.0,13809.12,DOC8939,2024-02
164
+ TXN000163,2024-10-14,100000,Cash and Cash Equivalents,2440.13,0.0,2440.13,DOC8239,2024-10
165
+ TXN000164,2024-06-02,210000,Accrued Liabilities,0.0,24958.44,-24958.44,DOC1770,2024-06
166
+ TXN000165,2024-09-24,510000,Salaries and Wages,40837.65,0.0,40837.65,DOC9427,2024-09
167
+ TXN000166,2024-08-09,140000,"Property, Plant & Equipment",39611.71,0.0,39611.71,DOC7544,2024-08
168
+ TXN000167,2024-09-11,430000,Other Income,0.0,1536.26,-1536.26,DOC2252,2024-09
169
+ TXN000168,2024-03-06,540000,Marketing Expense,40271.73,0.0,40271.73,DOC7881,2024-03
170
+ TXN000169,2024-11-01,200000,Accounts Payable,0.0,29536.89,-29536.89,DOC7941,2024-11
171
+ TXN000170,2024-12-12,420000,Interest Income,0.0,4641.0,-4641.0,DOC2331,2024-12
172
+ TXN000171,2024-11-30,200000,Accounts Payable,0.0,19887.48,-19887.48,DOC5854,2024-11
173
+ TXN000172,2024-02-20,300000,Common Stock,0.0,34912.33,-34912.33,DOC5892,2024-02
174
+ TXN000173,2024-05-17,130000,Prepaid Expenses,46336.72,0.0,46336.72,DOC6449,2024-05
175
+ TXN000174,2024-12-05,500000,Cost of Goods Sold,23010.87,0.0,23010.87,DOC8941,2024-12
176
+ TXN000175,2024-07-23,540000,Marketing Expense,10535.63,0.0,10535.63,DOC2906,2024-07
177
+ TXN000176,2024-09-05,420000,Interest Income,0.0,23059.95,-23059.95,DOC7238,2024-09
178
+ TXN000177,2024-01-08,310000,Retained Earnings,0.0,9085.36,-9085.36,DOC9472,2024-01
179
+ TXN000178,2024-12-17,120000,Inventory,23750.69,0.0,23750.69,DOC5188,2024-12
180
+ TXN000179,2024-03-01,510000,Salaries and Wages,9695.22,0.0,9695.22,DOC8570,2024-03
181
+ TXN000180,2024-01-05,540000,Marketing Expense,17319.62,0.0,17319.62,DOC5777,2024-01
182
+ TXN000181,2024-11-21,540000,Marketing Expense,6119.73,0.0,6119.73,DOC7376,2024-11
183
+ TXN000182,2024-12-11,320000,Other Equity,0.0,44721.44,-44721.44,DOC8240,2024-12
184
+ TXN000183,2024-04-30,420000,Interest Income,0.0,34420.46,-34420.46,DOC7493,2024-04
185
+ TXN000184,2024-11-14,310000,Retained Earnings,0.0,18926.57,-18926.57,DOC5432,2024-11
186
+ TXN000185,2024-09-13,130000,Prepaid Expenses,4317.4,0.0,4317.4,DOC2276,2024-09
187
+ TXN000186,2024-07-25,530000,Utilities Expense,26875.87,0.0,26875.87,DOC1055,2024-07
188
+ TXN000187,2024-01-28,410000,Service Revenue,0.0,18508.79,-18508.79,DOC1364,2024-01
189
+ TXN000188,2024-07-05,410000,Service Revenue,0.0,12696.6,-12696.6,DOC6126,2024-07
190
+ TXN000189,2024-04-20,120000,Inventory,42237.59,0.0,42237.59,DOC7506,2024-04
191
+ TXN000190,2024-09-30,420000,Interest Income,0.0,22425.88,-22425.88,DOC7882,2024-09
192
+ TXN000191,2024-01-15,520000,Rent Expense,5332.97,0.0,5332.97,DOC6750,2024-01
193
+ TXN000192,2024-01-28,140000,"Property, Plant & Equipment",1101.55,0.0,1101.55,DOC2976,2024-01
194
+ TXN000193,2024-08-18,500000,Cost of Goods Sold,4551.3,0.0,4551.3,DOC1125,2024-08
195
+ TXN000194,2024-01-25,320000,Other Equity,0.0,44537.31,-44537.31,DOC7168,2024-01
196
+ TXN000195,2024-03-07,130000,Prepaid Expenses,32476.26,0.0,32476.26,DOC7371,2024-03
197
+ TXN000196,2024-02-03,420000,Interest Income,0.0,27931.34,-27931.34,DOC7891,2024-02
198
+ TXN000197,2024-02-11,520000,Rent Expense,14260.42,0.0,14260.42,DOC3739,2024-02
199
+ TXN000198,2024-11-10,110000,Accounts Receivable,49327.11,0.0,49327.11,DOC4812,2024-11
200
+ TXN000199,2024-05-29,100000,Cash and Cash Equivalents,11344.11,0.0,11344.11,DOC2605,2024-05
201
+ TXN000200,2024-01-04,430000,Other Income,0.0,42555.79,-42555.79,DOC4517,2024-01
202
+ TXN000201,2024-09-03,230000,Long-term Debt,0.0,2676.61,-2676.61,DOC3590,2024-09
203
+ TXN000202,2024-08-16,220000,Short-term Debt,0.0,49120.69,-49120.69,DOC6342,2024-08
204
+ TXN000203,2024-11-17,200000,Accounts Payable,0.0,28842.32,-28842.32,DOC9195,2024-11
205
+ TXN000204,2024-05-13,420000,Interest Income,0.0,48755.85,-48755.85,DOC3551,2024-05
206
+ TXN000205,2024-03-02,200000,Accounts Payable,0.0,46475.86,-46475.86,DOC1846,2024-03
207
+ TXN000206,2024-01-26,310000,Retained Earnings,0.0,14070.96,-14070.96,DOC7469,2024-01
208
+ TXN000207,2024-10-01,130000,Prepaid Expenses,10055.4,0.0,10055.4,DOC5208,2024-10
209
+ TXN000208,2024-02-16,320000,Other Equity,0.0,35390.78,-35390.78,DOC2828,2024-02
210
+ TXN000209,2024-12-21,310000,Retained Earnings,0.0,16100.05,-16100.05,DOC4744,2024-12
211
+ TXN000210,2024-06-26,200000,Accounts Payable,0.0,22767.97,-22767.97,DOC1260,2024-06
212
+ TXN000211,2024-06-20,300000,Common Stock,0.0,10166.35,-10166.35,DOC6287,2024-06
213
+ TXN000212,2024-03-24,110000,Accounts Receivable,12806.57,0.0,12806.57,DOC3832,2024-03
214
+ TXN000213,2024-02-07,230000,Long-term Debt,0.0,20650.86,-20650.86,DOC8984,2024-02
215
+ TXN000214,2024-11-13,140000,"Property, Plant & Equipment",37324.13,0.0,37324.13,DOC2908,2024-11
216
+ TXN000215,2024-05-16,310000,Retained Earnings,0.0,10329.59,-10329.59,DOC9162,2024-05
217
+ TXN000216,2024-01-01,120000,Inventory,37081.92,0.0,37081.92,DOC6951,2024-01
218
+ TXN000217,2024-09-23,220000,Short-term Debt,0.0,39783.84,-39783.84,DOC7413,2024-09
219
+ TXN000218,2024-07-31,120000,Inventory,9401.61,0.0,9401.61,DOC3898,2024-07
220
+ TXN000219,2024-03-02,410000,Service Revenue,0.0,18005.64,-18005.64,DOC2065,2024-03
221
+ TXN000220,2024-10-22,510000,Salaries and Wages,22652.24,0.0,22652.24,DOC7943,2024-10
222
+ TXN000221,2024-05-04,520000,Rent Expense,15138.76,0.0,15138.76,DOC6142,2024-05
223
+ TXN000222,2024-06-01,420000,Interest Income,0.0,17832.59,-17832.59,DOC5033,2024-06
224
+ TXN000223,2024-11-04,410000,Service Revenue,0.0,45332.96,-45332.96,DOC5018,2024-11
225
+ TXN000224,2024-07-16,210000,Accrued Liabilities,0.0,46997.62,-46997.62,DOC2202,2024-07
226
+ TXN000225,2024-02-11,220000,Short-term Debt,0.0,7049.68,-7049.68,DOC6742,2024-02
227
+ TXN000226,2024-08-18,100000,Cash and Cash Equivalents,28700.23,0.0,28700.23,DOC3204,2024-08
228
+ TXN000227,2024-04-06,200000,Accounts Payable,0.0,35378.33,-35378.33,DOC1950,2024-04
229
+ TXN000228,2024-09-10,100000,Cash and Cash Equivalents,10306.78,0.0,10306.78,DOC5612,2024-09
230
+ TXN000229,2024-12-18,300000,Common Stock,0.0,5235.51,-5235.51,DOC7028,2024-12
231
+ TXN000230,2024-08-15,420000,Interest Income,0.0,22904.31,-22904.31,DOC8863,2024-08
232
+ TXN000231,2024-06-05,420000,Interest Income,0.0,27039.05,-27039.05,DOC3371,2024-06
233
+ TXN000232,2024-06-21,320000,Other Equity,0.0,36029.82,-36029.82,DOC1094,2024-06
234
+ TXN000233,2024-08-30,520000,Rent Expense,28318.87,0.0,28318.87,DOC1793,2024-08
235
+ TXN000234,2024-10-09,310000,Retained Earnings,0.0,17350.23,-17350.23,DOC7166,2024-10
236
+ TXN000235,2024-12-11,420000,Interest Income,0.0,47369.44,-47369.44,DOC3443,2024-12
237
+ TXN000236,2024-04-13,400000,Sales Revenue,0.0,25343.85,-25343.85,DOC1984,2024-04
238
+ TXN000237,2024-04-20,100000,Cash and Cash Equivalents,36332.17,0.0,36332.17,DOC4531,2024-04
239
+ TXN000238,2024-12-21,320000,Other Equity,0.0,45945.65,-45945.65,DOC4876,2024-12
240
+ TXN000239,2024-05-06,220000,Short-term Debt,0.0,7711.7,-7711.7,DOC9795,2024-05
241
+ TXN000240,2024-02-20,230000,Long-term Debt,0.0,36848.57,-36848.57,DOC4368,2024-02
242
+ TXN000241,2024-09-13,310000,Retained Earnings,0.0,5750.58,-5750.58,DOC4476,2024-09
243
+ TXN000242,2024-06-30,410000,Service Revenue,0.0,41890.79,-41890.79,DOC4072,2024-06
244
+ TXN000243,2024-05-28,520000,Rent Expense,19027.35,0.0,19027.35,DOC9393,2024-05
245
+ TXN000244,2024-11-08,530000,Utilities Expense,331.14,0.0,331.14,DOC8970,2024-11
246
+ TXN000245,2024-01-25,530000,Utilities Expense,43189.56,0.0,43189.56,DOC8973,2024-01
247
+ TXN000246,2024-07-28,110000,Accounts Receivable,24093.77,0.0,24093.77,DOC7490,2024-07
248
+ TXN000247,2024-05-07,500000,Cost of Goods Sold,11307.78,0.0,11307.78,DOC5971,2024-05
249
+ TXN000248,2024-06-30,520000,Rent Expense,8901.71,0.0,8901.71,DOC2990,2024-06
250
+ TXN000249,2024-07-16,530000,Utilities Expense,1790.57,0.0,1790.57,DOC7320,2024-07
251
+ TXN000250,2024-05-29,310000,Retained Earnings,0.0,11082.85,-11082.85,DOC6588,2024-05
252
+ TXN000251,2024-12-02,500000,Cost of Goods Sold,48057.41,0.0,48057.41,DOC1688,2024-12
253
+ TXN000252,2024-04-27,530000,Utilities Expense,43045.54,0.0,43045.54,DOC6182,2024-04
254
+ TXN000253,2024-02-18,220000,Short-term Debt,0.0,15049.84,-15049.84,DOC2759,2024-02
255
+ TXN000254,2024-08-02,400000,Sales Revenue,0.0,21396.77,-21396.77,DOC1951,2024-08
256
+ TXN000255,2024-11-13,520000,Rent Expense,10336.47,0.0,10336.47,DOC5524,2024-11
257
+ TXN000256,2024-01-19,430000,Other Income,0.0,3378.86,-3378.86,DOC6490,2024-01
258
+ TXN000257,2024-07-12,420000,Interest Income,0.0,26769.35,-26769.35,DOC6232,2024-07
259
+ TXN000258,2024-08-09,510000,Salaries and Wages,28026.05,0.0,28026.05,DOC5926,2024-08
260
+ TXN000259,2024-09-20,130000,Prepaid Expenses,43103.1,0.0,43103.1,DOC9038,2024-09
261
+ TXN000260,2024-10-14,120000,Inventory,13687.86,0.0,13687.86,DOC7305,2024-10
262
+ TXN000261,2024-03-27,100000,Cash and Cash Equivalents,48948.68,0.0,48948.68,DOC4462,2024-03
263
+ TXN000262,2024-11-16,220000,Short-term Debt,0.0,27630.96,-27630.96,DOC6954,2024-11
264
+ TXN000263,2024-02-23,220000,Short-term Debt,0.0,17029.64,-17029.64,DOC4300,2024-02
265
+ TXN000264,2024-02-20,120000,Inventory,32672.03,0.0,32672.03,DOC4054,2024-02
266
+ TXN000265,2024-10-17,220000,Short-term Debt,0.0,12234.29,-12234.29,DOC3538,2024-10
267
+ TXN000266,2024-06-13,430000,Other Income,0.0,7139.98,-7139.98,DOC6005,2024-06
268
+ TXN000267,2024-01-07,430000,Other Income,0.0,31698.71,-31698.71,DOC3198,2024-01
269
+ TXN000268,2024-05-26,540000,Marketing Expense,6226.57,0.0,6226.57,DOC2308,2024-05
270
+ TXN000269,2024-01-02,510000,Salaries and Wages,45540.14,0.0,45540.14,DOC7852,2024-01
271
+ TXN000270,2024-01-11,530000,Utilities Expense,13045.23,0.0,13045.23,DOC2409,2024-01
272
+ TXN000271,2024-04-28,120000,Inventory,13476.38,0.0,13476.38,DOC1804,2024-04
273
+ TXN000272,2024-09-12,200000,Accounts Payable,0.0,27647.15,-27647.15,DOC8083,2024-09
274
+ TXN000273,2024-12-07,120000,Inventory,39009.96,0.0,39009.96,DOC3679,2024-12
275
+ TXN000274,2024-08-02,410000,Service Revenue,0.0,40012.78,-40012.78,DOC3768,2024-08
276
+ TXN000275,2024-04-24,510000,Salaries and Wages,25671.64,0.0,25671.64,DOC3599,2024-04
277
+ TXN000276,2024-08-24,110000,Accounts Receivable,20187.25,0.0,20187.25,DOC8368,2024-08
278
+ TXN000277,2024-01-04,310000,Retained Earnings,0.0,6700.58,-6700.58,DOC9996,2024-01
279
+ TXN000278,2024-11-21,310000,Retained Earnings,0.0,45723.51,-45723.51,DOC6475,2024-11
280
+ TXN000279,2024-02-03,230000,Long-term Debt,0.0,27753.48,-27753.48,DOC8141,2024-02
281
+ TXN000280,2024-03-27,320000,Other Equity,0.0,5418.28,-5418.28,DOC1341,2024-03
282
+ TXN000281,2024-01-27,540000,Marketing Expense,45010.93,0.0,45010.93,DOC1645,2024-01
283
+ TXN000282,2024-04-07,220000,Short-term Debt,0.0,30065.79,-30065.79,DOC7136,2024-04
284
+ TXN000283,2024-06-21,540000,Marketing Expense,41921.54,0.0,41921.54,DOC4028,2024-06
285
+ TXN000284,2024-03-04,410000,Service Revenue,0.0,17758.18,-17758.18,DOC6941,2024-03
286
+ TXN000285,2024-07-11,310000,Retained Earnings,0.0,4231.65,-4231.65,DOC6490,2024-07
287
+ TXN000286,2024-09-23,540000,Marketing Expense,14505.82,0.0,14505.82,DOC8679,2024-09
288
+ TXN000287,2024-04-22,130000,Prepaid Expenses,36104.49,0.0,36104.49,DOC2333,2024-04
289
+ TXN000288,2024-02-24,110000,Accounts Receivable,33217.19,0.0,33217.19,DOC5853,2024-02
290
+ TXN000289,2024-11-07,140000,"Property, Plant & Equipment",10825.52,0.0,10825.52,DOC8715,2024-11
291
+ TXN000290,2024-05-27,420000,Interest Income,0.0,8184.49,-8184.49,DOC8101,2024-05
292
+ TXN000291,2024-07-19,400000,Sales Revenue,0.0,38568.52,-38568.52,DOC2524,2024-07
293
+ TXN000292,2024-07-19,230000,Long-term Debt,0.0,17641.85,-17641.85,DOC6760,2024-07
294
+ TXN000293,2024-04-13,310000,Retained Earnings,0.0,21797.88,-21797.88,DOC8970,2024-04
295
+ TXN000294,2024-08-16,120000,Inventory,216.74,0.0,216.74,DOC4549,2024-08
296
+ TXN000295,2024-12-19,200000,Accounts Payable,0.0,5244.38,-5244.38,DOC5090,2024-12
297
+ TXN000296,2024-01-17,500000,Cost of Goods Sold,47516.84,0.0,47516.84,DOC8982,2024-01
298
+ TXN000297,2024-11-13,320000,Other Equity,0.0,47912.72,-47912.72,DOC1338,2024-11
299
+ TXN000298,2024-05-28,220000,Short-term Debt,0.0,37975.89,-37975.89,DOC6604,2024-05
300
+ TXN000299,2024-07-16,430000,Other Income,0.0,49030.78,-49030.78,DOC7609,2024-07
301
+ TXN000300,2024-05-22,320000,Other Equity,0.0,34689.44,-34689.44,DOC9680,2024-05
302
+ TXN000301,2024-01-26,400000,Sales Revenue,0.0,2067.4,-2067.4,DOC5873,2024-01
303
+ TXN000302,2024-07-17,430000,Other Income,0.0,49967.74,-49967.74,DOC6913,2024-07
304
+ TXN000303,2024-03-26,540000,Marketing Expense,45782.87,0.0,45782.87,DOC5430,2024-03
305
+ TXN000304,2024-01-07,540000,Marketing Expense,14937.72,0.0,14937.72,DOC9007,2024-01
306
+ TXN000305,2024-11-10,510000,Salaries and Wages,47218.9,0.0,47218.9,DOC7737,2024-11
307
+ TXN000306,2024-04-12,530000,Utilities Expense,1946.68,0.0,1946.68,DOC4223,2024-04
308
+ TXN000307,2024-04-17,120000,Inventory,6116.29,0.0,6116.29,DOC1130,2024-04
309
+ TXN000308,2024-06-19,140000,"Property, Plant & Equipment",17059.76,0.0,17059.76,DOC5278,2024-06
310
+ TXN000309,2024-02-08,320000,Other Equity,0.0,15832.99,-15832.99,DOC7640,2024-02
311
+ TXN000310,2024-12-14,130000,Prepaid Expenses,33116.59,0.0,33116.59,DOC8564,2024-12
312
+ TXN000311,2024-06-09,510000,Salaries and Wages,44310.29,0.0,44310.29,DOC9502,2024-06
313
+ TXN000312,2024-06-18,120000,Inventory,49518.03,0.0,49518.03,DOC5346,2024-06
314
+ TXN000313,2024-05-20,400000,Sales Revenue,0.0,19259.8,-19259.8,DOC4810,2024-05
315
+ TXN000314,2024-10-28,210000,Accrued Liabilities,0.0,17600.52,-17600.52,DOC3032,2024-10
316
+ TXN000315,2024-08-23,540000,Marketing Expense,31412.52,0.0,31412.52,DOC4511,2024-08
317
+ TXN000316,2024-08-26,320000,Other Equity,0.0,19974.54,-19974.54,DOC8069,2024-08
318
+ TXN000317,2024-12-05,210000,Accrued Liabilities,0.0,36905.36,-36905.36,DOC4760,2024-12
319
+ TXN000318,2024-05-21,120000,Inventory,14920.44,0.0,14920.44,DOC3033,2024-05
320
+ TXN000319,2024-05-25,130000,Prepaid Expenses,11757.03,0.0,11757.03,DOC8832,2024-05
321
+ TXN000320,2024-07-11,430000,Other Income,0.0,45525.92,-45525.92,DOC3632,2024-07
322
+ TXN000321,2024-10-31,420000,Interest Income,0.0,19642.34,-19642.34,DOC2828,2024-10
323
+ TXN000322,2024-07-16,140000,"Property, Plant & Equipment",49118.29,0.0,49118.29,DOC8486,2024-07
324
+ TXN000323,2024-12-09,410000,Service Revenue,0.0,23423.34,-23423.34,DOC2868,2024-12
325
+ TXN000324,2024-06-01,110000,Accounts Receivable,37193.31,0.0,37193.31,DOC6690,2024-06
326
+ TXN000325,2024-05-27,220000,Short-term Debt,0.0,41907.5,-41907.5,DOC6429,2024-05
327
+ TXN000326,2024-08-30,540000,Marketing Expense,25683.16,0.0,25683.16,DOC8274,2024-08
328
+ TXN000327,2024-11-08,110000,Accounts Receivable,11102.26,0.0,11102.26,DOC7402,2024-11
329
+ TXN000328,2024-01-05,200000,Accounts Payable,0.0,2986.35,-2986.35,DOC8214,2024-01
330
+ TXN000329,2024-01-09,500000,Cost of Goods Sold,46394.84,0.0,46394.84,DOC2913,2024-01
331
+ TXN000330,2024-03-01,500000,Cost of Goods Sold,13085.65,0.0,13085.65,DOC3466,2024-03
332
+ TXN000331,2024-12-03,510000,Salaries and Wages,34831.43,0.0,34831.43,DOC9194,2024-12
333
+ TXN000332,2024-09-25,120000,Inventory,11268.5,0.0,11268.5,DOC5675,2024-09
334
+ TXN000333,2024-12-22,410000,Service Revenue,0.0,4665.19,-4665.19,DOC2640,2024-12
335
+ TXN000334,2024-05-02,120000,Inventory,6562.79,0.0,6562.79,DOC2218,2024-05
336
+ TXN000335,2024-11-27,110000,Accounts Receivable,1867.58,0.0,1867.58,DOC1954,2024-11
337
+ TXN000336,2024-05-03,110000,Accounts Receivable,18697.16,0.0,18697.16,DOC6370,2024-05
338
+ TXN000337,2024-06-24,140000,"Property, Plant & Equipment",24844.2,0.0,24844.2,DOC9228,2024-06
339
+ TXN000338,2024-10-10,430000,Other Income,0.0,3898.93,-3898.93,DOC6233,2024-10
340
+ TXN000339,2024-10-27,220000,Short-term Debt,0.0,24081.27,-24081.27,DOC3396,2024-10
341
+ TXN000340,2024-07-04,520000,Rent Expense,28608.82,0.0,28608.82,DOC7183,2024-07
342
+ TXN000341,2024-08-24,400000,Sales Revenue,0.0,36722.1,-36722.1,DOC5311,2024-08
343
+ TXN000342,2024-12-01,520000,Rent Expense,32956.75,0.0,32956.75,DOC2704,2024-12
344
+ TXN000343,2024-12-28,400000,Sales Revenue,0.0,12010.63,-12010.63,DOC5286,2024-12
345
+ TXN000344,2024-07-06,200000,Accounts Payable,0.0,8014.39,-8014.39,DOC1556,2024-07
346
+ TXN000345,2024-01-31,520000,Rent Expense,41308.26,0.0,41308.26,DOC8561,2024-01
347
+ TXN000346,2024-06-06,310000,Retained Earnings,0.0,45444.2,-45444.2,DOC3403,2024-06
348
+ TXN000347,2024-07-24,110000,Accounts Receivable,37856.13,0.0,37856.13,DOC1294,2024-07
349
+ TXN000348,2024-08-11,110000,Accounts Receivable,4296.5,0.0,4296.5,DOC2136,2024-08
350
+ TXN000349,2024-01-17,230000,Long-term Debt,0.0,5880.61,-5880.61,DOC8009,2024-01
351
+ TXN000350,2024-06-11,400000,Sales Revenue,0.0,6509.59,-6509.59,DOC6352,2024-06
352
+ TXN000351,2024-11-14,110000,Accounts Receivable,19668.35,0.0,19668.35,DOC3382,2024-11
353
+ TXN000352,2024-10-04,140000,"Property, Plant & Equipment",46867.7,0.0,46867.7,DOC2887,2024-10
354
+ TXN000353,2024-08-29,130000,Prepaid Expenses,47370.16,0.0,47370.16,DOC2040,2024-08
355
+ TXN000354,2024-07-11,320000,Other Equity,0.0,2990.23,-2990.23,DOC7353,2024-07
356
+ TXN000355,2024-09-26,510000,Salaries and Wages,48677.1,0.0,48677.1,DOC9476,2024-09
357
+ TXN000356,2024-06-12,320000,Other Equity,0.0,32413.92,-32413.92,DOC6043,2024-06
358
+ TXN000357,2024-01-07,320000,Other Equity,0.0,3374.74,-3374.74,DOC8813,2024-01
359
+ TXN000358,2024-03-19,420000,Interest Income,0.0,40957.4,-40957.4,DOC4356,2024-03
360
+ TXN000359,2024-04-08,130000,Prepaid Expenses,22624.21,0.0,22624.21,DOC1038,2024-04
361
+ TXN000360,2024-10-11,420000,Interest Income,0.0,34714.74,-34714.74,DOC8027,2024-10
362
+ TXN000361,2024-06-23,110000,Accounts Receivable,34056.92,0.0,34056.92,DOC4093,2024-06
363
+ TXN000362,2024-01-27,310000,Retained Earnings,0.0,43415.91,-43415.91,DOC1988,2024-01
364
+ TXN000363,2024-10-29,540000,Marketing Expense,21044.39,0.0,21044.39,DOC5179,2024-10
365
+ TXN000364,2024-05-26,200000,Accounts Payable,0.0,13783.34,-13783.34,DOC6626,2024-05
366
+ TXN000365,2024-02-27,100000,Cash and Cash Equivalents,44715.55,0.0,44715.55,DOC4598,2024-02
367
+ TXN000366,2024-06-11,110000,Accounts Receivable,1653.59,0.0,1653.59,DOC9984,2024-06
368
+ TXN000367,2024-09-30,320000,Other Equity,0.0,43231.48,-43231.48,DOC3255,2024-09
369
+ TXN000368,2024-02-29,220000,Short-term Debt,0.0,9357.72,-9357.72,DOC6776,2024-02
370
+ TXN000369,2024-01-08,540000,Marketing Expense,38569.0,0.0,38569.0,DOC4633,2024-01
371
+ TXN000370,2024-07-17,530000,Utilities Expense,31348.39,0.0,31348.39,DOC1959,2024-07
372
+ TXN000371,2024-06-29,320000,Other Equity,0.0,45600.62,-45600.62,DOC5473,2024-06
373
+ TXN000372,2024-02-15,120000,Inventory,23158.65,0.0,23158.65,DOC2875,2024-02
374
+ TXN000373,2024-01-09,130000,Prepaid Expenses,10106.18,0.0,10106.18,DOC8099,2024-01
375
+ TXN000374,2024-04-26,540000,Marketing Expense,29554.17,0.0,29554.17,DOC1583,2024-04
376
+ TXN000375,2024-03-04,310000,Retained Earnings,0.0,22815.49,-22815.49,DOC5167,2024-03
377
+ TXN000376,2024-09-30,540000,Marketing Expense,34054.79,0.0,34054.79,DOC2389,2024-09
378
+ TXN000377,2024-04-04,420000,Interest Income,0.0,36122.19,-36122.19,DOC7154,2024-04
379
+ TXN000378,2024-08-04,400000,Sales Revenue,0.0,43020.11,-43020.11,DOC5197,2024-08
380
+ TXN000379,2024-09-23,230000,Long-term Debt,0.0,24077.3,-24077.3,DOC7731,2024-09
381
+ TXN000380,2024-06-08,410000,Service Revenue,0.0,1016.55,-1016.55,DOC3720,2024-06
382
+ TXN000381,2024-08-29,300000,Common Stock,0.0,16390.42,-16390.42,DOC1001,2024-08
383
+ TXN000382,2024-10-15,100000,Cash and Cash Equivalents,44138.42,0.0,44138.42,DOC2949,2024-10
384
+ TXN000383,2024-03-17,100000,Cash and Cash Equivalents,4021.07,0.0,4021.07,DOC1917,2024-03
385
+ TXN000384,2024-07-12,210000,Accrued Liabilities,0.0,48875.57,-48875.57,DOC1089,2024-07
386
+ TXN000385,2024-05-01,410000,Service Revenue,0.0,40049.28,-40049.28,DOC4041,2024-05
387
+ TXN000386,2024-10-31,300000,Common Stock,0.0,47582.34,-47582.34,DOC9508,2024-10
388
+ TXN000387,2024-05-02,120000,Inventory,1676.15,0.0,1676.15,DOC7917,2024-05
389
+ TXN000388,2024-12-24,230000,Long-term Debt,0.0,30685.91,-30685.91,DOC1552,2024-12
390
+ TXN000389,2024-07-22,510000,Salaries and Wages,43561.36,0.0,43561.36,DOC4389,2024-07
391
+ TXN000390,2024-11-13,530000,Utilities Expense,30651.67,0.0,30651.67,DOC3430,2024-11
392
+ TXN000391,2024-03-24,210000,Accrued Liabilities,0.0,27694.77,-27694.77,DOC1021,2024-03
393
+ TXN000392,2024-05-06,120000,Inventory,26367.49,0.0,26367.49,DOC5109,2024-05
394
+ TXN000393,2024-01-12,310000,Retained Earnings,0.0,12430.45,-12430.45,DOC2560,2024-01
395
+ TXN000394,2024-08-30,400000,Sales Revenue,0.0,11038.78,-11038.78,DOC4638,2024-08
396
+ TXN000395,2024-12-21,410000,Service Revenue,0.0,37239.53,-37239.53,DOC3356,2024-12
397
+ TXN000396,2024-10-26,520000,Rent Expense,27812.64,0.0,27812.64,DOC8057,2024-10
398
+ TXN000397,2024-05-29,520000,Rent Expense,16682.5,0.0,16682.5,DOC9503,2024-05
399
+ TXN000398,2024-02-28,230000,Long-term Debt,0.0,32551.25,-32551.25,DOC9946,2024-02
400
+ TXN000399,2024-04-02,120000,Inventory,20978.15,0.0,20978.15,DOC1352,2024-04
401
+ TXN000400,2024-11-27,210000,Accrued Liabilities,0.0,8792.25,-8792.25,DOC1158,2024-11
402
+ TXN000401,2024-10-19,530000,Utilities Expense,17362.16,0.0,17362.16,DOC4453,2024-10
403
+ TXN000402,2024-05-31,530000,Utilities Expense,27210.7,0.0,27210.7,DOC5703,2024-05
404
+ TXN000403,2024-09-06,230000,Long-term Debt,0.0,36290.36,-36290.36,DOC6631,2024-09
405
+ TXN000404,2024-03-06,130000,Prepaid Expenses,29926.41,0.0,29926.41,DOC2394,2024-03
406
+ TXN000405,2024-05-10,320000,Other Equity,0.0,31186.03,-31186.03,DOC3958,2024-05
407
+ TXN000406,2024-12-20,100000,Cash and Cash Equivalents,38822.41,0.0,38822.41,DOC7895,2024-12
408
+ TXN000407,2024-01-14,300000,Common Stock,0.0,48572.62,-48572.62,DOC1374,2024-01
409
+ TXN000408,2024-11-20,140000,"Property, Plant & Equipment",3549.73,0.0,3549.73,DOC5648,2024-11
410
+ TXN000409,2024-01-14,420000,Interest Income,0.0,25789.39,-25789.39,DOC4155,2024-01
411
+ TXN000410,2024-08-18,110000,Accounts Receivable,8259.84,0.0,8259.84,DOC9219,2024-08
412
+ TXN000411,2024-06-11,110000,Accounts Receivable,32871.16,0.0,32871.16,DOC6543,2024-06
413
+ TXN000412,2024-06-12,320000,Other Equity,0.0,48494.07,-48494.07,DOC4374,2024-06
414
+ TXN000413,2024-01-10,310000,Retained Earnings,0.0,3767.49,-3767.49,DOC1269,2024-01
415
+ TXN000414,2024-04-02,430000,Other Income,0.0,16916.46,-16916.46,DOC4432,2024-04
416
+ TXN000415,2024-05-12,100000,Cash and Cash Equivalents,12510.84,0.0,12510.84,DOC8115,2024-05
417
+ TXN000416,2024-11-08,100000,Cash and Cash Equivalents,8435.39,0.0,8435.39,DOC7099,2024-11
418
+ TXN000417,2024-06-23,310000,Retained Earnings,0.0,33223.85,-33223.85,DOC4568,2024-06
419
+ TXN000418,2024-11-07,320000,Other Equity,0.0,29309.18,-29309.18,DOC2742,2024-11
420
+ TXN000419,2024-04-17,200000,Accounts Payable,0.0,27041.3,-27041.3,DOC2939,2024-04
421
+ TXN000420,2024-11-29,510000,Salaries and Wages,2948.63,0.0,2948.63,DOC1281,2024-11
422
+ TXN000421,2024-04-28,100000,Cash and Cash Equivalents,11312.59,0.0,11312.59,DOC6178,2024-04
423
+ TXN000422,2024-06-09,140000,"Property, Plant & Equipment",25411.02,0.0,25411.02,DOC2229,2024-06
424
+ TXN000423,2024-10-02,320000,Other Equity,0.0,49332.84,-49332.84,DOC2239,2024-10
425
+ TXN000424,2024-05-05,310000,Retained Earnings,0.0,47595.41,-47595.41,DOC8473,2024-05
426
+ TXN000425,2024-08-10,210000,Accrued Liabilities,0.0,12785.81,-12785.81,DOC7570,2024-08
427
+ TXN000426,2024-10-20,510000,Salaries and Wages,7068.6,0.0,7068.6,DOC7527,2024-10
428
+ TXN000427,2024-11-03,400000,Sales Revenue,0.0,35263.57,-35263.57,DOC1891,2024-11
429
+ TXN000428,2024-12-06,220000,Short-term Debt,0.0,4785.65,-4785.65,DOC7812,2024-12
430
+ TXN000429,2024-01-05,200000,Accounts Payable,0.0,48171.01,-48171.01,DOC2198,2024-01
431
+ TXN000430,2024-07-11,110000,Accounts Receivable,41921.95,0.0,41921.95,DOC7089,2024-07
432
+ TXN000431,2024-05-24,510000,Salaries and Wages,41560.77,0.0,41560.77,DOC1302,2024-05
433
+ TXN000432,2024-03-16,220000,Short-term Debt,0.0,5744.18,-5744.18,DOC5440,2024-03
434
+ TXN000433,2024-10-15,410000,Service Revenue,0.0,30070.42,-30070.42,DOC4124,2024-10
435
+ TXN000434,2024-03-09,430000,Other Income,0.0,28901.54,-28901.54,DOC9125,2024-03
436
+ TXN000435,2024-07-10,110000,Accounts Receivable,2505.78,0.0,2505.78,DOC6704,2024-07
437
+ TXN000436,2024-06-17,100000,Cash and Cash Equivalents,49667.51,0.0,49667.51,DOC7924,2024-06
438
+ TXN000437,2024-09-01,230000,Long-term Debt,0.0,28394.11,-28394.11,DOC1488,2024-09
439
+ TXN000438,2024-11-19,310000,Retained Earnings,0.0,32560.53,-32560.53,DOC4173,2024-11
440
+ TXN000439,2024-05-11,410000,Service Revenue,0.0,33412.91,-33412.91,DOC4553,2024-05
441
+ TXN000440,2024-10-05,510000,Salaries and Wages,21835.61,0.0,21835.61,DOC6450,2024-10
442
+ TXN000441,2024-12-09,100000,Cash and Cash Equivalents,14913.78,0.0,14913.78,DOC1454,2024-12
443
+ TXN000442,2024-05-22,540000,Marketing Expense,31547.42,0.0,31547.42,DOC5806,2024-05
444
+ TXN000443,2024-11-11,420000,Interest Income,0.0,27470.14,-27470.14,DOC2440,2024-11
445
+ TXN000444,2024-08-11,500000,Cost of Goods Sold,18725.26,0.0,18725.26,DOC7059,2024-08
446
+ TXN000445,2024-09-23,200000,Accounts Payable,0.0,30212.08,-30212.08,DOC8117,2024-09
447
+ TXN000446,2024-09-21,300000,Common Stock,0.0,19051.31,-19051.31,DOC7471,2024-09
448
+ TXN000447,2024-04-26,430000,Other Income,0.0,40706.94,-40706.94,DOC5760,2024-04
449
+ TXN000448,2024-05-12,320000,Other Equity,0.0,20001.26,-20001.26,DOC9234,2024-05
450
+ TXN000449,2024-12-08,430000,Other Income,0.0,40667.99,-40667.99,DOC7570,2024-12
451
+ TXN000450,2024-01-21,400000,Sales Revenue,0.0,9869.32,-9869.32,DOC5431,2024-01
452
+ TXN000451,2024-04-26,420000,Interest Income,0.0,44911.72,-44911.72,DOC7936,2024-04
453
+ TXN000452,2024-07-21,130000,Prepaid Expenses,19065.72,0.0,19065.72,DOC1140,2024-07
454
+ TXN000453,2024-10-16,520000,Rent Expense,8399.95,0.0,8399.95,DOC1963,2024-10
455
+ TXN000454,2024-02-21,430000,Other Income,0.0,33537.79,-33537.79,DOC7894,2024-02
456
+ TXN000455,2024-05-15,120000,Inventory,15634.25,0.0,15634.25,DOC6539,2024-05
457
+ TXN000456,2024-01-02,510000,Salaries and Wages,13703.94,0.0,13703.94,DOC7787,2024-01
458
+ TXN000457,2024-09-19,310000,Retained Earnings,0.0,34087.78,-34087.78,DOC8052,2024-09
459
+ TXN000458,2024-11-07,210000,Accrued Liabilities,0.0,39691.02,-39691.02,DOC9636,2024-11
460
+ TXN000459,2024-02-05,300000,Common Stock,0.0,21283.92,-21283.92,DOC2798,2024-02
461
+ TXN000460,2024-06-20,100000,Cash and Cash Equivalents,2266.29,0.0,2266.29,DOC7284,2024-06
462
+ TXN000461,2024-08-01,540000,Marketing Expense,29717.57,0.0,29717.57,DOC4097,2024-08
463
+ TXN000462,2024-09-27,230000,Long-term Debt,0.0,30587.95,-30587.95,DOC6752,2024-09
464
+ TXN000463,2024-03-12,300000,Common Stock,0.0,38520.24,-38520.24,DOC2072,2024-03
465
+ TXN000464,2024-03-08,140000,"Property, Plant & Equipment",13812.82,0.0,13812.82,DOC7674,2024-03
466
+ TXN000465,2024-02-29,130000,Prepaid Expenses,33604.09,0.0,33604.09,DOC8000,2024-02
467
+ TXN000466,2024-06-12,510000,Salaries and Wages,7570.23,0.0,7570.23,DOC1482,2024-06
468
+ TXN000467,2024-08-13,320000,Other Equity,0.0,23697.31,-23697.31,DOC9853,2024-08
469
+ TXN000468,2024-10-19,430000,Other Income,0.0,32134.38,-32134.38,DOC1987,2024-10
470
+ TXN000469,2024-06-08,210000,Accrued Liabilities,0.0,31934.24,-31934.24,DOC2100,2024-06
471
+ TXN000470,2024-11-15,110000,Accounts Receivable,6908.34,0.0,6908.34,DOC7780,2024-11
472
+ TXN000471,2024-08-28,210000,Accrued Liabilities,0.0,889.47,-889.47,DOC3349,2024-08
473
+ TXN000472,2024-03-08,520000,Rent Expense,36244.51,0.0,36244.51,DOC7764,2024-03
474
+ TXN000473,2024-02-05,410000,Service Revenue,0.0,4374.35,-4374.35,DOC8843,2024-02
475
+ TXN000474,2024-03-13,120000,Inventory,16236.24,0.0,16236.24,DOC6189,2024-03
476
+ TXN000475,2024-07-14,230000,Long-term Debt,0.0,22176.26,-22176.26,DOC4713,2024-07
477
+ TXN000476,2024-01-27,140000,"Property, Plant & Equipment",32044.39,0.0,32044.39,DOC8397,2024-01
478
+ TXN000477,2024-02-19,220000,Short-term Debt,0.0,34038.58,-34038.58,DOC8979,2024-02
479
+ TXN000478,2024-12-07,120000,Inventory,33507.4,0.0,33507.4,DOC6291,2024-12
480
+ TXN000479,2024-04-11,110000,Accounts Receivable,27933.39,0.0,27933.39,DOC5211,2024-04
481
+ TXN000480,2024-05-29,220000,Short-term Debt,0.0,28158.61,-28158.61,DOC4374,2024-05
482
+ TXN000481,2024-04-15,430000,Other Income,0.0,4924.15,-4924.15,DOC1632,2024-04
483
+ TXN000482,2024-01-12,430000,Other Income,0.0,17443.82,-17443.82,DOC4719,2024-01
484
+ TXN000483,2024-01-03,530000,Utilities Expense,46366.17,0.0,46366.17,DOC1236,2024-01
485
+ TXN000484,2024-04-13,520000,Rent Expense,1099.32,0.0,1099.32,DOC7099,2024-04
486
+ TXN000485,2024-09-04,220000,Short-term Debt,0.0,27043.86,-27043.86,DOC1285,2024-09
487
+ TXN000486,2024-03-24,540000,Marketing Expense,31216.93,0.0,31216.93,DOC8121,2024-03
488
+ TXN000487,2024-08-18,220000,Short-term Debt,0.0,43247.84,-43247.84,DOC2012,2024-08
489
+ TXN000488,2024-02-07,430000,Other Income,0.0,8049.27,-8049.27,DOC4725,2024-02
490
+ TXN000489,2024-05-30,130000,Prepaid Expenses,13229.32,0.0,13229.32,DOC3408,2024-05
491
+ TXN000490,2024-09-14,540000,Marketing Expense,46854.2,0.0,46854.2,DOC3496,2024-09
492
+ TXN000491,2024-11-18,310000,Retained Earnings,0.0,19909.38,-19909.38,DOC8574,2024-11
493
+ TXN000492,2024-11-06,130000,Prepaid Expenses,8172.03,0.0,8172.03,DOC9597,2024-11
494
+ TXN000493,2024-05-22,310000,Retained Earnings,0.0,49608.68,-49608.68,DOC9435,2024-05
495
+ TXN000494,2024-01-12,300000,Common Stock,0.0,46536.7,-46536.7,DOC9785,2024-01
496
+ TXN000495,2024-10-17,400000,Sales Revenue,0.0,33747.76,-33747.76,DOC8629,2024-10
497
+ TXN000496,2024-03-07,200000,Accounts Payable,0.0,39522.52,-39522.52,DOC8693,2024-03
498
+ TXN000497,2024-06-11,230000,Long-term Debt,0.0,8758.87,-8758.87,DOC5225,2024-06
499
+ TXN000498,2024-07-24,120000,Inventory,48782.95,0.0,48782.95,DOC6656,2024-07
500
+ TXN000499,2024-10-07,110000,Accounts Receivable,24019.79,0.0,24019.79,DOC5259,2024-10
501
+ TXN000500,2024-11-16,410000,Service Revenue,0.0,30352.02,-30352.02,DOC5917,2024-11
502
+ TXN000501,2024-01-25,410000,Service Revenue,0.0,33348.71,-33348.71,DOC3529,2024-01
503
+ TXN000502,2024-01-25,220000,Short-term Debt,0.0,11704.31,-11704.31,DOC8340,2024-01
504
+ TXN000503,2024-10-14,320000,Other Equity,0.0,6189.55,-6189.55,DOC9734,2024-10
505
+ TXN000504,2024-01-20,410000,Service Revenue,0.0,22031.63,-22031.63,DOC6947,2024-01
506
+ TXN000505,2024-06-08,200000,Accounts Payable,0.0,10880.31,-10880.31,DOC5349,2024-06
507
+ TXN000506,2024-02-29,110000,Accounts Receivable,18303.43,0.0,18303.43,DOC7430,2024-02
508
+ TXN000507,2024-01-05,520000,Rent Expense,39060.0,0.0,39060.0,DOC7488,2024-01
509
+ TXN000508,2024-09-23,110000,Accounts Receivable,37737.25,0.0,37737.25,DOC6175,2024-09
510
+ TXN000509,2024-03-23,420000,Interest Income,0.0,8616.17,-8616.17,DOC6448,2024-03
511
+ TXN000510,2024-09-19,410000,Service Revenue,0.0,34638.85,-34638.85,DOC7907,2024-09
512
+ TXN000511,2024-09-16,100000,Cash and Cash Equivalents,31696.16,0.0,31696.16,DOC6671,2024-09
513
+ TXN000512,2024-04-10,500000,Cost of Goods Sold,30799.45,0.0,30799.45,DOC4292,2024-04
514
+ TXN000513,2024-05-03,530000,Utilities Expense,42415.99,0.0,42415.99,DOC8857,2024-05
515
+ TXN000514,2024-04-25,140000,"Property, Plant & Equipment",20299.44,0.0,20299.44,DOC1767,2024-04
516
+ TXN000515,2024-01-07,120000,Inventory,26322.68,0.0,26322.68,DOC2549,2024-01
517
+ TXN000516,2024-08-16,210000,Accrued Liabilities,0.0,19415.23,-19415.23,DOC4716,2024-08
518
+ TXN000517,2024-03-02,110000,Accounts Receivable,24119.07,0.0,24119.07,DOC3293,2024-03
519
+ TXN000518,2024-03-19,200000,Accounts Payable,0.0,29149.2,-29149.2,DOC8638,2024-03
520
+ TXN000519,2024-03-05,210000,Accrued Liabilities,0.0,16242.67,-16242.67,DOC9433,2024-03
521
+ TXN000520,2024-07-31,400000,Sales Revenue,0.0,10022.93,-10022.93,DOC5268,2024-07
522
+ TXN000521,2024-07-06,130000,Prepaid Expenses,32339.9,0.0,32339.9,DOC7036,2024-07
523
+ TXN000522,2024-09-12,530000,Utilities Expense,4994.32,0.0,4994.32,DOC8961,2024-09
524
+ TXN000523,2024-02-03,130000,Prepaid Expenses,16301.33,0.0,16301.33,DOC1593,2024-02
525
+ TXN000524,2024-08-14,220000,Short-term Debt,0.0,18856.83,-18856.83,DOC4493,2024-08
526
+ TXN000525,2024-01-21,300000,Common Stock,0.0,47815.49,-47815.49,DOC3672,2024-01
527
+ TXN000526,2024-07-10,230000,Long-term Debt,0.0,39366.48,-39366.48,DOC1392,2024-07
528
+ TXN000527,2024-05-08,230000,Long-term Debt,0.0,40463.28,-40463.28,DOC4631,2024-05
529
+ TXN000528,2024-01-10,100000,Cash and Cash Equivalents,46522.91,0.0,46522.91,DOC9123,2024-01
530
+ TXN000529,2024-10-03,220000,Short-term Debt,0.0,41274.1,-41274.1,DOC1775,2024-10
531
+ TXN000530,2024-03-19,220000,Short-term Debt,0.0,44480.61,-44480.61,DOC4926,2024-03
532
+ TXN000531,2024-03-09,400000,Sales Revenue,0.0,36897.95,-36897.95,DOC7230,2024-03
533
+ TXN000532,2024-01-08,140000,"Property, Plant & Equipment",2179.48,0.0,2179.48,DOC4456,2024-01
534
+ TXN000533,2024-05-31,400000,Sales Revenue,0.0,1874.99,-1874.99,DOC1147,2024-05
535
+ TXN000534,2024-08-19,540000,Marketing Expense,17727.25,0.0,17727.25,DOC1365,2024-08
536
+ TXN000535,2024-05-18,130000,Prepaid Expenses,48540.42,0.0,48540.42,DOC6330,2024-05
537
+ TXN000536,2024-01-28,210000,Accrued Liabilities,0.0,17806.58,-17806.58,DOC9964,2024-01
538
+ TXN000537,2024-11-15,220000,Short-term Debt,0.0,21272.41,-21272.41,DOC7511,2024-11
539
+ TXN000538,2024-08-10,500000,Cost of Goods Sold,39146.0,0.0,39146.0,DOC9551,2024-08
540
+ TXN000539,2024-02-18,230000,Long-term Debt,0.0,12845.13,-12845.13,DOC7979,2024-02
541
+ TXN000540,2024-04-14,410000,Service Revenue,0.0,32230.82,-32230.82,DOC9569,2024-04
542
+ TXN000541,2024-09-22,510000,Salaries and Wages,39955.84,0.0,39955.84,DOC9843,2024-09
543
+ TXN000542,2024-09-14,220000,Short-term Debt,0.0,30133.89,-30133.89,DOC7303,2024-09
544
+ TXN000543,2024-10-14,430000,Other Income,0.0,30863.34,-30863.34,DOC9714,2024-10
545
+ TXN000544,2024-09-27,300000,Common Stock,0.0,5629.32,-5629.32,DOC8569,2024-09
546
+ TXN000545,2024-06-01,230000,Long-term Debt,0.0,18862.05,-18862.05,DOC5941,2024-06
547
+ TXN000546,2024-10-04,510000,Salaries and Wages,13762.19,0.0,13762.19,DOC1685,2024-10
548
+ TXN000547,2024-05-01,500000,Cost of Goods Sold,40815.75,0.0,40815.75,DOC1038,2024-05
549
+ TXN000548,2024-09-24,500000,Cost of Goods Sold,45954.43,0.0,45954.43,DOC8697,2024-09
550
+ TXN000549,2024-05-28,540000,Marketing Expense,48922.02,0.0,48922.02,DOC1301,2024-05
551
+ TXN000550,2024-08-25,220000,Short-term Debt,0.0,38844.73,-38844.73,DOC9789,2024-08
552
+ TXN000551,2024-12-10,310000,Retained Earnings,0.0,46875.66,-46875.66,DOC4537,2024-12
553
+ TXN000552,2024-01-29,110000,Accounts Receivable,34296.37,0.0,34296.37,DOC7579,2024-01
554
+ TXN000553,2024-04-04,510000,Salaries and Wages,24470.87,0.0,24470.87,DOC5183,2024-04
555
+ TXN000554,2024-10-04,320000,Other Equity,0.0,27157.64,-27157.64,DOC2724,2024-10
556
+ TXN000555,2024-07-02,100000,Cash and Cash Equivalents,30635.83,0.0,30635.83,DOC2653,2024-07
557
+ TXN000556,2024-01-23,520000,Rent Expense,34475.38,0.0,34475.38,DOC6926,2024-01
558
+ TXN000557,2024-10-07,320000,Other Equity,0.0,38079.96,-38079.96,DOC7279,2024-10
559
+ TXN000558,2024-07-04,300000,Common Stock,0.0,565.65,-565.65,DOC7272,2024-07
560
+ TXN000559,2024-09-17,320000,Other Equity,0.0,44084.39,-44084.39,DOC7019,2024-09
561
+ TXN000560,2024-08-11,220000,Short-term Debt,0.0,44002.84,-44002.84,DOC9033,2024-08
562
+ TXN000561,2024-01-10,310000,Retained Earnings,0.0,37143.17,-37143.17,DOC7445,2024-01
563
+ TXN000562,2024-08-06,210000,Accrued Liabilities,0.0,9482.43,-9482.43,DOC3159,2024-08
564
+ TXN000563,2024-03-26,400000,Sales Revenue,0.0,42417.58,-42417.58,DOC9505,2024-03
565
+ TXN000564,2024-07-27,320000,Other Equity,0.0,650.48,-650.48,DOC4489,2024-07
566
+ TXN000565,2024-01-20,540000,Marketing Expense,16413.89,0.0,16413.89,DOC2778,2024-01
567
+ TXN000566,2024-11-07,200000,Accounts Payable,0.0,25152.31,-25152.31,DOC1697,2024-11
568
+ TXN000567,2024-04-20,130000,Prepaid Expenses,22485.67,0.0,22485.67,DOC2929,2024-04
569
+ TXN000568,2024-06-02,120000,Inventory,19637.13,0.0,19637.13,DOC6588,2024-06
570
+ TXN000569,2024-12-24,220000,Short-term Debt,0.0,260.59,-260.59,DOC6891,2024-12
571
+ TXN000570,2024-01-20,400000,Sales Revenue,0.0,20176.12,-20176.12,DOC3563,2024-01
572
+ TXN000571,2024-01-03,410000,Service Revenue,0.0,3336.19,-3336.19,DOC5431,2024-01
573
+ TXN000572,2024-09-10,530000,Utilities Expense,24381.22,0.0,24381.22,DOC1593,2024-09
574
+ TXN000573,2024-06-07,520000,Rent Expense,1244.35,0.0,1244.35,DOC4390,2024-06
575
+ TXN000574,2024-07-29,410000,Service Revenue,0.0,3021.69,-3021.69,DOC1541,2024-07
576
+ TXN000575,2024-04-26,200000,Accounts Payable,0.0,39451.89,-39451.89,DOC9623,2024-04
577
+ TXN000576,2024-08-15,400000,Sales Revenue,0.0,6206.6,-6206.6,DOC7256,2024-08
578
+ TXN000577,2024-05-25,100000,Cash and Cash Equivalents,18633.96,0.0,18633.96,DOC2136,2024-05
579
+ TXN000578,2024-11-08,420000,Interest Income,0.0,46662.36,-46662.36,DOC2283,2024-11
580
+ TXN000579,2024-08-27,530000,Utilities Expense,8994.8,0.0,8994.8,DOC9590,2024-08
581
+ TXN000580,2024-02-16,200000,Accounts Payable,0.0,42006.13,-42006.13,DOC9266,2024-02
582
+ TXN000581,2024-05-16,210000,Accrued Liabilities,0.0,47520.61,-47520.61,DOC6624,2024-05
583
+ TXN000582,2024-03-01,530000,Utilities Expense,48984.37,0.0,48984.37,DOC6068,2024-03
584
+ TXN000583,2024-04-22,310000,Retained Earnings,0.0,29331.93,-29331.93,DOC3757,2024-04
585
+ TXN000584,2024-12-30,500000,Cost of Goods Sold,39150.84,0.0,39150.84,DOC2449,2024-12
586
+ TXN000585,2024-10-28,120000,Inventory,11354.51,0.0,11354.51,DOC8999,2024-10
587
+ TXN000586,2024-02-18,140000,"Property, Plant & Equipment",21815.5,0.0,21815.5,DOC9895,2024-02
588
+ TXN000587,2024-12-21,140000,"Property, Plant & Equipment",6760.65,0.0,6760.65,DOC4331,2024-12
589
+ TXN000588,2024-10-21,210000,Accrued Liabilities,0.0,24873.41,-24873.41,DOC3839,2024-10
590
+ TXN000589,2024-11-21,130000,Prepaid Expenses,2958.28,0.0,2958.28,DOC1685,2024-11
591
+ TXN000590,2024-07-06,320000,Other Equity,0.0,20001.92,-20001.92,DOC2619,2024-07
592
+ TXN000591,2024-07-31,130000,Prepaid Expenses,3541.01,0.0,3541.01,DOC5713,2024-07
593
+ TXN000592,2024-06-11,210000,Accrued Liabilities,0.0,13853.06,-13853.06,DOC9461,2024-06
594
+ TXN000593,2024-12-01,300000,Common Stock,0.0,18623.23,-18623.23,DOC3014,2024-12
595
+ TXN000594,2024-08-04,300000,Common Stock,0.0,38857.86,-38857.86,DOC6675,2024-08
596
+ TXN000595,2024-10-27,230000,Long-term Debt,0.0,42669.17,-42669.17,DOC3643,2024-10
597
+ TXN000596,2024-09-06,510000,Salaries and Wages,28143.44,0.0,28143.44,DOC1689,2024-09
598
+ TXN000597,2024-01-07,100000,Cash and Cash Equivalents,4412.59,0.0,4412.59,DOC1671,2024-01
599
+ TXN000598,2024-05-27,310000,Retained Earnings,0.0,6486.61,-6486.61,DOC7342,2024-05
600
+ TXN000599,2024-06-02,540000,Marketing Expense,20997.79,0.0,20997.79,DOC7285,2024-06
601
+ TXN000600,2024-11-09,140000,"Property, Plant & Equipment",48979.59,0.0,48979.59,DOC4670,2024-11
602
+ TXN000601,2024-10-31,140000,"Property, Plant & Equipment",23250.23,0.0,23250.23,DOC6976,2024-10
603
+ TXN000602,2024-06-09,540000,Marketing Expense,7647.22,0.0,7647.22,DOC8875,2024-06
604
+ TXN000603,2024-11-22,300000,Common Stock,0.0,34219.33,-34219.33,DOC3336,2024-11
605
+ TXN000604,2024-05-31,500000,Cost of Goods Sold,5826.97,0.0,5826.97,DOC8521,2024-05
606
+ TXN000605,2024-06-17,310000,Retained Earnings,0.0,39605.83,-39605.83,DOC5624,2024-06
607
+ TXN000606,2024-07-16,110000,Accounts Receivable,42361.24,0.0,42361.24,DOC2537,2024-07
608
+ TXN000607,2024-02-26,430000,Other Income,0.0,33484.21,-33484.21,DOC1097,2024-02
609
+ TXN000608,2024-05-04,430000,Other Income,0.0,37489.26,-37489.26,DOC9535,2024-05
610
+ TXN000609,2024-10-20,420000,Interest Income,0.0,40339.54,-40339.54,DOC1610,2024-10
611
+ TXN000610,2024-11-14,520000,Rent Expense,24913.07,0.0,24913.07,DOC3324,2024-11
612
+ TXN000611,2024-06-02,530000,Utilities Expense,16577.73,0.0,16577.73,DOC6774,2024-06
613
+ TXN000612,2024-07-31,220000,Short-term Debt,0.0,33015.51,-33015.51,DOC1781,2024-07
614
+ TXN000613,2024-06-16,230000,Long-term Debt,0.0,49250.98,-49250.98,DOC8193,2024-06
615
+ TXN000614,2024-03-06,500000,Cost of Goods Sold,3353.71,0.0,3353.71,DOC4970,2024-03
616
+ TXN000615,2024-02-13,220000,Short-term Debt,0.0,26981.22,-26981.22,DOC3274,2024-02
617
+ TXN000616,2024-06-15,200000,Accounts Payable,0.0,32873.33,-32873.33,DOC7744,2024-06
618
+ TXN000617,2024-07-15,510000,Salaries and Wages,48227.39,0.0,48227.39,DOC3551,2024-07
619
+ TXN000618,2024-03-14,320000,Other Equity,0.0,4792.4,-4792.4,DOC3555,2024-03
620
+ TXN000619,2024-06-12,230000,Long-term Debt,0.0,13894.44,-13894.44,DOC8239,2024-06
621
+ TXN000620,2024-02-16,230000,Long-term Debt,0.0,9872.46,-9872.46,DOC3285,2024-02
622
+ TXN000621,2024-07-28,220000,Short-term Debt,0.0,7981.95,-7981.95,DOC4525,2024-07
623
+ TXN000622,2024-09-19,320000,Other Equity,0.0,30712.31,-30712.31,DOC1258,2024-09
624
+ TXN000623,2024-12-28,510000,Salaries and Wages,49177.72,0.0,49177.72,DOC4200,2024-12
625
+ TXN000624,2024-04-10,220000,Short-term Debt,0.0,36658.5,-36658.5,DOC1687,2024-04
626
+ TXN000625,2024-04-10,310000,Retained Earnings,0.0,22072.14,-22072.14,DOC7509,2024-04
627
+ TXN000626,2024-02-01,520000,Rent Expense,5970.44,0.0,5970.44,DOC8183,2024-02
628
+ TXN000627,2024-03-03,100000,Cash and Cash Equivalents,24319.41,0.0,24319.41,DOC6108,2024-03
629
+ TXN000628,2024-06-06,540000,Marketing Expense,31770.1,0.0,31770.1,DOC2283,2024-06
630
+ TXN000629,2024-08-10,200000,Accounts Payable,0.0,32841.09,-32841.09,DOC4711,2024-08
631
+ TXN000630,2024-01-25,140000,"Property, Plant & Equipment",4742.22,0.0,4742.22,DOC4864,2024-01
632
+ TXN000631,2024-06-02,530000,Utilities Expense,4062.39,0.0,4062.39,DOC7788,2024-06
633
+ TXN000632,2024-07-07,120000,Inventory,16908.34,0.0,16908.34,DOC1264,2024-07
634
+ TXN000633,2024-05-13,530000,Utilities Expense,35541.12,0.0,35541.12,DOC8544,2024-05
635
+ TXN000634,2024-12-29,310000,Retained Earnings,0.0,23017.33,-23017.33,DOC1587,2024-12
636
+ TXN000635,2024-10-03,430000,Other Income,0.0,5735.87,-5735.87,DOC9381,2024-10
637
+ TXN000636,2024-06-11,100000,Cash and Cash Equivalents,7184.4,0.0,7184.4,DOC7450,2024-06
638
+ TXN000637,2024-12-03,420000,Interest Income,0.0,37466.43,-37466.43,DOC8096,2024-12
639
+ TXN000638,2024-05-29,430000,Other Income,0.0,36929.65,-36929.65,DOC7763,2024-05
640
+ TXN000639,2024-12-15,310000,Retained Earnings,0.0,48957.34,-48957.34,DOC9915,2024-12
641
+ TXN000640,2024-03-06,430000,Other Income,0.0,15814.49,-15814.49,DOC1155,2024-03
642
+ TXN000641,2024-07-19,420000,Interest Income,0.0,32798.59,-32798.59,DOC7144,2024-07
643
+ TXN000642,2024-09-03,220000,Short-term Debt,0.0,14035.88,-14035.88,DOC7659,2024-09
644
+ TXN000643,2024-10-20,420000,Interest Income,0.0,18082.85,-18082.85,DOC5628,2024-10
645
+ TXN000644,2024-11-08,120000,Inventory,15266.93,0.0,15266.93,DOC9179,2024-11
646
+ TXN000645,2024-02-08,410000,Service Revenue,0.0,40389.06,-40389.06,DOC2787,2024-02
647
+ TXN000646,2024-07-25,400000,Sales Revenue,0.0,13088.31,-13088.31,DOC5741,2024-07
648
+ TXN000647,2024-02-15,110000,Accounts Receivable,23071.88,0.0,23071.88,DOC3659,2024-02
649
+ TXN000648,2024-11-23,540000,Marketing Expense,6529.55,0.0,6529.55,DOC6661,2024-11
650
+ TXN000649,2024-03-24,410000,Service Revenue,0.0,998.2,-998.2,DOC1423,2024-03
651
+ TXN000650,2024-06-02,410000,Service Revenue,0.0,48315.55,-48315.55,DOC5757,2024-06
652
+ TXN000651,2024-03-23,430000,Other Income,0.0,48641.54,-48641.54,DOC3946,2024-03
653
+ TXN000652,2024-10-01,300000,Common Stock,0.0,40264.85,-40264.85,DOC6075,2024-10
654
+ TXN000653,2024-11-22,400000,Sales Revenue,0.0,31105.09,-31105.09,DOC2531,2024-11
655
+ TXN000654,2024-04-29,520000,Rent Expense,35213.93,0.0,35213.93,DOC3723,2024-04
656
+ TXN000655,2024-10-12,220000,Short-term Debt,0.0,2401.57,-2401.57,DOC7816,2024-10
657
+ TXN000656,2024-03-29,530000,Utilities Expense,41244.29,0.0,41244.29,DOC2762,2024-03
658
+ TXN000657,2024-11-29,230000,Long-term Debt,0.0,37185.34,-37185.34,DOC6827,2024-11
659
+ TXN000658,2024-09-20,130000,Prepaid Expenses,43875.36,0.0,43875.36,DOC8804,2024-09
660
+ TXN000659,2024-03-26,410000,Service Revenue,0.0,44625.89,-44625.89,DOC4198,2024-03
661
+ TXN000660,2024-03-02,430000,Other Income,0.0,39749.46,-39749.46,DOC6154,2024-03
662
+ TXN000661,2024-03-04,310000,Retained Earnings,0.0,39479.13,-39479.13,DOC2492,2024-03
663
+ TXN000662,2024-11-20,540000,Marketing Expense,12690.13,0.0,12690.13,DOC8851,2024-11
664
+ TXN000663,2024-07-19,100000,Cash and Cash Equivalents,45490.38,0.0,45490.38,DOC5577,2024-07
665
+ TXN000664,2024-01-08,100000,Cash and Cash Equivalents,25920.57,0.0,25920.57,DOC2447,2024-01
666
+ TXN000665,2024-03-16,320000,Other Equity,0.0,23275.22,-23275.22,DOC1526,2024-03
667
+ TXN000666,2024-05-26,230000,Long-term Debt,0.0,44636.91,-44636.91,DOC7748,2024-05
668
+ TXN000667,2024-01-21,220000,Short-term Debt,0.0,31602.25,-31602.25,DOC4740,2024-01
669
+ TXN000668,2024-05-11,520000,Rent Expense,33853.68,0.0,33853.68,DOC1771,2024-05
670
+ TXN000669,2024-03-07,320000,Other Equity,0.0,32645.99,-32645.99,DOC1193,2024-03
671
+ TXN000670,2024-12-12,110000,Accounts Receivable,37205.34,0.0,37205.34,DOC5005,2024-12
672
+ TXN000671,2024-08-01,200000,Accounts Payable,0.0,12794.14,-12794.14,DOC7716,2024-08
673
+ TXN000672,2024-09-18,320000,Other Equity,0.0,2377.87,-2377.87,DOC8815,2024-09
674
+ TXN000673,2024-12-27,520000,Rent Expense,48579.48,0.0,48579.48,DOC3800,2024-12
675
+ TXN000674,2024-05-21,120000,Inventory,30577.93,0.0,30577.93,DOC7892,2024-05
676
+ TXN000675,2024-11-07,530000,Utilities Expense,29584.29,0.0,29584.29,DOC5796,2024-11
677
+ TXN000676,2024-02-18,200000,Accounts Payable,0.0,482.44,-482.44,DOC2159,2024-02
678
+ TXN000677,2024-12-18,310000,Retained Earnings,0.0,17009.15,-17009.15,DOC1340,2024-12
679
+ TXN000678,2024-07-10,540000,Marketing Expense,25682.12,0.0,25682.12,DOC6482,2024-07
680
+ TXN000679,2024-09-21,230000,Long-term Debt,0.0,40852.44,-40852.44,DOC5912,2024-09
681
+ TXN000680,2024-01-17,230000,Long-term Debt,0.0,5780.54,-5780.54,DOC3866,2024-01
682
+ TXN000681,2024-07-01,210000,Accrued Liabilities,0.0,43723.7,-43723.7,DOC5492,2024-07
683
+ TXN000682,2024-05-26,310000,Retained Earnings,0.0,22584.79,-22584.79,DOC4629,2024-05
684
+ TXN000683,2024-01-01,400000,Sales Revenue,0.0,19554.63,-19554.63,DOC9210,2024-01
685
+ TXN000684,2024-03-12,320000,Other Equity,0.0,45389.79,-45389.79,DOC7132,2024-03
686
+ TXN000685,2024-09-24,400000,Sales Revenue,0.0,33762.93,-33762.93,DOC7048,2024-09
687
+ TXN000686,2024-03-30,400000,Sales Revenue,0.0,47757.52,-47757.52,DOC4321,2024-03
688
+ TXN000687,2024-01-08,140000,"Property, Plant & Equipment",43157.74,0.0,43157.74,DOC9365,2024-01
689
+ TXN000688,2024-08-02,400000,Sales Revenue,0.0,2123.88,-2123.88,DOC2875,2024-08
690
+ TXN000689,2024-05-25,510000,Salaries and Wages,5812.93,0.0,5812.93,DOC1989,2024-05
691
+ TXN000690,2024-05-06,100000,Cash and Cash Equivalents,33166.96,0.0,33166.96,DOC2774,2024-05
692
+ TXN000691,2024-03-24,220000,Short-term Debt,0.0,45026.03,-45026.03,DOC1331,2024-03
693
+ TXN000692,2024-05-22,520000,Rent Expense,37517.55,0.0,37517.55,DOC6889,2024-05
694
+ TXN000693,2024-07-20,230000,Long-term Debt,0.0,18159.81,-18159.81,DOC5658,2024-07
695
+ TXN000694,2024-02-08,230000,Long-term Debt,0.0,43697.56,-43697.56,DOC4155,2024-02
696
+ TXN000695,2024-06-03,200000,Accounts Payable,0.0,37074.96,-37074.96,DOC2628,2024-06
697
+ TXN000696,2024-12-15,200000,Accounts Payable,0.0,7192.64,-7192.64,DOC5008,2024-12
698
+ TXN000697,2024-08-22,320000,Other Equity,0.0,24351.42,-24351.42,DOC8980,2024-08
699
+ TXN000698,2024-12-22,420000,Interest Income,0.0,6237.86,-6237.86,DOC5318,2024-12
700
+ TXN000699,2024-10-10,200000,Accounts Payable,0.0,19430.89,-19430.89,DOC2130,2024-10
701
+ TXN000700,2024-04-08,510000,Salaries and Wages,3972.97,0.0,3972.97,DOC3120,2024-04
702
+ TXN000701,2024-05-01,540000,Marketing Expense,29555.25,0.0,29555.25,DOC2823,2024-05
703
+ TXN000702,2024-07-13,120000,Inventory,42892.36,0.0,42892.36,DOC7990,2024-07
704
+ TXN000703,2024-03-03,230000,Long-term Debt,0.0,5033.79,-5033.79,DOC2141,2024-03
705
+ TXN000704,2024-06-15,130000,Prepaid Expenses,25632.9,0.0,25632.9,DOC8835,2024-06
706
+ TXN000705,2024-01-07,140000,"Property, Plant & Equipment",7215.45,0.0,7215.45,DOC5928,2024-01
707
+ TXN000706,2024-02-16,100000,Cash and Cash Equivalents,7807.54,0.0,7807.54,DOC4273,2024-02
708
+ TXN000707,2024-05-05,510000,Salaries and Wages,29839.84,0.0,29839.84,DOC2829,2024-05
709
+ TXN000708,2024-06-24,140000,"Property, Plant & Equipment",10972.84,0.0,10972.84,DOC2054,2024-06
710
+ TXN000709,2024-04-22,130000,Prepaid Expenses,7113.59,0.0,7113.59,DOC7980,2024-04
711
+ TXN000710,2024-03-15,120000,Inventory,6875.87,0.0,6875.87,DOC8833,2024-03
712
+ TXN000711,2024-12-28,410000,Service Revenue,0.0,19460.54,-19460.54,DOC3309,2024-12
713
+ TXN000712,2024-09-01,420000,Interest Income,0.0,14533.31,-14533.31,DOC7628,2024-09
714
+ TXN000713,2024-06-18,140000,"Property, Plant & Equipment",18802.7,0.0,18802.7,DOC7789,2024-06
715
+ TXN000714,2024-09-30,130000,Prepaid Expenses,41352.7,0.0,41352.7,DOC3416,2024-09
716
+ TXN000715,2024-02-28,400000,Sales Revenue,0.0,48060.66,-48060.66,DOC6619,2024-02
717
+ TXN000716,2024-04-18,500000,Cost of Goods Sold,48540.03,0.0,48540.03,DOC4236,2024-04
718
+ TXN000717,2024-10-31,230000,Long-term Debt,0.0,26659.65,-26659.65,DOC9556,2024-10
719
+ TXN000718,2024-12-08,540000,Marketing Expense,22078.02,0.0,22078.02,DOC2439,2024-12
720
+ TXN000719,2024-02-20,400000,Sales Revenue,0.0,8940.83,-8940.83,DOC1340,2024-02
721
+ TXN000720,2024-01-21,410000,Service Revenue,0.0,48324.23,-48324.23,DOC1358,2024-01
722
+ TXN000721,2024-04-01,130000,Prepaid Expenses,29190.92,0.0,29190.92,DOC7626,2024-04
723
+ TXN000722,2024-04-20,400000,Sales Revenue,0.0,40856.17,-40856.17,DOC7652,2024-04
724
+ TXN000723,2024-04-08,500000,Cost of Goods Sold,44027.71,0.0,44027.71,DOC3151,2024-04
725
+ TXN000724,2024-06-13,520000,Rent Expense,36567.82,0.0,36567.82,DOC3567,2024-06
726
+ TXN000725,2024-05-24,140000,"Property, Plant & Equipment",35573.15,0.0,35573.15,DOC4730,2024-05
727
+ TXN000726,2024-12-19,540000,Marketing Expense,36134.95,0.0,36134.95,DOC2708,2024-12
728
+ TXN000727,2024-05-19,420000,Interest Income,0.0,1995.28,-1995.28,DOC7538,2024-05
729
+ TXN000728,2024-01-05,210000,Accrued Liabilities,0.0,39731.11,-39731.11,DOC2960,2024-01
730
+ TXN000729,2024-01-12,410000,Service Revenue,0.0,48483.43,-48483.43,DOC1882,2024-01
731
+ TXN000730,2024-06-02,520000,Rent Expense,49051.27,0.0,49051.27,DOC6867,2024-06
732
+ TXN000731,2024-12-17,530000,Utilities Expense,24647.36,0.0,24647.36,DOC8929,2024-12
733
+ TXN000732,2024-04-11,130000,Prepaid Expenses,26169.96,0.0,26169.96,DOC9125,2024-04
734
+ TXN000733,2024-07-21,420000,Interest Income,0.0,45944.86,-45944.86,DOC7642,2024-07
735
+ TXN000734,2024-06-27,510000,Salaries and Wages,44733.18,0.0,44733.18,DOC4802,2024-06
736
+ TXN000735,2024-04-01,510000,Salaries and Wages,41393.19,0.0,41393.19,DOC7142,2024-04
737
+ TXN000736,2024-09-16,420000,Interest Income,0.0,40348.81,-40348.81,DOC5258,2024-09
738
+ TXN000737,2024-11-24,430000,Other Income,0.0,3067.63,-3067.63,DOC8084,2024-11
739
+ TXN000738,2024-12-02,500000,Cost of Goods Sold,42363.75,0.0,42363.75,DOC4935,2024-12
740
+ TXN000739,2024-05-26,220000,Short-term Debt,0.0,15663.76,-15663.76,DOC6442,2024-05
741
+ TXN000740,2024-01-13,140000,"Property, Plant & Equipment",48579.5,0.0,48579.5,DOC2724,2024-01
742
+ TXN000741,2024-04-23,430000,Other Income,0.0,23894.49,-23894.49,DOC4420,2024-04
743
+ TXN000742,2024-11-18,310000,Retained Earnings,0.0,34657.37,-34657.37,DOC6929,2024-11
744
+ TXN000743,2024-07-22,540000,Marketing Expense,40241.42,0.0,40241.42,DOC4735,2024-07
745
+ TXN000744,2024-07-02,120000,Inventory,26476.05,0.0,26476.05,DOC8901,2024-07
746
+ TXN000745,2024-06-11,420000,Interest Income,0.0,49891.26,-49891.26,DOC3841,2024-06
747
+ TXN000746,2024-11-22,500000,Cost of Goods Sold,215.65,0.0,215.65,DOC2088,2024-11
748
+ TXN000747,2024-01-25,130000,Prepaid Expenses,31682.03,0.0,31682.03,DOC6668,2024-01
749
+ TXN000748,2024-08-19,400000,Sales Revenue,0.0,46860.84,-46860.84,DOC3235,2024-08
750
+ TXN000749,2024-05-06,230000,Long-term Debt,0.0,44232.77,-44232.77,DOC4175,2024-05
751
+ TXN000750,2024-10-16,230000,Long-term Debt,0.0,3974.7,-3974.7,DOC8427,2024-10
752
+ TXN000751,2024-03-15,200000,Accounts Payable,0.0,17506.14,-17506.14,DOC8938,2024-03
753
+ TXN000752,2024-07-06,410000,Service Revenue,0.0,28894.33,-28894.33,DOC6409,2024-07
754
+ TXN000753,2024-03-01,400000,Sales Revenue,0.0,5136.97,-5136.97,DOC9549,2024-03
755
+ TXN000754,2024-03-06,430000,Other Income,0.0,3935.42,-3935.42,DOC8913,2024-03
756
+ TXN000755,2024-12-23,430000,Other Income,0.0,2606.28,-2606.28,DOC2497,2024-12
757
+ TXN000756,2024-07-02,400000,Sales Revenue,0.0,14835.0,-14835.0,DOC3555,2024-07
758
+ TXN000757,2024-10-21,110000,Accounts Receivable,20125.17,0.0,20125.17,DOC2238,2024-10
759
+ TXN000758,2024-04-29,410000,Service Revenue,0.0,20314.62,-20314.62,DOC4701,2024-04
760
+ TXN000759,2024-02-22,210000,Accrued Liabilities,0.0,42127.31,-42127.31,DOC6789,2024-02
761
+ TXN000760,2024-09-25,540000,Marketing Expense,30214.31,0.0,30214.31,DOC8480,2024-09
762
+ TXN000761,2024-07-01,500000,Cost of Goods Sold,25203.89,0.0,25203.89,DOC6565,2024-07
763
+ TXN000762,2024-01-10,300000,Common Stock,0.0,41089.46,-41089.46,DOC2589,2024-01
764
+ TXN000763,2024-05-27,530000,Utilities Expense,34162.6,0.0,34162.6,DOC7555,2024-05
765
+ TXN000764,2024-02-22,410000,Service Revenue,0.0,40217.53,-40217.53,DOC7846,2024-02
766
+ TXN000765,2024-07-23,130000,Prepaid Expenses,45847.91,0.0,45847.91,DOC7919,2024-07
767
+ TXN000766,2024-01-12,510000,Salaries and Wages,24885.1,0.0,24885.1,DOC5945,2024-01
768
+ TXN000767,2024-05-06,110000,Accounts Receivable,2811.17,0.0,2811.17,DOC8758,2024-05
769
+ TXN000768,2024-12-14,500000,Cost of Goods Sold,2437.91,0.0,2437.91,DOC4167,2024-12
770
+ TXN000769,2024-07-27,200000,Accounts Payable,0.0,3228.21,-3228.21,DOC7056,2024-07
771
+ TXN000770,2024-11-20,200000,Accounts Payable,0.0,47028.38,-47028.38,DOC6951,2024-11
772
+ TXN000771,2024-04-30,310000,Retained Earnings,0.0,18075.67,-18075.67,DOC5232,2024-04
773
+ TXN000772,2024-04-09,110000,Accounts Receivable,45369.27,0.0,45369.27,DOC3224,2024-04
774
+ TXN000773,2024-04-21,200000,Accounts Payable,0.0,46822.43,-46822.43,DOC9662,2024-04
775
+ TXN000774,2024-11-11,100000,Cash and Cash Equivalents,31672.32,0.0,31672.32,DOC8094,2024-11
776
+ TXN000775,2024-06-23,300000,Common Stock,0.0,8430.96,-8430.96,DOC1234,2024-06
777
+ TXN000776,2024-04-10,400000,Sales Revenue,0.0,48305.77,-48305.77,DOC9043,2024-04
778
+ TXN000777,2024-09-29,310000,Retained Earnings,0.0,33837.8,-33837.8,DOC5888,2024-09
779
+ TXN000778,2024-01-21,230000,Long-term Debt,0.0,23822.79,-23822.79,DOC6842,2024-01
780
+ TXN000779,2024-10-19,320000,Other Equity,0.0,2504.48,-2504.48,DOC2124,2024-10
781
+ TXN000780,2024-12-24,430000,Other Income,0.0,25070.02,-25070.02,DOC6672,2024-12
782
+ TXN000781,2024-10-29,120000,Inventory,5637.78,0.0,5637.78,DOC8935,2024-10
783
+ TXN000782,2024-08-14,410000,Service Revenue,0.0,18553.68,-18553.68,DOC6574,2024-08
784
+ TXN000783,2024-01-13,230000,Long-term Debt,0.0,20883.57,-20883.57,DOC9588,2024-01
785
+ TXN000784,2024-01-31,130000,Prepaid Expenses,36010.73,0.0,36010.73,DOC5424,2024-01
786
+ TXN000785,2024-11-05,200000,Accounts Payable,0.0,44019.82,-44019.82,DOC3016,2024-11
787
+ TXN000786,2024-04-18,130000,Prepaid Expenses,37725.75,0.0,37725.75,DOC2772,2024-04
788
+ TXN000787,2024-08-03,110000,Accounts Receivable,46547.28,0.0,46547.28,DOC8170,2024-08
789
+ TXN000788,2024-05-28,200000,Accounts Payable,0.0,34141.47,-34141.47,DOC2461,2024-05
790
+ TXN000789,2024-12-21,100000,Cash and Cash Equivalents,4358.53,0.0,4358.53,DOC1234,2024-12
791
+ TXN000790,2024-01-13,120000,Inventory,2998.79,0.0,2998.79,DOC5213,2024-01
792
+ TXN000791,2024-02-22,300000,Common Stock,0.0,13452.87,-13452.87,DOC3100,2024-02
793
+ TXN000792,2024-02-15,300000,Common Stock,0.0,12170.26,-12170.26,DOC4173,2024-02
794
+ TXN000793,2024-12-02,110000,Accounts Receivable,6305.98,0.0,6305.98,DOC1674,2024-12
795
+ TXN000794,2024-04-20,120000,Inventory,16579.11,0.0,16579.11,DOC4253,2024-04
796
+ TXN000795,2024-01-24,530000,Utilities Expense,36270.34,0.0,36270.34,DOC9931,2024-01
797
+ TXN000796,2024-11-16,200000,Accounts Payable,0.0,15662.01,-15662.01,DOC4227,2024-11
798
+ TXN000797,2024-06-23,430000,Other Income,0.0,11068.29,-11068.29,DOC3745,2024-06
799
+ TXN000798,2024-10-09,320000,Other Equity,0.0,28810.23,-28810.23,DOC6818,2024-10
800
+ TXN000799,2024-08-09,420000,Interest Income,0.0,18449.91,-18449.91,DOC5063,2024-08
801
+ TXN000800,2024-06-01,540000,Marketing Expense,38679.78,0.0,38679.78,DOC5025,2024-06
802
+ TXN000801,2024-08-31,210000,Accrued Liabilities,0.0,32128.81,-32128.81,DOC7155,2024-08
803
+ TXN000802,2024-07-26,430000,Other Income,0.0,15060.05,-15060.05,DOC5579,2024-07
804
+ TXN000803,2024-05-14,400000,Sales Revenue,0.0,43974.83,-43974.83,DOC5402,2024-05
805
+ TXN000804,2024-06-08,230000,Long-term Debt,0.0,44938.17,-44938.17,DOC9835,2024-06
806
+ TXN000805,2024-07-13,220000,Short-term Debt,0.0,35535.76,-35535.76,DOC3204,2024-07
807
+ TXN000806,2024-08-13,110000,Accounts Receivable,24255.45,0.0,24255.45,DOC2102,2024-08
808
+ TXN000807,2024-08-05,320000,Other Equity,0.0,29152.22,-29152.22,DOC6223,2024-08
809
+ TXN000808,2024-04-28,230000,Long-term Debt,0.0,39280.96,-39280.96,DOC7683,2024-04
810
+ TXN000809,2024-01-17,230000,Long-term Debt,0.0,11346.53,-11346.53,DOC8659,2024-01
811
+ TXN000810,2024-12-27,210000,Accrued Liabilities,0.0,44814.15,-44814.15,DOC8468,2024-12
812
+ TXN000811,2024-09-23,520000,Rent Expense,49084.5,0.0,49084.5,DOC7599,2024-09
813
+ TXN000812,2024-03-08,220000,Short-term Debt,0.0,19469.47,-19469.47,DOC4483,2024-03
814
+ TXN000813,2024-11-16,310000,Retained Earnings,0.0,17325.09,-17325.09,DOC7707,2024-11
815
+ TXN000814,2024-08-03,200000,Accounts Payable,0.0,36276.56,-36276.56,DOC3606,2024-08
816
+ TXN000815,2024-06-22,230000,Long-term Debt,0.0,3203.94,-3203.94,DOC8763,2024-06
817
+ TXN000816,2024-12-26,530000,Utilities Expense,22438.9,0.0,22438.9,DOC6685,2024-12
818
+ TXN000817,2024-08-13,100000,Cash and Cash Equivalents,12170.48,0.0,12170.48,DOC4644,2024-08
819
+ TXN000818,2024-02-15,540000,Marketing Expense,3904.34,0.0,3904.34,DOC3645,2024-02
820
+ TXN000819,2024-03-18,510000,Salaries and Wages,27374.2,0.0,27374.2,DOC2932,2024-03
821
+ TXN000820,2024-01-06,120000,Inventory,22332.53,0.0,22332.53,DOC1492,2024-01
822
+ TXN000821,2024-04-17,310000,Retained Earnings,0.0,42198.12,-42198.12,DOC7474,2024-04
823
+ TXN000822,2024-02-19,400000,Sales Revenue,0.0,42703.87,-42703.87,DOC3743,2024-02
824
+ TXN000823,2024-05-18,320000,Other Equity,0.0,23002.28,-23002.28,DOC8186,2024-05
825
+ TXN000824,2024-06-02,200000,Accounts Payable,0.0,808.08,-808.08,DOC1619,2024-06
826
+ TXN000825,2024-10-11,520000,Rent Expense,45404.15,0.0,45404.15,DOC2296,2024-10
827
+ TXN000826,2024-10-25,310000,Retained Earnings,0.0,26120.84,-26120.84,DOC7593,2024-10
828
+ TXN000827,2024-09-03,110000,Accounts Receivable,19700.41,0.0,19700.41,DOC3409,2024-09
829
+ TXN000828,2024-12-17,220000,Short-term Debt,0.0,15569.0,-15569.0,DOC7976,2024-12
830
+ TXN000829,2024-02-08,310000,Retained Earnings,0.0,39089.31,-39089.31,DOC4667,2024-02
831
+ TXN000830,2024-12-07,510000,Salaries and Wages,42774.83,0.0,42774.83,DOC3468,2024-12
832
+ TXN000831,2024-02-05,300000,Common Stock,0.0,17915.76,-17915.76,DOC4583,2024-02
833
+ TXN000832,2024-09-11,300000,Common Stock,0.0,31754.75,-31754.75,DOC3217,2024-09
834
+ TXN000833,2024-11-17,220000,Short-term Debt,0.0,25782.71,-25782.71,DOC6722,2024-11
835
+ TXN000834,2024-06-03,140000,"Property, Plant & Equipment",1555.57,0.0,1555.57,DOC8618,2024-06
836
+ TXN000835,2024-05-20,320000,Other Equity,0.0,122.09,-122.09,DOC3787,2024-05
837
+ TXN000836,2024-09-04,230000,Long-term Debt,0.0,49505.31,-49505.31,DOC7689,2024-09
838
+ TXN000837,2024-05-08,520000,Rent Expense,2341.07,0.0,2341.07,DOC5422,2024-05
839
+ TXN000838,2024-11-18,500000,Cost of Goods Sold,19683.66,0.0,19683.66,DOC1628,2024-11
840
+ TXN000839,2024-04-08,120000,Inventory,47551.34,0.0,47551.34,DOC4674,2024-04
841
+ TXN000840,2024-01-17,410000,Service Revenue,0.0,39398.7,-39398.7,DOC9307,2024-01
842
+ TXN000841,2024-06-29,530000,Utilities Expense,17993.07,0.0,17993.07,DOC4008,2024-06
843
+ TXN000842,2024-09-13,510000,Salaries and Wages,9660.49,0.0,9660.49,DOC4699,2024-09
844
+ TXN000843,2024-11-10,300000,Common Stock,0.0,11120.55,-11120.55,DOC5200,2024-11
845
+ TXN000844,2024-07-11,140000,"Property, Plant & Equipment",8843.57,0.0,8843.57,DOC2772,2024-07
846
+ TXN000845,2024-08-08,230000,Long-term Debt,0.0,21625.89,-21625.89,DOC8423,2024-08
847
+ TXN000846,2024-11-07,310000,Retained Earnings,0.0,29046.43,-29046.43,DOC7242,2024-11
848
+ TXN000847,2024-10-08,320000,Other Equity,0.0,41999.02,-41999.02,DOC2132,2024-10
849
+ TXN000848,2024-10-29,210000,Accrued Liabilities,0.0,45197.5,-45197.5,DOC7297,2024-10
850
+ TXN000849,2024-05-12,220000,Short-term Debt,0.0,21030.45,-21030.45,DOC3179,2024-05
851
+ TXN000850,2024-03-24,300000,Common Stock,0.0,24927.24,-24927.24,DOC4180,2024-03
852
+ TXN000851,2024-02-10,220000,Short-term Debt,0.0,14855.16,-14855.16,DOC1614,2024-02
853
+ TXN000852,2024-11-19,410000,Service Revenue,0.0,14832.57,-14832.57,DOC3468,2024-11
854
+ TXN000853,2024-07-13,100000,Cash and Cash Equivalents,4843.15,0.0,4843.15,DOC4607,2024-07
855
+ TXN000854,2024-01-04,300000,Common Stock,0.0,7664.59,-7664.59,DOC9120,2024-01
856
+ TXN000855,2024-06-29,500000,Cost of Goods Sold,14195.37,0.0,14195.37,DOC1278,2024-06
857
+ TXN000856,2024-03-09,400000,Sales Revenue,0.0,19652.02,-19652.02,DOC5276,2024-03
858
+ TXN000857,2024-11-08,230000,Long-term Debt,0.0,29562.51,-29562.51,DOC9891,2024-11
859
+ TXN000858,2024-12-22,200000,Accounts Payable,0.0,36184.1,-36184.1,DOC7534,2024-12
860
+ TXN000859,2024-03-25,210000,Accrued Liabilities,0.0,15266.73,-15266.73,DOC6634,2024-03
861
+ TXN000860,2024-12-07,520000,Rent Expense,36494.31,0.0,36494.31,DOC4109,2024-12
862
+ TXN000861,2024-08-26,520000,Rent Expense,20855.6,0.0,20855.6,DOC7028,2024-08
863
+ TXN000862,2024-01-30,510000,Salaries and Wages,16332.23,0.0,16332.23,DOC7680,2024-01
864
+ TXN000863,2024-07-24,430000,Other Income,0.0,6355.29,-6355.29,DOC5591,2024-07
865
+ TXN000864,2024-08-15,420000,Interest Income,0.0,49244.43,-49244.43,DOC6141,2024-08
866
+ TXN000865,2024-11-05,540000,Marketing Expense,29572.83,0.0,29572.83,DOC9463,2024-11
867
+ TXN000866,2024-07-20,300000,Common Stock,0.0,1131.5,-1131.5,DOC9712,2024-07
868
+ TXN000867,2024-05-18,500000,Cost of Goods Sold,31458.86,0.0,31458.86,DOC3832,2024-05
869
+ TXN000868,2024-02-17,130000,Prepaid Expenses,14898.34,0.0,14898.34,DOC1152,2024-02
870
+ TXN000869,2024-12-22,540000,Marketing Expense,5215.55,0.0,5215.55,DOC6310,2024-12
871
+ TXN000870,2024-10-18,520000,Rent Expense,48623.76,0.0,48623.76,DOC8361,2024-10
872
+ TXN000871,2024-09-27,220000,Short-term Debt,0.0,35744.9,-35744.9,DOC2914,2024-09
873
+ TXN000872,2024-01-01,200000,Accounts Payable,0.0,6189.32,-6189.32,DOC1166,2024-01
874
+ TXN000873,2024-09-07,500000,Cost of Goods Sold,2689.58,0.0,2689.58,DOC3120,2024-09
875
+ TXN000874,2024-03-10,400000,Sales Revenue,0.0,16846.96,-16846.96,DOC3292,2024-03
876
+ TXN000875,2024-12-02,120000,Inventory,35088.38,0.0,35088.38,DOC2903,2024-12
877
+ TXN000876,2024-04-18,420000,Interest Income,0.0,47359.82,-47359.82,DOC5160,2024-04
878
+ TXN000877,2024-09-27,500000,Cost of Goods Sold,25382.97,0.0,25382.97,DOC2151,2024-09
879
+ TXN000878,2024-12-04,130000,Prepaid Expenses,39130.35,0.0,39130.35,DOC4490,2024-12
880
+ TXN000879,2024-03-18,220000,Short-term Debt,0.0,35214.62,-35214.62,DOC2293,2024-03
881
+ TXN000880,2024-07-07,110000,Accounts Receivable,4965.96,0.0,4965.96,DOC7871,2024-07
882
+ TXN000881,2024-06-16,520000,Rent Expense,2678.27,0.0,2678.27,DOC3240,2024-06
883
+ TXN000882,2024-10-09,140000,"Property, Plant & Equipment",24164.99,0.0,24164.99,DOC1999,2024-10
884
+ TXN000883,2024-08-27,400000,Sales Revenue,0.0,40020.17,-40020.17,DOC9850,2024-08
885
+ TXN000884,2024-03-20,320000,Other Equity,0.0,6672.58,-6672.58,DOC2481,2024-03
886
+ TXN000885,2024-04-04,530000,Utilities Expense,15558.41,0.0,15558.41,DOC4093,2024-04
887
+ TXN000886,2024-11-08,520000,Rent Expense,39854.4,0.0,39854.4,DOC4277,2024-11
888
+ TXN000887,2024-04-23,120000,Inventory,41658.24,0.0,41658.24,DOC5690,2024-04
889
+ TXN000888,2024-07-28,520000,Rent Expense,12450.75,0.0,12450.75,DOC8291,2024-07
890
+ TXN000889,2024-04-22,100000,Cash and Cash Equivalents,1087.8,0.0,1087.8,DOC1139,2024-04
891
+ TXN000890,2024-04-06,500000,Cost of Goods Sold,21583.96,0.0,21583.96,DOC7043,2024-04
892
+ TXN000891,2024-03-09,410000,Service Revenue,0.0,3510.82,-3510.82,DOC4104,2024-03
893
+ TXN000892,2024-01-19,510000,Salaries and Wages,33909.29,0.0,33909.29,DOC9058,2024-01
894
+ TXN000893,2024-02-16,110000,Accounts Receivable,19133.91,0.0,19133.91,DOC7432,2024-02
895
+ TXN000894,2024-03-24,400000,Sales Revenue,0.0,33606.81,-33606.81,DOC7358,2024-03
896
+ TXN000895,2024-05-07,520000,Rent Expense,37571.9,0.0,37571.9,DOC5855,2024-05
897
+ TXN000896,2024-01-29,530000,Utilities Expense,16330.17,0.0,16330.17,DOC3761,2024-01
898
+ TXN000897,2024-02-26,230000,Long-term Debt,0.0,672.88,-672.88,DOC6693,2024-02
899
+ TXN000898,2024-01-17,300000,Common Stock,0.0,5245.76,-5245.76,DOC8737,2024-01
900
+ TXN000899,2024-11-13,140000,"Property, Plant & Equipment",27819.22,0.0,27819.22,DOC4802,2024-11
901
+ TXN000900,2024-07-22,500000,Cost of Goods Sold,3794.71,0.0,3794.71,DOC7241,2024-07
902
+ TXN000901,2024-07-26,120000,Inventory,31571.95,0.0,31571.95,DOC7309,2024-07
903
+ TXN000902,2024-10-21,310000,Retained Earnings,0.0,8688.32,-8688.32,DOC2518,2024-10
904
+ TXN000903,2024-01-20,200000,Accounts Payable,0.0,14934.81,-14934.81,DOC3195,2024-01
905
+ TXN000904,2024-03-24,320000,Other Equity,0.0,4695.55,-4695.55,DOC3849,2024-03
906
+ TXN000905,2024-05-13,120000,Inventory,12619.56,0.0,12619.56,DOC4849,2024-05
907
+ TXN000906,2024-12-17,230000,Long-term Debt,0.0,30539.37,-30539.37,DOC5195,2024-12
908
+ TXN000907,2024-03-05,110000,Accounts Receivable,5941.6,0.0,5941.6,DOC7409,2024-03
909
+ TXN000908,2024-03-19,540000,Marketing Expense,10732.94,0.0,10732.94,DOC3994,2024-03
910
+ TXN000909,2024-09-04,430000,Other Income,0.0,29420.53,-29420.53,DOC9801,2024-09
911
+ TXN000910,2024-10-10,400000,Sales Revenue,0.0,31411.58,-31411.58,DOC5396,2024-10
912
+ TXN000911,2024-01-07,130000,Prepaid Expenses,12729.77,0.0,12729.77,DOC8331,2024-01
913
+ TXN000912,2024-05-17,520000,Rent Expense,20011.86,0.0,20011.86,DOC3093,2024-05
914
+ TXN000913,2024-10-14,300000,Common Stock,0.0,10811.93,-10811.93,DOC6285,2024-10
915
+ TXN000914,2024-11-25,500000,Cost of Goods Sold,515.17,0.0,515.17,DOC3101,2024-11
916
+ TXN000915,2024-08-31,510000,Salaries and Wages,37444.38,0.0,37444.38,DOC8294,2024-08
917
+ TXN000916,2024-09-27,420000,Interest Income,0.0,40880.89,-40880.89,DOC3426,2024-09
918
+ TXN000917,2024-09-04,230000,Long-term Debt,0.0,11535.68,-11535.68,DOC5138,2024-09
919
+ TXN000918,2024-06-18,230000,Long-term Debt,0.0,35073.3,-35073.3,DOC9560,2024-06
920
+ TXN000919,2024-05-30,540000,Marketing Expense,2595.93,0.0,2595.93,DOC6166,2024-05
921
+ TXN000920,2024-03-09,100000,Cash and Cash Equivalents,3949.54,0.0,3949.54,DOC5897,2024-03
922
+ TXN000921,2024-07-21,220000,Short-term Debt,0.0,23001.13,-23001.13,DOC4901,2024-07
923
+ TXN000922,2024-11-26,100000,Cash and Cash Equivalents,29780.68,0.0,29780.68,DOC2629,2024-11
924
+ TXN000923,2024-05-17,430000,Other Income,0.0,44259.72,-44259.72,DOC5370,2024-05
925
+ TXN000924,2024-11-14,130000,Prepaid Expenses,27258.27,0.0,27258.27,DOC2993,2024-11
926
+ TXN000925,2024-11-16,200000,Accounts Payable,0.0,12742.52,-12742.52,DOC1602,2024-11
927
+ TXN000926,2024-09-20,410000,Service Revenue,0.0,3516.09,-3516.09,DOC1489,2024-09
928
+ TXN000927,2024-03-13,500000,Cost of Goods Sold,10390.25,0.0,10390.25,DOC8786,2024-03
929
+ TXN000928,2024-10-10,210000,Accrued Liabilities,0.0,45771.33,-45771.33,DOC5744,2024-10
930
+ TXN000929,2024-02-25,510000,Salaries and Wages,39389.93,0.0,39389.93,DOC3817,2024-02
931
+ TXN000930,2024-05-02,310000,Retained Earnings,0.0,35302.5,-35302.5,DOC3041,2024-05
932
+ TXN000931,2024-04-23,220000,Short-term Debt,0.0,32501.18,-32501.18,DOC6668,2024-04
933
+ TXN000932,2024-04-01,420000,Interest Income,0.0,21027.54,-21027.54,DOC1062,2024-04
934
+ TXN000933,2024-07-04,310000,Retained Earnings,0.0,1193.48,-1193.48,DOC7915,2024-07
935
+ TXN000934,2024-03-01,210000,Accrued Liabilities,0.0,23529.32,-23529.32,DOC9003,2024-03
936
+ TXN000935,2024-05-08,420000,Interest Income,0.0,38245.59,-38245.59,DOC9312,2024-05
937
+ TXN000936,2024-04-11,100000,Cash and Cash Equivalents,8058.66,0.0,8058.66,DOC6103,2024-04
938
+ TXN000937,2024-07-20,140000,"Property, Plant & Equipment",47132.31,0.0,47132.31,DOC1241,2024-07
939
+ TXN000938,2024-04-18,210000,Accrued Liabilities,0.0,41341.76,-41341.76,DOC1802,2024-04
940
+ TXN000939,2024-03-09,130000,Prepaid Expenses,497.42,0.0,497.42,DOC3187,2024-03
941
+ TXN000940,2024-01-23,300000,Common Stock,0.0,12818.62,-12818.62,DOC1060,2024-01
942
+ TXN000941,2024-12-09,530000,Utilities Expense,39485.71,0.0,39485.71,DOC3591,2024-12
943
+ TXN000942,2024-02-05,140000,"Property, Plant & Equipment",31647.61,0.0,31647.61,DOC2200,2024-02
944
+ TXN000943,2024-11-09,300000,Common Stock,0.0,47061.93,-47061.93,DOC8024,2024-11
945
+ TXN000944,2024-11-12,540000,Marketing Expense,19697.26,0.0,19697.26,DOC3594,2024-11
946
+ TXN000945,2024-05-29,210000,Accrued Liabilities,0.0,26127.81,-26127.81,DOC1086,2024-05
947
+ TXN000946,2024-03-16,500000,Cost of Goods Sold,42952.34,0.0,42952.34,DOC7968,2024-03
948
+ TXN000947,2024-10-11,230000,Long-term Debt,0.0,23013.54,-23013.54,DOC3700,2024-10
949
+ TXN000948,2024-04-21,410000,Service Revenue,0.0,5965.81,-5965.81,DOC6520,2024-04
950
+ TXN000949,2024-03-25,220000,Short-term Debt,0.0,35965.11,-35965.11,DOC9837,2024-03
951
+ TXN000950,2024-01-18,320000,Other Equity,0.0,14909.66,-14909.66,DOC5384,2024-01
952
+ TXN000951,2024-05-05,500000,Cost of Goods Sold,8370.83,0.0,8370.83,DOC8081,2024-05
953
+ TXN000952,2024-05-01,520000,Rent Expense,17778.14,0.0,17778.14,DOC9306,2024-05
954
+ TXN000953,2024-06-10,130000,Prepaid Expenses,26009.31,0.0,26009.31,DOC8178,2024-06
955
+ TXN000954,2024-06-15,410000,Service Revenue,0.0,2980.83,-2980.83,DOC1146,2024-06
956
+ TXN000955,2024-05-31,420000,Interest Income,0.0,30853.39,-30853.39,DOC6628,2024-05
957
+ TXN000956,2024-06-23,230000,Long-term Debt,0.0,37717.87,-37717.87,DOC4552,2024-06
958
+ TXN000957,2024-07-13,520000,Rent Expense,34851.85,0.0,34851.85,DOC7318,2024-07
959
+ TXN000958,2024-12-19,300000,Common Stock,0.0,20656.71,-20656.71,DOC7901,2024-12
960
+ TXN000959,2024-04-02,100000,Cash and Cash Equivalents,26671.95,0.0,26671.95,DOC1204,2024-04
961
+ TXN000960,2024-09-01,430000,Other Income,0.0,5948.47,-5948.47,DOC5390,2024-09
962
+ TXN000961,2024-03-11,500000,Cost of Goods Sold,5802.86,0.0,5802.86,DOC6126,2024-03
963
+ TXN000962,2024-04-12,500000,Cost of Goods Sold,21021.66,0.0,21021.66,DOC2776,2024-04
964
+ TXN000963,2024-06-19,500000,Cost of Goods Sold,3545.39,0.0,3545.39,DOC2788,2024-06
965
+ TXN000964,2024-07-25,120000,Inventory,44292.43,0.0,44292.43,DOC4893,2024-07
966
+ TXN000965,2024-04-29,230000,Long-term Debt,0.0,37656.65,-37656.65,DOC8260,2024-04
967
+ TXN000966,2024-12-29,430000,Other Income,0.0,16748.06,-16748.06,DOC4816,2024-12
968
+ TXN000967,2024-07-24,210000,Accrued Liabilities,0.0,25577.03,-25577.03,DOC1658,2024-07
969
+ TXN000968,2024-09-27,110000,Accounts Receivable,23368.86,0.0,23368.86,DOC4764,2024-09
970
+ TXN000969,2024-01-30,410000,Service Revenue,0.0,32423.93,-32423.93,DOC7801,2024-01
971
+ TXN000970,2024-02-17,520000,Rent Expense,10477.02,0.0,10477.02,DOC4719,2024-02
972
+ TXN000971,2024-07-22,200000,Accounts Payable,0.0,9167.99,-9167.99,DOC6991,2024-07
973
+ TXN000972,2024-11-30,130000,Prepaid Expenses,3421.58,0.0,3421.58,DOC5780,2024-11
974
+ TXN000973,2024-11-17,510000,Salaries and Wages,25717.07,0.0,25717.07,DOC9181,2024-11
975
+ TXN000974,2024-01-20,420000,Interest Income,0.0,49859.4,-49859.4,DOC1634,2024-01
976
+ TXN000975,2024-08-08,300000,Common Stock,0.0,22374.71,-22374.71,DOC1002,2024-08
977
+ TXN000976,2024-11-15,410000,Service Revenue,0.0,30459.61,-30459.61,DOC6626,2024-11
978
+ TXN000977,2024-11-26,530000,Utilities Expense,32870.8,0.0,32870.8,DOC7239,2024-11
979
+ TXN000978,2024-03-02,310000,Retained Earnings,0.0,42132.04,-42132.04,DOC1670,2024-03
980
+ TXN000979,2024-11-12,110000,Accounts Receivable,5273.56,0.0,5273.56,DOC6167,2024-11
981
+ TXN000980,2024-05-15,130000,Prepaid Expenses,21360.94,0.0,21360.94,DOC7457,2024-05
982
+ TXN000981,2024-11-13,140000,"Property, Plant & Equipment",40169.8,0.0,40169.8,DOC4792,2024-11
983
+ TXN000982,2024-07-29,120000,Inventory,31061.64,0.0,31061.64,DOC4612,2024-07
984
+ TXN000983,2024-04-01,210000,Accrued Liabilities,0.0,9829.26,-9829.26,DOC9411,2024-04
985
+ TXN000984,2024-08-02,200000,Accounts Payable,0.0,30310.05,-30310.05,DOC2812,2024-08
986
+ TXN000985,2024-09-01,130000,Prepaid Expenses,31656.33,0.0,31656.33,DOC8081,2024-09
987
+ TXN000986,2024-06-18,320000,Other Equity,0.0,20807.06,-20807.06,DOC7410,2024-06
988
+ TXN000987,2024-01-08,430000,Other Income,0.0,29466.4,-29466.4,DOC6944,2024-01
989
+ TXN000988,2024-08-24,220000,Short-term Debt,0.0,10824.14,-10824.14,DOC2629,2024-08
990
+ TXN000989,2024-05-17,320000,Other Equity,0.0,25402.28,-25402.28,DOC4278,2024-05
991
+ TXN000990,2024-03-21,430000,Other Income,0.0,29274.94,-29274.94,DOC7539,2024-03
992
+ TXN000991,2024-12-11,520000,Rent Expense,22593.74,0.0,22593.74,DOC8485,2024-12
993
+ TXN000992,2024-03-02,500000,Cost of Goods Sold,34648.71,0.0,34648.71,DOC5334,2024-03
994
+ TXN000993,2024-06-14,120000,Inventory,37436.82,0.0,37436.82,DOC7204,2024-06
995
+ TXN000994,2024-06-21,100000,Cash and Cash Equivalents,41313.29,0.0,41313.29,DOC1922,2024-06
996
+ TXN000995,2024-10-04,130000,Prepaid Expenses,3250.7,0.0,3250.7,DOC2230,2024-10
997
+ TXN000996,2024-10-05,130000,Prepaid Expenses,49166.95,0.0,49166.95,DOC4940,2024-10
998
+ TXN000997,2024-07-22,530000,Utilities Expense,7615.34,0.0,7615.34,DOC9960,2024-07
999
+ TXN000998,2024-03-03,140000,"Property, Plant & Equipment",13273.82,0.0,13273.82,DOC5500,2024-03
1000
+ TXN000999,2024-03-19,120000,Inventory,27911.12,0.0,27911.12,DOC4191,2024-03
1001
+ TXN001000,2024-06-26,410000,Service Revenue,0.0,39210.24,-39210.24,DOC3103,2024-06
data/synthetic_sales_orders.csv ADDED
@@ -0,0 +1,501 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Order_Number,Order_Date,Delivery_Date,Customer_ID,Customer_Name,Product_Code,Product_Name,Quantity,Unit_Price,Total_Amount,Currency,Region,Status,Sales_Rep
2
+ SO000001,2024-04-12,2024-05-08,CUST00093,Customer CUST00093,PRD075,Product H,61,302.46,18449.85,USD,South,Open,REP11
3
+ SO000002,2024-03-28,2024-04-24,CUST00100,Customer CUST00100,PRD030,Product H,24,328.94,7894.45,USD,Central,Cancelled,REP06
4
+ SO000003,2024-07-10,2024-08-06,CUST00033,Customer CUST00033,PRD059,Product J,22,13.46,296.17,USD,North,In Process,REP10
5
+ SO000004,2024-07-06,2024-07-28,CUST00015,Customer CUST00015,PRD051,Product C,55,491.78,27048.07,USD,North,Open,REP07
6
+ SO000005,2024-01-21,2024-02-05,CUST00039,Customer CUST00039,PRD090,Product B,4,471.68,1886.72,USD,South,In Process,REP02
7
+ SO000006,2024-12-05,2024-12-26,CUST00060,Customer CUST00060,PRD036,Product G,44,252.64,11116.01,USD,East,Cancelled,REP18
8
+ SO000007,2024-12-25,2025-01-04,CUST00002,Customer CUST00002,PRD090,Product F,54,277.89,15005.95,USD,Central,Cancelled,REP12
9
+ SO000008,2024-06-10,2024-06-26,CUST00062,Customer CUST00062,PRD040,Product D,14,366.36,5129.09,USD,West,Open,REP16
10
+ SO000009,2024-08-24,2024-09-17,CUST00053,Customer CUST00053,PRD041,Product H,26,482.98,12557.35,USD,West,Delivered,REP15
11
+ SO000010,2024-10-27,2024-11-03,CUST00089,Customer CUST00089,PRD063,Product G,9,388.4,3495.6,USD,West,In Process,REP11
12
+ SO000011,2024-03-21,2024-04-04,CUST00035,Customer CUST00035,PRD041,Product C,33,306.92,10128.37,USD,South,In Process,REP07
13
+ SO000012,2024-07-19,2024-08-02,CUST00012,Customer CUST00012,PRD086,Product B,33,41.14,1357.74,USD,Central,Delivered,REP03
14
+ SO000013,2024-08-14,2024-08-25,CUST00047,Customer CUST00047,PRD015,Product C,1,363.65,363.65,USD,East,Delivered,REP10
15
+ SO000014,2024-06-27,2024-07-10,CUST00052,Customer CUST00052,PRD029,Product D,94,78.27,7357.61,USD,Central,Delivered,REP04
16
+ SO000015,2024-01-13,2024-01-26,CUST00059,Customer CUST00059,PRD057,Product C,86,441.43,37962.91,USD,South,Delivered,REP06
17
+ SO000016,2024-10-10,2024-10-28,CUST00044,Customer CUST00044,PRD089,Product D,30,442.81,13284.22,USD,South,Open,REP07
18
+ SO000017,2024-07-08,2024-07-15,CUST00001,Customer CUST00001,PRD003,Product I,27,219.28,5920.64,USD,West,In Process,REP07
19
+ SO000018,2024-07-16,2024-07-30,CUST00027,Customer CUST00027,PRD024,Product I,62,118.83,7367.64,USD,East,In Process,REP15
20
+ SO000019,2024-11-10,2024-12-08,CUST00032,Customer CUST00032,PRD012,Product H,52,188.18,9785.28,USD,North,In Process,REP07
21
+ SO000020,2024-04-22,2024-05-03,CUST00056,Customer CUST00056,PRD087,Product A,59,308.69,18212.5,USD,South,In Process,REP05
22
+ SO000021,2024-08-11,2024-08-18,CUST00001,Customer CUST00001,PRD032,Product C,2,270.16,540.32,USD,South,Cancelled,REP04
23
+ SO000022,2024-07-21,2024-08-13,CUST00038,Customer CUST00038,PRD016,Product H,69,319.83,22068.26,USD,East,Delivered,REP01
24
+ SO000023,2024-07-19,2024-07-31,CUST00080,Customer CUST00080,PRD067,Product C,20,169.72,3394.4,USD,West,Open,REP19
25
+ SO000024,2024-05-27,2024-06-09,CUST00052,Customer CUST00052,PRD011,Product I,33,204.81,6758.74,USD,South,Delivered,REP18
26
+ SO000025,2024-05-30,2024-06-15,CUST00099,Customer CUST00099,PRD002,Product G,16,410.44,6567.02,USD,North,Delivered,REP01
27
+ SO000026,2024-10-30,2024-11-17,CUST00069,Customer CUST00069,PRD019,Product E,32,320.22,10247.03,USD,North,In Process,REP16
28
+ SO000027,2024-07-26,2024-08-04,CUST00020,Customer CUST00020,PRD072,Product H,54,392.14,21175.51,USD,West,Open,REP04
29
+ SO000028,2024-04-13,2024-05-09,CUST00099,Customer CUST00099,PRD082,Product I,99,487.1,48222.43,USD,South,Open,REP02
30
+ SO000029,2024-11-05,2024-11-14,CUST00080,Customer CUST00080,PRD008,Product I,33,18.86,622.28,USD,Central,Open,REP07
31
+ SO000030,2024-07-13,2024-08-05,CUST00033,Customer CUST00033,PRD008,Product C,86,139.95,12035.63,USD,Central,In Process,REP02
32
+ SO000031,2024-10-03,2024-10-10,CUST00028,Customer CUST00028,PRD064,Product A,69,122.79,8472.56,USD,East,Delivered,REP17
33
+ SO000032,2024-01-17,2024-02-04,CUST00092,Customer CUST00092,PRD093,Product E,6,191.38,1148.27,USD,North,Cancelled,REP17
34
+ SO000033,2024-10-28,2024-11-24,CUST00095,Customer CUST00095,PRD087,Product C,60,427.97,25678.48,USD,Central,In Process,REP01
35
+ SO000034,2024-09-12,2024-09-21,CUST00018,Customer CUST00018,PRD024,Product I,95,423.66,40248.12,USD,East,Delivered,REP18
36
+ SO000035,2024-10-14,2024-11-04,CUST00086,Customer CUST00086,PRD017,Product G,66,134.54,8879.65,USD,South,Delivered,REP08
37
+ SO000036,2024-10-25,2024-11-22,CUST00048,Customer CUST00048,PRD025,Product G,93,155.29,14441.97,USD,South,Delivered,REP13
38
+ SO000037,2024-11-11,2024-11-24,CUST00057,Customer CUST00057,PRD015,Product D,45,105.19,4733.74,USD,West,Delivered,REP02
39
+ SO000038,2024-11-17,2024-12-16,CUST00063,Customer CUST00063,PRD058,Product F,51,238.14,12145.29,USD,Central,Delivered,REP17
40
+ SO000039,2024-06-28,2024-07-14,CUST00070,Customer CUST00070,PRD005,Product F,60,170.06,10203.55,USD,Central,In Process,REP07
41
+ SO000040,2024-07-14,2024-07-26,CUST00096,Customer CUST00096,PRD030,Product D,94,274.91,25841.65,USD,West,Open,REP19
42
+ SO000041,2024-05-24,2024-06-18,CUST00092,Customer CUST00092,PRD023,Product J,55,132.92,7310.69,USD,South,Cancelled,REP09
43
+ SO000042,2024-05-08,2024-05-15,CUST00034,Customer CUST00034,PRD016,Product F,48,99.6,4781.01,USD,Central,In Process,REP07
44
+ SO000043,2024-07-10,2024-07-21,CUST00022,Customer CUST00022,PRD057,Product G,67,131.39,8803.01,USD,East,Delivered,REP14
45
+ SO000044,2024-08-07,2024-08-18,CUST00047,Customer CUST00047,PRD016,Product A,94,429.18,40342.51,USD,West,Open,REP16
46
+ SO000045,2024-12-06,2024-12-19,CUST00100,Customer CUST00100,PRD069,Product A,94,328.39,30868.58,USD,South,Delivered,REP04
47
+ SO000046,2024-10-16,2024-11-11,CUST00095,Customer CUST00095,PRD004,Product J,19,256.54,4874.2,USD,North,Delivered,REP16
48
+ SO000047,2024-10-06,2024-10-28,CUST00002,Customer CUST00002,PRD012,Product A,92,297.03,27326.76,USD,East,Delivered,REP18
49
+ SO000048,2024-06-11,2024-06-18,CUST00033,Customer CUST00033,PRD040,Product C,43,471.32,20266.66,USD,East,Delivered,REP10
50
+ SO000049,2024-02-12,2024-03-01,CUST00029,Customer CUST00029,PRD026,Product B,35,174.91,6121.9,USD,South,In Process,REP10
51
+ SO000050,2024-03-30,2024-04-07,CUST00007,Customer CUST00007,PRD036,Product D,58,351.4,20381.27,USD,Central,Cancelled,REP04
52
+ SO000051,2024-12-22,2025-01-06,CUST00024,Customer CUST00024,PRD096,Product C,49,368.51,18056.86,USD,West,In Process,REP05
53
+ SO000052,2024-09-24,2024-10-17,CUST00055,Customer CUST00055,PRD084,Product G,89,126.74,11279.48,USD,North,Delivered,REP16
54
+ SO000053,2024-08-04,2024-09-01,CUST00013,Customer CUST00013,PRD076,Product C,49,36.21,1774.18,USD,Central,Cancelled,REP09
55
+ SO000054,2024-10-10,2024-10-30,CUST00095,Customer CUST00095,PRD012,Product D,83,251.58,20881.35,USD,Central,Open,REP04
56
+ SO000055,2024-02-22,2024-03-22,CUST00016,Customer CUST00016,PRD014,Product I,39,54.69,2132.95,USD,South,Cancelled,REP05
57
+ SO000056,2024-06-11,2024-07-10,CUST00093,Customer CUST00093,PRD007,Product B,76,347.13,26382.24,USD,South,Delivered,REP14
58
+ SO000057,2024-05-20,2024-06-03,CUST00042,Customer CUST00042,PRD037,Product I,50,447.03,22351.47,USD,South,Open,REP06
59
+ SO000058,2024-12-04,2024-12-18,CUST00065,Customer CUST00065,PRD036,Product F,17,474.15,8060.58,USD,North,Delivered,REP06
60
+ SO000059,2024-09-08,2024-10-03,CUST00061,Customer CUST00061,PRD067,Product F,39,217.87,8496.88,USD,South,In Process,REP13
61
+ SO000060,2024-05-20,2024-06-13,CUST00092,Customer CUST00092,PRD039,Product J,20,68.22,1364.42,USD,Central,Delivered,REP01
62
+ SO000061,2024-12-13,2025-01-05,CUST00025,Customer CUST00025,PRD032,Product H,33,119.56,3945.54,USD,South,Open,REP13
63
+ SO000062,2024-11-12,2024-12-03,CUST00021,Customer CUST00021,PRD019,Product F,85,496.55,42206.98,USD,Central,In Process,REP18
64
+ SO000063,2024-02-16,2024-03-02,CUST00049,Customer CUST00049,PRD074,Product A,54,296.31,16000.96,USD,North,Cancelled,REP16
65
+ SO000064,2024-12-23,2025-01-10,CUST00024,Customer CUST00024,PRD058,Product E,8,93.14,745.15,USD,West,In Process,REP18
66
+ SO000065,2024-01-28,2024-02-08,CUST00041,Customer CUST00041,PRD084,Product D,64,232.09,14853.63,USD,North,In Process,REP13
67
+ SO000066,2024-08-07,2024-08-29,CUST00029,Customer CUST00029,PRD066,Product C,6,475.4,2852.41,USD,Central,Delivered,REP10
68
+ SO000067,2024-11-07,2024-12-01,CUST00005,Customer CUST00005,PRD049,Product G,33,391.03,12903.83,USD,South,Cancelled,REP11
69
+ SO000068,2024-12-06,2025-01-03,CUST00059,Customer CUST00059,PRD001,Product A,77,41.12,3166.3,USD,North,In Process,REP16
70
+ SO000069,2024-11-06,2024-11-18,CUST00092,Customer CUST00092,PRD053,Product A,69,499.86,34490.45,USD,East,Delivered,REP05
71
+ SO000070,2024-07-20,2024-08-05,CUST00083,Customer CUST00083,PRD077,Product A,85,230.77,19615.16,USD,North,Cancelled,REP04
72
+ SO000071,2024-10-14,2024-10-22,CUST00092,Customer CUST00092,PRD003,Product H,39,339.07,13223.76,USD,South,In Process,REP18
73
+ SO000072,2024-09-24,2024-10-01,CUST00054,Customer CUST00054,PRD047,Product E,94,439.56,41318.66,USD,North,Delivered,REP15
74
+ SO000073,2024-08-16,2024-09-12,CUST00014,Customer CUST00014,PRD050,Product B,75,114.35,8576.43,USD,West,Cancelled,REP02
75
+ SO000074,2024-12-03,2024-12-24,CUST00091,Customer CUST00091,PRD088,Product C,63,365.93,23053.88,USD,North,Delivered,REP15
76
+ SO000075,2024-01-30,2024-02-28,CUST00051,Customer CUST00051,PRD074,Product A,5,400.27,2001.36,USD,South,Cancelled,REP17
77
+ SO000076,2024-12-05,2024-12-16,CUST00034,Customer CUST00034,PRD075,Product F,53,180.23,9552.33,USD,East,Delivered,REP19
78
+ SO000077,2024-04-20,2024-05-19,CUST00055,Customer CUST00055,PRD067,Product F,16,324.03,5184.46,USD,West,In Process,REP03
79
+ SO000078,2024-06-03,2024-06-27,CUST00061,Customer CUST00061,PRD042,Product J,51,30.03,1531.31,USD,Central,In Process,REP06
80
+ SO000079,2024-01-01,2024-01-12,CUST00012,Customer CUST00012,PRD073,Product J,46,188.49,8670.64,USD,South,Delivered,REP15
81
+ SO000080,2024-04-30,2024-05-28,CUST00056,Customer CUST00056,PRD052,Product A,26,435.47,11322.16,USD,North,Delivered,REP15
82
+ SO000081,2024-10-29,2024-11-26,CUST00014,Customer CUST00014,PRD014,Product J,28,190.77,5341.5,USD,South,Delivered,REP19
83
+ SO000082,2024-01-07,2024-01-16,CUST00023,Customer CUST00023,PRD028,Product B,38,270.98,10297.33,USD,North,Delivered,REP10
84
+ SO000083,2024-02-08,2024-03-02,CUST00086,Customer CUST00086,PRD068,Product J,44,124.28,5468.15,USD,Central,Delivered,REP10
85
+ SO000084,2024-03-07,2024-03-22,CUST00018,Customer CUST00018,PRD042,Product D,86,297.55,25589.48,USD,North,Delivered,REP09
86
+ SO000085,2024-04-10,2024-04-22,CUST00052,Customer CUST00052,PRD033,Product J,64,289.68,18539.61,USD,East,Cancelled,REP06
87
+ SO000086,2024-03-10,2024-04-08,CUST00004,Customer CUST00004,PRD040,Product H,55,422.73,23250.36,USD,East,Delivered,REP05
88
+ SO000087,2024-02-05,2024-02-17,CUST00066,Customer CUST00066,PRD051,Product D,92,459.52,42276.19,USD,North,In Process,REP02
89
+ SO000088,2024-11-30,2024-12-17,CUST00008,Customer CUST00008,PRD068,Product J,51,420.91,21466.18,USD,Central,Open,REP19
90
+ SO000089,2024-07-30,2024-08-06,CUST00020,Customer CUST00020,PRD038,Product A,12,66.27,795.24,USD,South,Delivered,REP05
91
+ SO000090,2024-05-18,2024-05-28,CUST00077,Customer CUST00077,PRD010,Product C,33,190.92,6300.46,USD,South,Delivered,REP12
92
+ SO000091,2024-01-13,2024-01-27,CUST00002,Customer CUST00002,PRD075,Product D,65,78.02,5071.57,USD,North,Delivered,REP15
93
+ SO000092,2024-02-07,2024-03-07,CUST00035,Customer CUST00035,PRD075,Product A,69,417.0,28773.24,USD,West,In Process,REP09
94
+ SO000093,2024-03-16,2024-03-25,CUST00035,Customer CUST00035,PRD072,Product A,40,363.58,14543.29,USD,West,Delivered,REP11
95
+ SO000094,2024-12-26,2025-01-06,CUST00014,Customer CUST00014,PRD026,Product C,85,101.34,8613.77,USD,East,Delivered,REP04
96
+ SO000095,2024-03-29,2024-04-17,CUST00042,Customer CUST00042,PRD097,Product I,18,410.13,7382.41,USD,East,Delivered,REP15
97
+ SO000096,2024-06-01,2024-06-24,CUST00097,Customer CUST00097,PRD070,Product G,66,276.34,18238.5,USD,East,Delivered,REP06
98
+ SO000097,2024-03-07,2024-03-20,CUST00051,Customer CUST00051,PRD094,Product H,42,78.24,3286.22,USD,Central,In Process,REP07
99
+ SO000098,2024-06-05,2024-06-17,CUST00057,Customer CUST00057,PRD010,Product A,27,374.53,10112.41,USD,West,Delivered,REP05
100
+ SO000099,2024-05-02,2024-05-18,CUST00097,Customer CUST00097,PRD052,Product F,38,272.88,10369.28,USD,West,In Process,REP15
101
+ SO000100,2024-06-05,2024-06-19,CUST00005,Customer CUST00005,PRD036,Product D,76,388.22,29504.88,USD,East,Delivered,REP04
102
+ SO000101,2024-10-08,2024-10-25,CUST00027,Customer CUST00027,PRD006,Product E,20,98.98,1979.66,USD,South,In Process,REP08
103
+ SO000102,2024-01-23,2024-02-13,CUST00090,Customer CUST00090,PRD060,Product J,13,78.17,1016.17,USD,South,Delivered,REP11
104
+ SO000103,2024-12-21,2025-01-12,CUST00068,Customer CUST00068,PRD031,Product E,37,356.55,13192.24,USD,South,Delivered,REP09
105
+ SO000104,2024-02-20,2024-03-11,CUST00040,Customer CUST00040,PRD021,Product I,86,456.24,39236.32,USD,North,Open,REP14
106
+ SO000105,2024-06-30,2024-07-29,CUST00057,Customer CUST00057,PRD021,Product A,63,162.61,10244.28,USD,East,Delivered,REP15
107
+ SO000106,2024-11-04,2024-11-19,CUST00074,Customer CUST00074,PRD025,Product D,57,12.27,699.37,USD,North,Open,REP11
108
+ SO000107,2024-10-20,2024-10-28,CUST00007,Customer CUST00007,PRD059,Product B,91,371.38,33795.18,USD,North,Delivered,REP12
109
+ SO000108,2024-09-07,2024-10-02,CUST00054,Customer CUST00054,PRD049,Product H,25,254.2,6355.01,USD,Central,Cancelled,REP11
110
+ SO000109,2024-05-29,2024-06-22,CUST00085,Customer CUST00085,PRD086,Product A,71,488.02,34649.08,USD,North,Open,REP08
111
+ SO000110,2024-02-18,2024-03-02,CUST00001,Customer CUST00001,PRD030,Product G,51,112.85,5755.54,USD,East,In Process,REP17
112
+ SO000111,2024-10-12,2024-11-03,CUST00040,Customer CUST00040,PRD066,Product C,18,154.08,2773.47,USD,East,In Process,REP17
113
+ SO000112,2024-04-23,2024-05-05,CUST00051,Customer CUST00051,PRD074,Product D,1,173.84,173.84,USD,East,In Process,REP19
114
+ SO000113,2024-06-10,2024-06-17,CUST00087,Customer CUST00087,PRD057,Product G,92,421.5,38777.68,USD,Central,In Process,REP03
115
+ SO000114,2024-09-11,2024-09-25,CUST00054,Customer CUST00054,PRD034,Product I,67,444.86,29805.33,USD,West,In Process,REP03
116
+ SO000115,2024-04-05,2024-04-25,CUST00032,Customer CUST00032,PRD054,Product H,46,416.81,19173.16,USD,West,Cancelled,REP14
117
+ SO000116,2024-08-10,2024-09-08,CUST00048,Customer CUST00048,PRD019,Product B,7,320.29,2242.02,USD,North,In Process,REP16
118
+ SO000117,2024-02-05,2024-02-29,CUST00002,Customer CUST00002,PRD002,Product A,47,316.13,14858.25,USD,East,In Process,REP03
119
+ SO000118,2024-04-28,2024-05-16,CUST00020,Customer CUST00020,PRD044,Product E,37,210.61,7792.63,USD,North,In Process,REP03
120
+ SO000119,2024-12-07,2024-12-25,CUST00024,Customer CUST00024,PRD096,Product A,74,287.23,21255.06,USD,East,Delivered,REP17
121
+ SO000120,2024-04-24,2024-05-17,CUST00014,Customer CUST00014,PRD022,Product I,40,352.43,14097.38,USD,North,In Process,REP11
122
+ SO000121,2024-01-04,2024-01-23,CUST00098,Customer CUST00098,PRD042,Product G,37,19.01,703.42,USD,South,Delivered,REP04
123
+ SO000122,2024-02-10,2024-02-22,CUST00034,Customer CUST00034,PRD086,Product A,37,329.2,12180.25,USD,South,Delivered,REP06
124
+ SO000123,2024-08-06,2024-08-20,CUST00098,Customer CUST00098,PRD085,Product I,53,95.93,5084.39,USD,Central,Delivered,REP14
125
+ SO000124,2024-03-04,2024-03-12,CUST00054,Customer CUST00054,PRD021,Product A,51,54.27,2767.52,USD,East,In Process,REP11
126
+ SO000125,2024-10-22,2024-11-08,CUST00036,Customer CUST00036,PRD055,Product A,59,155.59,9179.79,USD,East,Cancelled,REP15
127
+ SO000126,2024-05-31,2024-06-28,CUST00022,Customer CUST00022,PRD083,Product E,56,115.32,6457.96,USD,West,Delivered,REP03
128
+ SO000127,2024-08-31,2024-09-17,CUST00081,Customer CUST00081,PRD040,Product B,73,387.75,28305.53,USD,Central,In Process,REP17
129
+ SO000128,2024-05-08,2024-05-25,CUST00042,Customer CUST00042,PRD044,Product I,39,47.21,1841.09,USD,South,Delivered,REP19
130
+ SO000129,2024-04-11,2024-04-19,CUST00012,Customer CUST00012,PRD074,Product C,44,405.64,17848.2,USD,North,Open,REP17
131
+ SO000130,2024-10-29,2024-11-16,CUST00062,Customer CUST00062,PRD080,Product H,83,368.79,30609.59,USD,Central,Delivered,REP06
132
+ SO000131,2024-07-18,2024-08-11,CUST00089,Customer CUST00089,PRD017,Product J,26,29.32,762.3,USD,South,Delivered,REP07
133
+ SO000132,2024-09-26,2024-10-17,CUST00007,Customer CUST00007,PRD082,Product I,48,66.49,3191.43,USD,East,Cancelled,REP07
134
+ SO000133,2024-04-12,2024-05-05,CUST00014,Customer CUST00014,PRD037,Product H,99,284.73,28188.45,USD,Central,Open,REP11
135
+ SO000134,2024-07-01,2024-07-30,CUST00039,Customer CUST00039,PRD033,Product H,4,397.45,1589.82,USD,North,Delivered,REP16
136
+ SO000135,2024-04-17,2024-04-25,CUST00055,Customer CUST00055,PRD013,Product C,42,495.27,20801.22,USD,East,Delivered,REP18
137
+ SO000136,2024-04-05,2024-04-14,CUST00039,Customer CUST00039,PRD057,Product D,29,385.92,11191.75,USD,Central,Open,REP16
138
+ SO000137,2024-08-23,2024-09-13,CUST00010,Customer CUST00010,PRD014,Product I,84,371.42,31198.89,USD,North,Open,REP18
139
+ SO000138,2024-11-19,2024-12-13,CUST00062,Customer CUST00062,PRD073,Product E,25,145.86,3646.5,USD,Central,Cancelled,REP15
140
+ SO000139,2024-10-31,2024-11-10,CUST00012,Customer CUST00012,PRD039,Product J,37,395.31,14626.44,USD,East,Delivered,REP14
141
+ SO000140,2024-12-09,2024-12-26,CUST00062,Customer CUST00062,PRD020,Product B,25,374.24,9356.07,USD,West,In Process,REP19
142
+ SO000141,2024-11-25,2024-12-12,CUST00098,Customer CUST00098,PRD006,Product I,90,28.0,2519.88,USD,South,Delivered,REP05
143
+ SO000142,2024-09-17,2024-10-15,CUST00047,Customer CUST00047,PRD061,Product G,49,263.95,12933.43,USD,West,Cancelled,REP10
144
+ SO000143,2024-06-26,2024-07-20,CUST00062,Customer CUST00062,PRD089,Product A,88,449.74,39577.45,USD,East,In Process,REP09
145
+ SO000144,2024-03-08,2024-03-28,CUST00098,Customer CUST00098,PRD067,Product I,56,140.14,7848.07,USD,West,In Process,REP02
146
+ SO000145,2024-11-27,2024-12-13,CUST00009,Customer CUST00009,PRD079,Product H,25,279.92,6998.0,USD,East,In Process,REP06
147
+ SO000146,2024-11-23,2024-12-04,CUST00048,Customer CUST00048,PRD028,Product J,18,49.71,894.83,USD,West,Open,REP05
148
+ SO000147,2024-03-21,2024-04-14,CUST00040,Customer CUST00040,PRD077,Product C,58,289.95,16816.88,USD,South,Delivered,REP13
149
+ SO000148,2024-10-15,2024-10-27,CUST00088,Customer CUST00088,PRD048,Product C,80,332.64,26611.31,USD,North,Open,REP09
150
+ SO000149,2024-09-25,2024-10-12,CUST00045,Customer CUST00045,PRD007,Product I,53,343.27,18193.26,USD,East,Delivered,REP05
151
+ SO000150,2024-08-22,2024-09-10,CUST00058,Customer CUST00058,PRD053,Product I,31,414.65,12854.16,USD,South,Delivered,REP07
152
+ SO000151,2024-03-22,2024-04-01,CUST00002,Customer CUST00002,PRD017,Product G,66,150.65,9942.81,USD,East,Cancelled,REP08
153
+ SO000152,2024-08-10,2024-08-18,CUST00060,Customer CUST00060,PRD074,Product H,35,72.94,2552.9,USD,East,Delivered,REP09
154
+ SO000153,2024-08-11,2024-08-19,CUST00063,Customer CUST00063,PRD068,Product E,93,396.52,36875.93,USD,West,Delivered,REP17
155
+ SO000154,2024-01-12,2024-02-09,CUST00017,Customer CUST00017,PRD014,Product J,65,38.38,2494.77,USD,East,Delivered,REP15
156
+ SO000155,2024-10-11,2024-10-29,CUST00036,Customer CUST00036,PRD006,Product C,52,381.55,19840.55,USD,Central,Open,REP15
157
+ SO000156,2024-03-19,2024-04-13,CUST00075,Customer CUST00075,PRD081,Product J,87,228.49,19878.83,USD,South,Cancelled,REP03
158
+ SO000157,2024-02-08,2024-02-29,CUST00029,Customer CUST00029,PRD027,Product D,32,50.37,1611.73,USD,West,Delivered,REP03
159
+ SO000158,2024-12-02,2024-12-20,CUST00056,Customer CUST00056,PRD019,Product E,47,215.67,10136.32,USD,East,Cancelled,REP05
160
+ SO000159,2024-09-13,2024-09-25,CUST00015,Customer CUST00015,PRD012,Product B,61,108.18,6598.73,USD,North,Delivered,REP18
161
+ SO000160,2024-09-27,2024-10-15,CUST00080,Customer CUST00080,PRD008,Product H,60,100.91,6054.45,USD,North,Open,REP15
162
+ SO000161,2024-01-27,2024-02-16,CUST00050,Customer CUST00050,PRD060,Product D,71,316.85,22496.2,USD,West,Open,REP03
163
+ SO000162,2024-02-15,2024-03-07,CUST00025,Customer CUST00025,PRD038,Product G,17,307.58,5228.86,USD,West,In Process,REP16
164
+ SO000163,2024-11-14,2024-12-12,CUST00002,Customer CUST00002,PRD021,Product H,72,162.08,11669.57,USD,Central,Open,REP18
165
+ SO000164,2024-11-15,2024-12-09,CUST00095,Customer CUST00095,PRD041,Product F,32,331.92,10621.51,USD,North,Delivered,REP08
166
+ SO000165,2024-09-23,2024-10-21,CUST00051,Customer CUST00051,PRD079,Product H,41,128.6,5272.68,USD,North,Delivered,REP16
167
+ SO000166,2024-11-05,2024-12-03,CUST00092,Customer CUST00092,PRD002,Product D,33,284.23,9379.52,USD,South,In Process,REP01
168
+ SO000167,2024-10-15,2024-10-30,CUST00077,Customer CUST00077,PRD090,Product A,77,48.5,3734.77,USD,South,Cancelled,REP14
169
+ SO000168,2024-05-01,2024-05-25,CUST00015,Customer CUST00015,PRD006,Product B,44,61.24,2694.48,USD,East,Open,REP09
170
+ SO000169,2024-09-18,2024-10-03,CUST00095,Customer CUST00095,PRD084,Product I,76,436.77,33194.89,USD,South,Delivered,REP15
171
+ SO000170,2024-09-07,2024-09-20,CUST00075,Customer CUST00075,PRD003,Product D,80,278.32,22265.62,USD,South,Delivered,REP09
172
+ SO000171,2024-07-06,2024-07-22,CUST00014,Customer CUST00014,PRD019,Product B,12,131.08,1572.97,USD,Central,In Process,REP14
173
+ SO000172,2024-12-21,2025-01-09,CUST00008,Customer CUST00008,PRD070,Product G,53,332.77,17636.64,USD,East,Open,REP18
174
+ SO000173,2024-07-29,2024-08-26,CUST00037,Customer CUST00037,PRD061,Product H,59,328.66,19390.92,USD,South,In Process,REP15
175
+ SO000174,2024-12-18,2024-12-31,CUST00076,Customer CUST00076,PRD020,Product A,94,480.78,45193.55,USD,South,Delivered,REP05
176
+ SO000175,2024-01-04,2024-01-22,CUST00020,Customer CUST00020,PRD098,Product H,50,434.85,21742.27,USD,North,In Process,REP04
177
+ SO000176,2024-03-06,2024-03-27,CUST00034,Customer CUST00034,PRD012,Product D,6,330.95,1985.73,USD,East,Delivered,REP03
178
+ SO000177,2024-08-24,2024-09-17,CUST00040,Customer CUST00040,PRD094,Product E,15,125.54,1883.07,USD,South,Delivered,REP10
179
+ SO000178,2024-01-14,2024-02-03,CUST00002,Customer CUST00002,PRD060,Product G,37,428.65,15860.0,USD,Central,In Process,REP15
180
+ SO000179,2024-01-14,2024-01-27,CUST00089,Customer CUST00089,PRD028,Product D,2,56.68,113.36,USD,North,In Process,REP02
181
+ SO000180,2024-06-11,2024-06-22,CUST00005,Customer CUST00005,PRD047,Product A,40,303.37,12134.79,USD,West,Cancelled,REP11
182
+ SO000181,2024-01-10,2024-01-19,CUST00014,Customer CUST00014,PRD020,Product J,93,175.13,16287.23,USD,North,In Process,REP08
183
+ SO000182,2024-06-19,2024-07-07,CUST00001,Customer CUST00001,PRD037,Product I,64,186.03,11906.1,USD,West,Open,REP15
184
+ SO000183,2024-07-22,2024-08-02,CUST00049,Customer CUST00049,PRD020,Product A,44,228.72,10063.71,USD,West,Delivered,REP18
185
+ SO000184,2024-11-29,2024-12-07,CUST00073,Customer CUST00073,PRD070,Product E,20,35.33,706.63,USD,North,Open,REP05
186
+ SO000185,2024-09-01,2024-09-12,CUST00033,Customer CUST00033,PRD088,Product A,51,30.37,1548.91,USD,South,In Process,REP11
187
+ SO000186,2024-05-05,2024-05-13,CUST00089,Customer CUST00089,PRD044,Product B,29,435.28,12623.12,USD,East,In Process,REP06
188
+ SO000187,2024-12-05,2025-01-03,CUST00045,Customer CUST00045,PRD085,Product D,80,470.51,37640.94,USD,West,Delivered,REP01
189
+ SO000188,2024-09-20,2024-10-02,CUST00005,Customer CUST00005,PRD030,Product F,47,349.39,16421.18,USD,South,In Process,REP18
190
+ SO000189,2024-05-24,2024-06-07,CUST00047,Customer CUST00047,PRD033,Product H,76,65.42,4972.21,USD,North,Delivered,REP01
191
+ SO000190,2024-05-26,2024-06-17,CUST00014,Customer CUST00014,PRD066,Product E,48,329.1,15797.0,USD,South,In Process,REP18
192
+ SO000191,2024-07-10,2024-07-22,CUST00063,Customer CUST00063,PRD077,Product I,33,209.38,6909.7,USD,Central,Delivered,REP09
193
+ SO000192,2024-11-19,2024-11-27,CUST00004,Customer CUST00004,PRD023,Product F,19,405.84,7711.05,USD,South,Delivered,REP19
194
+ SO000193,2024-12-30,2025-01-16,CUST00001,Customer CUST00001,PRD076,Product H,54,328.05,17714.52,USD,Central,In Process,REP07
195
+ SO000194,2024-05-22,2024-06-18,CUST00019,Customer CUST00019,PRD090,Product I,33,126.4,4171.09,USD,North,In Process,REP11
196
+ SO000195,2024-12-20,2025-01-03,CUST00078,Customer CUST00078,PRD072,Product J,66,237.11,15649.4,USD,East,Delivered,REP16
197
+ SO000196,2024-04-26,2024-05-14,CUST00005,Customer CUST00005,PRD043,Product B,48,294.28,14125.65,USD,West,In Process,REP16
198
+ SO000197,2024-12-08,2024-12-20,CUST00046,Customer CUST00046,PRD047,Product B,43,18.93,814.16,USD,East,Open,REP15
199
+ SO000198,2024-10-07,2024-10-17,CUST00075,Customer CUST00075,PRD034,Product C,15,106.61,1599.08,USD,Central,In Process,REP14
200
+ SO000199,2024-02-21,2024-03-12,CUST00027,Customer CUST00027,PRD002,Product C,8,162.54,1300.33,USD,West,Delivered,REP17
201
+ SO000200,2024-03-17,2024-03-27,CUST00090,Customer CUST00090,PRD013,Product I,94,98.76,9283.74,USD,West,Open,REP07
202
+ SO000201,2024-11-07,2024-11-30,CUST00042,Customer CUST00042,PRD054,Product J,56,481.83,26982.71,USD,West,Open,REP01
203
+ SO000202,2024-06-20,2024-07-09,CUST00047,Customer CUST00047,PRD009,Product G,22,411.4,9050.86,USD,West,In Process,REP15
204
+ SO000203,2024-01-10,2024-01-26,CUST00072,Customer CUST00072,PRD050,Product H,80,282.75,22620.17,USD,East,Delivered,REP19
205
+ SO000204,2024-04-09,2024-04-22,CUST00074,Customer CUST00074,PRD069,Product I,18,385.66,6941.91,USD,South,In Process,REP15
206
+ SO000205,2024-02-18,2024-02-27,CUST00098,Customer CUST00098,PRD092,Product A,21,56.9,1194.9,USD,Central,Delivered,REP07
207
+ SO000206,2024-06-08,2024-06-25,CUST00010,Customer CUST00010,PRD002,Product I,78,319.69,24935.63,USD,North,In Process,REP03
208
+ SO000207,2024-09-19,2024-10-16,CUST00018,Customer CUST00018,PRD024,Product C,42,219.82,9232.35,USD,North,Delivered,REP14
209
+ SO000208,2024-01-19,2024-01-29,CUST00090,Customer CUST00090,PRD097,Product F,42,453.71,19055.7,USD,Central,Open,REP04
210
+ SO000209,2024-03-13,2024-03-27,CUST00097,Customer CUST00097,PRD002,Product F,41,312.41,12808.66,USD,Central,Delivered,REP05
211
+ SO000210,2024-01-27,2024-02-23,CUST00008,Customer CUST00008,PRD003,Product F,72,328.93,23682.95,USD,West,In Process,REP06
212
+ SO000211,2024-05-09,2024-06-07,CUST00044,Customer CUST00044,PRD044,Product B,81,497.79,40320.62,USD,West,Open,REP04
213
+ SO000212,2024-11-28,2024-12-19,CUST00055,Customer CUST00055,PRD012,Product J,62,217.12,13461.3,USD,West,In Process,REP08
214
+ SO000213,2024-01-03,2024-01-25,CUST00030,Customer CUST00030,PRD065,Product G,92,487.34,44835.34,USD,Central,Delivered,REP06
215
+ SO000214,2024-08-18,2024-08-25,CUST00016,Customer CUST00016,PRD066,Product F,98,40.92,4010.5,USD,West,In Process,REP09
216
+ SO000215,2024-12-06,2024-12-14,CUST00091,Customer CUST00091,PRD023,Product I,73,259.76,18962.84,USD,East,In Process,REP04
217
+ SO000216,2024-11-06,2024-11-18,CUST00035,Customer CUST00035,PRD012,Product F,43,291.55,12536.56,USD,West,Delivered,REP15
218
+ SO000217,2024-02-18,2024-03-05,CUST00038,Customer CUST00038,PRD006,Product B,45,196.51,8842.74,USD,South,Delivered,REP03
219
+ SO000218,2024-12-01,2024-12-14,CUST00052,Customer CUST00052,PRD035,Product I,15,207.46,3111.9,USD,South,Open,REP18
220
+ SO000219,2024-07-24,2024-08-19,CUST00082,Customer CUST00082,PRD036,Product J,25,291.83,7295.75,USD,Central,Delivered,REP14
221
+ SO000220,2024-11-16,2024-12-06,CUST00080,Customer CUST00080,PRD013,Product F,52,256.26,13325.38,USD,North,Delivered,REP02
222
+ SO000221,2024-01-25,2024-02-15,CUST00068,Customer CUST00068,PRD002,Product D,18,146.1,2629.78,USD,Central,Open,REP19
223
+ SO000222,2024-10-13,2024-11-07,CUST00005,Customer CUST00005,PRD050,Product C,34,235.3,8000.28,USD,South,In Process,REP15
224
+ SO000223,2024-03-23,2024-04-07,CUST00099,Customer CUST00099,PRD016,Product E,73,393.52,28727.04,USD,East,Open,REP01
225
+ SO000224,2024-09-16,2024-09-26,CUST00040,Customer CUST00040,PRD050,Product A,52,95.14,4947.22,USD,West,Delivered,REP05
226
+ SO000225,2024-04-25,2024-05-04,CUST00007,Customer CUST00007,PRD055,Product F,14,96.67,1353.45,USD,Central,Delivered,REP02
227
+ SO000226,2024-03-02,2024-03-29,CUST00079,Customer CUST00079,PRD085,Product E,10,343.68,3436.78,USD,Central,In Process,REP18
228
+ SO000227,2024-07-31,2024-08-27,CUST00082,Customer CUST00082,PRD060,Product E,45,30.89,1390.06,USD,North,Open,REP11
229
+ SO000228,2024-07-09,2024-08-05,CUST00052,Customer CUST00052,PRD082,Product G,26,72.33,1880.52,USD,South,In Process,REP08
230
+ SO000229,2024-08-14,2024-08-29,CUST00093,Customer CUST00093,PRD064,Product D,29,235.13,6818.74,USD,Central,Cancelled,REP17
231
+ SO000230,2024-04-29,2024-05-14,CUST00041,Customer CUST00041,PRD058,Product A,2,224.43,448.85,USD,Central,In Process,REP08
232
+ SO000231,2024-10-03,2024-10-20,CUST00034,Customer CUST00034,PRD060,Product H,59,230.56,13603.1,USD,North,Delivered,REP13
233
+ SO000232,2024-03-09,2024-03-27,CUST00065,Customer CUST00065,PRD001,Product G,8,30.42,243.36,USD,North,Delivered,REP13
234
+ SO000233,2024-05-31,2024-06-23,CUST00005,Customer CUST00005,PRD015,Product D,21,199.92,4198.35,USD,West,In Process,REP19
235
+ SO000234,2024-01-28,2024-02-22,CUST00058,Customer CUST00058,PRD096,Product E,5,333.55,1667.74,USD,South,Open,REP16
236
+ SO000235,2024-08-07,2024-08-30,CUST00095,Customer CUST00095,PRD036,Product H,25,488.24,12205.89,USD,South,Open,REP04
237
+ SO000236,2024-03-18,2024-04-02,CUST00041,Customer CUST00041,PRD012,Product I,62,448.95,27834.85,USD,South,Delivered,REP08
238
+ SO000237,2024-09-14,2024-10-12,CUST00013,Customer CUST00013,PRD010,Product E,32,376.56,12049.79,USD,West,Open,REP15
239
+ SO000238,2024-09-29,2024-10-13,CUST00018,Customer CUST00018,PRD089,Product G,73,192.36,14042.41,USD,East,Delivered,REP18
240
+ SO000239,2024-10-04,2024-10-30,CUST00030,Customer CUST00030,PRD021,Product D,85,341.23,29004.66,USD,East,Delivered,REP03
241
+ SO000240,2024-05-01,2024-05-30,CUST00039,Customer CUST00039,PRD021,Product A,12,460.27,5523.29,USD,South,Delivered,REP08
242
+ SO000241,2024-10-28,2024-11-11,CUST00007,Customer CUST00007,PRD092,Product G,96,96.94,9306.25,USD,East,In Process,REP13
243
+ SO000242,2024-09-14,2024-10-11,CUST00079,Customer CUST00079,PRD044,Product D,27,482.91,13038.67,USD,East,Open,REP13
244
+ SO000243,2024-10-04,2024-10-21,CUST00037,Customer CUST00037,PRD030,Product A,56,309.85,17351.65,USD,East,Open,REP07
245
+ SO000244,2024-04-17,2024-05-08,CUST00025,Customer CUST00025,PRD003,Product E,8,236.16,1889.31,USD,North,Delivered,REP01
246
+ SO000245,2024-04-13,2024-04-22,CUST00096,Customer CUST00096,PRD046,Product J,98,109.98,10777.79,USD,South,Delivered,REP07
247
+ SO000246,2024-08-06,2024-08-14,CUST00041,Customer CUST00041,PRD012,Product I,36,12.56,452.25,USD,South,Delivered,REP17
248
+ SO000247,2024-01-14,2024-01-22,CUST00053,Customer CUST00053,PRD070,Product I,20,170.2,3403.93,USD,East,Delivered,REP19
249
+ SO000248,2024-04-10,2024-04-20,CUST00004,Customer CUST00004,PRD085,Product D,10,444.24,4442.36,USD,East,Open,REP08
250
+ SO000249,2024-12-24,2025-01-20,CUST00074,Customer CUST00074,PRD017,Product F,46,184.19,8472.81,USD,North,In Process,REP07
251
+ SO000250,2024-01-04,2024-01-24,CUST00003,Customer CUST00003,PRD024,Product H,80,120.46,9637.2,USD,West,Delivered,REP02
252
+ SO000251,2024-06-06,2024-06-30,CUST00019,Customer CUST00019,PRD076,Product C,49,321.88,15772.14,USD,East,Open,REP06
253
+ SO000252,2024-04-26,2024-05-06,CUST00064,Customer CUST00064,PRD018,Product C,48,193.0,9263.84,USD,North,In Process,REP17
254
+ SO000253,2024-09-07,2024-09-28,CUST00075,Customer CUST00075,PRD047,Product I,45,95.01,4275.24,USD,West,In Process,REP15
255
+ SO000254,2024-07-16,2024-08-06,CUST00078,Customer CUST00078,PRD061,Product G,9,475.65,4280.88,USD,Central,Open,REP10
256
+ SO000255,2024-02-19,2024-02-28,CUST00077,Customer CUST00077,PRD051,Product A,94,417.53,39247.97,USD,Central,Delivered,REP19
257
+ SO000256,2024-02-04,2024-02-24,CUST00026,Customer CUST00026,PRD021,Product C,69,422.55,29155.77,USD,Central,In Process,REP10
258
+ SO000257,2024-07-10,2024-07-21,CUST00100,Customer CUST00100,PRD024,Product F,90,49.49,4454.53,USD,South,Cancelled,REP04
259
+ SO000258,2024-11-21,2024-12-06,CUST00054,Customer CUST00054,PRD030,Product I,31,462.09,14324.64,USD,North,Cancelled,REP12
260
+ SO000259,2024-04-15,2024-05-13,CUST00092,Customer CUST00092,PRD054,Product G,35,145.05,5076.75,USD,South,In Process,REP10
261
+ SO000260,2024-08-04,2024-08-23,CUST00070,Customer CUST00070,PRD057,Product I,45,428.01,19260.63,USD,East,Open,REP04
262
+ SO000261,2024-06-26,2024-07-03,CUST00091,Customer CUST00091,PRD075,Product G,70,450.92,31564.28,USD,South,Delivered,REP15
263
+ SO000262,2024-07-17,2024-08-13,CUST00042,Customer CUST00042,PRD069,Product J,14,368.1,5153.43,USD,South,Cancelled,REP03
264
+ SO000263,2024-03-27,2024-04-07,CUST00088,Customer CUST00088,PRD061,Product A,19,161.26,3063.99,USD,Central,Delivered,REP09
265
+ SO000264,2024-06-09,2024-07-03,CUST00068,Customer CUST00068,PRD061,Product J,71,345.04,24497.81,USD,North,Delivered,REP02
266
+ SO000265,2024-01-28,2024-02-14,CUST00041,Customer CUST00041,PRD070,Product G,86,278.93,23988.06,USD,South,Open,REP02
267
+ SO000266,2024-03-05,2024-03-21,CUST00085,Customer CUST00085,PRD098,Product E,2,335.45,670.9,USD,North,Delivered,REP16
268
+ SO000267,2024-05-04,2024-05-17,CUST00086,Customer CUST00086,PRD064,Product H,40,64.85,2593.94,USD,East,In Process,REP19
269
+ SO000268,2024-11-14,2024-12-07,CUST00064,Customer CUST00064,PRD086,Product G,21,90.71,1904.83,USD,West,Delivered,REP15
270
+ SO000269,2024-08-19,2024-09-15,CUST00079,Customer CUST00079,PRD058,Product F,92,135.19,12437.64,USD,Central,In Process,REP17
271
+ SO000270,2024-03-06,2024-03-15,CUST00072,Customer CUST00072,PRD050,Product A,42,253.93,10664.98,USD,West,In Process,REP11
272
+ SO000271,2024-07-15,2024-08-09,CUST00011,Customer CUST00011,PRD036,Product H,12,266.43,3197.18,USD,West,Delivered,REP05
273
+ SO000272,2024-03-25,2024-04-08,CUST00055,Customer CUST00055,PRD084,Product I,47,105.96,4980.21,USD,South,Open,REP06
274
+ SO000273,2024-09-24,2024-10-02,CUST00007,Customer CUST00007,PRD033,Product C,3,449.62,1348.86,USD,East,Cancelled,REP01
275
+ SO000274,2024-01-08,2024-01-19,CUST00032,Customer CUST00032,PRD012,Product E,4,401.31,1605.24,USD,East,Delivered,REP11
276
+ SO000275,2024-10-28,2024-11-26,CUST00016,Customer CUST00016,PRD013,Product A,63,247.83,15613.03,USD,Central,Delivered,REP02
277
+ SO000276,2024-09-16,2024-09-28,CUST00095,Customer CUST00095,PRD025,Product G,27,346.56,9357.17,USD,East,Delivered,REP02
278
+ SO000277,2024-06-02,2024-06-13,CUST00099,Customer CUST00099,PRD011,Product I,50,64.27,3213.34,USD,West,In Process,REP02
279
+ SO000278,2024-12-29,2025-01-16,CUST00073,Customer CUST00073,PRD030,Product E,88,252.16,22190.44,USD,East,Delivered,REP16
280
+ SO000279,2024-10-03,2024-10-10,CUST00085,Customer CUST00085,PRD058,Product C,52,453.63,23588.57,USD,East,In Process,REP11
281
+ SO000280,2024-10-05,2024-10-27,CUST00022,Customer CUST00022,PRD084,Product A,69,405.04,27947.48,USD,East,Delivered,REP16
282
+ SO000281,2024-03-06,2024-03-15,CUST00040,Customer CUST00040,PRD001,Product H,28,344.02,9632.51,USD,North,Delivered,REP08
283
+ SO000282,2024-09-03,2024-10-02,CUST00063,Customer CUST00063,PRD053,Product C,4,434.53,1738.12,USD,Central,Open,REP14
284
+ SO000283,2024-05-21,2024-05-31,CUST00076,Customer CUST00076,PRD082,Product A,39,405.62,15819.34,USD,West,Delivered,REP19
285
+ SO000284,2024-08-12,2024-08-24,CUST00091,Customer CUST00091,PRD062,Product G,59,64.38,3798.71,USD,West,In Process,REP03
286
+ SO000285,2024-05-26,2024-06-15,CUST00084,Customer CUST00084,PRD022,Product A,25,216.51,5412.69,USD,South,Cancelled,REP16
287
+ SO000286,2024-03-23,2024-04-12,CUST00051,Customer CUST00051,PRD071,Product C,42,352.66,14811.91,USD,West,Open,REP14
288
+ SO000287,2024-03-03,2024-03-18,CUST00019,Customer CUST00019,PRD040,Product D,14,117.04,1638.52,USD,Central,Delivered,REP17
289
+ SO000288,2024-10-12,2024-10-27,CUST00064,Customer CUST00064,PRD059,Product A,52,157.62,8196.24,USD,East,Open,REP14
290
+ SO000289,2024-08-09,2024-08-24,CUST00068,Customer CUST00068,PRD086,Product D,92,427.61,39340.06,USD,North,In Process,REP09
291
+ SO000290,2024-04-29,2024-05-28,CUST00016,Customer CUST00016,PRD050,Product A,48,26.99,1295.44,USD,East,In Process,REP05
292
+ SO000291,2024-10-30,2024-11-25,CUST00067,Customer CUST00067,PRD098,Product A,73,455.72,33267.35,USD,West,Delivered,REP01
293
+ SO000292,2024-01-08,2024-01-27,CUST00087,Customer CUST00087,PRD052,Product H,76,456.23,34673.6,USD,North,In Process,REP08
294
+ SO000293,2024-01-21,2024-02-15,CUST00038,Customer CUST00038,PRD022,Product D,29,323.41,9378.8,USD,West,Open,REP12
295
+ SO000294,2024-03-07,2024-04-04,CUST00066,Customer CUST00066,PRD087,Product H,34,241.72,8218.47,USD,North,Delivered,REP06
296
+ SO000295,2024-09-18,2024-10-16,CUST00025,Customer CUST00025,PRD083,Product B,17,29.49,501.25,USD,South,Cancelled,REP10
297
+ SO000296,2024-04-02,2024-04-21,CUST00099,Customer CUST00099,PRD049,Product H,14,309.28,4329.95,USD,Central,In Process,REP13
298
+ SO000297,2024-07-07,2024-07-19,CUST00049,Customer CUST00049,PRD090,Product A,62,418.33,25936.17,USD,West,Open,REP07
299
+ SO000298,2024-12-06,2025-01-02,CUST00049,Customer CUST00049,PRD049,Product J,54,466.56,25194.2,USD,North,Delivered,REP09
300
+ SO000299,2024-01-17,2024-02-13,CUST00051,Customer CUST00051,PRD019,Product G,55,438.37,24110.3,USD,Central,Delivered,REP11
301
+ SO000300,2024-11-28,2024-12-18,CUST00045,Customer CUST00045,PRD061,Product A,40,216.7,8667.83,USD,West,Delivered,REP13
302
+ SO000301,2024-09-24,2024-10-16,CUST00033,Customer CUST00033,PRD087,Product J,92,412.39,37939.62,USD,North,Delivered,REP13
303
+ SO000302,2024-08-02,2024-08-25,CUST00047,Customer CUST00047,PRD036,Product D,82,135.78,11133.97,USD,West,In Process,REP18
304
+ SO000303,2024-05-26,2024-06-16,CUST00028,Customer CUST00028,PRD015,Product H,84,451.16,37897.22,USD,West,Open,REP09
305
+ SO000304,2024-09-14,2024-09-29,CUST00074,Customer CUST00074,PRD051,Product B,51,300.89,15345.58,USD,South,Delivered,REP09
306
+ SO000305,2024-02-08,2024-02-17,CUST00084,Customer CUST00084,PRD016,Product F,27,373.08,10073.18,USD,Central,Open,REP08
307
+ SO000306,2024-09-14,2024-10-07,CUST00041,Customer CUST00041,PRD062,Product C,65,51.35,3337.9,USD,South,Cancelled,REP17
308
+ SO000307,2024-05-06,2024-06-04,CUST00024,Customer CUST00024,PRD099,Product I,38,424.35,16125.15,USD,East,In Process,REP13
309
+ SO000308,2024-03-13,2024-04-09,CUST00030,Customer CUST00030,PRD041,Product B,32,412.99,13215.58,USD,West,Delivered,REP08
310
+ SO000309,2024-03-15,2024-04-06,CUST00032,Customer CUST00032,PRD039,Product J,57,23.44,1335.85,USD,West,Delivered,REP02
311
+ SO000310,2024-06-04,2024-06-15,CUST00007,Customer CUST00007,PRD019,Product D,37,446.15,16507.46,USD,North,Cancelled,REP10
312
+ SO000311,2024-05-05,2024-05-22,CUST00049,Customer CUST00049,PRD056,Product A,38,425.1,16153.74,USD,South,Delivered,REP12
313
+ SO000312,2024-11-16,2024-11-26,CUST00050,Customer CUST00050,PRD045,Product E,30,23.49,704.79,USD,East,Delivered,REP04
314
+ SO000313,2024-06-02,2024-06-22,CUST00064,Customer CUST00064,PRD030,Product J,51,21.44,1093.57,USD,East,Open,REP10
315
+ SO000314,2024-05-01,2024-05-12,CUST00042,Customer CUST00042,PRD073,Product E,35,445.32,15586.12,USD,West,Cancelled,REP17
316
+ SO000315,2024-10-11,2024-10-30,CUST00059,Customer CUST00059,PRD049,Product D,17,198.9,3381.31,USD,West,Cancelled,REP13
317
+ SO000316,2024-06-10,2024-06-29,CUST00086,Customer CUST00086,PRD051,Product E,87,225.82,19646.01,USD,South,Delivered,REP17
318
+ SO000317,2024-12-06,2024-12-26,CUST00021,Customer CUST00021,PRD099,Product G,68,180.17,12251.27,USD,West,Delivered,REP13
319
+ SO000318,2024-04-20,2024-04-28,CUST00011,Customer CUST00011,PRD086,Product D,51,393.37,20061.88,USD,East,Delivered,REP19
320
+ SO000319,2024-06-13,2024-06-26,CUST00085,Customer CUST00085,PRD019,Product H,28,427.75,11977.09,USD,Central,Delivered,REP02
321
+ SO000320,2024-09-23,2024-10-21,CUST00045,Customer CUST00045,PRD056,Product F,21,375.47,7884.9,USD,West,Open,REP09
322
+ SO000321,2024-02-15,2024-03-04,CUST00070,Customer CUST00070,PRD096,Product A,19,261.32,4965.12,USD,West,In Process,REP06
323
+ SO000322,2024-07-01,2024-07-11,CUST00075,Customer CUST00075,PRD081,Product A,62,383.28,23763.43,USD,East,Delivered,REP19
324
+ SO000323,2024-08-06,2024-08-30,CUST00092,Customer CUST00092,PRD035,Product C,47,384.62,18077.08,USD,West,Delivered,REP16
325
+ SO000324,2024-11-24,2024-12-08,CUST00045,Customer CUST00045,PRD067,Product A,81,425.01,34426.19,USD,East,In Process,REP05
326
+ SO000325,2024-01-13,2024-02-03,CUST00061,Customer CUST00061,PRD067,Product G,80,383.67,30693.78,USD,Central,Open,REP10
327
+ SO000326,2024-10-24,2024-11-20,CUST00080,Customer CUST00080,PRD035,Product B,41,146.59,6010.29,USD,North,Delivered,REP19
328
+ SO000327,2024-09-20,2024-10-13,CUST00071,Customer CUST00071,PRD015,Product G,67,371.56,24894.26,USD,North,Delivered,REP05
329
+ SO000328,2024-05-20,2024-06-03,CUST00008,Customer CUST00008,PRD066,Product E,60,332.68,19961.09,USD,North,Delivered,REP08
330
+ SO000329,2024-01-23,2024-02-07,CUST00034,Customer CUST00034,PRD003,Product D,30,22.0,660.13,USD,East,In Process,REP14
331
+ SO000330,2024-07-06,2024-07-25,CUST00045,Customer CUST00045,PRD066,Product B,45,478.01,21510.29,USD,East,Delivered,REP08
332
+ SO000331,2024-05-24,2024-06-22,CUST00034,Customer CUST00034,PRD013,Product J,16,244.35,3909.56,USD,South,Open,REP15
333
+ SO000332,2024-10-16,2024-10-29,CUST00067,Customer CUST00067,PRD053,Product H,87,465.32,40482.99,USD,East,Open,REP07
334
+ SO000333,2024-11-16,2024-12-09,CUST00030,Customer CUST00030,PRD025,Product E,13,305.71,3974.25,USD,Central,In Process,REP17
335
+ SO000334,2024-07-01,2024-07-30,CUST00032,Customer CUST00032,PRD014,Product J,10,412.5,4125.02,USD,West,Delivered,REP18
336
+ SO000335,2024-02-22,2024-03-14,CUST00022,Customer CUST00022,PRD031,Product D,77,459.23,35360.55,USD,South,In Process,REP14
337
+ SO000336,2024-10-16,2024-11-09,CUST00098,Customer CUST00098,PRD093,Product I,76,207.2,15747.11,USD,North,Open,REP18
338
+ SO000337,2024-04-05,2024-05-03,CUST00038,Customer CUST00038,PRD044,Product A,87,295.8,25734.65,USD,North,In Process,REP11
339
+ SO000338,2024-04-30,2024-05-07,CUST00019,Customer CUST00019,PRD015,Product I,27,434.61,11734.43,USD,West,Delivered,REP19
340
+ SO000339,2024-05-20,2024-06-14,CUST00049,Customer CUST00049,PRD087,Product F,56,482.4,27014.31,USD,Central,Open,REP01
341
+ SO000340,2024-11-11,2024-12-10,CUST00010,Customer CUST00010,PRD024,Product G,85,359.39,30548.37,USD,Central,Open,REP12
342
+ SO000341,2024-01-11,2024-02-03,CUST00068,Customer CUST00068,PRD012,Product I,94,141.79,13328.67,USD,West,Delivered,REP05
343
+ SO000342,2024-10-24,2024-11-16,CUST00048,Customer CUST00048,PRD018,Product G,28,434.25,12159.05,USD,East,In Process,REP14
344
+ SO000343,2024-08-14,2024-09-01,CUST00071,Customer CUST00071,PRD002,Product I,13,214.09,2783.13,USD,Central,In Process,REP16
345
+ SO000344,2024-05-16,2024-05-31,CUST00038,Customer CUST00038,PRD045,Product F,56,327.38,18333.25,USD,West,Delivered,REP13
346
+ SO000345,2024-06-10,2024-06-25,CUST00088,Customer CUST00088,PRD044,Product H,7,71.6,501.23,USD,East,In Process,REP08
347
+ SO000346,2024-11-05,2024-12-03,CUST00065,Customer CUST00065,PRD049,Product D,21,150.83,3167.44,USD,East,Delivered,REP10
348
+ SO000347,2024-02-22,2024-03-11,CUST00047,Customer CUST00047,PRD002,Product E,74,17.2,1272.78,USD,Central,Cancelled,REP17
349
+ SO000348,2024-12-21,2025-01-10,CUST00010,Customer CUST00010,PRD024,Product C,25,370.74,9268.46,USD,North,Cancelled,REP11
350
+ SO000349,2024-08-15,2024-08-27,CUST00065,Customer CUST00065,PRD058,Product D,28,140.95,3946.71,USD,North,Delivered,REP12
351
+ SO000350,2024-10-09,2024-11-06,CUST00053,Customer CUST00053,PRD006,Product J,59,197.46,11650.4,USD,North,Open,REP07
352
+ SO000351,2024-08-11,2024-09-07,CUST00025,Customer CUST00025,PRD012,Product A,55,263.8,14509.04,USD,West,Delivered,REP16
353
+ SO000352,2024-07-26,2024-08-12,CUST00100,Customer CUST00100,PRD087,Product G,51,21.56,1099.64,USD,East,Delivered,REP08
354
+ SO000353,2024-02-14,2024-03-13,CUST00059,Customer CUST00059,PRD028,Product D,67,357.97,23983.75,USD,Central,In Process,REP13
355
+ SO000354,2024-03-19,2024-04-17,CUST00044,Customer CUST00044,PRD056,Product J,4,479.32,1917.27,USD,North,In Process,REP18
356
+ SO000355,2024-11-26,2024-12-17,CUST00032,Customer CUST00032,PRD057,Product F,17,120.44,2047.43,USD,West,Delivered,REP10
357
+ SO000356,2024-10-27,2024-11-21,CUST00011,Customer CUST00011,PRD065,Product E,72,321.62,23156.48,USD,West,Delivered,REP17
358
+ SO000357,2024-06-23,2024-07-19,CUST00088,Customer CUST00088,PRD026,Product F,60,274.02,16441.1,USD,North,Delivered,REP17
359
+ SO000358,2024-01-05,2024-01-31,CUST00052,Customer CUST00052,PRD027,Product I,75,31.84,2387.72,USD,North,Cancelled,REP02
360
+ SO000359,2024-01-15,2024-02-11,CUST00046,Customer CUST00046,PRD046,Product E,6,144.6,867.63,USD,South,Delivered,REP13
361
+ SO000360,2024-08-10,2024-08-19,CUST00094,Customer CUST00094,PRD033,Product F,93,245.85,22864.36,USD,Central,Open,REP17
362
+ SO000361,2024-08-27,2024-09-13,CUST00077,Customer CUST00077,PRD016,Product B,11,202.01,2222.12,USD,West,Cancelled,REP04
363
+ SO000362,2024-12-20,2025-01-11,CUST00056,Customer CUST00056,PRD018,Product J,62,289.07,17922.62,USD,East,In Process,REP19
364
+ SO000363,2024-11-06,2024-11-18,CUST00082,Customer CUST00082,PRD098,Product J,6,103.15,618.92,USD,East,Delivered,REP17
365
+ SO000364,2024-04-16,2024-05-03,CUST00080,Customer CUST00080,PRD094,Product B,34,381.08,12956.79,USD,Central,Delivered,REP04
366
+ SO000365,2024-04-03,2024-04-10,CUST00043,Customer CUST00043,PRD086,Product G,81,89.72,7267.55,USD,South,Delivered,REP12
367
+ SO000366,2024-05-16,2024-05-27,CUST00074,Customer CUST00074,PRD085,Product D,92,463.84,42672.83,USD,South,Delivered,REP10
368
+ SO000367,2024-09-08,2024-09-22,CUST00066,Customer CUST00066,PRD093,Product G,72,406.05,29235.96,USD,Central,In Process,REP03
369
+ SO000368,2024-12-29,2025-01-17,CUST00045,Customer CUST00045,PRD001,Product J,9,85.37,768.29,USD,East,Cancelled,REP07
370
+ SO000369,2024-08-28,2024-09-06,CUST00084,Customer CUST00084,PRD090,Product D,94,460.03,43242.72,USD,North,In Process,REP14
371
+ SO000370,2024-01-17,2024-02-10,CUST00045,Customer CUST00045,PRD065,Product D,93,286.4,26634.85,USD,East,In Process,REP18
372
+ SO000371,2024-09-13,2024-10-02,CUST00020,Customer CUST00020,PRD005,Product D,87,257.92,22438.99,USD,East,Delivered,REP01
373
+ SO000372,2024-10-04,2024-10-12,CUST00041,Customer CUST00041,PRD076,Product D,69,362.39,25004.8,USD,East,In Process,REP19
374
+ SO000373,2024-04-18,2024-05-01,CUST00047,Customer CUST00047,PRD004,Product G,71,424.47,30137.11,USD,Central,In Process,REP10
375
+ SO000374,2024-03-24,2024-04-14,CUST00093,Customer CUST00093,PRD091,Product H,41,154.89,6350.51,USD,West,Delivered,REP04
376
+ SO000375,2024-09-27,2024-10-06,CUST00037,Customer CUST00037,PRD061,Product A,67,56.58,3790.59,USD,East,Delivered,REP04
377
+ SO000376,2024-01-24,2024-02-09,CUST00004,Customer CUST00004,PRD023,Product C,34,439.18,14932.21,USD,Central,In Process,REP13
378
+ SO000377,2024-03-09,2024-04-05,CUST00062,Customer CUST00062,PRD057,Product I,57,299.31,17060.74,USD,West,Delivered,REP10
379
+ SO000378,2024-06-16,2024-06-29,CUST00038,Customer CUST00038,PRD068,Product E,61,224.37,13686.33,USD,East,Open,REP12
380
+ SO000379,2024-02-07,2024-03-03,CUST00036,Customer CUST00036,PRD062,Product I,69,381.94,26354.12,USD,South,In Process,REP05
381
+ SO000380,2024-01-25,2024-02-16,CUST00027,Customer CUST00027,PRD039,Product C,78,71.42,5571.12,USD,East,Cancelled,REP16
382
+ SO000381,2024-01-22,2024-02-18,CUST00054,Customer CUST00054,PRD042,Product E,72,333.9,24040.58,USD,East,In Process,REP10
383
+ SO000382,2024-02-01,2024-02-09,CUST00009,Customer CUST00009,PRD048,Product A,11,317.93,3497.26,USD,North,In Process,REP15
384
+ SO000383,2024-06-01,2024-06-28,CUST00065,Customer CUST00065,PRD066,Product I,51,190.95,9738.33,USD,North,In Process,REP08
385
+ SO000384,2024-09-27,2024-10-10,CUST00070,Customer CUST00070,PRD081,Product A,23,71.31,1640.16,USD,Central,Delivered,REP02
386
+ SO000385,2024-09-07,2024-09-22,CUST00093,Customer CUST00093,PRD003,Product I,13,114.56,1489.32,USD,West,Cancelled,REP17
387
+ SO000386,2024-03-03,2024-03-26,CUST00076,Customer CUST00076,PRD032,Product G,64,253.17,16202.67,USD,East,In Process,REP04
388
+ SO000387,2024-12-04,2024-12-21,CUST00035,Customer CUST00035,PRD004,Product H,78,354.81,27675.41,USD,South,In Process,REP19
389
+ SO000388,2024-06-16,2024-07-11,CUST00065,Customer CUST00065,PRD062,Product E,27,246.31,6650.36,USD,Central,Cancelled,REP03
390
+ SO000389,2024-05-26,2024-06-13,CUST00080,Customer CUST00080,PRD002,Product J,89,87.06,7748.68,USD,West,Delivered,REP19
391
+ SO000390,2024-11-08,2024-11-19,CUST00072,Customer CUST00072,PRD083,Product G,78,316.19,24662.69,USD,East,Delivered,REP19
392
+ SO000391,2024-07-28,2024-08-23,CUST00080,Customer CUST00080,PRD027,Product H,97,278.94,27057.25,USD,Central,In Process,REP12
393
+ SO000392,2024-04-06,2024-04-17,CUST00057,Customer CUST00057,PRD019,Product E,59,184.37,10877.76,USD,South,In Process,REP05
394
+ SO000393,2024-02-16,2024-02-29,CUST00068,Customer CUST00068,PRD093,Product A,13,394.58,5129.57,USD,East,Delivered,REP18
395
+ SO000394,2024-11-14,2024-11-30,CUST00057,Customer CUST00057,PRD006,Product H,90,230.56,20750.14,USD,South,Open,REP05
396
+ SO000395,2024-11-13,2024-11-28,CUST00069,Customer CUST00069,PRD076,Product B,90,295.27,26574.28,USD,North,In Process,REP07
397
+ SO000396,2024-09-22,2024-09-30,CUST00089,Customer CUST00089,PRD026,Product C,80,319.04,25523.46,USD,South,Delivered,REP11
398
+ SO000397,2024-10-21,2024-11-11,CUST00020,Customer CUST00020,PRD066,Product I,54,350.94,18950.8,USD,East,Delivered,REP02
399
+ SO000398,2024-11-18,2024-11-30,CUST00079,Customer CUST00079,PRD059,Product J,73,356.25,26006.15,USD,North,Delivered,REP02
400
+ SO000399,2024-03-05,2024-03-30,CUST00026,Customer CUST00026,PRD048,Product I,10,310.01,3100.06,USD,East,Delivered,REP04
401
+ SO000400,2024-04-07,2024-04-26,CUST00028,Customer CUST00028,PRD083,Product A,45,295.63,13303.52,USD,North,Delivered,REP01
402
+ SO000401,2024-05-17,2024-05-27,CUST00073,Customer CUST00073,PRD027,Product J,32,339.51,10864.18,USD,North,In Process,REP18
403
+ SO000402,2024-08-31,2024-09-27,CUST00025,Customer CUST00025,PRD092,Product D,93,261.24,24294.94,USD,East,Open,REP17
404
+ SO000403,2024-02-12,2024-02-27,CUST00042,Customer CUST00042,PRD096,Product B,84,109.97,9237.66,USD,North,Delivered,REP15
405
+ SO000404,2024-03-03,2024-03-10,CUST00069,Customer CUST00069,PRD058,Product B,40,183.88,7355.27,USD,South,Delivered,REP01
406
+ SO000405,2024-11-26,2024-12-18,CUST00082,Customer CUST00082,PRD063,Product G,10,443.63,4436.33,USD,East,In Process,REP13
407
+ SO000406,2024-06-22,2024-07-01,CUST00074,Customer CUST00074,PRD051,Product F,65,134.15,8719.43,USD,East,Delivered,REP14
408
+ SO000407,2024-07-27,2024-08-11,CUST00006,Customer CUST00006,PRD037,Product I,39,141.74,5527.79,USD,West,Cancelled,REP09
409
+ SO000408,2024-12-03,2024-12-30,CUST00002,Customer CUST00002,PRD037,Product J,60,418.49,25109.11,USD,West,Delivered,REP15
410
+ SO000409,2024-04-01,2024-04-25,CUST00098,Customer CUST00098,PRD007,Product F,11,303.43,3337.78,USD,Central,In Process,REP11
411
+ SO000410,2024-11-05,2024-11-15,CUST00092,Customer CUST00092,PRD038,Product A,55,359.35,19764.27,USD,South,In Process,REP16
412
+ SO000411,2024-05-12,2024-06-04,CUST00074,Customer CUST00074,PRD068,Product E,71,363.08,25778.48,USD,West,In Process,REP05
413
+ SO000412,2024-05-08,2024-05-18,CUST00012,Customer CUST00012,PRD052,Product H,23,134.89,3102.52,USD,Central,In Process,REP13
414
+ SO000413,2024-11-06,2024-11-26,CUST00032,Customer CUST00032,PRD058,Product G,96,395.32,37950.27,USD,South,In Process,REP07
415
+ SO000414,2024-12-01,2024-12-08,CUST00085,Customer CUST00085,PRD041,Product I,6,281.15,1686.91,USD,East,In Process,REP05
416
+ SO000415,2024-03-27,2024-04-19,CUST00076,Customer CUST00076,PRD073,Product G,80,376.69,30135.55,USD,North,Open,REP15
417
+ SO000416,2024-06-13,2024-07-12,CUST00013,Customer CUST00013,PRD006,Product D,23,220.51,5071.69,USD,Central,Delivered,REP12
418
+ SO000417,2024-01-18,2024-02-15,CUST00033,Customer CUST00033,PRD036,Product A,32,446.52,14288.61,USD,South,In Process,REP02
419
+ SO000418,2024-07-19,2024-08-04,CUST00028,Customer CUST00028,PRD028,Product G,47,201.61,9475.49,USD,East,In Process,REP08
420
+ SO000419,2024-12-28,2025-01-12,CUST00047,Customer CUST00047,PRD047,Product A,62,437.02,27095.21,USD,East,Delivered,REP10
421
+ SO000420,2024-12-19,2025-01-13,CUST00013,Customer CUST00013,PRD064,Product F,1,319.4,319.4,USD,Central,Delivered,REP07
422
+ SO000421,2024-05-07,2024-05-30,CUST00071,Customer CUST00071,PRD053,Product E,26,448.88,11670.9,USD,South,Delivered,REP01
423
+ SO000422,2024-08-28,2024-09-20,CUST00043,Customer CUST00043,PRD026,Product I,3,284.73,854.2,USD,Central,In Process,REP16
424
+ SO000423,2024-01-25,2024-02-22,CUST00028,Customer CUST00028,PRD041,Product I,56,419.7,23503.07,USD,North,Delivered,REP19
425
+ SO000424,2024-12-29,2025-01-23,CUST00071,Customer CUST00071,PRD011,Product C,19,428.94,8149.81,USD,Central,In Process,REP14
426
+ SO000425,2024-01-30,2024-02-13,CUST00018,Customer CUST00018,PRD036,Product C,48,111.9,5371.13,USD,West,Open,REP15
427
+ SO000426,2024-08-07,2024-09-02,CUST00057,Customer CUST00057,PRD079,Product A,45,230.73,10383.05,USD,Central,Delivered,REP10
428
+ SO000427,2024-08-08,2024-08-17,CUST00083,Customer CUST00083,PRD004,Product C,54,367.33,19835.55,USD,East,Delivered,REP11
429
+ SO000428,2024-05-01,2024-05-18,CUST00096,Customer CUST00096,PRD098,Product B,62,422.74,26209.85,USD,North,Open,REP15
430
+ SO000429,2024-02-17,2024-02-27,CUST00008,Customer CUST00008,PRD096,Product I,58,393.16,22803.3,USD,Central,In Process,REP17
431
+ SO000430,2024-12-20,2024-12-31,CUST00083,Customer CUST00083,PRD058,Product G,92,105.54,9709.48,USD,West,In Process,REP17
432
+ SO000431,2024-08-02,2024-08-11,CUST00021,Customer CUST00021,PRD042,Product J,36,427.77,15399.6,USD,Central,Delivered,REP12
433
+ SO000432,2024-06-18,2024-07-07,CUST00011,Customer CUST00011,PRD059,Product F,16,109.1,1745.67,USD,East,Open,REP02
434
+ SO000433,2024-04-03,2024-04-21,CUST00010,Customer CUST00010,PRD023,Product A,90,351.12,31600.49,USD,West,In Process,REP18
435
+ SO000434,2024-11-13,2024-12-06,CUST00062,Customer CUST00062,PRD045,Product F,67,470.14,31499.62,USD,Central,In Process,REP14
436
+ SO000435,2024-09-25,2024-10-05,CUST00007,Customer CUST00007,PRD070,Product F,74,334.36,24742.99,USD,West,In Process,REP05
437
+ SO000436,2024-12-05,2024-12-23,CUST00033,Customer CUST00033,PRD035,Product H,1,237.36,237.36,USD,Central,Delivered,REP15
438
+ SO000437,2024-01-05,2024-01-25,CUST00050,Customer CUST00050,PRD029,Product F,89,449.98,40048.26,USD,East,Delivered,REP07
439
+ SO000438,2024-04-13,2024-05-02,CUST00018,Customer CUST00018,PRD048,Product B,8,132.01,1056.11,USD,Central,Open,REP12
440
+ SO000439,2024-10-25,2024-11-10,CUST00067,Customer CUST00067,PRD035,Product C,95,29.77,2828.33,USD,Central,In Process,REP11
441
+ SO000440,2024-07-05,2024-08-01,CUST00054,Customer CUST00054,PRD032,Product E,35,17.71,619.99,USD,South,Delivered,REP15
442
+ SO000441,2024-09-12,2024-09-29,CUST00058,Customer CUST00058,PRD083,Product C,3,316.06,948.18,USD,Central,In Process,REP04
443
+ SO000442,2024-03-01,2024-03-26,CUST00043,Customer CUST00043,PRD083,Product B,74,77.83,5759.67,USD,North,In Process,REP11
444
+ SO000443,2024-04-19,2024-04-27,CUST00055,Customer CUST00055,PRD050,Product E,63,113.7,7163.2,USD,East,In Process,REP04
445
+ SO000444,2024-09-02,2024-09-25,CUST00042,Customer CUST00042,PRD061,Product D,38,300.65,11424.61,USD,East,Cancelled,REP18
446
+ SO000445,2024-06-03,2024-07-02,CUST00054,Customer CUST00054,PRD041,Product B,87,463.27,40304.76,USD,West,Delivered,REP09
447
+ SO000446,2024-06-30,2024-07-16,CUST00022,Customer CUST00022,PRD076,Product C,65,321.61,20904.7,USD,West,In Process,REP18
448
+ SO000447,2024-07-27,2024-08-16,CUST00014,Customer CUST00014,PRD043,Product B,20,345.84,6916.87,USD,North,Delivered,REP15
449
+ SO000448,2024-09-24,2024-10-08,CUST00020,Customer CUST00020,PRD077,Product F,3,323.13,969.38,USD,South,In Process,REP02
450
+ SO000449,2024-10-19,2024-11-11,CUST00066,Customer CUST00066,PRD022,Product D,54,295.76,15971.23,USD,West,In Process,REP08
451
+ SO000450,2024-01-29,2024-02-12,CUST00090,Customer CUST00090,PRD045,Product A,84,441.68,37100.85,USD,East,In Process,REP15
452
+ SO000451,2024-06-03,2024-06-30,CUST00087,Customer CUST00087,PRD081,Product H,73,498.65,36401.2,USD,West,In Process,REP15
453
+ SO000452,2024-08-10,2024-09-08,CUST00057,Customer CUST00057,PRD053,Product H,79,425.22,33592.39,USD,West,In Process,REP12
454
+ SO000453,2024-09-29,2024-10-15,CUST00094,Customer CUST00094,PRD020,Product C,11,396.81,4364.92,USD,West,Open,REP18
455
+ SO000454,2024-12-23,2025-01-08,CUST00032,Customer CUST00032,PRD040,Product D,15,82.17,1232.48,USD,East,Cancelled,REP08
456
+ SO000455,2024-10-22,2024-11-09,CUST00056,Customer CUST00056,PRD060,Product G,11,169.86,1868.51,USD,Central,In Process,REP10
457
+ SO000456,2024-02-08,2024-03-02,CUST00036,Customer CUST00036,PRD088,Product D,26,406.42,10566.96,USD,South,In Process,REP02
458
+ SO000457,2024-01-31,2024-02-29,CUST00011,Customer CUST00011,PRD060,Product E,64,294.54,18850.72,USD,East,Open,REP17
459
+ SO000458,2024-03-05,2024-04-03,CUST00095,Customer CUST00095,PRD009,Product J,57,360.44,20545.16,USD,Central,In Process,REP13
460
+ SO000459,2024-03-29,2024-04-20,CUST00018,Customer CUST00018,PRD063,Product C,76,390.75,29697.32,USD,South,In Process,REP07
461
+ SO000460,2024-01-13,2024-02-05,CUST00032,Customer CUST00032,PRD077,Product I,40,192.02,7680.76,USD,East,Delivered,REP16
462
+ SO000461,2024-07-19,2024-08-06,CUST00044,Customer CUST00044,PRD018,Product F,83,332.46,27594.22,USD,North,Delivered,REP16
463
+ SO000462,2024-10-21,2024-10-31,CUST00059,Customer CUST00059,PRD006,Product I,96,71.74,6887.14,USD,Central,Delivered,REP19
464
+ SO000463,2024-03-17,2024-04-06,CUST00095,Customer CUST00095,PRD059,Product F,4,485.42,1941.66,USD,North,Delivered,REP06
465
+ SO000464,2024-07-09,2024-07-21,CUST00092,Customer CUST00092,PRD098,Product E,94,428.59,40287.25,USD,East,Open,REP16
466
+ SO000465,2024-04-05,2024-04-17,CUST00072,Customer CUST00072,PRD059,Product G,72,191.87,13814.86,USD,East,Cancelled,REP12
467
+ SO000466,2024-06-25,2024-07-06,CUST00062,Customer CUST00062,PRD022,Product D,89,22.37,1990.6,USD,Central,Delivered,REP04
468
+ SO000467,2024-01-13,2024-02-01,CUST00042,Customer CUST00042,PRD036,Product B,49,317.39,15552.17,USD,Central,In Process,REP01
469
+ SO000468,2024-09-29,2024-10-13,CUST00091,Customer CUST00091,PRD059,Product G,46,308.87,14208.08,USD,East,In Process,REP13
470
+ SO000469,2024-08-16,2024-09-08,CUST00028,Customer CUST00028,PRD017,Product I,61,85.7,5227.77,USD,South,Delivered,REP07
471
+ SO000470,2024-01-13,2024-02-06,CUST00093,Customer CUST00093,PRD081,Product B,13,340.46,4425.93,USD,Central,Open,REP08
472
+ SO000471,2024-04-25,2024-05-16,CUST00073,Customer CUST00073,PRD052,Product D,74,389.04,28789.02,USD,Central,Open,REP01
473
+ SO000472,2024-11-08,2024-12-04,CUST00009,Customer CUST00009,PRD009,Product F,1,400.04,400.04,USD,East,In Process,REP15
474
+ SO000473,2024-05-19,2024-05-26,CUST00078,Customer CUST00078,PRD065,Product I,57,102.68,5852.66,USD,East,Open,REP11
475
+ SO000474,2024-08-19,2024-09-04,CUST00062,Customer CUST00062,PRD093,Product C,11,288.55,3174.03,USD,North,In Process,REP08
476
+ SO000475,2024-02-25,2024-03-08,CUST00086,Customer CUST00086,PRD049,Product B,37,377.22,13957.09,USD,East,Delivered,REP03
477
+ SO000476,2024-05-18,2024-06-10,CUST00021,Customer CUST00021,PRD017,Product C,66,337.26,22258.85,USD,East,Delivered,REP06
478
+ SO000477,2024-05-26,2024-06-07,CUST00028,Customer CUST00028,PRD086,Product B,38,474.11,18016.15,USD,East,Delivered,REP17
479
+ SO000478,2024-10-25,2024-11-04,CUST00058,Customer CUST00058,PRD060,Product D,58,360.86,20930.14,USD,North,In Process,REP14
480
+ SO000479,2024-03-23,2024-04-01,CUST00056,Customer CUST00056,PRD072,Product A,42,178.26,7486.9,USD,North,Cancelled,REP16
481
+ SO000480,2024-05-16,2024-06-06,CUST00016,Customer CUST00016,PRD034,Product H,76,143.75,10924.66,USD,Central,In Process,REP03
482
+ SO000481,2024-09-06,2024-10-04,CUST00073,Customer CUST00073,PRD024,Product J,20,379.4,7587.91,USD,South,Open,REP05
483
+ SO000482,2024-07-13,2024-08-04,CUST00015,Customer CUST00015,PRD034,Product C,76,433.83,32971.21,USD,West,In Process,REP18
484
+ SO000483,2024-12-05,2024-12-23,CUST00087,Customer CUST00087,PRD066,Product D,87,156.44,13610.28,USD,North,In Process,REP03
485
+ SO000484,2024-05-28,2024-06-23,CUST00049,Customer CUST00049,PRD038,Product D,86,94.94,8164.68,USD,Central,Delivered,REP15
486
+ SO000485,2024-09-06,2024-09-26,CUST00052,Customer CUST00052,PRD047,Product I,21,295.97,6215.3,USD,South,Delivered,REP04
487
+ SO000486,2024-03-31,2024-04-24,CUST00021,Customer CUST00021,PRD010,Product C,86,266.34,22905.25,USD,East,In Process,REP17
488
+ SO000487,2024-07-18,2024-08-16,CUST00075,Customer CUST00075,PRD093,Product E,53,237.35,12579.6,USD,East,Cancelled,REP05
489
+ SO000488,2024-03-13,2024-04-04,CUST00002,Customer CUST00002,PRD076,Product A,60,312.3,18738.15,USD,East,Delivered,REP07
490
+ SO000489,2024-03-30,2024-04-18,CUST00072,Customer CUST00072,PRD058,Product F,92,491.95,45259.21,USD,North,Open,REP15
491
+ SO000490,2024-06-10,2024-07-09,CUST00031,Customer CUST00031,PRD065,Product D,89,349.09,31068.61,USD,Central,Delivered,REP10
492
+ SO000491,2024-06-30,2024-07-16,CUST00021,Customer CUST00021,PRD062,Product A,22,243.9,5365.84,USD,Central,Delivered,REP15
493
+ SO000492,2024-09-29,2024-10-22,CUST00090,Customer CUST00090,PRD014,Product A,38,238.68,9069.83,USD,Central,Delivered,REP15
494
+ SO000493,2024-03-12,2024-04-02,CUST00054,Customer CUST00054,PRD069,Product A,31,158.61,4916.91,USD,East,Open,REP17
495
+ SO000494,2024-08-04,2024-08-12,CUST00026,Customer CUST00026,PRD018,Product E,90,209.8,18881.69,USD,East,Delivered,REP04
496
+ SO000495,2024-09-29,2024-10-19,CUST00078,Customer CUST00078,PRD035,Product G,44,67.02,2948.69,USD,East,Delivered,REP17
497
+ SO000496,2024-04-09,2024-04-18,CUST00032,Customer CUST00032,PRD071,Product J,48,32.93,1580.4,USD,Central,In Process,REP11
498
+ SO000497,2024-02-19,2024-02-26,CUST00099,Customer CUST00099,PRD068,Product D,13,270.51,3516.68,USD,Central,Open,REP08
499
+ SO000498,2024-07-05,2024-07-27,CUST00092,Customer CUST00092,PRD003,Product D,45,117.84,5302.96,USD,Central,Delivered,REP08
500
+ SO000499,2024-10-06,2024-10-27,CUST00043,Customer CUST00043,PRD057,Product I,45,419.88,18894.79,USD,West,Cancelled,REP16
501
+ SO000500,2024-10-12,2024-10-28,CUST00018,Customer CUST00018,PRD045,Product B,69,392.67,27094.39,USD,West,In Process,REP05
requirements.txt ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ mesop>=0.4.0
2
+ pandas>=2.0.0
3
+ numpy>=1.24.0
4
+ #sap-rpt-oss
5
+ huggingface_hub>=0.20.0
6
+ plotly>=5.17.0
7
+ requests>=2.31.0
8
+ python-dotenv>=1.0.0
9
+ scikit-learn>=1.3.0
10
+ gradio
11
+ pyarrow>=10.0.0
12
+ pyzmq>=25.0.0
13
+
utils/__init__.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ # Utils package
2
+
utils/data_generator.py ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Synthetic SAP Finance Data Generator
3
+
4
+ Generates synthetic datasets for:
5
+ - General Ledger accounts with transactions
6
+ - Financial Statements (P&L and Balance Sheet)
7
+ - Sales Order data
8
+ """
9
+
10
+ import pandas as pd
11
+ import numpy as np
12
+ from datetime import datetime, timedelta
13
+ import os
14
+
15
+
16
+ def generate_gl_accounts(num_transactions=1000, output_path="data/synthetic_gl_accounts.csv"):
17
+ """Generate synthetic General Ledger accounts with transactions."""
18
+
19
+ # Account codes and descriptions
20
+ account_codes = [
21
+ "100000", "110000", "120000", "130000", "140000", # Assets
22
+ "200000", "210000", "220000", "230000", # Liabilities
23
+ "300000", "310000", "320000", # Equity
24
+ "400000", "410000", "420000", "430000", # Revenue
25
+ "500000", "510000", "520000", "530000", "540000", # Expenses
26
+ ]
27
+
28
+ account_descriptions = [
29
+ "Cash and Cash Equivalents", "Accounts Receivable", "Inventory",
30
+ "Prepaid Expenses", "Property, Plant & Equipment",
31
+ "Accounts Payable", "Accrued Liabilities", "Short-term Debt", "Long-term Debt",
32
+ "Common Stock", "Retained Earnings", "Other Equity",
33
+ "Sales Revenue", "Service Revenue", "Interest Income", "Other Income",
34
+ "Cost of Goods Sold", "Salaries and Wages", "Rent Expense",
35
+ "Utilities Expense", "Marketing Expense"
36
+ ]
37
+
38
+ np.random.seed(42)
39
+
40
+ transactions = []
41
+ base_date = datetime(2024, 1, 1)
42
+
43
+ for i in range(num_transactions):
44
+ account_idx = np.random.randint(0, len(account_codes))
45
+ transaction_date = base_date + timedelta(days=np.random.randint(0, 365))
46
+
47
+ # Determine if debit or credit based on account type
48
+ account_num = int(account_codes[account_idx][0])
49
+ if account_num in [1, 5]: # Assets or Expenses
50
+ debit = np.random.uniform(100, 50000)
51
+ credit = 0
52
+ else: # Liabilities, Equity, Revenue
53
+ debit = 0
54
+ credit = np.random.uniform(100, 50000)
55
+
56
+ transactions.append({
57
+ "Transaction_ID": f"TXN{str(i+1).zfill(6)}",
58
+ "Date": transaction_date.strftime("%Y-%m-%d"),
59
+ "Account_Code": account_codes[account_idx],
60
+ "Account_Description": account_descriptions[account_idx],
61
+ "Debit": round(debit, 2),
62
+ "Credit": round(credit, 2),
63
+ "Balance": round(debit - credit, 2),
64
+ "Document_Number": f"DOC{str(np.random.randint(1000, 9999))}",
65
+ "Posting_Period": transaction_date.strftime("%Y-%m")
66
+ })
67
+
68
+ df = pd.DataFrame(transactions)
69
+ os.makedirs(os.path.dirname(output_path), exist_ok=True)
70
+ df.to_csv(output_path, index=False)
71
+ print(f"Generated {num_transactions} GL transactions: {output_path}")
72
+ return df
73
+
74
+
75
+ def generate_financial_statements(num_periods=12, output_path="data/synthetic_financial_statements.csv"):
76
+ """Generate synthetic Financial Statements (P&L and Balance Sheet)."""
77
+
78
+ np.random.seed(42)
79
+ base_date = datetime(2024, 1, 1)
80
+
81
+ statements = []
82
+
83
+ for period in range(num_periods):
84
+ period_date = base_date + timedelta(days=period * 30)
85
+ period_str = period_date.strftime("%Y-%m")
86
+
87
+ # Profit & Loss Statement
88
+ revenue = np.random.uniform(500000, 1000000)
89
+ cogs = revenue * np.random.uniform(0.4, 0.6)
90
+ gross_profit = revenue - cogs
91
+
92
+ operating_expenses = np.random.uniform(200000, 400000)
93
+ ebitda = gross_profit - operating_expenses
94
+ depreciation = np.random.uniform(20000, 50000)
95
+ ebit = ebitda - depreciation
96
+ interest_expense = np.random.uniform(10000, 30000)
97
+ ebt = ebit - interest_expense
98
+ tax = ebt * 0.25
99
+ net_income = ebt - tax
100
+
101
+ # Balance Sheet
102
+ cash = np.random.uniform(100000, 500000)
103
+ accounts_receivable = np.random.uniform(200000, 400000)
104
+ inventory = np.random.uniform(150000, 300000)
105
+ current_assets = cash + accounts_receivable + inventory
106
+ ppe = np.random.uniform(2000000, 5000000)
107
+ total_assets = current_assets + ppe
108
+
109
+ accounts_payable = np.random.uniform(100000, 200000)
110
+ short_term_debt = np.random.uniform(50000, 150000)
111
+ current_liabilities = accounts_payable + short_term_debt
112
+ long_term_debt = np.random.uniform(1000000, 2000000)
113
+ total_liabilities = current_liabilities + long_term_debt
114
+
115
+ equity = total_assets - total_liabilities
116
+
117
+ statements.append({
118
+ "Period": period_str,
119
+ "Statement_Type": "P&L",
120
+ "Revenue": round(revenue, 2),
121
+ "Cost_of_Goods_Sold": round(cogs, 2),
122
+ "Gross_Profit": round(gross_profit, 2),
123
+ "Operating_Expenses": round(operating_expenses, 2),
124
+ "EBITDA": round(ebitda, 2),
125
+ "Depreciation": round(depreciation, 2),
126
+ "EBIT": round(ebit, 2),
127
+ "Interest_Expense": round(interest_expense, 2),
128
+ "EBT": round(ebt, 2),
129
+ "Tax": round(tax, 2),
130
+ "Net_Income": round(net_income, 2),
131
+ "Cash": round(cash, 2),
132
+ "Accounts_Receivable": round(accounts_receivable, 2),
133
+ "Inventory": round(inventory, 2),
134
+ "Current_Assets": round(current_assets, 2),
135
+ "PPE": round(ppe, 2),
136
+ "Total_Assets": round(total_assets, 2),
137
+ "Accounts_Payable": round(accounts_payable, 2),
138
+ "Short_Term_Debt": round(short_term_debt, 2),
139
+ "Current_Liabilities": round(current_liabilities, 2),
140
+ "Long_Term_Debt": round(long_term_debt, 2),
141
+ "Total_Liabilities": round(total_liabilities, 2),
142
+ "Equity": round(equity, 2)
143
+ })
144
+
145
+ df = pd.DataFrame(statements)
146
+ os.makedirs(os.path.dirname(output_path), exist_ok=True)
147
+ df.to_csv(output_path, index=False)
148
+ print(f"Generated {num_periods} financial statement periods: {output_path}")
149
+ return df
150
+
151
+
152
+ def generate_sales_orders(num_orders=500, output_path="data/synthetic_sales_orders.csv"):
153
+ """Generate synthetic Sales Order data."""
154
+
155
+ np.random.seed(42)
156
+ base_date = datetime(2024, 1, 1)
157
+
158
+ products = [
159
+ "Product A", "Product B", "Product C", "Product D", "Product E",
160
+ "Product F", "Product G", "Product H", "Product I", "Product J"
161
+ ]
162
+
163
+ customers = [f"CUST{str(i).zfill(5)}" for i in range(1, 101)]
164
+ regions = ["North", "South", "East", "West", "Central"]
165
+
166
+ orders = []
167
+
168
+ for i in range(num_orders):
169
+ order_date = base_date + timedelta(days=np.random.randint(0, 365))
170
+ delivery_date = order_date + timedelta(days=np.random.randint(7, 30))
171
+
172
+ customer = np.random.choice(customers)
173
+ product = np.random.choice(products)
174
+ quantity = np.random.randint(1, 100)
175
+ unit_price = np.random.uniform(10, 500)
176
+ total_amount = quantity * unit_price
177
+ region = np.random.choice(regions)
178
+
179
+ order_status = np.random.choice(
180
+ ["Open", "In Process", "Delivered", "Cancelled"],
181
+ p=[0.2, 0.3, 0.4, 0.1]
182
+ )
183
+
184
+ orders.append({
185
+ "Order_Number": f"SO{str(i+1).zfill(6)}",
186
+ "Order_Date": order_date.strftime("%Y-%m-%d"),
187
+ "Delivery_Date": delivery_date.strftime("%Y-%m-%d"),
188
+ "Customer_ID": customer,
189
+ "Customer_Name": f"Customer {customer}",
190
+ "Product_Code": f"PRD{str(np.random.randint(1, 100)).zfill(3)}",
191
+ "Product_Name": product,
192
+ "Quantity": quantity,
193
+ "Unit_Price": round(unit_price, 2),
194
+ "Total_Amount": round(total_amount, 2),
195
+ "Currency": "USD",
196
+ "Region": region,
197
+ "Status": order_status,
198
+ "Sales_Rep": f"REP{str(np.random.randint(1, 20)).zfill(2)}"
199
+ })
200
+
201
+ df = pd.DataFrame(orders)
202
+ os.makedirs(os.path.dirname(output_path), exist_ok=True)
203
+ df.to_csv(output_path, index=False)
204
+ print(f"Generated {num_orders} sales orders: {output_path}")
205
+ return df
206
+
207
+
208
+ def generate_all_datasets():
209
+ """Generate all synthetic datasets."""
210
+ print("Generating synthetic SAP finance datasets...")
211
+ generate_gl_accounts()
212
+ generate_financial_statements()
213
+ generate_sales_orders()
214
+ print("All datasets generated successfully!")
215
+
216
+
217
+ if __name__ == "__main__":
218
+ generate_all_datasets()
219
+
utils/odata_connector.py ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ SAP OData Connector
3
+
4
+ Implements SAPFinanceConnector class for connecting to SAP OData services
5
+ and fetching sales orders, products, line items, and business partners.
6
+ """
7
+
8
+ import os
9
+ import json
10
+ import logging
11
+ import requests
12
+ import pandas as pd
13
+ from dotenv import load_dotenv
14
+
15
+ load_dotenv()
16
+
17
+ logging.basicConfig(level=logging.INFO)
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ class SAPFinanceConnector:
22
+ """Connector for SAP OData API services."""
23
+
24
+ def __init__(self, verify_ssl=False):
25
+ """
26
+ Initialize the SAP Finance Connector.
27
+
28
+ Args:
29
+ verify_ssl: Whether to verify SSL certificates
30
+ """
31
+ self.user = os.getenv("SAP_USERNAME")
32
+ self.pw = os.getenv("SAP_PASSWORD")
33
+ self.base = os.getenv("SAP_BASE_URL", "https://sapes5.sapdevcenter.com/sap/opu/odata/IWBEP/GWSAMPLE_BASIC")
34
+ self.client = os.getenv("SAP_CLIENT", "002")
35
+ self.headers = {"Accept": "application/json", "x-csrf-token": "Fetch"}
36
+ self.cookies = None
37
+ self.verify_ssl = verify_ssl
38
+
39
+ if not self.user or not self.pw:
40
+ logging.warning("SAP_USERNAME or SAP_PASSWORD environment variable not set.")
41
+
42
+ def test_connection(self):
43
+ """
44
+ Test the connection to SAP OData service.
45
+
46
+ Returns:
47
+ Tuple of (success: bool, message: str)
48
+ """
49
+ if not self.user or not self.pw:
50
+ return False, "SAP credentials not set in environment variables."
51
+
52
+ metadata_url = f"{self.base}/$metadata"
53
+ try:
54
+ logging.info(f"Attempting to connect to SAP metadata URL: {metadata_url} with client {self.client}")
55
+ r = requests.get(
56
+ metadata_url,
57
+ auth=(self.user, self.pw),
58
+ headers={"Accept": "application/xml"},
59
+ params={"sap-client": self.client},
60
+ verify=self.verify_ssl,
61
+ timeout=20
62
+ )
63
+ r.raise_for_status()
64
+ self.cookies = r.cookies
65
+ tok = r.headers.get("x-csrf-token")
66
+ if tok:
67
+ self.headers['x-csrf-token'] = tok
68
+ logging.info("SAP Connection successful, CSRF token fetched.")
69
+ return True, "Connected successfully."
70
+ else:
71
+ logging.warning("SAP Connection successful, but x-csrf-token not found.")
72
+ return True, "Connected (Warning: CSRF token missing)."
73
+ except requests.exceptions.Timeout:
74
+ logging.error(f"SAP connection timed out: {metadata_url}")
75
+ return False, "Connection timed out."
76
+ except requests.exceptions.HTTPError as e:
77
+ logging.error(f"SAP connection HTTP error: {e.response.status_code} - {e.response.text[:200]}")
78
+ return False, f"Connection failed (HTTP {e.response.status_code}). Check URL/Credentials/Client."
79
+ except requests.exceptions.RequestException as e:
80
+ logging.error(f"SAP connection failed: {e}")
81
+ return False, f"Connection failed: {type(e).__name__}. Check network/URL."
82
+ except Exception as e:
83
+ logging.error(f"An unexpected error occurred during SAP connection test: {e}", exc_info=True)
84
+ return False, f"An unexpected error occurred: {e}"
85
+
86
+ def fetch(self, entity, top):
87
+ """
88
+ Fetch data from a specific OData entity.
89
+
90
+ Args:
91
+ entity: Entity name (e.g., "SalesOrderSet")
92
+ top: Maximum number of records to fetch
93
+
94
+ Returns:
95
+ List of records as dictionaries
96
+ """
97
+ if not self.cookies or 'x-csrf-token' not in self.headers.get('x-csrf-token', ''):
98
+ logging.warning(f"Attempting to fetch {entity} without established connection/CSRF token.")
99
+ connected, msg = self.test_connection()
100
+ if not connected:
101
+ logging.error(f"Cannot fetch {entity}, SAP connection failed: {msg}")
102
+ raise ConnectionError(f"SAP Connection failed: {msg}")
103
+ elif 'x-csrf-token' not in self.headers.get('x-csrf-token', ''):
104
+ logging.warning(f"Proceeding to fetch {entity} without CSRF token. May fail.")
105
+
106
+ url = f"{self.base}/{entity}"
107
+ params = {
108
+ "sap-client": self.client,
109
+ "$format": "json",
110
+ "$top": str(top)
111
+ }
112
+ logging.info(f"Fetching data from: {url} with params: {params}")
113
+ try:
114
+ r = requests.get(url, params=params, auth=(self.user, self.pw), headers=self.headers,
115
+ cookies=self.cookies, verify=self.verify_ssl, timeout=30)
116
+ r.raise_for_status()
117
+ content_type = r.headers.get('Content-Type', '')
118
+ if 'application/json' in content_type:
119
+ # Handle potential empty response or structure variations
120
+ response_json = r.json()
121
+ data = response_json.get('d', {}).get('results', []) if isinstance(response_json.get('d'), dict) else []
122
+ logging.info(f"Successfully fetched {len(data)} records from {entity}.")
123
+ return data
124
+ else:
125
+ logging.error(f"Unexpected Content-Type '{content_type}' for {entity}. Response: {r.text[:200]}")
126
+ raise ValueError(f"Expected JSON response, got {content_type}")
127
+
128
+ except requests.exceptions.Timeout:
129
+ logging.error(f"Timeout occurred while fetching {entity} from {url}")
130
+ raise TimeoutError(f"Timeout fetching {entity}")
131
+ except requests.exceptions.HTTPError as e:
132
+ logging.error(f"HTTP error fetching {entity}: {e.response.status_code} - {e.response.text[:200]}")
133
+ raise ConnectionError(f"HTTP {e.response.status_code} fetching {entity}")
134
+ except requests.exceptions.RequestException as e:
135
+ logging.error(f"Failed to fetch {entity}: {e}")
136
+ raise ConnectionError(f"Request failed for {entity}: {e}")
137
+ except json.JSONDecodeError as e:
138
+ logging.error(f"Failed to decode JSON for {entity}: {e}. Response: {r.text[:500]}")
139
+ raise ValueError(f"Invalid JSON received for {entity}")
140
+ except Exception as e:
141
+ logging.error(f"Unexpected error fetching {entity}: {e}", exc_info=True)
142
+ raise
143
+
144
+ def fetch_orders(self, top=500):
145
+ """
146
+ Fetch sales orders.
147
+
148
+ Args:
149
+ top: Maximum number of records
150
+
151
+ Returns:
152
+ List of sales order records
153
+ """
154
+ return self.fetch("SalesOrderSet", top)
155
+
156
+ def fetch_products(self, top=500):
157
+ """
158
+ Fetch products.
159
+
160
+ Args:
161
+ top: Maximum number of records
162
+
163
+ Returns:
164
+ List of product records
165
+ """
166
+ return self.fetch("ProductSet", top)
167
+
168
+ def fetch_line_items(self, top=400):
169
+ """
170
+ Fetch sales order line items.
171
+
172
+ Args:
173
+ top: Maximum number of records
174
+
175
+ Returns:
176
+ List of line item records
177
+ """
178
+ return self.fetch("SalesOrderLineItemSet", top)
179
+
180
+ def fetch_partners(self, top=500):
181
+ """
182
+ Fetch business partners.
183
+
184
+ Args:
185
+ top: Maximum number of records
186
+
187
+ Returns:
188
+ List of business partner records
189
+ """
190
+ return self.fetch("BusinessPartnerSet", top)
191
+
192
+ def fetch_orders_df(self, top=500):
193
+ """
194
+ Fetch sales orders as a pandas DataFrame.
195
+
196
+ Args:
197
+ top: Maximum number of records
198
+
199
+ Returns:
200
+ pandas DataFrame
201
+ """
202
+ data = self.fetch_orders(top)
203
+ if data:
204
+ return pd.DataFrame(data)
205
+ return pd.DataFrame()
206
+
207
+ def fetch_products_df(self, top=500):
208
+ """
209
+ Fetch products as a pandas DataFrame.
210
+
211
+ Args:
212
+ top: Maximum number of records
213
+
214
+ Returns:
215
+ pandas DataFrame
216
+ """
217
+ data = self.fetch_products(top)
218
+ if data:
219
+ return pd.DataFrame(data)
220
+ return pd.DataFrame()
221
+
222
+ def fetch_line_items_df(self, top=400):
223
+ """
224
+ Fetch sales order line items as a pandas DataFrame.
225
+
226
+ Args:
227
+ top: Maximum number of records
228
+
229
+ Returns:
230
+ pandas DataFrame
231
+ """
232
+ data = self.fetch_line_items(top)
233
+ if data:
234
+ return pd.DataFrame(data)
235
+ return pd.DataFrame()
236
+
237
+ def fetch_partners_df(self, top=500):
238
+ """
239
+ Fetch business partners as a pandas DataFrame.
240
+
241
+ Args:
242
+ top: Maximum number of records
243
+
244
+ Returns:
245
+ pandas DataFrame
246
+ """
247
+ data = self.fetch_partners(top)
248
+ if data:
249
+ return pd.DataFrame(data)
250
+ return pd.DataFrame()
251
+
utils/playground.py ADDED
@@ -0,0 +1,428 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ SAP-RPT-1-OSS Playground Utilities
3
+
4
+ Functions for handling dataset uploads, previews, training, and results export.
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+ from pathlib import Path
10
+ from typing import Tuple, Optional, Dict, Any
11
+ import tempfile
12
+ import os
13
+
14
+
15
+ def load_dataset(file_path: str) -> Tuple[pd.DataFrame, Optional[str]]:
16
+ """
17
+ Load dataset from file (CSV, Parquet, or JSON).
18
+
19
+ Args:
20
+ file_path: Path to the dataset file
21
+
22
+ Returns:
23
+ Tuple of (DataFrame, error_message)
24
+ """
25
+ try:
26
+ file_ext = Path(file_path).suffix.lower()
27
+
28
+ if file_ext == '.csv':
29
+ df = pd.read_csv(file_path)
30
+ elif file_ext == '.parquet':
31
+ df = pd.read_parquet(file_path)
32
+ elif file_ext in ['.json', '.jsonl']:
33
+ df = pd.read_json(file_path, lines=(file_ext == '.jsonl'))
34
+ else:
35
+ return None, f"Unsupported file format: {file_ext}"
36
+
37
+ return df, None
38
+ except Exception as e:
39
+ return None, f"Error loading file: {str(e)}"
40
+
41
+
42
+ def detect_task_type(filename: str) -> str:
43
+ """
44
+ Detect task type from filename.
45
+
46
+ Args:
47
+ filename: Name of the uploaded file
48
+
49
+ Returns:
50
+ 'classification' or 'regression'
51
+ """
52
+ filename_lower = filename.lower()
53
+ if 'classification' in filename_lower:
54
+ return 'classification'
55
+ elif 'regression' in filename_lower:
56
+ return 'regression'
57
+ return 'classification' # Default
58
+
59
+
60
+ def get_dataset_info(df: pd.DataFrame) -> Dict[str, Any]:
61
+ """
62
+ Get information about the dataset.
63
+
64
+ Args:
65
+ df: DataFrame to analyze
66
+
67
+ Returns:
68
+ Dictionary with dataset information
69
+ """
70
+ info = {
71
+ 'num_rows': len(df),
72
+ 'num_columns': len(df.columns),
73
+ 'columns': list(df.columns),
74
+ 'numeric_columns': list(df.select_dtypes(include=[np.number]).columns),
75
+ 'categorical_columns': list(df.select_dtypes(include=['object', 'category']).columns),
76
+ 'missing_values': df.isnull().sum().to_dict(),
77
+ 'dtypes': df.dtypes.astype(str).to_dict()
78
+ }
79
+ return info
80
+
81
+
82
+ def auto_select_target_column(df: pd.DataFrame, task_type: str) -> Optional[str]:
83
+ """
84
+ Auto-select target column (defaults to last column).
85
+
86
+ Args:
87
+ df: DataFrame
88
+ task_type: 'classification' or 'regression'
89
+
90
+ Returns:
91
+ Column name or None
92
+ """
93
+ if len(df.columns) == 0:
94
+ return None
95
+
96
+ # Default to last column
97
+ target = df.columns[-1]
98
+
99
+ # If task type is regression, prefer numeric columns
100
+ if task_type == 'regression':
101
+ numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist()
102
+ if numeric_cols:
103
+ # Prefer last numeric column
104
+ for col in reversed(numeric_cols):
105
+ if col == target or df[col].dtype in [np.float64, np.int64]:
106
+ return col
107
+
108
+ return target
109
+
110
+
111
+ def detect_task_type_from_column(df: pd.DataFrame, target_column: str) -> str:
112
+ """
113
+ Detect task type from target column's data type.
114
+
115
+ Args:
116
+ df: DataFrame
117
+ target_column: Name of target column
118
+
119
+ Returns:
120
+ 'classification' or 'regression'
121
+ """
122
+ if target_column not in df.columns:
123
+ return 'classification' # Default
124
+
125
+ target_series = df[target_column]
126
+
127
+ # Check if numeric
128
+ if not pd.api.types.is_numeric_dtype(target_series):
129
+ return 'classification' # Non-numeric = classification
130
+
131
+ # Check if integer-like
132
+ try:
133
+ unique_values = target_series.dropna().nunique()
134
+ if unique_values <= 20: # Few unique values = likely classification
135
+ # Check if values are integer-like
136
+ sample = target_series.dropna().head(100)
137
+ int_values = sample.astype(int)
138
+ float_values = sample.astype(float)
139
+ if (int_values == float_values).all():
140
+ return 'classification'
141
+
142
+ # Many unique numeric values = regression
143
+ return 'regression'
144
+ except:
145
+ return 'regression' # Default to regression for numeric
146
+
147
+
148
+ def prepare_train_test_split(
149
+ df: pd.DataFrame,
150
+ target_column: str,
151
+ test_size: float = 0.2
152
+ ) -> Tuple[pd.DataFrame, pd.Series, pd.DataFrame, pd.Series]:
153
+ """
154
+ Prepare train/test split.
155
+
156
+ Args:
157
+ df: Full dataset
158
+ target_column: Name of target column
159
+ test_size: Proportion of test set (0.1 to 0.5)
160
+
161
+ Returns:
162
+ Tuple of (X_train, y_train, X_test, y_test)
163
+ """
164
+ if target_column not in df.columns:
165
+ raise ValueError(f"Target column '{target_column}' not found in dataset")
166
+
167
+ # Separate features and target
168
+ X = df.drop(columns=[target_column])
169
+ y = df[target_column]
170
+
171
+ # Handle missing values in target
172
+ valid_mask = ~y.isnull()
173
+ X = X[valid_mask]
174
+ y = y[valid_mask]
175
+
176
+ # Calculate split index
177
+ n_total = len(X)
178
+ n_test = int(n_total * test_size)
179
+ n_train = n_total - n_test
180
+
181
+ if n_test == 0:
182
+ n_test = 1
183
+ n_train = n_total - 1
184
+
185
+ # Split
186
+ X_train = X.iloc[:n_train]
187
+ y_train = y.iloc[:n_train]
188
+ X_test = X.iloc[n_train:n_train + n_test]
189
+ y_test = y.iloc[n_train:n_train + n_test]
190
+
191
+ return X_train, y_train, X_test, y_test
192
+
193
+
194
+ def preprocess_data(
195
+ df: pd.DataFrame,
196
+ handle_missing: str = 'mean',
197
+ normalize: bool = False
198
+ ) -> pd.DataFrame:
199
+ """
200
+ Preprocess dataset.
201
+
202
+ Args:
203
+ df: DataFrame to preprocess
204
+ handle_missing: How to handle missing values ('mean', 'median', 'drop', 'zero')
205
+ normalize: Whether to normalize numeric columns
206
+
207
+ Returns:
208
+ Preprocessed DataFrame
209
+ """
210
+ df_processed = df.copy()
211
+
212
+ # Handle missing values
213
+ numeric_cols = df_processed.select_dtypes(include=[np.number]).columns
214
+
215
+ if handle_missing == 'mean':
216
+ df_processed[numeric_cols] = df_processed[numeric_cols].fillna(
217
+ df_processed[numeric_cols].mean()
218
+ )
219
+ elif handle_missing == 'median':
220
+ df_processed[numeric_cols] = df_processed[numeric_cols].fillna(
221
+ df_processed[numeric_cols].median()
222
+ )
223
+ elif handle_missing == 'zero':
224
+ df_processed[numeric_cols] = df_processed[numeric_cols].fillna(0)
225
+ elif handle_missing == 'drop':
226
+ df_processed = df_processed.dropna(subset=numeric_cols)
227
+
228
+ # Normalize numeric columns
229
+ if normalize:
230
+ from sklearn.preprocessing import StandardScaler
231
+ scaler = StandardScaler()
232
+ df_processed[numeric_cols] = scaler.fit_transform(df_processed[numeric_cols])
233
+
234
+ return df_processed
235
+
236
+
237
+ def export_results(
238
+ X_test: pd.DataFrame,
239
+ y_test: pd.Series,
240
+ predictions: np.ndarray,
241
+ task_type: str,
242
+ filename_prefix: str = "results"
243
+ ) -> str:
244
+ """
245
+ Export results to CSV file.
246
+
247
+ Args:
248
+ X_test: Test features
249
+ y_test: True target values
250
+ predictions: Model predictions
251
+ task_type: 'classification' or 'regression'
252
+ filename_prefix: Prefix for output filename
253
+
254
+ Returns:
255
+ Path to exported CSV file
256
+ """
257
+ # Create results DataFrame
258
+ results_df = X_test.copy()
259
+ results_df['true_value'] = y_test.values
260
+
261
+ if task_type == 'classification':
262
+ results_df['predicted_class'] = predictions
263
+ else:
264
+ # Regression - format with comma for decimal separator
265
+ results_df['predicted_value'] = predictions
266
+
267
+ # Save to temporary file
268
+ temp_dir = tempfile.gettempdir()
269
+ output_path = os.path.join(temp_dir, f"{filename_prefix}_results.csv")
270
+
271
+ results_df.to_csv(output_path, index=False)
272
+
273
+ return output_path
274
+
275
+
276
+ def check_embedding_server() -> Tuple[bool, str]:
277
+ """
278
+ Check if embedding server is running.
279
+
280
+ Returns:
281
+ Tuple of (is_running, message)
282
+ """
283
+ # First check if packages are available (but don't fail if import path is different)
284
+ try:
285
+ import zmq
286
+ except ImportError:
287
+ return False, "pyzmq package not installed. Install with: pip install pyzmq"
288
+
289
+ # Try to check if server is running (don't check package installation here)
290
+ try:
291
+ context = zmq.Context()
292
+ socket = context.socket(zmq.REQ)
293
+ socket.setsockopt(zmq.LINGER, 0)
294
+ socket.settimeout(1000) # 1 second timeout
295
+ socket.connect("tcp://localhost:5555")
296
+ socket.send_string("ping")
297
+
298
+ # Try to receive with timeout
299
+ poller = zmq.Poller()
300
+ poller.register(socket, zmq.POLLIN)
301
+ if poller.poll(1000): # 1 second timeout
302
+ response = socket.recv_string()
303
+ socket.close()
304
+ context.term()
305
+ return True, "Embedding server is running and responding"
306
+ else:
307
+ socket.close()
308
+ context.term()
309
+ return False, "Embedding server not responding on port 5555"
310
+ except zmq.ZMQError as e:
311
+ if "Connection refused" in str(e) or "No such file or directory" in str(e):
312
+ return False, "Embedding server is not running"
313
+ return False, f"Connection error: {str(e)}"
314
+ except Exception as e:
315
+ return False, f"Error checking embedding server: {str(e)}"
316
+
317
+
318
+ def is_sap_rpt_oss_installed() -> bool:
319
+ """Check if sap-rpt-oss package is installed."""
320
+ try:
321
+ import sap_rpt_oss
322
+ return True
323
+ except ImportError:
324
+ try:
325
+ # Try alternative import paths
326
+ from sap_rpt_oss import SAP_RPT_OSS_Classifier
327
+ return True
328
+ except ImportError:
329
+ return False
330
+
331
+
332
+ def start_embedding_server(gpu_idx: Optional[int] = None) -> Tuple[bool, str]:
333
+ """
334
+ Start the embedding server automatically.
335
+
336
+ Args:
337
+ gpu_idx: GPU index to use (None for CPU)
338
+
339
+ Returns:
340
+ Tuple of (success, message)
341
+ """
342
+ # Check if package is installed
343
+ if not is_sap_rpt_oss_installed():
344
+ return False, "sap-rpt-oss package not found. Install with: pip install git+https://github.com/SAP-samples/sap-rpt-1-oss"
345
+
346
+ # Check if server is already running
347
+ is_running, _ = check_embedding_server()
348
+ if is_running:
349
+ return True, "Embedding server is already running"
350
+
351
+ try:
352
+ # Try multiple import paths
353
+ start_func = None
354
+ import_paths = [
355
+ "sap_rpt_oss.scripts.start_embedding_server",
356
+ "sap_rpt_oss.start_embedding_server",
357
+ "sap_rpt_oss.data.tokenizer", # Sometimes server is in tokenizer
358
+ ]
359
+
360
+ for import_path in import_paths:
361
+ try:
362
+ module = __import__(import_path, fromlist=['start_embedding_server'])
363
+ if hasattr(module, 'start_embedding_server'):
364
+ start_func = getattr(module, 'start_embedding_server')
365
+ break
366
+ except (ImportError, AttributeError):
367
+ continue
368
+
369
+ if start_func is None:
370
+ # Try using threading approach - the server might start automatically when model is used
371
+ # For now, just inform user that server will start when needed
372
+ return False, "Embedding server will start automatically when the model makes predictions. No manual start needed."
373
+
374
+ # Use threading to start server in background (simpler than subprocess)
375
+ import threading
376
+
377
+ def run_server():
378
+ try:
379
+ start_func(
380
+ sentence_embedding_model_name="sentence-transformers/all-MiniLM-L6-v2",
381
+ gpu_idx=gpu_idx
382
+ )
383
+ except Exception as e:
384
+ # Server might block, that's okay
385
+ pass
386
+
387
+ # Start server in background thread
388
+ server_thread = threading.Thread(target=run_server, daemon=True)
389
+ server_thread.start()
390
+
391
+ # Wait a moment for server to start
392
+ import time
393
+ time.sleep(3)
394
+
395
+ # Check if it started
396
+ is_running, message = check_embedding_server()
397
+ if is_running:
398
+ return True, "Embedding server started successfully in background"
399
+ else:
400
+ # Server might take longer to start, or it starts on-demand
401
+ return False, "Server thread started. The embedding server will be available when the model needs it (starts on-demand during predictions)."
402
+
403
+ except Exception as e:
404
+ # If we can't start it manually, that's okay - SAP-RPT-OSS might start it automatically
405
+ return False, f"Manual start not available: {str(e)}. The embedding server will start automatically when the model makes predictions."
406
+
407
+
408
+ def ensure_embedding_server_running() -> Tuple[bool, str]:
409
+ """
410
+ Ensure embedding server is running, start it if not.
411
+ Note: SAP-RPT-OSS may start the server automatically when needed.
412
+
413
+ Returns:
414
+ Tuple of (is_running, message)
415
+ """
416
+ is_running, message = check_embedding_server()
417
+ if is_running:
418
+ return True, message
419
+
420
+ # Try to start it (but don't fail if we can't - server may start on-demand)
421
+ success, start_message = start_embedding_server(None)
422
+ if success:
423
+ return True, f"Auto-started: {start_message}"
424
+ else:
425
+ # Server not running, but SAP-RPT-OSS may start it automatically when model is used
426
+ # This is not a fatal error - the model will attempt to start it when needed
427
+ return False, f"Server not currently running. {start_message}"
428
+
utils/visualizations.py ADDED
@@ -0,0 +1,502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Visualization Utilities for Financial Data
3
+
4
+ Creates Plotly charts for:
5
+ - Revenue/Expense trends
6
+ - Balance Sheet visualizations
7
+ - GL account transaction summaries
8
+ - Sales order analytics
9
+ """
10
+
11
+ import pandas as pd
12
+ import plotly.graph_objects as go
13
+ import plotly.express as px
14
+ from typing import Optional, Dict, Any
15
+
16
+
17
+ def create_revenue_expense_chart(df: pd.DataFrame) -> Dict[str, Any]:
18
+ """
19
+ Create a revenue and expense trend chart.
20
+
21
+ Args:
22
+ df: DataFrame with financial statement data
23
+
24
+ Returns:
25
+ Plotly figure as dictionary (JSON-serializable)
26
+ """
27
+ if df.empty or 'Period' not in df.columns:
28
+ return {}
29
+
30
+ fig = go.Figure()
31
+
32
+ if 'Revenue' in df.columns:
33
+ fig.add_trace(go.Scatter(
34
+ x=df['Period'],
35
+ y=df['Revenue'],
36
+ mode='lines+markers',
37
+ name='Revenue',
38
+ line=dict(color='#2ecc71', width=3),
39
+ marker=dict(size=8)
40
+ ))
41
+
42
+ if 'Operating_Expenses' in df.columns:
43
+ fig.add_trace(go.Scatter(
44
+ x=df['Period'],
45
+ y=df['Operating_Expenses'],
46
+ mode='lines+markers',
47
+ name='Operating Expenses',
48
+ line=dict(color='#e74c3c', width=3),
49
+ marker=dict(size=8)
50
+ ))
51
+
52
+ if 'Net_Income' in df.columns:
53
+ fig.add_trace(go.Scatter(
54
+ x=df['Period'],
55
+ y=df['Net_Income'],
56
+ mode='lines+markers',
57
+ name='Net Income',
58
+ line=dict(color='#3498db', width=3),
59
+ marker=dict(size=8)
60
+ ))
61
+
62
+ fig.update_layout(
63
+ title='Revenue and Expense Trends',
64
+ xaxis_title='Period',
65
+ yaxis_title='Amount (USD)',
66
+ hovermode='x unified',
67
+ template='plotly_white',
68
+ height=400
69
+ )
70
+
71
+ return fig.to_dict()
72
+
73
+
74
+ def create_balance_sheet_chart(df: pd.DataFrame) -> Dict[str, Any]:
75
+ """
76
+ Create a balance sheet visualization.
77
+
78
+ Args:
79
+ df: DataFrame with balance sheet data
80
+
81
+ Returns:
82
+ Plotly figure as dictionary (JSON-serializable)
83
+ """
84
+ if df.empty:
85
+ return {}
86
+
87
+ # Get the most recent period
88
+ latest = df.iloc[-1] if len(df) > 0 else df.iloc[0]
89
+
90
+ # Assets
91
+ assets = {
92
+ 'Cash': latest.get('Cash', 0),
93
+ 'Accounts Receivable': latest.get('Accounts_Receivable', 0),
94
+ 'Inventory': latest.get('Inventory', 0),
95
+ 'PPE': latest.get('PPE', 0)
96
+ }
97
+
98
+ # Liabilities
99
+ liabilities = {
100
+ 'Accounts Payable': latest.get('Accounts_Payable', 0),
101
+ 'Short-term Debt': latest.get('Short_Term_Debt', 0),
102
+ 'Long-term Debt': latest.get('Long_Term_Debt', 0)
103
+ }
104
+
105
+ # Equity
106
+ equity = {
107
+ 'Equity': latest.get('Equity', 0)
108
+ }
109
+
110
+ fig = go.Figure()
111
+
112
+ # Assets bar
113
+ fig.add_trace(go.Bar(
114
+ name='Assets',
115
+ x=list(assets.keys()),
116
+ y=list(assets.values()),
117
+ marker_color='#2ecc71'
118
+ ))
119
+
120
+ # Liabilities bar
121
+ fig.add_trace(go.Bar(
122
+ name='Liabilities',
123
+ x=list(liabilities.keys()),
124
+ y=list(liabilities.values()),
125
+ marker_color='#e74c3c'
126
+ ))
127
+
128
+ # Equity bar
129
+ fig.add_trace(go.Bar(
130
+ name='Equity',
131
+ x=list(equity.keys()),
132
+ y=list(equity.values()),
133
+ marker_color='#3498db'
134
+ ))
135
+
136
+ fig.update_layout(
137
+ title='Balance Sheet Overview',
138
+ xaxis_title='Category',
139
+ yaxis_title='Amount (USD)',
140
+ barmode='group',
141
+ template='plotly_white',
142
+ height=400
143
+ )
144
+
145
+ return fig.to_dict()
146
+
147
+
148
+ def create_gl_summary_chart(df: pd.DataFrame) -> Dict[str, Any]:
149
+ """
150
+ Create a GL account transaction summary chart.
151
+
152
+ Args:
153
+ df: DataFrame with GL transaction data
154
+
155
+ Returns:
156
+ Plotly figure as dictionary (JSON-serializable)
157
+ """
158
+ if df.empty or 'Account_Description' not in df.columns:
159
+ return {}
160
+
161
+ # Aggregate by account
162
+ account_summary = df.groupby('Account_Description').agg({
163
+ 'Debit': 'sum',
164
+ 'Credit': 'sum'
165
+ }).reset_index()
166
+
167
+ account_summary['Net'] = account_summary['Debit'] - account_summary['Credit']
168
+ account_summary = account_summary.sort_values('Net', ascending=True).tail(15)
169
+
170
+ fig = go.Figure()
171
+
172
+ fig.add_trace(go.Bar(
173
+ y=account_summary['Account_Description'],
174
+ x=account_summary['Net'],
175
+ orientation='h',
176
+ marker=dict(
177
+ color=account_summary['Net'],
178
+ colorscale='RdYlGn',
179
+ showscale=True
180
+ )
181
+ ))
182
+
183
+ fig.update_layout(
184
+ title='Top 15 GL Accounts by Net Balance',
185
+ xaxis_title='Net Balance (USD)',
186
+ yaxis_title='Account',
187
+ template='plotly_white',
188
+ height=500
189
+ )
190
+
191
+ return fig.to_dict()
192
+
193
+
194
+ def create_sales_analytics_chart(df: pd.DataFrame) -> Dict[str, Any]:
195
+ """
196
+ Create sales order analytics chart.
197
+
198
+ Args:
199
+ df: DataFrame with sales order data
200
+
201
+ Returns:
202
+ Plotly figure as dictionary (JSON-serializable)
203
+ """
204
+ if df.empty:
205
+ return {}
206
+
207
+ fig = go.Figure()
208
+
209
+ # Sales by region
210
+ if 'Region' in df.columns and 'Total_Amount' in df.columns:
211
+ region_sales = df.groupby('Region')['Total_Amount'].sum().reset_index()
212
+
213
+ fig.add_trace(go.Bar(
214
+ x=region_sales['Region'],
215
+ y=region_sales['Total_Amount'],
216
+ marker_color='#3498db',
217
+ text=region_sales['Total_Amount'].apply(lambda x: f'${x:,.0f}'),
218
+ textposition='outside'
219
+ ))
220
+
221
+ fig.update_layout(
222
+ title='Sales by Region',
223
+ xaxis_title='Region',
224
+ yaxis_title='Total Sales (USD)',
225
+ template='plotly_white',
226
+ height=400
227
+ )
228
+ elif 'Product_Name' in df.columns and 'Total_Amount' in df.columns:
229
+ # Sales by product
230
+ product_sales = df.groupby('Product_Name')['Total_Amount'].sum().reset_index()
231
+ product_sales = product_sales.sort_values('Total_Amount', ascending=False).head(10)
232
+
233
+ fig.add_trace(go.Bar(
234
+ x=product_sales['Product_Name'],
235
+ y=product_sales['Total_Amount'],
236
+ marker_color='#9b59b6',
237
+ text=product_sales['Total_Amount'].apply(lambda x: f'${x:,.0f}'),
238
+ textposition='outside'
239
+ ))
240
+
241
+ fig.update_layout(
242
+ title='Top 10 Products by Sales',
243
+ xaxis_title='Product',
244
+ yaxis_title='Total Sales (USD)',
245
+ template='plotly_white',
246
+ height=400,
247
+ xaxis_tickangle=-45
248
+ )
249
+
250
+ return fig.to_dict()
251
+
252
+
253
+ def create_sales_trend_chart(df: pd.DataFrame) -> Dict[str, Any]:
254
+ """
255
+ Create a sales trend over time chart.
256
+
257
+ Args:
258
+ df: DataFrame with sales order data
259
+
260
+ Returns:
261
+ Plotly figure as dictionary (JSON-serializable)
262
+ """
263
+ if df.empty or 'Order_Date' not in df.columns:
264
+ return {}
265
+
266
+ df['Order_Date'] = pd.to_datetime(df['Order_Date'])
267
+ df['Month'] = df['Order_Date'].dt.to_period('M').astype(str)
268
+
269
+ monthly_sales = df.groupby('Month')['Total_Amount'].sum().reset_index()
270
+
271
+ fig = go.Figure()
272
+
273
+ fig.add_trace(go.Scatter(
274
+ x=monthly_sales['Month'],
275
+ y=monthly_sales['Total_Amount'],
276
+ mode='lines+markers',
277
+ name='Monthly Sales',
278
+ line=dict(color='#3498db', width=3),
279
+ marker=dict(size=8),
280
+ fill='tonexty',
281
+ fillcolor='rgba(52, 152, 219, 0.2)'
282
+ ))
283
+
284
+ fig.update_layout(
285
+ title='Sales Trend Over Time',
286
+ xaxis_title='Month',
287
+ yaxis_title='Total Sales (USD)',
288
+ hovermode='x unified',
289
+ template='plotly_white',
290
+ height=400
291
+ )
292
+
293
+ return fig.to_dict()
294
+
295
+
296
+ def create_pie_chart(df: pd.DataFrame, column: str, title: str) -> Dict[str, Any]:
297
+ """
298
+ Create a pie chart for categorical data.
299
+
300
+ Args:
301
+ df: DataFrame with data
302
+ column: Column name to aggregate
303
+ title: Chart title
304
+
305
+ Returns:
306
+ Plotly figure as dictionary (JSON-serializable)
307
+ """
308
+ if df.empty or column not in df.columns:
309
+ return {}
310
+
311
+ value_counts = df[column].value_counts().head(10)
312
+
313
+ fig = go.Figure(data=[go.Pie(
314
+ labels=value_counts.index,
315
+ values=value_counts.values,
316
+ hole=0.3
317
+ )])
318
+
319
+ fig.update_layout(
320
+ title=title,
321
+ template='plotly_white',
322
+ height=400
323
+ )
324
+
325
+ return fig.to_dict()
326
+
327
+
328
+ def get_summary_metrics(df: pd.DataFrame, dataset_type: str) -> Dict[str, Any]:
329
+ """
330
+ Get summary metrics for a dataset.
331
+
332
+ Args:
333
+ df: DataFrame with data
334
+ dataset_type: Type of dataset ('gl', 'financial', 'sales')
335
+
336
+ Returns:
337
+ Dictionary with summary metrics
338
+ """
339
+ if df.empty:
340
+ return {}
341
+
342
+ metrics = {}
343
+
344
+ if dataset_type == 'gl':
345
+ metrics = {
346
+ 'Total Transactions': len(df),
347
+ 'Total Debit': df['Debit'].sum() if 'Debit' in df.columns else 0,
348
+ 'Total Credit': df['Credit'].sum() if 'Credit' in df.columns else 0,
349
+ 'Unique Accounts': df['Account_Code'].nunique() if 'Account_Code' in df.columns else 0
350
+ }
351
+ elif dataset_type == 'financial':
352
+ latest = df.iloc[-1] if len(df) > 0 else df.iloc[0]
353
+ metrics = {
354
+ 'Periods': len(df),
355
+ 'Latest Revenue': latest.get('Revenue', 0),
356
+ 'Latest Net Income': latest.get('Net_Income', 0),
357
+ 'Total Assets': latest.get('Total_Assets', 0)
358
+ }
359
+ elif dataset_type == 'sales':
360
+ metrics = {
361
+ 'Total Orders': len(df),
362
+ 'Total Sales': df['Total_Amount'].sum() if 'Total_Amount' in df.columns else 0,
363
+ 'Average Order Value': df['Total_Amount'].mean() if 'Total_Amount' in df.columns else 0,
364
+ 'Unique Customers': df['Customer_ID'].nunique() if 'Customer_ID' in df.columns else 0
365
+ }
366
+
367
+ return metrics
368
+
369
+
370
+ def create_prediction_distribution_chart(predictions: list, labels: dict, title: str = "Prediction Distribution") -> Dict[str, Any]:
371
+ """
372
+ Create a pie chart showing prediction distribution.
373
+
374
+ Args:
375
+ predictions: List of prediction values (0, 1, etc.)
376
+ labels: Dictionary mapping values to labels
377
+ title: Chart title
378
+
379
+ Returns:
380
+ Plotly figure as dictionary
381
+ """
382
+ import numpy as np
383
+
384
+ predictions = np.array(predictions)
385
+ unique, counts = np.unique(predictions, return_counts=True)
386
+
387
+ pie_labels = [labels.get(int(val), f"Class {int(val)}") for val in unique]
388
+
389
+ colors = ['#3498db', '#2ecc71', '#e74c3c', '#f39c12', '#9b59b6']
390
+
391
+ fig = go.Figure(data=[go.Pie(
392
+ labels=pie_labels,
393
+ values=counts,
394
+ hole=0.4,
395
+ marker=dict(colors=colors[:len(unique)]),
396
+ textinfo='label+percent+value',
397
+ textfont_size=14
398
+ )])
399
+
400
+ fig.update_layout(
401
+ title=dict(text=title, font=dict(size=20, color='#2c3e50')),
402
+ template='plotly_white',
403
+ height=400,
404
+ showlegend=True,
405
+ legend=dict(
406
+ orientation="h",
407
+ yanchor="bottom",
408
+ y=-0.2,
409
+ xanchor="center",
410
+ x=0.5
411
+ )
412
+ )
413
+
414
+ return fig.to_dict()
415
+
416
+
417
+ def create_prediction_bar_chart(predictions: list, labels: dict, title: str = "Prediction Summary") -> Dict[str, Any]:
418
+ """
419
+ Create a bar chart showing prediction counts.
420
+
421
+ Args:
422
+ predictions: List of prediction values
423
+ labels: Dictionary mapping values to labels
424
+ title: Chart title
425
+
426
+ Returns:
427
+ Plotly figure as dictionary
428
+ """
429
+ import numpy as np
430
+
431
+ predictions = np.array(predictions)
432
+ unique, counts = np.unique(predictions, return_counts=True)
433
+
434
+ bar_labels = [labels.get(int(val), f"Class {int(val)}") for val in unique]
435
+ percentages = (counts / len(predictions) * 100).round(1)
436
+
437
+ colors = ['#3498db' if val == 0 else '#2ecc71' for val in unique]
438
+
439
+ fig = go.Figure(data=[go.Bar(
440
+ x=bar_labels,
441
+ y=counts,
442
+ marker_color=colors,
443
+ text=[f'{count}<br>({pct}%)' for count, pct in zip(counts, percentages)],
444
+ textposition='outside',
445
+ textfont=dict(size=14, color='#2c3e50')
446
+ )])
447
+
448
+ fig.update_layout(
449
+ title=dict(text=title, font=dict(size=20, color='#2c3e50')),
450
+ xaxis_title="Classification",
451
+ yaxis_title="Count",
452
+ template='plotly_white',
453
+ height=400,
454
+ showlegend=False
455
+ )
456
+
457
+ return fig.to_dict()
458
+
459
+
460
+ def create_confidence_gauge(confidence_score: float, title: str = "Model Confidence") -> Dict[str, Any]:
461
+ """
462
+ Create a gauge chart showing model confidence.
463
+
464
+ Args:
465
+ confidence_score: Confidence score (0-100)
466
+ title: Chart title
467
+
468
+ Returns:
469
+ Plotly figure as dictionary
470
+ """
471
+ fig = go.Figure(go.Indicator(
472
+ mode="gauge+number+delta",
473
+ value=confidence_score,
474
+ domain={'x': [0, 1], 'y': [0, 1]},
475
+ title={'text': title, 'font': {'size': 20}},
476
+ delta={'reference': 50},
477
+ gauge={
478
+ 'axis': {'range': [None, 100], 'tickwidth': 1, 'tickcolor': "darkblue"},
479
+ 'bar': {'color': "darkblue"},
480
+ 'bgcolor': "white",
481
+ 'borderwidth': 2,
482
+ 'bordercolor': "gray",
483
+ 'steps': [
484
+ {'range': [0, 33], 'color': '#e74c3c'},
485
+ {'range': [33, 66], 'color': '#f39c12'},
486
+ {'range': [66, 100], 'color': '#2ecc71'}
487
+ ],
488
+ 'threshold': {
489
+ 'line': {'color': "red", 'width': 4},
490
+ 'thickness': 0.75,
491
+ 'value': 90
492
+ }
493
+ }
494
+ ))
495
+
496
+ fig.update_layout(
497
+ height=300,
498
+ margin=dict(l=20, r=20, t=40, b=20)
499
+ )
500
+
501
+ return fig.to_dict()
502
+