Spaces:
Sleeping
Sleeping
File size: 3,677 Bytes
bc02e50 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import pandas as pd
import numpy as np
from faker import Faker
from datetime import datetime, timedelta
import random
fake = Faker()
class SAPDataGenerator:
def __init__(self):
self.suppliers = [
"Acme Corp", "Global Supplies Inc", "Tech Solutions Ltd",
"Industrial Partners", "Premium Materials Co", "Swift Logistics",
"Quality Components", "Reliable Vendors", "Innovative Systems",
"Professional Services"
]
self.categories = [
"Raw Materials", "IT Equipment", "Office Supplies",
"Professional Services", "Maintenance", "Transportation",
"Marketing", "Facilities", "Security", "Consulting"
]
self.plant_codes = ["1000", "2000", "3000", "4000", "5000"]
self.company_codes = ["US01", "DE02", "IN03", "UK04", "SG05"]
def generate_purchase_orders(self, n=1000):
data = []
for i in range(n):
po_date = fake.date_between(start_date='-2y', end_date='today')
delivery_date = po_date + timedelta(days=random.randint(7, 90))
unit_price = round(random.uniform(10, 10000), 2)
quantity = random.randint(1, 1000)
total_value = round(unit_price * quantity, 2)
data.append({
'PO_Number': f"PO{str(i+1).zfill(8)}",
'Supplier': random.choice(self.suppliers),
'Category': random.choice(self.categories),
'Plant': random.choice(self.plant_codes),
'Company_Code': random.choice(self.company_codes),
'PO_Date': po_date,
'Delivery_Date': delivery_date,
'Material': fake.catch_phrase(),
'Quantity': quantity,
'Unit_Price': unit_price,
'Total_Value': total_value,
'Currency': 'USD',
'Status': random.choice(['Open', 'Delivered', 'Partially Delivered', 'Cancelled']),
'Buyer': fake.name(),
'Payment_Terms': random.choice(['Net 30', 'Net 60', '2/10 Net 30', 'Immediate']),
'Delivery_Performance': round(random.uniform(85, 99), 1)
})
return pd.DataFrame(data)
def generate_supplier_performance(self):
data = []
for supplier in self.suppliers:
data.append({
'Supplier': supplier,
'On_Time_Delivery': round(random.uniform(85, 98), 1),
'Quality_Score': round(random.uniform(80, 99), 1),
'Cost_Performance': round(random.uniform(90, 99), 1),
'Total_Spend_YTD': round(random.uniform(100000, 5000000), 2),
'Active_Contracts': random.randint(5, 50),
'Risk_Score': random.choice(['Low', 'Medium', 'High']),
'Certification_Status': random.choice(['ISO 9001', 'ISO 14001', 'Multiple', 'None'])
})
return pd.DataFrame(data)
def generate_spend_analysis(self):
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
data = []
for month in months:
for category in self.categories:
data.append({
'Month': month,
'Category': category,
'Spend': round(random.uniform(50000, 500000), 2),
'Budget': round(random.uniform(60000, 550000), 2),
'Variance': round(random.uniform(-10, 15), 1)
})
return pd.DataFrame(data)
|