productdb.json: उत्पादन डेटासाठी एकल सत्य स्रोत

हा लेख स्पष्ट करतो की productdb सर्व उत्पादन डेटासाठी एकल सत्य स्रोत म्हणून कसा काम करतो, एका केंद्रीत फाइलमध्ये घटक, वैशिष्ट्ये, सुसंगतता नियम आणि बिल ऑफ मटेरियल्स (BOM) परिभाषित करतो.

समस्या: विखुरलेला उत्पादन डेटा

उत्पादन डेटा अनेक प्रणालींमध्ये विखुरलेला असू शकतो:

  • इन्व्हेंटरी सिस्टम: भाग खर्च आणि स्टॉक पातळी

  • ERP सिस्टम: BOM आणि उत्पादन डेटा

  • वेबसाइट: उत्पादन वर्णने आणि तपशील

  • अकाउंटिंग: किंमत आणि खर्च नियम

डेटा विखुरलेला असतो तेव्हा विसंगती निर्माण होतात:

  • वेबसाइट 16GB रॅम दाखवते, पण ERP 8GB म्हणते

  • किंमत जुन्या खर्च डेटाचा वापर करते

  • BOM वास्तविक उत्पादनांशी सिंक्रोनाइझ नसतात

  • वैशिष्ट्ये वास्तवाशी जुळत नाहीत

आम्हाला एक अशा एकल सत्य स्रोताची गरज आहे ज्याचा सर्व प्रणाली संदर्भ घेतील.

उपाय: productdb.json

productdb.json ही एक JSON फाइल आहे जी प्रत्येक घटक, त्याची वैशिष्ट्ये, सुसंगतता नियम आणि घटकद्रव्ये परिभाषित करते. सर्व प्रणाली सुरूवातीला ही फाइल लोड करतात.

ही फाइल Git मध्ये व्हर्जन-नियंत्रित आहे, ज्यामुळे सर्व बदल ट्रॅक आणि ऑडिट करण्यायोग्य आहेत याची खात्री होते.

फाइल रचना

फाइल घटक श्रेणीनुसार आयोजित केली आहे:

{
  "Chassis": { ... },
  "Board": { ... },
# ... (अंमलबजावणी तपशील वगळले)

प्रत्येक श्रेणीमध्ये त्यांच्या गुणधर्मांसह घटक असतात.

घटक व्याख्या

प्रत्येक घटकामध्ये अनेक गुणधर्म असतात:

मूलभूत गुणधर्म

class: सुसंगतता जुळणीसाठी घटक वर्ग

"class": "THIN_MINI_ITX"

internal: इन्व्हेंटरी आणि उत्पादनासाठी अंतर्गत नाव

"internal": "Chassis, Treo"

external: वेबसाइट आणि विपणनासाठी ग्राहक-समोरचे नाव

"external": "Thinvent® Treo Mini PC"

weight: ग्रॅममध्ये भौतिक वजन

"weight": 590

सुसंगतता नियम (allows)

allows फील्ड कोणते घटक एकत्र वापरले जाऊ शकतात हे परिभाषित करते:

"allows": {
  "Board": [
    {"class": "THIN_MINI_ITX"}
# ... (अंमलबजावणी तपशील वगळले)

याचा अर्थ:

  • Board: फक्त THIN_MINI_ITX वर्ग असलेले बोर्ड सुसंगत आहेत

  • Flash: फक्त m.2_SATA वर्ग असलेले फ्लॅश स्टोरेज सुसंगत आहे

  • Accessories: सर्व ॲक्सेसरीज सुसंगत आहेत

सुसंगतता याद्वारे निर्दिष्ट केली जाऊ शकते:

वर्ग-आधारित (डायनॅमिक):

{"class": "THIN_MINI_ITX"}

भाग ID-आधारित (स्पष्ट):

["N100", "N150", "i5-1335U"]

बिल ऑफ मटेरियल्स (constituents)

constituents फील्ड हे घटक कोणत्या भागांपासून बनलेले आहे हे परिभाषित करते:

"constituents": [
  {
    "Category": "Custom",
# ... (अंमलबजावणी तपशील वगळले)

हे सक्षम करते:

  • खर्च गणना: सर्व घटकद्रव्यांच्या खर्चाची बेरीज करा

  • उत्पादन: असेंब्लीसाठी पिक सूची व्युत्पन्न करा

  • इन्व्हेंटरी: घटक वापर ट्रॅक करा

वैशिष्ट्य प्रदान (provides)

provides फील्ड ही वैशिष्ट्ये परिभाषित करते जी हा घटक योगदान देतो:

"provides": {
  "Operating Temperature": "0°C ~ 40°C",
  "Operating Humidity": "20% ~ 80% RH, non condensing",
# ... (अंमलबजावणी तपशील वगळले)

या वैशिष्ट्यांचे SKU मधील सर्व घटकांमध्ये एकत्रीकरण केले जाते जेणेकरून उत्पादनाचे संपूर्ण तपशील तयार होतील.

उदाहरण: Treo चेसिस

{
  "Treo": {
    "class": "THIN_MINI_ITX",
# ... (अंमलबजावणी तपशील वगळले)

उदाहरण: N100 बोर्ड

{
  "N100": {
    "class": "THIN_MINI_ITX",
# ... (अंमलबजावणी तपशील वगळले)

productdb.json लोड करणे

फाइल ॲप्लिकेशन सुरूवातीला लोड केली जाते:

import json

with open(PRODUCTDB_JSON_PATH, "r", encoding="utf-8") as productdb_file:
    productdb = json.load(productdb_file)

हे मेमरीमध्ये एक डिक्शनरी तयार करते:

productdb = {
    "Chassis": {
        "Treo": { ... },
# ... (अंमलबजावणी तपशील वगळले)

सर्व कोड उत्पादन डेटासाठी या डिक्शनरीचा संदर्भ घेतो.

घटक डेटामध्ये प्रवेश

श्रेणी आणि ID नुसार घटक मिळवा

chassis = productdb["Chassis"]["Treo"]
board = productdb["Board"]["N100"]
ram = productdb["RAM"]["8"]

बाह्य नाव मिळवा

name = productdb["Board"]["N100"]["external"]
# निकाल: "Intel® N100 Processor"

वैशिष्ट्ये मिळवा

features = productdb["Board"]["N100"]["provides"]
# निकाल: {"Generation": "12th", "Series": "N", ...}

घटकद्रव्ये मिळवा

constituents = productdb["Chassis"]["Treo"]["constituents"]
# निकाल: [{"Category": "Custom", "PartID": "base_treo", "qty": 1}, ...]

SKU वैधता तपासणी

आम्ही SKU वैधता तपासण्यासाठी productdb.json वापरतो:

def check_sku(sku:str) -> bool:
    parts = sku.split("-")
    mapped_parts = map_parts_to_fields(parts)
# ... (अंमलबजावणी तपशील वगळले)

तपशीलांसाठी SKU रचना पहा.

वैशिष्ट्य एकत्रीकरण

आम्ही SKU मधील सर्व घटकांमधून वैशिष्ट्यांचे एकत्रीकरण करतो:

def get_product_features(sku: str) -> dict:
    partids = sku.split("-")
    features = {}
# ... (अंमलबजावणी तपशील वगळले)

उदाहरण:

SKU: Treo-N100-8-256-2H-W6-11P

वैशिष्ट्ये:

- Form Factor: Mini PC (Treo कडून)

- Generation: 12th (N100 कडून)

- Series: N (N100 कडून)

- Cores: 4 (N100 कडून)

- Main Memory: 8 (8 कडून)

- SSD Storage: 256 (256 कडून)

- HDMI: 2 (2H कडून)

- Operating System: Windows 11 Pro (11P कडून)

तपशीलांसाठी वैशिष्ट्य काढणे पहा.

खर्च गणना

आम्ही घटकद्रव्यांच्या खर्चाची बेरीज करून SKU खर्चाची गणना करतो:

def calculate_cost(item: dict, partid: str) -> tuple:
    if "constituents" in item:
        # संमिश्र आयटम: घटकद्रव्य खर्चाची बेरीज करा
# ... (अंमलबजावणी तपशील वगळले)

ही पुनरावृत्ती गणना नेस्टेड घटकद्रव्यांवर प्रक्रिया करते.

संमिश्र आयटम्स

काही घटक संमिश्र असतात (इतर घटकांपासून बनलेले):

उदाहरण: कीबोर्ड + माउस कॉम्बो

{
  "KM": {
    "internal": "Keyboard + Mouse",
# ... (अंमलबजावणी तपशील वगळले)

हे सक्षम करते:

  • BOM व्युत्पन्न: आवश्यक असलेल्या सर्व घटकांची यादी करा

  • खर्च गणना: कीबोर्ड + माउस + डाँगलच्या खर्चाची बेरीज करा

  • इन्व्हेंटरी ट्रॅकिंग: घटक वापर ट्रॅक करा

productdb.json अपडेट करणे

मॅन्युअल संपादन

फाइल मॅन्युअली टेक्स्ट एडिटर किंवा IDE मध्ये संपादित केली जाते. बदल Git मध्ये कमिट केले जातात:

git add PATH_TO_FILE/productdb.json
git commit -m "Add new N150 board configuration"
git push

वैधता तपासणी

संपादनानंतर, JSON सिंटॅक्स वैधता तपासा:

python -m json.tool PATH_TO_FILE/productdb.json > /dev/null

हे सिंटॅक्स त्रुकांसाठी तपासते.

डेप्लॉयमेंट

Git वर पुश केल्यानंतर, फाइल प्रोडक्शनवर डेप्लॉय केली जाते

ॲप्लिकेशन रीस्टार्टवर फाइल पुन्हा लोड करते.

इतर प्रणालींसह एकत्रीकरण

वेबसाइट

वेबसाइट productdb.json वापरते:

  • उत्पादन पृष्ठे व्युत्पन्न करण्यासाठी

  • तपशील प्रदर्शित करण्यासाठी

  • वैशिष्ट्यांद्वारे उत्पादने फिल्टर करण्यासाठी

  • तुलना सारण्या व्युत्पन्न करण्यासाठी

ERP

ERP productdb.json वापरते:

  • SKU वैधता तपासण्यासाठी

  • BOM व्युत्पन्न करण्यासाठी

  • खर्चाची गणना करण्यासाठी

  • इन्व्हेंटरी ट्रॅक करण्यासाठी

अकाउंटिंग

अकाउंटिंग productdb.json वापरते:

  • उत्पादन खर्चाची गणना करण्यासाठी

  • चलन व्युत्पन्न करण्यासाठी

  • COGS (विकल्या गेलेल्या वस्तूंचा खर्च) ट्रॅक करण्यासाठी

SEO पाईपलाइन

SEO पाईपलाइन productdb.json वापरते:

  • फ्रेझ मॅपिंग्स साठी वैशिष्ट्ये काढण्यासाठी

  • फिल्टर काढणे साठी फिल्टर व्युत्पन्न करण्यासाठी

  • वैशिष्ट्यांद्वारे क्वेरी उत्पादनांशी जुळवण्यासाठी

तपशीलांसाठी SEO पाईपलाइन ओव्हरव्ह्यू पहा.

एकल सत्य स्रोताचे फायदे

1. सुसंगतता

सर्व प्रणाली समान डेटा वापरतात. कोणतीही विसंगती नाही.

2. देखभालक्षमता

एकदा अपडेट करा, सर्वत्र प्रसारित करा. अनेक प्रणाली अपडेट करण्याची गरज नाही.

3. ऑडिट क्षमता

सर्व बदल Git मध्ये ट्रॅक केले जातात. कोणी काय आणि केव्हा बदलले ते पाहणे सोपे.

4. चाचणी क्षमता

बदल प्रोडक्शन डेप्लॉयमेंटपूर्वी स्टेजिंगमध्ये चाचणी केले जाऊ शकतात.

5. साधेपणा

समजून घेण्यासाठी एक फाइल. क्लिष्ट डेटाबेस स्कीमा किंवा API नाहीत.

6. कार्यक्षमता

मेमरीमधील डिक्शनरी O(1) लुकअप प्रदान करते. डेट